From 3b678428bee9576be1d1cee12ceadcff24f8a3b0 Mon Sep 17 00:00:00 2001 From: James Frink <jfrin001@gold.ac.uk> Date: Tue, 21 Nov 2017 01:12:40 +0000 Subject: [PATCH] add start of Bitalino example --- .../Bitalino.xcodeproj/project.pbxproj | 1798 +++ .../contents.xcworkspacedata | 7 + .../xcschemes/Bitalino Debug.xcscheme | 86 + .../xcschemes/Bitalino Release.xcscheme | 86 + examples/ofx/Bitalino_rapidmix/Makefile | 13 + .../ofx/Bitalino_rapidmix/Project.xcconfig | 17 + examples/ofx/Bitalino_rapidmix/addons.make | 3 + .../ofx/Bitalino_rapidmix/bin/data/.gitkeep | 0 examples/ofx/Bitalino_rapidmix/config.make | 142 + .../dependencies/GVF/GVF.cpp | 1375 ++ .../Bitalino_rapidmix/dependencies/GVF/GVF.h | 487 + .../dependencies/GVF/GVFGesture.h | 240 + .../dependencies/GVF/GVFUtils.h | 309 + .../dependencies/GVF/LICENSE | 165 + .../dependencies/json/json-forwards.h | 324 + .../RapidLib/dependencies/json/json.h | 2140 +++ .../RapidLib/dependencies/jsoncpp.cpp | 5290 ++++++++ .../RapidLib/dependencies/libsvm/libsvm.cpp | 3184 +++++ .../RapidLib/dependencies/libsvm/libsvm.h | 108 + .../dependencies/RapidLib/src/baseModel.h | 47 + .../RapidLib/src/classification.cpp | 107 + .../RapidLib/src/classification.h | 57 + .../dependencies/RapidLib/src/dtw.cpp | 153 + .../dependencies/RapidLib/src/dtw.h | 38 + .../src/emscripten/classificationEmbindings.h | 34 + .../RapidLib/src/emscripten/knnEmbindings.h | 45 + .../src/emscripten/modelSetEmbindings.h | 26 + .../RapidLib/src/emscripten/nnEmbindings.h | 26 + .../RapidLib/src/emscripten/nodeEnv.js | 7 + .../RapidLib/src/emscripten/rapidLibPost.js | 629 + .../src/emscripten/rapidStreamEmbindings.h | 38 + .../src/emscripten/regressionEmbindings.h | 29 + .../seriesClassificationEmbindings.h | 28 + .../RapidLib/src/emscripten/svmEmbindings.h | 26 + .../dependencies/RapidLib/src/fastDTW.cpp | 75 + .../dependencies/RapidLib/src/fastDTW.h | 61 + .../RapidLib/src/knnClassification.cpp | 171 + .../RapidLib/src/knnClassification.h | 93 + .../dependencies/RapidLib/src/modelSet.cpp | 242 + .../dependencies/RapidLib/src/modelSet.h | 60 + .../RapidLib/src/neuralNetwork.cpp | 448 + .../dependencies/RapidLib/src/neuralNetwork.h | 151 + .../dependencies/RapidLib/src/rapidStream.cpp | 186 + .../dependencies/RapidLib/src/rapidStream.h | 108 + .../dependencies/RapidLib/src/regression.cpp | 133 + .../dependencies/RapidLib/src/regression.h | 55 + .../RapidLib/src/searchWindow.cpp | 190 + .../dependencies/RapidLib/src/searchWindow.h | 36 + .../RapidLib/src/seriesClassification.cpp | 201 + .../RapidLib/src/seriesClassification.h | 112 + .../RapidLib/src/svmClassification.cpp | 269 + .../RapidLib/src/svmClassification.h | 133 + .../RapidLib/src/trainingExample.h | 38 + .../dependencies/RapidLib/src/warpPath.cpp | 18 + .../dependencies/RapidLib/src/warpPath.h | 37 + .../dependencies/pipo/.gitignore | 14 + .../dependencies/pipo/README.md | 103 + .../dependencies/pipo/bin/osx/libpipo.a | Bin 0 -> 5204528 bytes .../bayesfilter/BayesianFilter.cpp | 155 + .../dependencies/bayesfilter/BayesianFilter.h | 183 + .../bayesfilter/filter_utilities.cpp | 200 + .../bayesfilter/filter_utilities.h | 138 + .../finitedifferences/finitedifferences.c | 265 + .../finitedifferences/finitedifferences.h | 167 + .../src/dependencies/lpcformants/bbpr.cpp | 352 + .../pipo/src/dependencies/lpcformants/bbpr.h | 22 + .../src/dependencies/lpcformants/rpoly.cpp | 766 ++ .../pipo/src/dependencies/lpcformants/rpoly.h | 40 + .../pipo/src/dependencies/rta/common/rta.h | 47 + .../src/dependencies/rta/common/rta_bpf.c | 94 + .../src/dependencies/rta/common/rta_bpf.h | 86 + .../src/dependencies/rta/common/rta_complex.h | 299 + .../src/dependencies/rta/common/rta_float.h | 95 + .../src/dependencies/rta/common/rta_int.c | 80 + .../src/dependencies/rta/common/rta_int.h | 94 + .../src/dependencies/rta/common/rta_math.h | 250 + .../src/dependencies/rta/common/rta_stdio.h | 51 + .../src/dependencies/rta/common/rta_stdlib.h | 74 + .../src/dependencies/rta/common/rta_types.h | 71 + .../src/dependencies/rta/common/rta_util.c | 100 + .../src/dependencies/rta/common/rta_util.h | 108 + .../src/dependencies/rta/misc/rta_bands.c | 391 + .../src/dependencies/rta/misc/rta_bands.h | 276 + .../src/dependencies/rta/misc/rta_biquad.c | 768 ++ .../src/dependencies/rta/misc/rta_biquad.h | 727 + .../dependencies/rta/misc/rta_correlation.c | 326 + .../dependencies/rta/misc/rta_correlation.h | 372 + .../src/dependencies/rta/misc/rta_cubic.c | 58 + .../src/dependencies/rta/misc/rta_cubic.h | 149 + .../pipo/src/dependencies/rta/misc/rta_dct.c | 320 + .../pipo/src/dependencies/rta/misc/rta_dct.h | 188 + .../src/dependencies/rta/misc/rta_delta.c | 193 + .../src/dependencies/rta/misc/rta_delta.h | 209 + .../pipo/src/dependencies/rta/misc/rta_fft.c | 1595 +++ .../pipo/src/dependencies/rta/misc/rta_fft.h | 316 + .../src/dependencies/rta/misc/rta_filter.h | 67 + .../src/dependencies/rta/misc/rta_lifter.c | 165 + .../src/dependencies/rta/misc/rta_lifter.h | 190 + .../pipo/src/dependencies/rta/misc/rta_lpc.c | 209 + .../pipo/src/dependencies/rta/misc/rta_lpc.h | 173 + .../dependencies/rta/misc/rta_mean_variance.c | 309 + .../dependencies/rta/misc/rta_mean_variance.h | 219 + .../pipo/src/dependencies/rta/misc/rta_mel.c | 113 + .../pipo/src/dependencies/rta/misc/rta_mel.h | 124 + .../src/dependencies/rta/misc/rta_moments.c | 324 + .../src/dependencies/rta/misc/rta_moments.h | 396 + .../src/dependencies/rta/misc/rta_onepole.c | 123 + .../src/dependencies/rta/misc/rta_onepole.h | 163 + .../dependencies/rta/misc/rta_preemphasis.c | 104 + .../dependencies/rta/misc/rta_preemphasis.h | 99 + .../src/dependencies/rta/misc/rta_resample.c | 363 + .../src/dependencies/rta/misc/rta_resample.h | 147 + .../src/dependencies/rta/misc/rta_selection.c | 294 + .../src/dependencies/rta/misc/rta_selection.h | 116 + .../pipo/src/dependencies/rta/misc/rta_svd.c | 1286 ++ .../pipo/src/dependencies/rta/misc/rta_svd.h | 186 + .../src/dependencies/rta/misc/rta_window.c | 300 + .../src/dependencies/rta/misc/rta_window.h | 379 + .../src/dependencies/rta/rta_configuration.h | 64 + .../pipo/src/host/PiPoCollection.cpp | 187 + .../pipo/src/host/PiPoCollection.h | 109 + .../dependencies/pipo/src/host/PiPoGraph.h | 495 + .../dependencies/pipo/src/host/PiPoHost.h | 409 + .../dependencies/pipo/src/host/PiPoModule.h | 52 + .../dependencies/pipo/src/host/mimo_host.h | 63 + .../dependencies/pipo/src/include/PiPo.h | 1463 ++ .../pipo/src/include/PiPoParallel.h | 363 + .../pipo/src/include/PiPoSequence.h | 263 + .../pipo/src/include/RingBuffer.h | 121 + .../dependencies/pipo/src/include/mimo.h | 144 + .../dependencies/pipo/src/modules/PiPoBands.h | 356 + .../pipo/src/modules/PiPoBayesFilter.h | 149 + .../pipo/src/modules/PiPoBiquad.h | 306 + .../dependencies/pipo/src/modules/PiPoChop.h | 246 + .../dependencies/pipo/src/modules/PiPoConst.h | 184 + .../dependencies/pipo/src/modules/PiPoDct.h | 145 + .../dependencies/pipo/src/modules/PiPoDelta.h | 203 + .../dependencies/pipo/src/modules/PiPoFft.h | 496 + .../pipo/src/modules/PiPoFiniteDif.h | 474 + .../dependencies/pipo/src/modules/PiPoGate.h | 294 + .../dependencies/pipo/src/modules/PiPoLpc.h | 159 + .../pipo/src/modules/PiPoLpcFormants.h | 212 + .../pipo/src/modules/PiPoMeanStddev.h | 126 + .../pipo/src/modules/PiPoMedian.h | 215 + .../dependencies/pipo/src/modules/PiPoMel.h | 75 + .../dependencies/pipo/src/modules/PiPoMfcc.h | 79 + .../pipo/src/modules/PiPoMinMax.h | 115 + .../pipo/src/modules/PiPoMoments.h | 240 + .../pipo/src/modules/PiPoMvavrg.h | 211 + .../dependencies/pipo/src/modules/PiPoOnseg.h | 451 + .../dependencies/pipo/src/modules/PiPoPeaks.h | 284 + .../dependencies/pipo/src/modules/PiPoRms.h | 111 + .../dependencies/pipo/src/modules/PiPoScale.h | 420 + .../pipo/src/modules/PiPoSelect.h | 300 + .../dependencies/pipo/src/modules/PiPoSlice.h | 389 + .../dependencies/pipo/src/modules/PiPoSum.h | 99 + .../dependencies/pipo/src/modules/TempMod.h | 303 + .../pipo/src/modules/mimo/mimo_stats.h | 306 + .../third_party/catch/LICENSE_1_0.txt | 23 + .../dependencies/third_party/catch/catch.hpp | 11069 ++++++++++++++++ .../third_party/json/json-forwards.h | 324 + .../dependencies/third_party/json/json.h | 2140 +++ .../dependencies/third_party/jsoncpp.cpp | 5290 ++++++++ .../dependencies/third_party/libsvm/LICENSE | 31 + .../third_party/libsvm/libsvm.cpp | 3184 +++++ .../dependencies/third_party/libsvm/libsvm.h | 108 + .../dependencies/xmm/.gitignore | 27 + .../dependencies/xmm/CMakeLists.txt | 111 + .../dependencies/xmm/LICENSE | 675 + .../xmm/dependencies/catch/catch.hpp | 9427 +++++++++++++ .../xmm/dependencies/jsoncpp/LICENSE | 55 + .../dependencies/jsoncpp/include/assertions.h | 54 + .../dependencies/jsoncpp/include/autolink.h | 25 + .../xmm/dependencies/jsoncpp/include/config.h | 138 + .../dependencies/jsoncpp/include/forwards.h | 37 + .../jsoncpp/include/json-features.h | 57 + .../xmm/dependencies/jsoncpp/include/json.h | 15 + .../xmm/dependencies/jsoncpp/include/reader.h | 402 + .../xmm/dependencies/jsoncpp/include/value.h | 849 ++ .../dependencies/jsoncpp/include/version.h | 13 + .../xmm/dependencies/jsoncpp/include/writer.h | 331 + .../dependencies/jsoncpp/src/json_reader.cpp | 2032 +++ .../xmm/dependencies/jsoncpp/src/json_tool.h | 87 + .../dependencies/jsoncpp/src/json_value.cpp | 1541 +++ .../jsoncpp/src/json_valueiterator.inl | 167 + .../dependencies/jsoncpp/src/json_writer.cpp | 1214 ++ .../dependencies/xmm/doc/Doxyfile | 2401 ++++ .../dependencies/xmm/doc/Doxyfile-dot | 2434 ++++ .../xmm/doc/doc-misc/QuickStart_Python.html | 2086 +++ .../xmm/doc/doc-misc/XmmDoxygenLayout.xml | 184 + .../dependencies/xmm/doc/doc-misc/footer.html | 3 + .../dependencies/xmm/doc/doc-misc/header.html | 37 + .../xmm/doc/doc-misc/jdoxygen.css | 1199 ++ .../dependencies/xmm/doc/doc-misc/jtabs.css | 59 + .../xmm/doc/doc-misc/python_example.py | 47 + .../xmm/doc/doc-misc/xmm_architecture.jpg | Bin 0 -> 87034 bytes .../xmm/doc/doc-misc/xmm_featured.jpg | Bin 0 -> 778523 bytes .../xmm/doc/doc-misc/xmm_featured_.jpg | Bin 0 -> 620105 bytes .../xmm/doc/doc-misc/xmm_models.jpg | Bin 0 -> 164164 bytes .../dependencies/xmm/readme.md | 55 + .../xmm/src/core/common/xmmAttribute.cpp | 108 + .../xmm/src/core/common/xmmAttribute.hpp | 644 + .../xmm/src/core/common/xmmCircularbuffer.hpp | 195 + .../xmm/src/core/common/xmmEvents.hpp | 113 + .../xmm/src/core/common/xmmJson.cpp | 133 + .../xmm/src/core/common/xmmJson.hpp | 323 + .../xmm/src/core/common/xmmMatrix.hpp | 359 + .../distributions/xmmGaussianDistribution.cpp | 717 + .../distributions/xmmGaussianDistribution.hpp | 376 + .../xmm/src/core/model/xmmModel.hpp | 633 + .../src/core/model/xmmModelConfiguration.hpp | 226 + .../xmm/src/core/model/xmmModelParameters.hpp | 80 + .../xmm/src/core/model/xmmModelResults.hpp | 125 + .../core/model/xmmModelSharedParameters.cpp | 162 + .../core/model/xmmModelSharedParameters.hpp | 160 + .../src/core/model/xmmModelSingleClass.cpp | 238 + .../src/core/model/xmmModelSingleClass.hpp | 372 + .../xmm/src/core/trainingset/xmmPhrase.cpp | 582 + .../xmm/src/core/trainingset/xmmPhrase.hpp | 542 + .../src/core/trainingset/xmmTrainingSet.cpp | 436 + .../src/core/trainingset/xmmTrainingSet.hpp | 357 + .../xmm/src/models/gmm/xmmGmm.cpp | 271 + .../xmm/src/models/gmm/xmmGmm.hpp | 158 + .../xmm/src/models/gmm/xmmGmmParameters.cpp | 132 + .../xmm/src/models/gmm/xmmGmmParameters.hpp | 132 + .../xmm/src/models/gmm/xmmGmmSingleClass.cpp | 641 + .../xmm/src/models/gmm/xmmGmmSingleClass.hpp | 343 + .../xmm/src/models/hmm/xmmHierarchicalHmm.cpp | 634 + .../xmm/src/models/hmm/xmmHierarchicalHmm.hpp | 313 + .../xmm/src/models/hmm/xmmHmmParameters.cpp | 199 + .../xmm/src/models/hmm/xmmHmmParameters.hpp | 208 + .../xmm/src/models/hmm/xmmHmmResults.hpp | 93 + .../xmm/src/models/hmm/xmmHmmSingleClass.cpp | 1480 +++ .../xmm/src/models/hmm/xmmHmmSingleClass.hpp | 527 + .../xmm/src/models/kmeans/xmmKMeans.cpp | 284 + .../xmm/src/models/kmeans/xmmKMeans.hpp | 179 + .../src/models/kmeans/xmmKMeansParameters.cpp | 108 + .../src/models/kmeans/xmmKMeansParameters.hpp | 127 + .../src/models/kmeans/xmmKMeansResults.hpp | 57 + .../dependencies/xmm/src/xmm.h | 450 + .../ofx/Bitalino_rapidmix/libRAPID-MIX_API.a | Bin 0 -> 2254136 bytes .../openFrameworks-Info.plist | 22 + .../ofx/Bitalino_rapidmix/rapid-mix/LICENSE | 29 + .../machineLearning/machineLearning.cpp | 91 + .../machineLearning/machineLearning.h | 113 + .../machineLearning/rapidGVF/rapidGVF.cpp | 86 + .../machineLearning/rapidGVF/rapidGVF.h | 37 + .../machineLearning/rapidXMM/rapidXMM.cpp | 208 + .../machineLearning/rapidXMM/rapidXMM.h | 296 + .../machineLearning/trainingData.cpp | 207 + .../rapid-mix/machineLearning/trainingData.h | 114 + .../Bitalino_rapidmix/rapid-mix/rapidmix.h | 48 + .../rapidPiPoTools/rapidPiPoHost.cpp | 764 ++ .../rapidPiPoTools/rapidPiPoHost.h | 249 + .../rapidPiPoTools/rapidPiPoTools.h | 9 + .../signalProcessing/signalProcessing.h | 36 + .../Bitalino_rapidmix/src/BitalinoThread.h | 145 + .../Bitalino_rapidmix/src/RapidBitalino.cpp | 138 + .../ofx/Bitalino_rapidmix/src/RapidBitalino.h | 69 + .../Bitalino_rapidmix/src/RapidMixThread.h | 98 + .../ofx/Bitalino_rapidmix/src/RingBuffer.hpp | 222 + .../Bitalino_rapidmix/src/ThreadedProcess.h | 74 + .../ofx/Bitalino_rapidmix/src/bitalino.cpp | 799 ++ examples/ofx/Bitalino_rapidmix/src/bitalino.h | 319 + examples/ofx/Bitalino_rapidmix/src/main.cpp | 13 + examples/ofx/Bitalino_rapidmix/src/ofApp.cpp | 111 + examples/ofx/Bitalino_rapidmix/src/ofApp.h | 29 + 267 files changed, 111627 insertions(+) create mode 100644 examples/ofx/Bitalino_rapidmix/Bitalino.xcodeproj/project.pbxproj create mode 100644 examples/ofx/Bitalino_rapidmix/Bitalino.xcodeproj/project.xcworkspace/contents.xcworkspacedata create mode 100644 examples/ofx/Bitalino_rapidmix/Bitalino.xcodeproj/xcshareddata/xcschemes/Bitalino Debug.xcscheme create mode 100644 examples/ofx/Bitalino_rapidmix/Bitalino.xcodeproj/xcshareddata/xcschemes/Bitalino Release.xcscheme create mode 100644 examples/ofx/Bitalino_rapidmix/Makefile create mode 100644 examples/ofx/Bitalino_rapidmix/Project.xcconfig create mode 100644 examples/ofx/Bitalino_rapidmix/addons.make create mode 100644 examples/ofx/Bitalino_rapidmix/bin/data/.gitkeep create mode 100644 examples/ofx/Bitalino_rapidmix/config.make create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/GVF/GVF.cpp create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/GVF/GVF.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/GVF/GVFGesture.h create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/GVF/GVFUtils.h create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/GVF/LICENSE create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/json/json-forwards.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/json/json.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/jsoncpp.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/libsvm/libsvm.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/libsvm/libsvm.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/baseModel.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/classification.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/classification.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/dtw.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/dtw.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/classificationEmbindings.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/knnEmbindings.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/modelSetEmbindings.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/nnEmbindings.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/nodeEnv.js create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/rapidLibPost.js create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/rapidStreamEmbindings.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/regressionEmbindings.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/seriesClassificationEmbindings.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/svmEmbindings.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/fastDTW.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/fastDTW.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/knnClassification.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/knnClassification.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/modelSet.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/modelSet.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/neuralNetwork.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/neuralNetwork.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/rapidStream.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/rapidStream.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/regression.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/regression.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/searchWindow.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/searchWindow.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/seriesClassification.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/seriesClassification.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/svmClassification.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/svmClassification.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/trainingExample.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/warpPath.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/warpPath.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/.gitignore create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/README.md create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/bin/osx/libpipo.a create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/bayesfilter/BayesianFilter.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/bayesfilter/BayesianFilter.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/bayesfilter/filter_utilities.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/bayesfilter/filter_utilities.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/finitedifferences/finitedifferences.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/finitedifferences/finitedifferences.h create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/lpcformants/bbpr.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/lpcformants/bbpr.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/lpcformants/rpoly.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/lpcformants/rpoly.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_bpf.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_bpf.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_complex.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_float.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_int.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_int.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_math.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_stdio.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_stdlib.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_types.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_util.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_util.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_bands.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_bands.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_biquad.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_biquad.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_correlation.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_correlation.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_cubic.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_cubic.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_dct.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_dct.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_delta.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_delta.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_fft.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_fft.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_filter.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_lifter.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_lifter.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_lpc.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_lpc.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_mean_variance.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_mean_variance.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_mel.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_mel.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_moments.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_moments.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_onepole.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_onepole.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_preemphasis.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_preemphasis.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_resample.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_resample.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_selection.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_selection.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_svd.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_svd.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_window.c create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_window.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/rta_configuration.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoCollection.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoCollection.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoGraph.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoHost.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoModule.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/mimo_host.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/PiPo.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/PiPoParallel.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/PiPoSequence.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/RingBuffer.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/mimo.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoBands.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoBayesFilter.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoBiquad.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoChop.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoConst.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoDct.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoDelta.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoFft.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoFiniteDif.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoGate.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoLpc.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoLpcFormants.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMeanStddev.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMedian.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMel.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMfcc.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMinMax.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMoments.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMvavrg.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoOnseg.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoPeaks.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoRms.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoScale.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoSelect.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoSlice.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoSum.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/TempMod.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/mimo/mimo_stats.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/third_party/catch/LICENSE_1_0.txt create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/third_party/catch/catch.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/third_party/json/json-forwards.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/third_party/json/json.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/third_party/jsoncpp.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/third_party/libsvm/LICENSE create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/third_party/libsvm/libsvm.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/third_party/libsvm/libsvm.h create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/.gitignore create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/CMakeLists.txt create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/LICENSE create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/catch/catch.hpp create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/LICENSE create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/assertions.h create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/autolink.h create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/config.h create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/forwards.h create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/json-features.h create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/json.h create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/reader.h create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/value.h create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/version.h create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/writer.h create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_reader.cpp create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_tool.h create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_value.cpp create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_valueiterator.inl create mode 100755 examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_writer.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/Doxyfile create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/Doxyfile-dot create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/QuickStart_Python.html create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/XmmDoxygenLayout.xml create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/footer.html create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/header.html create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/jdoxygen.css create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/jtabs.css create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/python_example.py create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/xmm_architecture.jpg create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/xmm_featured.jpg create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/xmm_featured_.jpg create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/xmm_models.jpg create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/readme.md create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmAttribute.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmAttribute.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmCircularbuffer.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmEvents.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmJson.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmJson.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmMatrix.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/distributions/xmmGaussianDistribution.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/distributions/xmmGaussianDistribution.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModel.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelConfiguration.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelParameters.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelResults.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelSharedParameters.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelSharedParameters.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelSingleClass.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelSingleClass.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/trainingset/xmmPhrase.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/trainingset/xmmPhrase.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/trainingset/xmmTrainingSet.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/trainingset/xmmTrainingSet.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmm.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmm.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmmParameters.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmmParameters.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmmSingleClass.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmmSingleClass.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHierarchicalHmm.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHierarchicalHmm.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmParameters.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmParameters.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmResults.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmSingleClass.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmSingleClass.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeans.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeans.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeansParameters.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeansParameters.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeansResults.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/xmm.h create mode 100644 examples/ofx/Bitalino_rapidmix/libRAPID-MIX_API.a create mode 100644 examples/ofx/Bitalino_rapidmix/openFrameworks-Info.plist create mode 100644 examples/ofx/Bitalino_rapidmix/rapid-mix/LICENSE create mode 100644 examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/machineLearning.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/machineLearning.h create mode 100644 examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/rapidGVF/rapidGVF.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/rapidGVF/rapidGVF.h create mode 100644 examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/rapidXMM/rapidXMM.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/rapidXMM/rapidXMM.h create mode 100644 examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/trainingData.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/trainingData.h create mode 100644 examples/ofx/Bitalino_rapidmix/rapid-mix/rapidmix.h create mode 100644 examples/ofx/Bitalino_rapidmix/rapid-mix/signalProcessing/rapidPiPoTools/rapidPiPoHost.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/rapid-mix/signalProcessing/rapidPiPoTools/rapidPiPoHost.h create mode 100644 examples/ofx/Bitalino_rapidmix/rapid-mix/signalProcessing/rapidPiPoTools/rapidPiPoTools.h create mode 100644 examples/ofx/Bitalino_rapidmix/rapid-mix/signalProcessing/signalProcessing.h create mode 100644 examples/ofx/Bitalino_rapidmix/src/BitalinoThread.h create mode 100644 examples/ofx/Bitalino_rapidmix/src/RapidBitalino.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/src/RapidBitalino.h create mode 100644 examples/ofx/Bitalino_rapidmix/src/RapidMixThread.h create mode 100644 examples/ofx/Bitalino_rapidmix/src/RingBuffer.hpp create mode 100644 examples/ofx/Bitalino_rapidmix/src/ThreadedProcess.h create mode 100755 examples/ofx/Bitalino_rapidmix/src/bitalino.cpp create mode 100755 examples/ofx/Bitalino_rapidmix/src/bitalino.h create mode 100644 examples/ofx/Bitalino_rapidmix/src/main.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/src/ofApp.cpp create mode 100644 examples/ofx/Bitalino_rapidmix/src/ofApp.h diff --git a/examples/ofx/Bitalino_rapidmix/Bitalino.xcodeproj/project.pbxproj b/examples/ofx/Bitalino_rapidmix/Bitalino.xcodeproj/project.pbxproj new file mode 100644 index 0000000..d5f0946 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/Bitalino.xcodeproj/project.pbxproj @@ -0,0 +1,1798 @@ +// !$*UTF8*$! +{ + archiveVersion = 1; + classes = { + }; + objectVersion = 46; + objects = { + +/* Begin PBXBuildFile section */ + 0289606657F3E1B14D87F2BC /* ofxSliderGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E661ACAA5BEC5B96FD2F6532 /* ofxSliderGroup.cpp */; }; + 06B42CCB73078EB0E8E265EE /* IpEndpointName.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 552D90E7024A93518E711979 /* IpEndpointName.cpp */; }; + 0B9EEAF6D1EBB25B81373273 /* OscReceivedElements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 333B161A45E42EF09ADEC7A5 /* OscReceivedElements.cpp */; }; + 10C531C84875D2C829391B4E /* maxiGrains.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 300B4DCCFFECBD546568227A /* maxiGrains.cpp */; }; + 1A04D8C41FC31D0E00D725DC /* RapidBitalino.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A04D8C31FC31D0E00D725DC /* RapidBitalino.cpp */; }; + 1A04D8D81FC38F3700D725DC /* libRAPID-MIX_API.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A04D8D71FC38F3700D725DC /* libRAPID-MIX_API.a */; }; + 1A7329231FC304D0001E730B /* machineLearning.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0030991FC3043900E02B93 /* machineLearning.cpp */; }; + 1A7329241FC304D0001E730B /* rapidGVF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A00309C1FC3043900E02B93 /* rapidGVF.cpp */; }; + 1A7329251FC304D0001E730B /* rapidXMM.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A00309F1FC3043900E02B93 /* rapidXMM.cpp */; }; + 1A7329261FC304D0001E730B /* trainingData.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0030A11FC3043900E02B93 /* trainingData.cpp */; }; + 1A73293D1FC304D5001E730B /* rapidPiPoHost.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A0030A61FC3043900E02B93 /* rapidPiPoHost.cpp */; }; + 1A732F4E1FC30565001E730B /* GVF.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A7329411FC30563001E730B /* GVF.cpp */; }; + 1A732FC91FC30566001E730B /* libpipo.a in Frameworks */ = {isa = PBXBuildFile; fileRef = 1A732B001FC30563001E730B /* libpipo.a */; }; + 1A732FCF1FC30566001E730B /* README.md in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B301FC30563001E730B /* README.md */; }; + 1A732FD01FC30566001E730B /* BayesianFilter.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B341FC30563001E730B /* BayesianFilter.cpp */; }; + 1A732FD11FC30566001E730B /* filter_utilities.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B361FC30563001E730B /* filter_utilities.cpp */; }; + 1A732FD21FC30566001E730B /* finitedifferences.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B391FC30563001E730B /* finitedifferences.c */; }; + 1A732FD31FC30566001E730B /* bbpr.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B3C1FC30563001E730B /* bbpr.cpp */; }; + 1A732FD41FC30566001E730B /* rpoly.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B3E1FC30563001E730B /* rpoly.cpp */; }; + 1A732FD51FC30566001E730B /* rta_bpf.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B431FC30563001E730B /* rta_bpf.c */; }; + 1A732FD61FC30566001E730B /* rta_int.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B471FC30563001E730B /* rta_int.c */; }; + 1A732FD71FC30566001E730B /* rta_util.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B4D1FC30563001E730B /* rta_util.c */; }; + 1A732FD81FC30566001E730B /* rta_bands.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B501FC30563001E730B /* rta_bands.c */; }; + 1A732FD91FC30566001E730B /* rta_biquad.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B521FC30563001E730B /* rta_biquad.c */; }; + 1A732FDA1FC30566001E730B /* rta_correlation.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B541FC30563001E730B /* rta_correlation.c */; }; + 1A732FDB1FC30566001E730B /* rta_cubic.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B561FC30563001E730B /* rta_cubic.c */; }; + 1A732FDC1FC30566001E730B /* rta_dct.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B581FC30563001E730B /* rta_dct.c */; }; + 1A732FDD1FC30566001E730B /* rta_delta.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B5A1FC30563001E730B /* rta_delta.c */; }; + 1A732FDE1FC30566001E730B /* rta_fft.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B5C1FC30563001E730B /* rta_fft.c */; }; + 1A732FDF1FC30566001E730B /* rta_lifter.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B5F1FC30563001E730B /* rta_lifter.c */; }; + 1A732FE01FC30566001E730B /* rta_lpc.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B611FC30563001E730B /* rta_lpc.c */; }; + 1A732FE11FC30566001E730B /* rta_mean_variance.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B631FC30563001E730B /* rta_mean_variance.c */; }; + 1A732FE21FC30566001E730B /* rta_mel.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B651FC30563001E730B /* rta_mel.c */; }; + 1A732FE31FC30566001E730B /* rta_moments.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B671FC30563001E730B /* rta_moments.c */; }; + 1A732FE41FC30566001E730B /* rta_onepole.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B691FC30563001E730B /* rta_onepole.c */; }; + 1A732FE51FC30566001E730B /* rta_preemphasis.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B6B1FC30563001E730B /* rta_preemphasis.c */; }; + 1A732FE61FC30566001E730B /* rta_resample.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B6D1FC30563001E730B /* rta_resample.c */; }; + 1A732FE71FC30566001E730B /* rta_selection.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B6F1FC30563001E730B /* rta_selection.c */; }; + 1A732FE81FC30566001E730B /* rta_svd.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B711FC30563001E730B /* rta_svd.c */; }; + 1A732FE91FC30566001E730B /* rta_window.c in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B731FC30563001E730B /* rta_window.c */; }; + 1A732FEA1FC30566001E730B /* PiPoCollection.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732B781FC30563001E730B /* PiPoCollection.cpp */; }; + 1A732FF41FC30566001E730B /* libsvm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732BB51FC30563001E730B /* libsvm.cpp */; }; + 1A7330041FC30566001E730B /* classification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732E881FC30565001E730B /* classification.cpp */; }; + 1A7330051FC30566001E730B /* dtw.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732E8A1FC30565001E730B /* dtw.cpp */; }; + 1A7330061FC30566001E730B /* fastDTW.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732E971FC30565001E730B /* fastDTW.cpp */; }; + 1A7330071FC30566001E730B /* knnClassification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732E991FC30565001E730B /* knnClassification.cpp */; }; + 1A7330081FC30566001E730B /* modelSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732E9B1FC30565001E730B /* modelSet.cpp */; }; + 1A7330091FC30566001E730B /* neuralNetwork.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732E9D1FC30565001E730B /* neuralNetwork.cpp */; }; + 1A73300A1FC30566001E730B /* rapidStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732E9F1FC30565001E730B /* rapidStream.cpp */; }; + 1A73300B1FC30566001E730B /* regression.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732EA11FC30565001E730B /* regression.cpp */; }; + 1A73300C1FC30566001E730B /* searchWindow.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732EA31FC30565001E730B /* searchWindow.cpp */; }; + 1A73300D1FC30566001E730B /* seriesClassification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732EA51FC30565001E730B /* seriesClassification.cpp */; }; + 1A73300E1FC30566001E730B /* svmClassification.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732EA71FC30565001E730B /* svmClassification.cpp */; }; + 1A73300F1FC30566001E730B /* warpPath.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732EAA1FC30565001E730B /* warpPath.cpp */; }; + 1A7330141FC30566001E730B /* jsoncpp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732EC71FC30565001E730B /* jsoncpp.cpp */; }; + 1A73301B1FC30566001E730B /* readme.md in Sources */ = {isa = PBXBuildFile; fileRef = 1A732F121FC30565001E730B /* readme.md */; }; + 1A73301C1FC30566001E730B /* xmmAttribute.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732F161FC30565001E730B /* xmmAttribute.cpp */; }; + 1A73301D1FC30566001E730B /* xmmJson.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732F1A1FC30565001E730B /* xmmJson.cpp */; }; + 1A73301E1FC30566001E730B /* xmmGaussianDistribution.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732F1E1FC30565001E730B /* xmmGaussianDistribution.cpp */; }; + 1A73301F1FC30566001E730B /* xmmModelSharedParameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732F251FC30565001E730B /* xmmModelSharedParameters.cpp */; }; + 1A7330201FC30566001E730B /* xmmModelSingleClass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732F271FC30565001E730B /* xmmModelSingleClass.cpp */; }; + 1A7330211FC30566001E730B /* xmmPhrase.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732F2A1FC30565001E730B /* xmmPhrase.cpp */; }; + 1A7330221FC30566001E730B /* xmmTrainingSet.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732F2C1FC30565001E730B /* xmmTrainingSet.cpp */; }; + 1A7330231FC30566001E730B /* xmmGmm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732F301FC30565001E730B /* xmmGmm.cpp */; }; + 1A7330241FC30566001E730B /* xmmGmmParameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732F321FC30565001E730B /* xmmGmmParameters.cpp */; }; + 1A7330251FC30566001E730B /* xmmGmmSingleClass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732F341FC30565001E730B /* xmmGmmSingleClass.cpp */; }; + 1A7330261FC30566001E730B /* xmmHierarchicalHmm.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732F371FC30565001E730B /* xmmHierarchicalHmm.cpp */; }; + 1A7330271FC30566001E730B /* xmmHmmParameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732F391FC30565001E730B /* xmmHmmParameters.cpp */; }; + 1A7330281FC30566001E730B /* xmmHmmSingleClass.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732F3C1FC30565001E730B /* xmmHmmSingleClass.cpp */; }; + 1A7330291FC30566001E730B /* xmmKMeans.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732F3F1FC30565001E730B /* xmmKMeans.cpp */; }; + 1A73302A1FC30566001E730B /* xmmKMeansParameters.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1A732F411FC30565001E730B /* xmmKMeansParameters.cpp */; }; + 1AF8F4F41FBFBA56007845B3 /* bitalino.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1AF8F4F21FBFBA56007845B3 /* bitalino.cpp */; }; + 1F4CACB1B7D09B43508A7EC3 /* ofxButton.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E76982C6091099847AF4A689 /* ofxButton.cpp */; }; + 230128348F328F3A83D41798 /* UdpSocket.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 138DE2396984C9C63DA7FDD6 /* UdpSocket.cpp */; }; + 39B159E39B6636BFC65B0F2A /* NetworkingUtils.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 54C5AF569662A8351667313E /* NetworkingUtils.cpp */; }; + 460809B55AD9FA35FEEF18E9 /* maxiBark.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E79D78A192005C0D7FDA98C0 /* maxiBark.cpp */; }; + 617ACA40B63357D76A9595A8 /* ofxOscReceiver.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 8F5FFC9C08A87AE48EA5E66C /* ofxOscReceiver.cpp */; }; + 638D65104AC275AFCB576B80 /* OscPrintReceivedElements.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6EFE170390703388444A995C /* OscPrintReceivedElements.cpp */; }; + 66078BCDF7C6B8F85391BD78 /* OscTypes.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E87C4F253FACA6BBF714AD99 /* OscTypes.cpp */; }; + 6DEA5ACAF78C6AE7BB6BFDCF /* stb_vorbis.c in Sources */ = {isa = PBXBuildFile; fileRef = 8DC5D79A78655BF028FBDE30 /* stb_vorbis.c */; }; + 77C1DBAB01757716D71545F7 /* maximilian.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FEC22E5BFC33148A93E906A /* maximilian.cpp */; }; + 7BF363788124DFB219FEA2D9 /* ofxOscBundle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 1661CDE0EE45AC19EF11DA8E /* ofxOscBundle.cpp */; }; + 821FDA0B1E4F7BB6AF683071 /* maxiFFT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 6D7D4C890B7E7E86CF67EDE9 /* maxiFFT.cpp */; }; + 83944CBA55088BC6E0CB8655 /* ofxOscMessage.cpp in Sources */ = {isa = PBXBuildFile; fileRef = D39514497AFC9A4AAE903696 /* ofxOscMessage.cpp */; }; + 982961365190FE97577EC25D /* maxiMFCC.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C590EAED7C04204257DE2745 /* maxiMFCC.cpp */; }; + 9B232A695C4183B7E9D6DE6B /* ofxGuiGroup.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 161030033DD4104A32E68FA8 /* ofxGuiGroup.cpp */; }; + 9DB59557693F5AF1C3B86978 /* ofxLabel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = C85AEC4A09E7407508E41723 /* ofxLabel.cpp */; }; + A22B63CBE8E52759908258DF /* OscOutboundPacketStream.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 16F2E6A76B43CC86E0875826 /* OscOutboundPacketStream.cpp */; }; + A6B3D68D6CAF91615E79B729 /* ofxPanel.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 3646FFD002EE9FED0DD367F3 /* ofxPanel.cpp */; }; + AE5D0283C3A439F21F24D146 /* maxiAtoms.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 21080C6D8829F198543F568E /* maxiAtoms.cpp */; }; + BE5879D980EF1A321B38BDED /* ofxToggle.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 5BA6903E0287C0B3CBF81989 /* ofxToggle.cpp */; }; + C061F0FB55B94C461FF5D520 /* ofxOscParameterSync.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DCB987CA7BF7FB3A39EF3514 /* ofxOscParameterSync.cpp */; }; + C0A43D1F56B1198FC5EE7031 /* ofxOscSender.cpp in Sources */ = {isa = PBXBuildFile; fileRef = AEC6D21EB03AE1B72B35D0D9 /* ofxOscSender.cpp */; }; + C1CCEDB5321AA5A832D215F0 /* ofxSlider.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 951C54CCCD72A0FFC773653F /* ofxSlider.cpp */; }; + CBF1E66610EC3ED02B8E7810 /* fft.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DC8DE4E32DB58B5849214F05 /* fft.cpp */; }; + E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */ = {isa = PBXBuildFile; fileRef = E4328148138ABC890047C5CB /* openFrameworksDebug.a */; }; + E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1D0A3A1BDC003C02F2 /* main.cpp */; }; + E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */; }; + E6E8C6BA7D5DD18D84DCE6B9 /* ofxBaseGui.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 283D3449127FCD4AE5F47F88 /* ofxBaseGui.cpp */; }; +/* End PBXBuildFile section */ + +/* Begin PBXContainerItemProxy section */ + E4328147138ABC890047C5CB /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; + proxyType = 2; + remoteGlobalIDString = E4B27C1510CBEB8E00536013; + remoteInfo = openFrameworks; + }; + E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */ = { + isa = PBXContainerItemProxy; + containerPortal = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; + proxyType = 1; + remoteGlobalIDString = E4B27C1410CBEB8E00536013; + remoteInfo = openFrameworks; + }; +/* End PBXContainerItemProxy section */ + +/* Begin PBXCopyFilesBuildPhase section */ + E4C2427710CC5ABF004149E2 /* CopyFiles */ = { + isa = PBXCopyFilesBuildPhase; + buildActionMask = 2147483647; + dstPath = ""; + dstSubfolderSpec = 10; + files = ( + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXCopyFilesBuildPhase section */ + +/* Begin PBXFileReference section */ + 008629CF1C50CAC655956424 /* maximilian.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = maximilian.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs/maximilian.h; sourceTree = SOURCE_ROOT; }; + 0972B751F7A633CC3CCD4C70 /* TimerListener.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = TimerListener.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip/TimerListener.h; sourceTree = SOURCE_ROOT; }; + 09AEC4E5ECE805EAD349DBCE /* PacketListener.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = PacketListener.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip/PacketListener.h; sourceTree = SOURCE_ROOT; }; + 0D0D8D193987B4296465A319 /* ofxOscReceiver.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscReceiver.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/src/ofxOscReceiver.h; sourceTree = SOURCE_ROOT; }; + 0FEC22E5BFC33148A93E906A /* maximilian.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = maximilian.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs/maximilian.cpp; sourceTree = SOURCE_ROOT; }; + 138DE2396984C9C63DA7FDD6 /* UdpSocket.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = UdpSocket.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip/posix/UdpSocket.cpp; sourceTree = SOURCE_ROOT; }; + 161030033DD4104A32E68FA8 /* ofxGuiGroup.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxGuiGroup.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src/ofxGuiGroup.cpp; sourceTree = SOURCE_ROOT; }; + 1661CDE0EE45AC19EF11DA8E /* ofxOscBundle.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxOscBundle.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/src/ofxOscBundle.cpp; sourceTree = SOURCE_ROOT; }; + 16F2E6A76B43CC86E0875826 /* OscOutboundPacketStream.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = OscOutboundPacketStream.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/osc/OscOutboundPacketStream.cpp; sourceTree = SOURCE_ROOT; }; + 1A0030971FC3043900E02B93 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; }; + 1A0030991FC3043900E02B93 /* machineLearning.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = machineLearning.cpp; sourceTree = "<group>"; }; + 1A00309A1FC3043900E02B93 /* machineLearning.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = machineLearning.h; sourceTree = "<group>"; }; + 1A00309C1FC3043900E02B93 /* rapidGVF.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = rapidGVF.cpp; sourceTree = "<group>"; }; + 1A00309D1FC3043900E02B93 /* rapidGVF.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rapidGVF.h; sourceTree = "<group>"; }; + 1A00309F1FC3043900E02B93 /* rapidXMM.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = rapidXMM.cpp; sourceTree = "<group>"; }; + 1A0030A01FC3043900E02B93 /* rapidXMM.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rapidXMM.h; sourceTree = "<group>"; }; + 1A0030A11FC3043900E02B93 /* trainingData.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = trainingData.cpp; sourceTree = "<group>"; }; + 1A0030A21FC3043900E02B93 /* trainingData.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = trainingData.h; sourceTree = "<group>"; }; + 1A0030A31FC3043900E02B93 /* rapidmix.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rapidmix.h; sourceTree = "<group>"; }; + 1A0030A61FC3043900E02B93 /* rapidPiPoHost.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = rapidPiPoHost.cpp; sourceTree = "<group>"; }; + 1A0030A71FC3043900E02B93 /* rapidPiPoHost.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rapidPiPoHost.h; sourceTree = "<group>"; }; + 1A0030A81FC3043900E02B93 /* rapidPiPoTools.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = rapidPiPoTools.h; sourceTree = "<group>"; }; + 1A0030A91FC3043900E02B93 /* signalProcessing.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = signalProcessing.h; sourceTree = "<group>"; }; + 1A04D8C21FC31C0000D725DC /* RapidBitalino.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RapidBitalino.h; sourceTree = "<group>"; }; + 1A04D8C31FC31D0E00D725DC /* RapidBitalino.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = RapidBitalino.cpp; sourceTree = "<group>"; }; + 1A04D8D71FC38F3700D725DC /* libRAPID-MIX_API.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = "libRAPID-MIX_API.a"; sourceTree = "<group>"; }; + 1A7329411FC30563001E730B /* GVF.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = GVF.cpp; sourceTree = "<group>"; }; + 1A7329421FC30563001E730B /* GVF.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GVF.h; sourceTree = "<group>"; }; + 1A7329431FC30563001E730B /* GVFGesture.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GVFGesture.h; sourceTree = "<group>"; }; + 1A7329441FC30563001E730B /* GVFUtils.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = GVFUtils.h; sourceTree = "<group>"; }; + 1A7329451FC30563001E730B /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; }; + 1A732AFD1FC30563001E730B /* .gitignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore; sourceTree = "<group>"; }; + 1A732B001FC30563001E730B /* libpipo.a */ = {isa = PBXFileReference; lastKnownFileType = archive.ar; path = libpipo.a; sourceTree = "<group>"; }; + 1A732B301FC30563001E730B /* README.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; }; + 1A732B341FC30563001E730B /* BayesianFilter.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = BayesianFilter.cpp; sourceTree = "<group>"; }; + 1A732B351FC30563001E730B /* BayesianFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = BayesianFilter.h; sourceTree = "<group>"; }; + 1A732B361FC30563001E730B /* filter_utilities.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = filter_utilities.cpp; sourceTree = "<group>"; }; + 1A732B371FC30563001E730B /* filter_utilities.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = filter_utilities.h; sourceTree = "<group>"; }; + 1A732B391FC30563001E730B /* finitedifferences.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = finitedifferences.c; sourceTree = "<group>"; }; + 1A732B3A1FC30563001E730B /* finitedifferences.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = finitedifferences.h; sourceTree = "<group>"; }; + 1A732B3C1FC30563001E730B /* bbpr.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bbpr.cpp; sourceTree = "<group>"; }; + 1A732B3D1FC30563001E730B /* bbpr.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bbpr.h; sourceTree = "<group>"; }; + 1A732B3E1FC30563001E730B /* rpoly.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rpoly.cpp; sourceTree = "<group>"; }; + 1A732B3F1FC30563001E730B /* rpoly.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rpoly.h; sourceTree = "<group>"; }; + 1A732B421FC30563001E730B /* rta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta.h; sourceTree = "<group>"; }; + 1A732B431FC30563001E730B /* rta_bpf.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_bpf.c; sourceTree = "<group>"; }; + 1A732B441FC30563001E730B /* rta_bpf.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_bpf.h; sourceTree = "<group>"; }; + 1A732B451FC30563001E730B /* rta_complex.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_complex.h; sourceTree = "<group>"; }; + 1A732B461FC30563001E730B /* rta_float.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_float.h; sourceTree = "<group>"; }; + 1A732B471FC30563001E730B /* rta_int.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_int.c; sourceTree = "<group>"; }; + 1A732B481FC30563001E730B /* rta_int.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_int.h; sourceTree = "<group>"; }; + 1A732B491FC30563001E730B /* rta_math.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_math.h; sourceTree = "<group>"; }; + 1A732B4A1FC30563001E730B /* rta_stdio.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_stdio.h; sourceTree = "<group>"; }; + 1A732B4B1FC30563001E730B /* rta_stdlib.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_stdlib.h; sourceTree = "<group>"; }; + 1A732B4C1FC30563001E730B /* rta_types.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_types.h; sourceTree = "<group>"; }; + 1A732B4D1FC30563001E730B /* rta_util.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_util.c; sourceTree = "<group>"; }; + 1A732B4E1FC30563001E730B /* rta_util.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_util.h; sourceTree = "<group>"; }; + 1A732B501FC30563001E730B /* rta_bands.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_bands.c; sourceTree = "<group>"; }; + 1A732B511FC30563001E730B /* rta_bands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_bands.h; sourceTree = "<group>"; }; + 1A732B521FC30563001E730B /* rta_biquad.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_biquad.c; sourceTree = "<group>"; }; + 1A732B531FC30563001E730B /* rta_biquad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_biquad.h; sourceTree = "<group>"; }; + 1A732B541FC30563001E730B /* rta_correlation.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_correlation.c; sourceTree = "<group>"; }; + 1A732B551FC30563001E730B /* rta_correlation.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_correlation.h; sourceTree = "<group>"; }; + 1A732B561FC30563001E730B /* rta_cubic.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_cubic.c; sourceTree = "<group>"; }; + 1A732B571FC30563001E730B /* rta_cubic.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_cubic.h; sourceTree = "<group>"; }; + 1A732B581FC30563001E730B /* rta_dct.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_dct.c; sourceTree = "<group>"; }; + 1A732B591FC30563001E730B /* rta_dct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_dct.h; sourceTree = "<group>"; }; + 1A732B5A1FC30563001E730B /* rta_delta.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_delta.c; sourceTree = "<group>"; }; + 1A732B5B1FC30563001E730B /* rta_delta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_delta.h; sourceTree = "<group>"; }; + 1A732B5C1FC30563001E730B /* rta_fft.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_fft.c; sourceTree = "<group>"; }; + 1A732B5D1FC30563001E730B /* rta_fft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_fft.h; sourceTree = "<group>"; }; + 1A732B5E1FC30563001E730B /* rta_filter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_filter.h; sourceTree = "<group>"; }; + 1A732B5F1FC30563001E730B /* rta_lifter.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_lifter.c; sourceTree = "<group>"; }; + 1A732B601FC30563001E730B /* rta_lifter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_lifter.h; sourceTree = "<group>"; }; + 1A732B611FC30563001E730B /* rta_lpc.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_lpc.c; sourceTree = "<group>"; }; + 1A732B621FC30563001E730B /* rta_lpc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_lpc.h; sourceTree = "<group>"; }; + 1A732B631FC30563001E730B /* rta_mean_variance.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_mean_variance.c; sourceTree = "<group>"; }; + 1A732B641FC30563001E730B /* rta_mean_variance.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_mean_variance.h; sourceTree = "<group>"; }; + 1A732B651FC30563001E730B /* rta_mel.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_mel.c; sourceTree = "<group>"; }; + 1A732B661FC30563001E730B /* rta_mel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_mel.h; sourceTree = "<group>"; }; + 1A732B671FC30563001E730B /* rta_moments.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_moments.c; sourceTree = "<group>"; }; + 1A732B681FC30563001E730B /* rta_moments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_moments.h; sourceTree = "<group>"; }; + 1A732B691FC30563001E730B /* rta_onepole.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_onepole.c; sourceTree = "<group>"; }; + 1A732B6A1FC30563001E730B /* rta_onepole.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_onepole.h; sourceTree = "<group>"; }; + 1A732B6B1FC30563001E730B /* rta_preemphasis.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_preemphasis.c; sourceTree = "<group>"; }; + 1A732B6C1FC30563001E730B /* rta_preemphasis.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_preemphasis.h; sourceTree = "<group>"; }; + 1A732B6D1FC30563001E730B /* rta_resample.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_resample.c; sourceTree = "<group>"; }; + 1A732B6E1FC30563001E730B /* rta_resample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_resample.h; sourceTree = "<group>"; }; + 1A732B6F1FC30563001E730B /* rta_selection.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_selection.c; sourceTree = "<group>"; }; + 1A732B701FC30563001E730B /* rta_selection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_selection.h; sourceTree = "<group>"; }; + 1A732B711FC30563001E730B /* rta_svd.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_svd.c; sourceTree = "<group>"; }; + 1A732B721FC30563001E730B /* rta_svd.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_svd.h; sourceTree = "<group>"; }; + 1A732B731FC30563001E730B /* rta_window.c */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.c; path = rta_window.c; sourceTree = "<group>"; }; + 1A732B741FC30563001E730B /* rta_window.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_window.h; sourceTree = "<group>"; }; + 1A732B751FC30563001E730B /* rta_configuration.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rta_configuration.h; sourceTree = "<group>"; }; + 1A732B771FC30563001E730B /* mimo_host.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mimo_host.h; sourceTree = "<group>"; }; + 1A732B781FC30563001E730B /* PiPoCollection.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PiPoCollection.cpp; sourceTree = "<group>"; }; + 1A732B791FC30563001E730B /* PiPoCollection.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoCollection.h; sourceTree = "<group>"; }; + 1A732B7A1FC30563001E730B /* PiPoGraph.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoGraph.h; sourceTree = "<group>"; }; + 1A732B7B1FC30563001E730B /* PiPoHost.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoHost.h; sourceTree = "<group>"; }; + 1A732B7C1FC30563001E730B /* PiPoModule.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoModule.h; sourceTree = "<group>"; }; + 1A732B7E1FC30563001E730B /* mimo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mimo.h; sourceTree = "<group>"; }; + 1A732B7F1FC30563001E730B /* PiPo.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPo.h; sourceTree = "<group>"; }; + 1A732B801FC30563001E730B /* PiPoParallel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoParallel.h; sourceTree = "<group>"; }; + 1A732B811FC30563001E730B /* PiPoSequence.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoSequence.h; sourceTree = "<group>"; }; + 1A732B821FC30563001E730B /* RingBuffer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = RingBuffer.h; sourceTree = "<group>"; }; + 1A732B851FC30563001E730B /* mimo_stats.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = mimo_stats.h; sourceTree = "<group>"; }; + 1A732B861FC30563001E730B /* PiPoBands.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoBands.h; sourceTree = "<group>"; }; + 1A732B871FC30563001E730B /* PiPoBayesFilter.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoBayesFilter.h; sourceTree = "<group>"; }; + 1A732B881FC30563001E730B /* PiPoBiquad.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoBiquad.h; sourceTree = "<group>"; }; + 1A732B891FC30563001E730B /* PiPoChop.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoChop.h; sourceTree = "<group>"; }; + 1A732B8A1FC30563001E730B /* PiPoConst.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoConst.h; sourceTree = "<group>"; }; + 1A732B8B1FC30563001E730B /* PiPoDct.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoDct.h; sourceTree = "<group>"; }; + 1A732B8C1FC30563001E730B /* PiPoDelta.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoDelta.h; sourceTree = "<group>"; }; + 1A732B8D1FC30563001E730B /* PiPoFft.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoFft.h; sourceTree = "<group>"; }; + 1A732B8E1FC30563001E730B /* PiPoFiniteDif.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoFiniteDif.h; sourceTree = "<group>"; }; + 1A732B8F1FC30563001E730B /* PiPoGate.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoGate.h; sourceTree = "<group>"; }; + 1A732B901FC30563001E730B /* PiPoLpc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoLpc.h; sourceTree = "<group>"; }; + 1A732B911FC30563001E730B /* PiPoLpcFormants.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoLpcFormants.h; sourceTree = "<group>"; }; + 1A732B921FC30563001E730B /* PiPoMeanStddev.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoMeanStddev.h; sourceTree = "<group>"; }; + 1A732B931FC30563001E730B /* PiPoMedian.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoMedian.h; sourceTree = "<group>"; }; + 1A732B941FC30563001E730B /* PiPoMel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoMel.h; sourceTree = "<group>"; }; + 1A732B951FC30563001E730B /* PiPoMfcc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoMfcc.h; sourceTree = "<group>"; }; + 1A732B961FC30563001E730B /* PiPoMinMax.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoMinMax.h; sourceTree = "<group>"; }; + 1A732B971FC30563001E730B /* PiPoMoments.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoMoments.h; sourceTree = "<group>"; }; + 1A732B981FC30563001E730B /* PiPoMvavrg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoMvavrg.h; sourceTree = "<group>"; }; + 1A732B991FC30563001E730B /* PiPoOnseg.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoOnseg.h; sourceTree = "<group>"; }; + 1A732B9A1FC30563001E730B /* PiPoPeaks.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoPeaks.h; sourceTree = "<group>"; }; + 1A732B9B1FC30563001E730B /* PiPoRms.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoRms.h; sourceTree = "<group>"; }; + 1A732B9C1FC30563001E730B /* PiPoScale.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoScale.h; sourceTree = "<group>"; }; + 1A732B9D1FC30563001E730B /* PiPoSelect.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoSelect.h; sourceTree = "<group>"; }; + 1A732B9E1FC30563001E730B /* PiPoSlice.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoSlice.h; sourceTree = "<group>"; }; + 1A732B9F1FC30563001E730B /* PiPoSum.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = PiPoSum.h; sourceTree = "<group>"; }; + 1A732BA01FC30563001E730B /* TempMod.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = TempMod.h; sourceTree = "<group>"; }; + 1A732BB11FC30563001E730B /* json-forwards.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "json-forwards.h"; sourceTree = "<group>"; }; + 1A732BB21FC30563001E730B /* json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = json.h; sourceTree = "<group>"; }; + 1A732BB31FC30563001E730B /* jsoncpp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = jsoncpp.cpp; sourceTree = "<group>"; }; + 1A732BB51FC30563001E730B /* libsvm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = libsvm.cpp; sourceTree = "<group>"; }; + 1A732BB61FC30563001E730B /* libsvm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libsvm.h; sourceTree = "<group>"; }; + 1A732E871FC30565001E730B /* baseModel.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = baseModel.h; sourceTree = "<group>"; }; + 1A732E881FC30565001E730B /* classification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = classification.cpp; sourceTree = "<group>"; }; + 1A732E891FC30565001E730B /* classification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = classification.h; sourceTree = "<group>"; }; + 1A732E8A1FC30565001E730B /* dtw.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = dtw.cpp; sourceTree = "<group>"; }; + 1A732E8B1FC30565001E730B /* dtw.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = dtw.h; sourceTree = "<group>"; }; + 1A732E8D1FC30565001E730B /* classificationEmbindings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = classificationEmbindings.h; sourceTree = "<group>"; }; + 1A732E8E1FC30565001E730B /* knnEmbindings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = knnEmbindings.h; sourceTree = "<group>"; }; + 1A732E8F1FC30565001E730B /* modelSetEmbindings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = modelSetEmbindings.h; sourceTree = "<group>"; }; + 1A732E901FC30565001E730B /* nnEmbindings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = nnEmbindings.h; sourceTree = "<group>"; }; + 1A732E911FC30565001E730B /* nodeEnv.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = nodeEnv.js; sourceTree = "<group>"; }; + 1A732E921FC30565001E730B /* rapidLibPost.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = rapidLibPost.js; sourceTree = "<group>"; }; + 1A732E931FC30565001E730B /* rapidStreamEmbindings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rapidStreamEmbindings.h; sourceTree = "<group>"; }; + 1A732E941FC30565001E730B /* regressionEmbindings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regressionEmbindings.h; sourceTree = "<group>"; }; + 1A732E951FC30565001E730B /* seriesClassificationEmbindings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = seriesClassificationEmbindings.h; sourceTree = "<group>"; }; + 1A732E961FC30565001E730B /* svmEmbindings.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = svmEmbindings.h; sourceTree = "<group>"; }; + 1A732E971FC30565001E730B /* fastDTW.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = fastDTW.cpp; sourceTree = "<group>"; }; + 1A732E981FC30565001E730B /* fastDTW.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = fastDTW.h; sourceTree = "<group>"; }; + 1A732E991FC30565001E730B /* knnClassification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = knnClassification.cpp; sourceTree = "<group>"; }; + 1A732E9A1FC30565001E730B /* knnClassification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = knnClassification.h; sourceTree = "<group>"; }; + 1A732E9B1FC30565001E730B /* modelSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = modelSet.cpp; sourceTree = "<group>"; }; + 1A732E9C1FC30565001E730B /* modelSet.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = modelSet.h; sourceTree = "<group>"; }; + 1A732E9D1FC30565001E730B /* neuralNetwork.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = neuralNetwork.cpp; sourceTree = "<group>"; }; + 1A732E9E1FC30565001E730B /* neuralNetwork.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = neuralNetwork.h; sourceTree = "<group>"; }; + 1A732E9F1FC30565001E730B /* rapidStream.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = rapidStream.cpp; sourceTree = "<group>"; }; + 1A732EA01FC30565001E730B /* rapidStream.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = rapidStream.h; sourceTree = "<group>"; }; + 1A732EA11FC30565001E730B /* regression.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = regression.cpp; sourceTree = "<group>"; }; + 1A732EA21FC30565001E730B /* regression.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = regression.h; sourceTree = "<group>"; }; + 1A732EA31FC30565001E730B /* searchWindow.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = searchWindow.cpp; sourceTree = "<group>"; }; + 1A732EA41FC30565001E730B /* searchWindow.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = searchWindow.h; sourceTree = "<group>"; }; + 1A732EA51FC30565001E730B /* seriesClassification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = seriesClassification.cpp; sourceTree = "<group>"; }; + 1A732EA61FC30565001E730B /* seriesClassification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = seriesClassification.h; sourceTree = "<group>"; }; + 1A732EA71FC30565001E730B /* svmClassification.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = svmClassification.cpp; sourceTree = "<group>"; }; + 1A732EA81FC30565001E730B /* svmClassification.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = svmClassification.h; sourceTree = "<group>"; }; + 1A732EA91FC30565001E730B /* trainingExample.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = trainingExample.h; sourceTree = "<group>"; }; + 1A732EAA1FC30565001E730B /* warpPath.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = warpPath.cpp; sourceTree = "<group>"; }; + 1A732EAB1FC30565001E730B /* warpPath.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = warpPath.h; sourceTree = "<group>"; }; + 1A732EC21FC30565001E730B /* catch.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch.hpp; sourceTree = "<group>"; }; + 1A732EC31FC30565001E730B /* LICENSE_1_0.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE_1_0.txt; sourceTree = "<group>"; }; + 1A732EC51FC30565001E730B /* json-forwards.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "json-forwards.h"; sourceTree = "<group>"; }; + 1A732EC61FC30565001E730B /* json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = json.h; sourceTree = "<group>"; }; + 1A732EC71FC30565001E730B /* jsoncpp.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = jsoncpp.cpp; sourceTree = "<group>"; }; + 1A732EC91FC30565001E730B /* libsvm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = libsvm.cpp; sourceTree = "<group>"; }; + 1A732ECA1FC30565001E730B /* libsvm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = libsvm.h; sourceTree = "<group>"; }; + 1A732ECB1FC30565001E730B /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; }; + 1A732ECD1FC30565001E730B /* .gitignore */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = .gitignore; sourceTree = "<group>"; }; + 1A732ECE1FC30565001E730B /* CMakeLists.txt */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = CMakeLists.txt; sourceTree = "<group>"; }; + 1A732ED11FC30565001E730B /* catch.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = catch.hpp; sourceTree = "<group>"; }; + 1A732ED41FC30565001E730B /* assertions.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = assertions.h; sourceTree = "<group>"; }; + 1A732ED51FC30565001E730B /* autolink.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = autolink.h; sourceTree = "<group>"; }; + 1A732ED61FC30565001E730B /* config.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = config.h; sourceTree = "<group>"; }; + 1A732ED71FC30565001E730B /* forwards.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = forwards.h; sourceTree = "<group>"; }; + 1A732ED81FC30565001E730B /* json-features.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = "json-features.h"; sourceTree = "<group>"; }; + 1A732ED91FC30565001E730B /* json.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = json.h; sourceTree = "<group>"; }; + 1A732EDA1FC30565001E730B /* reader.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = reader.h; sourceTree = "<group>"; }; + 1A732EDB1FC30565001E730B /* value.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = value.h; sourceTree = "<group>"; }; + 1A732EDC1FC30565001E730B /* version.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = version.h; sourceTree = "<group>"; }; + 1A732EDD1FC30565001E730B /* writer.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = writer.h; sourceTree = "<group>"; }; + 1A732EDE1FC30565001E730B /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; }; + 1A732EE01FC30565001E730B /* json_reader.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = json_reader.cpp; sourceTree = "<group>"; }; + 1A732EE11FC30565001E730B /* json_tool.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = json_tool.h; sourceTree = "<group>"; }; + 1A732EE21FC30565001E730B /* json_value.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = json_value.cpp; sourceTree = "<group>"; }; + 1A732EE31FC30565001E730B /* json_valueiterator.inl */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = json_valueiterator.inl; sourceTree = "<group>"; }; + 1A732EE41FC30565001E730B /* json_writer.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = json_writer.cpp; sourceTree = "<group>"; }; + 1A732EE71FC30565001E730B /* footer.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = footer.html; sourceTree = "<group>"; }; + 1A732EE81FC30565001E730B /* header.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = header.html; sourceTree = "<group>"; }; + 1A732EE91FC30565001E730B /* jdoxygen.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = jdoxygen.css; sourceTree = "<group>"; }; + 1A732EEA1FC30565001E730B /* jtabs.css */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.css; path = jtabs.css; sourceTree = "<group>"; }; + 1A732EEB1FC30565001E730B /* python_example.py */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.script.python; path = python_example.py; sourceTree = "<group>"; }; + 1A732EEC1FC30565001E730B /* QuickStart_Python.html */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.html; path = QuickStart_Python.html; sourceTree = "<group>"; }; + 1A732EED1FC30565001E730B /* xmm_architecture.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = xmm_architecture.jpg; sourceTree = "<group>"; }; + 1A732EEE1FC30565001E730B /* xmm_featured.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = xmm_featured.jpg; sourceTree = "<group>"; }; + 1A732EEF1FC30565001E730B /* xmm_featured_.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = xmm_featured_.jpg; sourceTree = "<group>"; }; + 1A732EF01FC30565001E730B /* xmm_models.jpg */ = {isa = PBXFileReference; lastKnownFileType = image.jpeg; path = xmm_models.jpg; sourceTree = "<group>"; }; + 1A732EF11FC30565001E730B /* XmmDoxygenLayout.xml */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xml; path = XmmDoxygenLayout.xml; sourceTree = "<group>"; }; + 1A732EF21FC30565001E730B /* Doxyfile */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = Doxyfile; sourceTree = "<group>"; }; + 1A732EF31FC30565001E730B /* Doxyfile-dot */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = "Doxyfile-dot"; sourceTree = "<group>"; }; + 1A732EF91FC30565001E730B /* LICENSE */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; }; + 1A732F121FC30565001E730B /* readme.md */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = net.daringfireball.markdown; path = readme.md; sourceTree = "<group>"; }; + 1A732F161FC30565001E730B /* xmmAttribute.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmmAttribute.cpp; sourceTree = "<group>"; }; + 1A732F171FC30565001E730B /* xmmAttribute.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmAttribute.hpp; sourceTree = "<group>"; }; + 1A732F181FC30565001E730B /* xmmCircularbuffer.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmCircularbuffer.hpp; sourceTree = "<group>"; }; + 1A732F191FC30565001E730B /* xmmEvents.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmEvents.hpp; sourceTree = "<group>"; }; + 1A732F1A1FC30565001E730B /* xmmJson.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmmJson.cpp; sourceTree = "<group>"; }; + 1A732F1B1FC30565001E730B /* xmmJson.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmJson.hpp; sourceTree = "<group>"; }; + 1A732F1C1FC30565001E730B /* xmmMatrix.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmMatrix.hpp; sourceTree = "<group>"; }; + 1A732F1E1FC30565001E730B /* xmmGaussianDistribution.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmmGaussianDistribution.cpp; sourceTree = "<group>"; }; + 1A732F1F1FC30565001E730B /* xmmGaussianDistribution.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmGaussianDistribution.hpp; sourceTree = "<group>"; }; + 1A732F211FC30565001E730B /* xmmModel.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmModel.hpp; sourceTree = "<group>"; }; + 1A732F221FC30565001E730B /* xmmModelConfiguration.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmModelConfiguration.hpp; sourceTree = "<group>"; }; + 1A732F231FC30565001E730B /* xmmModelParameters.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmModelParameters.hpp; sourceTree = "<group>"; }; + 1A732F241FC30565001E730B /* xmmModelResults.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmModelResults.hpp; sourceTree = "<group>"; }; + 1A732F251FC30565001E730B /* xmmModelSharedParameters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmmModelSharedParameters.cpp; sourceTree = "<group>"; }; + 1A732F261FC30565001E730B /* xmmModelSharedParameters.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmModelSharedParameters.hpp; sourceTree = "<group>"; }; + 1A732F271FC30565001E730B /* xmmModelSingleClass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmmModelSingleClass.cpp; sourceTree = "<group>"; }; + 1A732F281FC30565001E730B /* xmmModelSingleClass.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmModelSingleClass.hpp; sourceTree = "<group>"; }; + 1A732F2A1FC30565001E730B /* xmmPhrase.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmmPhrase.cpp; sourceTree = "<group>"; }; + 1A732F2B1FC30565001E730B /* xmmPhrase.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmPhrase.hpp; sourceTree = "<group>"; }; + 1A732F2C1FC30565001E730B /* xmmTrainingSet.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmmTrainingSet.cpp; sourceTree = "<group>"; }; + 1A732F2D1FC30565001E730B /* xmmTrainingSet.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmTrainingSet.hpp; sourceTree = "<group>"; }; + 1A732F301FC30565001E730B /* xmmGmm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmmGmm.cpp; sourceTree = "<group>"; }; + 1A732F311FC30565001E730B /* xmmGmm.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmGmm.hpp; sourceTree = "<group>"; }; + 1A732F321FC30565001E730B /* xmmGmmParameters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmmGmmParameters.cpp; sourceTree = "<group>"; }; + 1A732F331FC30565001E730B /* xmmGmmParameters.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmGmmParameters.hpp; sourceTree = "<group>"; }; + 1A732F341FC30565001E730B /* xmmGmmSingleClass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmmGmmSingleClass.cpp; sourceTree = "<group>"; }; + 1A732F351FC30565001E730B /* xmmGmmSingleClass.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmGmmSingleClass.hpp; sourceTree = "<group>"; }; + 1A732F371FC30565001E730B /* xmmHierarchicalHmm.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmmHierarchicalHmm.cpp; sourceTree = "<group>"; }; + 1A732F381FC30565001E730B /* xmmHierarchicalHmm.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmHierarchicalHmm.hpp; sourceTree = "<group>"; }; + 1A732F391FC30565001E730B /* xmmHmmParameters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmmHmmParameters.cpp; sourceTree = "<group>"; }; + 1A732F3A1FC30565001E730B /* xmmHmmParameters.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmHmmParameters.hpp; sourceTree = "<group>"; }; + 1A732F3B1FC30565001E730B /* xmmHmmResults.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmHmmResults.hpp; sourceTree = "<group>"; }; + 1A732F3C1FC30565001E730B /* xmmHmmSingleClass.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmmHmmSingleClass.cpp; sourceTree = "<group>"; }; + 1A732F3D1FC30565001E730B /* xmmHmmSingleClass.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmHmmSingleClass.hpp; sourceTree = "<group>"; }; + 1A732F3F1FC30565001E730B /* xmmKMeans.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmmKMeans.cpp; sourceTree = "<group>"; }; + 1A732F401FC30565001E730B /* xmmKMeans.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmKMeans.hpp; sourceTree = "<group>"; }; + 1A732F411FC30565001E730B /* xmmKMeansParameters.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = xmmKMeansParameters.cpp; sourceTree = "<group>"; }; + 1A732F421FC30565001E730B /* xmmKMeansParameters.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmKMeansParameters.hpp; sourceTree = "<group>"; }; + 1A732F431FC30565001E730B /* xmmKMeansResults.hpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.h; path = xmmKMeansResults.hpp; sourceTree = "<group>"; }; + 1A732F441FC30565001E730B /* xmm.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = xmm.h; sourceTree = "<group>"; }; + 1AF8F4F21FBFBA56007845B3 /* bitalino.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = bitalino.cpp; sourceTree = "<group>"; }; + 1AF8F4F31FBFBA56007845B3 /* bitalino.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = bitalino.h; sourceTree = "<group>"; }; + 1AF8F4FD1FC0D5C6007845B3 /* RingBuffer.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = RingBuffer.hpp; sourceTree = "<group>"; }; + 1AF8F4FF1FC106D2007845B3 /* ThreadedProcess.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = ThreadedProcess.h; sourceTree = "<group>"; }; + 1AF8F5001FC108DE007845B3 /* BitalinoThread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = BitalinoThread.h; sourceTree = "<group>"; }; + 1AFD55011FC1C73500BDC5EC /* RapidMixThread.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = RapidMixThread.h; sourceTree = "<group>"; }; + 21080C6D8829F198543F568E /* maxiAtoms.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = maxiAtoms.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs/maxiAtoms.cpp; sourceTree = SOURCE_ROOT; }; + 283D3449127FCD4AE5F47F88 /* ofxBaseGui.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxBaseGui.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src/ofxBaseGui.cpp; sourceTree = SOURCE_ROOT; }; + 2E39787D52B2DB29CF1FCF66 /* IpEndpointName.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = IpEndpointName.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip/IpEndpointName.h; sourceTree = SOURCE_ROOT; }; + 300B4DCCFFECBD546568227A /* maxiGrains.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = maxiGrains.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs/maxiGrains.cpp; sourceTree = SOURCE_ROOT; }; + 333B161A45E42EF09ADEC7A5 /* OscReceivedElements.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = OscReceivedElements.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/osc/OscReceivedElements.cpp; sourceTree = SOURCE_ROOT; }; + 33C51958AA0CAE4F88D953DC /* ofxOsc.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOsc.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/src/ofxOsc.h; sourceTree = SOURCE_ROOT; }; + 3646FFD002EE9FED0DD367F3 /* ofxPanel.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxPanel.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src/ofxPanel.cpp; sourceTree = SOURCE_ROOT; }; + 3A6FBE64E557C85D306947E4 /* ofxBaseGui.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxBaseGui.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src/ofxBaseGui.h; sourceTree = SOURCE_ROOT; }; + 3B129EA9D541BE47A473BC06 /* maxiFFT.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = maxiFFT.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs/maxiFFT.h; sourceTree = SOURCE_ROOT; }; + 3F1F7648BBA70B28FE923560 /* sineTable.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = sineTable.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs/sineTable.h; sourceTree = SOURCE_ROOT; }; + 4169271F18AE49EFC953B0AB /* ofxLabel.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxLabel.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src/ofxLabel.h; sourceTree = SOURCE_ROOT; }; + 43AF2D57607DD0B4AF3A6183 /* fft.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = fft.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs/fft.h; sourceTree = SOURCE_ROOT; }; + 47DFCF539679C49445A74E64 /* OscTypes.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscTypes.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/osc/OscTypes.h; sourceTree = SOURCE_ROOT; }; + 4A2FCA86040F43BCB2C12BCA /* ofxButton.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxButton.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src/ofxButton.h; sourceTree = SOURCE_ROOT; }; + 5065E0436E391619A021DE76 /* NetworkingUtils.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = NetworkingUtils.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip/NetworkingUtils.h; sourceTree = SOURCE_ROOT; }; + 50B91A7EB2184FD67A06D044 /* maxiBark.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = maxiBark.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs/maxiBark.h; sourceTree = SOURCE_ROOT; }; + 54C5AF569662A8351667313E /* NetworkingUtils.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = NetworkingUtils.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip/posix/NetworkingUtils.cpp; sourceTree = SOURCE_ROOT; }; + 552D90E7024A93518E711979 /* IpEndpointName.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = IpEndpointName.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip/IpEndpointName.cpp; sourceTree = SOURCE_ROOT; }; + 57C2E0F28BA237CECA2DD2F3 /* stb_vorbis.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = stb_vorbis.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs/stb_vorbis.h; sourceTree = SOURCE_ROOT; }; + 5BA6903E0287C0B3CBF81989 /* ofxToggle.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxToggle.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src/ofxToggle.cpp; sourceTree = SOURCE_ROOT; }; + 5D3DC557A3FD0ADFC8D06276 /* ofxOscParameterSync.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscParameterSync.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/src/ofxOscParameterSync.h; sourceTree = SOURCE_ROOT; }; + 6107D0B5FEEE887645CC8673 /* OscReceivedElements.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscReceivedElements.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/osc/OscReceivedElements.h; sourceTree = SOURCE_ROOT; }; + 6D68865B98C85481FB07D746 /* ofxOscBundle.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscBundle.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/src/ofxOscBundle.h; sourceTree = SOURCE_ROOT; }; + 6D7D4C890B7E7E86CF67EDE9 /* maxiFFT.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = maxiFFT.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs/maxiFFT.cpp; sourceTree = SOURCE_ROOT; }; + 6EFE170390703388444A995C /* OscPrintReceivedElements.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = OscPrintReceivedElements.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/osc/OscPrintReceivedElements.cpp; sourceTree = SOURCE_ROOT; }; + 771343C29ADB1A34A5E3F2D7 /* OscOutboundPacketStream.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscOutboundPacketStream.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/osc/OscOutboundPacketStream.h; sourceTree = SOURCE_ROOT; }; + 7805756184CF7E3670EBA6B9 /* OscPacketListener.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscPacketListener.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/osc/OscPacketListener.h; sourceTree = SOURCE_ROOT; }; + 7FDED04B5307798C8725EDDE /* OscHostEndianness.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscHostEndianness.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/osc/OscHostEndianness.h; sourceTree = SOURCE_ROOT; }; + 86ECBAD17F7B1D927CB1931F /* ofxPanel.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxPanel.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src/ofxPanel.h; sourceTree = SOURCE_ROOT; }; + 8DC5D79A78655BF028FBDE30 /* stb_vorbis.c */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.c; fileEncoding = 30; name = stb_vorbis.c; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs/stb_vorbis.c; sourceTree = SOURCE_ROOT; }; + 8F5FFC9C08A87AE48EA5E66C /* ofxOscReceiver.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxOscReceiver.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/src/ofxOscReceiver.cpp; sourceTree = SOURCE_ROOT; }; + 951C54CCCD72A0FFC773653F /* ofxSlider.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxSlider.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src/ofxSlider.cpp; sourceTree = SOURCE_ROOT; }; + A93736CA5EE7029E798A22AA /* ofxMaxim.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxMaxim.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/src/ofxMaxim.h; sourceTree = SOURCE_ROOT; }; + AA63660625DF3459DBD8486C /* OscPrintReceivedElements.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscPrintReceivedElements.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/osc/OscPrintReceivedElements.h; sourceTree = SOURCE_ROOT; }; + AEC6D21EB03AE1B72B35D0D9 /* ofxOscSender.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxOscSender.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/src/ofxOscSender.cpp; sourceTree = SOURCE_ROOT; }; + B86B7BDD7ADBAB228DB14744 /* ofxSliderGroup.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxSliderGroup.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src/ofxSliderGroup.h; sourceTree = SOURCE_ROOT; }; + C00AD5B8094B3634B06C5926 /* ofxToggle.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxToggle.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src/ofxToggle.h; sourceTree = SOURCE_ROOT; }; + C590EAED7C04204257DE2745 /* maxiMFCC.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = maxiMFCC.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs/maxiMFCC.cpp; sourceTree = SOURCE_ROOT; }; + C85AEC4A09E7407508E41723 /* ofxLabel.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxLabel.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src/ofxLabel.cpp; sourceTree = SOURCE_ROOT; }; + D39514497AFC9A4AAE903696 /* ofxOscMessage.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxOscMessage.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/src/ofxOscMessage.cpp; sourceTree = SOURCE_ROOT; }; + D6A1246E09C6B8CDA06EEC4F /* OscException.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = OscException.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/osc/OscException.h; sourceTree = SOURCE_ROOT; }; + D9460E080AF572AB4FE572C2 /* ofxGui.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxGui.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src/ofxGui.h; sourceTree = SOURCE_ROOT; }; + DC8DE4E32DB58B5849214F05 /* fft.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = fft.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs/fft.cpp; sourceTree = SOURCE_ROOT; }; + DCB987CA7BF7FB3A39EF3514 /* ofxOscParameterSync.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxOscParameterSync.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/src/ofxOscParameterSync.cpp; sourceTree = SOURCE_ROOT; }; + DD3E35208D66CC444D100690 /* UdpSocket.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = UdpSocket.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip/UdpSocket.h; sourceTree = SOURCE_ROOT; }; + DE6FBA724BBE5D9249AC3BCF /* ofxOscArg.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscArg.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/src/ofxOscArg.h; sourceTree = SOURCE_ROOT; }; + E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.pb-project"; name = openFrameworksLib.xcodeproj; path = ../../../../../Documents/of_v0.9.8_osx_release/libs/openFrameworksCompiled/project/osx/openFrameworksLib.xcodeproj; sourceTree = SOURCE_ROOT; }; + E4B69B5B0A3A1756003C02F2 /* BitalinoDebug.app */ = {isa = PBXFileReference; explicitFileType = wrapper.application; includeInIndex = 0; path = BitalinoDebug.app; sourceTree = BUILT_PRODUCTS_DIR; }; + E4B69E1D0A3A1BDC003C02F2 /* main.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = main.cpp; path = src/main.cpp; sourceTree = SOURCE_ROOT; }; + E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofApp.cpp; path = src/ofApp.cpp; sourceTree = SOURCE_ROOT; }; + E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ofApp.h; path = src/ofApp.h; sourceTree = SOURCE_ROOT; }; + E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = text.plist.xml; path = "openFrameworks-Info.plist"; sourceTree = "<group>"; }; + E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; name = CoreOF.xcconfig; path = ../../../../../Documents/of_v0.9.8_osx_release/libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig; sourceTree = SOURCE_ROOT; }; + E4EB6923138AFD0F00A09F29 /* Project.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = Project.xcconfig; sourceTree = "<group>"; }; + E661ACAA5BEC5B96FD2F6532 /* ofxSliderGroup.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxSliderGroup.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src/ofxSliderGroup.cpp; sourceTree = SOURCE_ROOT; }; + E76982C6091099847AF4A689 /* ofxButton.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = ofxButton.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src/ofxButton.cpp; sourceTree = SOURCE_ROOT; }; + E79D78A192005C0D7FDA98C0 /* maxiBark.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = maxiBark.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs/maxiBark.cpp; sourceTree = SOURCE_ROOT; }; + E808847ECDCE62ABFF8D5E4D /* maxiGrains.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = maxiGrains.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs/maxiGrains.h; sourceTree = SOURCE_ROOT; }; + E87C4F253FACA6BBF714AD99 /* OscTypes.cpp */ = {isa = PBXFileReference; explicitFileType = sourcecode.cpp.cpp; fileEncoding = 30; name = OscTypes.cpp; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/osc/OscTypes.cpp; sourceTree = SOURCE_ROOT; }; + EB00468633B458B3AF898FAC /* maxiAtoms.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = maxiAtoms.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs/maxiAtoms.h; sourceTree = SOURCE_ROOT; }; + F0448463C9530F4935705C48 /* MessageMappingOscPacketListener.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = MessageMappingOscPacketListener.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/osc/MessageMappingOscPacketListener.h; sourceTree = SOURCE_ROOT; }; + F0DBD3DF50BD6761963D69B6 /* ofxOscMessage.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscMessage.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/src/ofxOscMessage.h; sourceTree = SOURCE_ROOT; }; + F4750E6716D760CCBF1143CF /* ofxGuiGroup.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxGuiGroup.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src/ofxGuiGroup.h; sourceTree = SOURCE_ROOT; }; + F890C575BD59092852BD3CB2 /* ofxSlider.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxSlider.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src/ofxSlider.h; sourceTree = SOURCE_ROOT; }; + FC08FD52F6639D7D5EC893D6 /* maxiMFCC.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = maxiMFCC.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs/maxiMFCC.h; sourceTree = SOURCE_ROOT; }; + FCCD68796F8A249EA9FEDD44 /* ofxOscSender.h */ = {isa = PBXFileReference; explicitFileType = sourcecode.c.h; fileEncoding = 30; name = ofxOscSender.h; path = ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/src/ofxOscSender.h; sourceTree = SOURCE_ROOT; }; +/* End PBXFileReference section */ + +/* Begin PBXFrameworksBuildPhase section */ + E4B69B590A3A1756003C02F2 /* Frameworks */ = { + isa = PBXFrameworksBuildPhase; + buildActionMask = 2147483647; + files = ( + E4328149138ABC9F0047C5CB /* openFrameworksDebug.a in Frameworks */, + 1A04D8D81FC38F3700D725DC /* libRAPID-MIX_API.a in Frameworks */, + 1A732FC91FC30566001E730B /* libpipo.a in Frameworks */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXFrameworksBuildPhase section */ + +/* Begin PBXGroup section */ + 1A002A861FC303F700E02B93 /* Rapid-Mix */ = { + isa = PBXGroup; + children = ( + 1A73293F1FC30563001E730B /* dependencies */, + 1A0030961FC3043900E02B93 /* rapid-mix */, + ); + name = "Rapid-Mix"; + sourceTree = "<group>"; + }; + 1A0030961FC3043900E02B93 /* rapid-mix */ = { + isa = PBXGroup; + children = ( + 1A0030971FC3043900E02B93 /* LICENSE */, + 1A0030981FC3043900E02B93 /* machineLearning */, + 1A0030A31FC3043900E02B93 /* rapidmix.h */, + 1A0030A41FC3043900E02B93 /* signalProcessing */, + ); + path = "rapid-mix"; + sourceTree = "<group>"; + }; + 1A0030981FC3043900E02B93 /* machineLearning */ = { + isa = PBXGroup; + children = ( + 1A0030991FC3043900E02B93 /* machineLearning.cpp */, + 1A00309A1FC3043900E02B93 /* machineLearning.h */, + 1A00309B1FC3043900E02B93 /* rapidGVF */, + 1A00309E1FC3043900E02B93 /* rapidXMM */, + 1A0030A11FC3043900E02B93 /* trainingData.cpp */, + 1A0030A21FC3043900E02B93 /* trainingData.h */, + ); + path = machineLearning; + sourceTree = "<group>"; + }; + 1A00309B1FC3043900E02B93 /* rapidGVF */ = { + isa = PBXGroup; + children = ( + 1A00309C1FC3043900E02B93 /* rapidGVF.cpp */, + 1A00309D1FC3043900E02B93 /* rapidGVF.h */, + ); + path = rapidGVF; + sourceTree = "<group>"; + }; + 1A00309E1FC3043900E02B93 /* rapidXMM */ = { + isa = PBXGroup; + children = ( + 1A00309F1FC3043900E02B93 /* rapidXMM.cpp */, + 1A0030A01FC3043900E02B93 /* rapidXMM.h */, + ); + path = rapidXMM; + sourceTree = "<group>"; + }; + 1A0030A41FC3043900E02B93 /* signalProcessing */ = { + isa = PBXGroup; + children = ( + 1A0030A51FC3043900E02B93 /* rapidPiPoTools */, + 1A0030A91FC3043900E02B93 /* signalProcessing.h */, + ); + path = signalProcessing; + sourceTree = "<group>"; + }; + 1A0030A51FC3043900E02B93 /* rapidPiPoTools */ = { + isa = PBXGroup; + children = ( + 1A0030A61FC3043900E02B93 /* rapidPiPoHost.cpp */, + 1A0030A71FC3043900E02B93 /* rapidPiPoHost.h */, + 1A0030A81FC3043900E02B93 /* rapidPiPoTools.h */, + ); + path = rapidPiPoTools; + sourceTree = "<group>"; + }; + 1A73293F1FC30563001E730B /* dependencies */ = { + isa = PBXGroup; + children = ( + 1A7329401FC30563001E730B /* GVF */, + 1A732AFC1FC30563001E730B /* pipo */, + 1A732BAC1FC30563001E730B /* RapidLib */, + 1A732EC01FC30565001E730B /* third_party */, + 1A732ECC1FC30565001E730B /* xmm */, + ); + path = dependencies; + sourceTree = "<group>"; + }; + 1A7329401FC30563001E730B /* GVF */ = { + isa = PBXGroup; + children = ( + 1A7329411FC30563001E730B /* GVF.cpp */, + 1A7329421FC30563001E730B /* GVF.h */, + 1A7329431FC30563001E730B /* GVFGesture.h */, + 1A7329441FC30563001E730B /* GVFUtils.h */, + 1A7329451FC30563001E730B /* LICENSE */, + ); + path = GVF; + sourceTree = "<group>"; + }; + 1A732AFC1FC30563001E730B /* pipo */ = { + isa = PBXGroup; + children = ( + 1A732AFD1FC30563001E730B /* .gitignore */, + 1A732AFE1FC30563001E730B /* bin */, + 1A732B301FC30563001E730B /* README.md */, + 1A732B311FC30563001E730B /* src */, + ); + path = pipo; + sourceTree = "<group>"; + }; + 1A732AFE1FC30563001E730B /* bin */ = { + isa = PBXGroup; + children = ( + 1A732AFF1FC30563001E730B /* osx */, + ); + path = bin; + sourceTree = "<group>"; + }; + 1A732AFF1FC30563001E730B /* osx */ = { + isa = PBXGroup; + children = ( + 1A732B001FC30563001E730B /* libpipo.a */, + ); + path = osx; + sourceTree = "<group>"; + }; + 1A732B311FC30563001E730B /* src */ = { + isa = PBXGroup; + children = ( + 1A732B321FC30563001E730B /* dependencies */, + 1A732B761FC30563001E730B /* host */, + 1A732B7D1FC30563001E730B /* include */, + 1A732B831FC30563001E730B /* modules */, + ); + path = src; + sourceTree = "<group>"; + }; + 1A732B321FC30563001E730B /* dependencies */ = { + isa = PBXGroup; + children = ( + 1A732B331FC30563001E730B /* bayesfilter */, + 1A732B381FC30563001E730B /* finitedifferences */, + 1A732B3B1FC30563001E730B /* lpcformants */, + 1A732B401FC30563001E730B /* rta */, + ); + path = dependencies; + sourceTree = "<group>"; + }; + 1A732B331FC30563001E730B /* bayesfilter */ = { + isa = PBXGroup; + children = ( + 1A732B341FC30563001E730B /* BayesianFilter.cpp */, + 1A732B351FC30563001E730B /* BayesianFilter.h */, + 1A732B361FC30563001E730B /* filter_utilities.cpp */, + 1A732B371FC30563001E730B /* filter_utilities.h */, + ); + path = bayesfilter; + sourceTree = "<group>"; + }; + 1A732B381FC30563001E730B /* finitedifferences */ = { + isa = PBXGroup; + children = ( + 1A732B391FC30563001E730B /* finitedifferences.c */, + 1A732B3A1FC30563001E730B /* finitedifferences.h */, + ); + path = finitedifferences; + sourceTree = "<group>"; + }; + 1A732B3B1FC30563001E730B /* lpcformants */ = { + isa = PBXGroup; + children = ( + 1A732B3C1FC30563001E730B /* bbpr.cpp */, + 1A732B3D1FC30563001E730B /* bbpr.h */, + 1A732B3E1FC30563001E730B /* rpoly.cpp */, + 1A732B3F1FC30563001E730B /* rpoly.h */, + ); + path = lpcformants; + sourceTree = "<group>"; + }; + 1A732B401FC30563001E730B /* rta */ = { + isa = PBXGroup; + children = ( + 1A732B411FC30563001E730B /* common */, + 1A732B4F1FC30563001E730B /* misc */, + 1A732B751FC30563001E730B /* rta_configuration.h */, + ); + path = rta; + sourceTree = "<group>"; + }; + 1A732B411FC30563001E730B /* common */ = { + isa = PBXGroup; + children = ( + 1A732B421FC30563001E730B /* rta.h */, + 1A732B431FC30563001E730B /* rta_bpf.c */, + 1A732B441FC30563001E730B /* rta_bpf.h */, + 1A732B451FC30563001E730B /* rta_complex.h */, + 1A732B461FC30563001E730B /* rta_float.h */, + 1A732B471FC30563001E730B /* rta_int.c */, + 1A732B481FC30563001E730B /* rta_int.h */, + 1A732B491FC30563001E730B /* rta_math.h */, + 1A732B4A1FC30563001E730B /* rta_stdio.h */, + 1A732B4B1FC30563001E730B /* rta_stdlib.h */, + 1A732B4C1FC30563001E730B /* rta_types.h */, + 1A732B4D1FC30563001E730B /* rta_util.c */, + 1A732B4E1FC30563001E730B /* rta_util.h */, + ); + path = common; + sourceTree = "<group>"; + }; + 1A732B4F1FC30563001E730B /* misc */ = { + isa = PBXGroup; + children = ( + 1A732B501FC30563001E730B /* rta_bands.c */, + 1A732B511FC30563001E730B /* rta_bands.h */, + 1A732B521FC30563001E730B /* rta_biquad.c */, + 1A732B531FC30563001E730B /* rta_biquad.h */, + 1A732B541FC30563001E730B /* rta_correlation.c */, + 1A732B551FC30563001E730B /* rta_correlation.h */, + 1A732B561FC30563001E730B /* rta_cubic.c */, + 1A732B571FC30563001E730B /* rta_cubic.h */, + 1A732B581FC30563001E730B /* rta_dct.c */, + 1A732B591FC30563001E730B /* rta_dct.h */, + 1A732B5A1FC30563001E730B /* rta_delta.c */, + 1A732B5B1FC30563001E730B /* rta_delta.h */, + 1A732B5C1FC30563001E730B /* rta_fft.c */, + 1A732B5D1FC30563001E730B /* rta_fft.h */, + 1A732B5E1FC30563001E730B /* rta_filter.h */, + 1A732B5F1FC30563001E730B /* rta_lifter.c */, + 1A732B601FC30563001E730B /* rta_lifter.h */, + 1A732B611FC30563001E730B /* rta_lpc.c */, + 1A732B621FC30563001E730B /* rta_lpc.h */, + 1A732B631FC30563001E730B /* rta_mean_variance.c */, + 1A732B641FC30563001E730B /* rta_mean_variance.h */, + 1A732B651FC30563001E730B /* rta_mel.c */, + 1A732B661FC30563001E730B /* rta_mel.h */, + 1A732B671FC30563001E730B /* rta_moments.c */, + 1A732B681FC30563001E730B /* rta_moments.h */, + 1A732B691FC30563001E730B /* rta_onepole.c */, + 1A732B6A1FC30563001E730B /* rta_onepole.h */, + 1A732B6B1FC30563001E730B /* rta_preemphasis.c */, + 1A732B6C1FC30563001E730B /* rta_preemphasis.h */, + 1A732B6D1FC30563001E730B /* rta_resample.c */, + 1A732B6E1FC30563001E730B /* rta_resample.h */, + 1A732B6F1FC30563001E730B /* rta_selection.c */, + 1A732B701FC30563001E730B /* rta_selection.h */, + 1A732B711FC30563001E730B /* rta_svd.c */, + 1A732B721FC30563001E730B /* rta_svd.h */, + 1A732B731FC30563001E730B /* rta_window.c */, + 1A732B741FC30563001E730B /* rta_window.h */, + ); + path = misc; + sourceTree = "<group>"; + }; + 1A732B761FC30563001E730B /* host */ = { + isa = PBXGroup; + children = ( + 1A732B771FC30563001E730B /* mimo_host.h */, + 1A732B781FC30563001E730B /* PiPoCollection.cpp */, + 1A732B791FC30563001E730B /* PiPoCollection.h */, + 1A732B7A1FC30563001E730B /* PiPoGraph.h */, + 1A732B7B1FC30563001E730B /* PiPoHost.h */, + 1A732B7C1FC30563001E730B /* PiPoModule.h */, + ); + path = host; + sourceTree = "<group>"; + }; + 1A732B7D1FC30563001E730B /* include */ = { + isa = PBXGroup; + children = ( + 1A732B7E1FC30563001E730B /* mimo.h */, + 1A732B7F1FC30563001E730B /* PiPo.h */, + 1A732B801FC30563001E730B /* PiPoParallel.h */, + 1A732B811FC30563001E730B /* PiPoSequence.h */, + 1A732B821FC30563001E730B /* RingBuffer.h */, + ); + path = include; + sourceTree = "<group>"; + }; + 1A732B831FC30563001E730B /* modules */ = { + isa = PBXGroup; + children = ( + 1A732B841FC30563001E730B /* mimo */, + 1A732B861FC30563001E730B /* PiPoBands.h */, + 1A732B871FC30563001E730B /* PiPoBayesFilter.h */, + 1A732B881FC30563001E730B /* PiPoBiquad.h */, + 1A732B891FC30563001E730B /* PiPoChop.h */, + 1A732B8A1FC30563001E730B /* PiPoConst.h */, + 1A732B8B1FC30563001E730B /* PiPoDct.h */, + 1A732B8C1FC30563001E730B /* PiPoDelta.h */, + 1A732B8D1FC30563001E730B /* PiPoFft.h */, + 1A732B8E1FC30563001E730B /* PiPoFiniteDif.h */, + 1A732B8F1FC30563001E730B /* PiPoGate.h */, + 1A732B901FC30563001E730B /* PiPoLpc.h */, + 1A732B911FC30563001E730B /* PiPoLpcFormants.h */, + 1A732B921FC30563001E730B /* PiPoMeanStddev.h */, + 1A732B931FC30563001E730B /* PiPoMedian.h */, + 1A732B941FC30563001E730B /* PiPoMel.h */, + 1A732B951FC30563001E730B /* PiPoMfcc.h */, + 1A732B961FC30563001E730B /* PiPoMinMax.h */, + 1A732B971FC30563001E730B /* PiPoMoments.h */, + 1A732B981FC30563001E730B /* PiPoMvavrg.h */, + 1A732B991FC30563001E730B /* PiPoOnseg.h */, + 1A732B9A1FC30563001E730B /* PiPoPeaks.h */, + 1A732B9B1FC30563001E730B /* PiPoRms.h */, + 1A732B9C1FC30563001E730B /* PiPoScale.h */, + 1A732B9D1FC30563001E730B /* PiPoSelect.h */, + 1A732B9E1FC30563001E730B /* PiPoSlice.h */, + 1A732B9F1FC30563001E730B /* PiPoSum.h */, + 1A732BA01FC30563001E730B /* TempMod.h */, + ); + path = modules; + sourceTree = "<group>"; + }; + 1A732B841FC30563001E730B /* mimo */ = { + isa = PBXGroup; + children = ( + 1A732B851FC30563001E730B /* mimo_stats.h */, + ); + path = mimo; + sourceTree = "<group>"; + }; + 1A732BAC1FC30563001E730B /* RapidLib */ = { + isa = PBXGroup; + children = ( + 1A732BAF1FC30563001E730B /* dependencies */, + 1A732E861FC30565001E730B /* src */, + ); + path = RapidLib; + sourceTree = "<group>"; + }; + 1A732BAF1FC30563001E730B /* dependencies */ = { + isa = PBXGroup; + children = ( + 1A732BB01FC30563001E730B /* json */, + 1A732BB31FC30563001E730B /* jsoncpp.cpp */, + 1A732BB41FC30563001E730B /* libsvm */, + ); + path = dependencies; + sourceTree = "<group>"; + }; + 1A732BB01FC30563001E730B /* json */ = { + isa = PBXGroup; + children = ( + 1A732BB11FC30563001E730B /* json-forwards.h */, + 1A732BB21FC30563001E730B /* json.h */, + ); + path = json; + sourceTree = "<group>"; + }; + 1A732BB41FC30563001E730B /* libsvm */ = { + isa = PBXGroup; + children = ( + 1A732BB51FC30563001E730B /* libsvm.cpp */, + 1A732BB61FC30563001E730B /* libsvm.h */, + ); + path = libsvm; + sourceTree = "<group>"; + }; + 1A732E861FC30565001E730B /* src */ = { + isa = PBXGroup; + children = ( + 1A732E871FC30565001E730B /* baseModel.h */, + 1A732E881FC30565001E730B /* classification.cpp */, + 1A732E891FC30565001E730B /* classification.h */, + 1A732E8A1FC30565001E730B /* dtw.cpp */, + 1A732E8B1FC30565001E730B /* dtw.h */, + 1A732E8C1FC30565001E730B /* emscripten */, + 1A732E971FC30565001E730B /* fastDTW.cpp */, + 1A732E981FC30565001E730B /* fastDTW.h */, + 1A732E991FC30565001E730B /* knnClassification.cpp */, + 1A732E9A1FC30565001E730B /* knnClassification.h */, + 1A732E9B1FC30565001E730B /* modelSet.cpp */, + 1A732E9C1FC30565001E730B /* modelSet.h */, + 1A732E9D1FC30565001E730B /* neuralNetwork.cpp */, + 1A732E9E1FC30565001E730B /* neuralNetwork.h */, + 1A732E9F1FC30565001E730B /* rapidStream.cpp */, + 1A732EA01FC30565001E730B /* rapidStream.h */, + 1A732EA11FC30565001E730B /* regression.cpp */, + 1A732EA21FC30565001E730B /* regression.h */, + 1A732EA31FC30565001E730B /* searchWindow.cpp */, + 1A732EA41FC30565001E730B /* searchWindow.h */, + 1A732EA51FC30565001E730B /* seriesClassification.cpp */, + 1A732EA61FC30565001E730B /* seriesClassification.h */, + 1A732EA71FC30565001E730B /* svmClassification.cpp */, + 1A732EA81FC30565001E730B /* svmClassification.h */, + 1A732EA91FC30565001E730B /* trainingExample.h */, + 1A732EAA1FC30565001E730B /* warpPath.cpp */, + 1A732EAB1FC30565001E730B /* warpPath.h */, + ); + path = src; + sourceTree = "<group>"; + }; + 1A732E8C1FC30565001E730B /* emscripten */ = { + isa = PBXGroup; + children = ( + 1A732E8D1FC30565001E730B /* classificationEmbindings.h */, + 1A732E8E1FC30565001E730B /* knnEmbindings.h */, + 1A732E8F1FC30565001E730B /* modelSetEmbindings.h */, + 1A732E901FC30565001E730B /* nnEmbindings.h */, + 1A732E911FC30565001E730B /* nodeEnv.js */, + 1A732E921FC30565001E730B /* rapidLibPost.js */, + 1A732E931FC30565001E730B /* rapidStreamEmbindings.h */, + 1A732E941FC30565001E730B /* regressionEmbindings.h */, + 1A732E951FC30565001E730B /* seriesClassificationEmbindings.h */, + 1A732E961FC30565001E730B /* svmEmbindings.h */, + ); + path = emscripten; + sourceTree = "<group>"; + }; + 1A732EC01FC30565001E730B /* third_party */ = { + isa = PBXGroup; + children = ( + 1A732EC11FC30565001E730B /* catch */, + 1A732EC41FC30565001E730B /* json */, + 1A732EC71FC30565001E730B /* jsoncpp.cpp */, + 1A732EC81FC30565001E730B /* libsvm */, + ); + path = third_party; + sourceTree = "<group>"; + }; + 1A732EC11FC30565001E730B /* catch */ = { + isa = PBXGroup; + children = ( + 1A732EC21FC30565001E730B /* catch.hpp */, + 1A732EC31FC30565001E730B /* LICENSE_1_0.txt */, + ); + path = catch; + sourceTree = "<group>"; + }; + 1A732EC41FC30565001E730B /* json */ = { + isa = PBXGroup; + children = ( + 1A732EC51FC30565001E730B /* json-forwards.h */, + 1A732EC61FC30565001E730B /* json.h */, + ); + path = json; + sourceTree = "<group>"; + }; + 1A732EC81FC30565001E730B /* libsvm */ = { + isa = PBXGroup; + children = ( + 1A732EC91FC30565001E730B /* libsvm.cpp */, + 1A732ECA1FC30565001E730B /* libsvm.h */, + 1A732ECB1FC30565001E730B /* LICENSE */, + ); + path = libsvm; + sourceTree = "<group>"; + }; + 1A732ECC1FC30565001E730B /* xmm */ = { + isa = PBXGroup; + children = ( + 1A732ECD1FC30565001E730B /* .gitignore */, + 1A732ECE1FC30565001E730B /* CMakeLists.txt */, + 1A732ECF1FC30565001E730B /* dependencies */, + 1A732EE51FC30565001E730B /* doc */, + 1A732EF91FC30565001E730B /* LICENSE */, + 1A732F121FC30565001E730B /* readme.md */, + 1A732F131FC30565001E730B /* src */, + ); + path = xmm; + sourceTree = "<group>"; + }; + 1A732ECF1FC30565001E730B /* dependencies */ = { + isa = PBXGroup; + children = ( + 1A732ED01FC30565001E730B /* catch */, + 1A732ED21FC30565001E730B /* jsoncpp */, + ); + path = dependencies; + sourceTree = "<group>"; + }; + 1A732ED01FC30565001E730B /* catch */ = { + isa = PBXGroup; + children = ( + 1A732ED11FC30565001E730B /* catch.hpp */, + ); + path = catch; + sourceTree = "<group>"; + }; + 1A732ED21FC30565001E730B /* jsoncpp */ = { + isa = PBXGroup; + children = ( + 1A732ED31FC30565001E730B /* include */, + 1A732EDE1FC30565001E730B /* LICENSE */, + 1A732EDF1FC30565001E730B /* src */, + ); + path = jsoncpp; + sourceTree = "<group>"; + }; + 1A732ED31FC30565001E730B /* include */ = { + isa = PBXGroup; + children = ( + 1A732ED41FC30565001E730B /* assertions.h */, + 1A732ED51FC30565001E730B /* autolink.h */, + 1A732ED61FC30565001E730B /* config.h */, + 1A732ED71FC30565001E730B /* forwards.h */, + 1A732ED81FC30565001E730B /* json-features.h */, + 1A732ED91FC30565001E730B /* json.h */, + 1A732EDA1FC30565001E730B /* reader.h */, + 1A732EDB1FC30565001E730B /* value.h */, + 1A732EDC1FC30565001E730B /* version.h */, + 1A732EDD1FC30565001E730B /* writer.h */, + ); + path = include; + sourceTree = "<group>"; + }; + 1A732EDF1FC30565001E730B /* src */ = { + isa = PBXGroup; + children = ( + 1A732EE01FC30565001E730B /* json_reader.cpp */, + 1A732EE11FC30565001E730B /* json_tool.h */, + 1A732EE21FC30565001E730B /* json_value.cpp */, + 1A732EE31FC30565001E730B /* json_valueiterator.inl */, + 1A732EE41FC30565001E730B /* json_writer.cpp */, + ); + path = src; + sourceTree = "<group>"; + }; + 1A732EE51FC30565001E730B /* doc */ = { + isa = PBXGroup; + children = ( + 1A732EE61FC30565001E730B /* doc-misc */, + 1A732EF21FC30565001E730B /* Doxyfile */, + 1A732EF31FC30565001E730B /* Doxyfile-dot */, + ); + path = doc; + sourceTree = "<group>"; + }; + 1A732EE61FC30565001E730B /* doc-misc */ = { + isa = PBXGroup; + children = ( + 1A732EE71FC30565001E730B /* footer.html */, + 1A732EE81FC30565001E730B /* header.html */, + 1A732EE91FC30565001E730B /* jdoxygen.css */, + 1A732EEA1FC30565001E730B /* jtabs.css */, + 1A732EEB1FC30565001E730B /* python_example.py */, + 1A732EEC1FC30565001E730B /* QuickStart_Python.html */, + 1A732EED1FC30565001E730B /* xmm_architecture.jpg */, + 1A732EEE1FC30565001E730B /* xmm_featured.jpg */, + 1A732EEF1FC30565001E730B /* xmm_featured_.jpg */, + 1A732EF01FC30565001E730B /* xmm_models.jpg */, + 1A732EF11FC30565001E730B /* XmmDoxygenLayout.xml */, + ); + path = "doc-misc"; + sourceTree = "<group>"; + }; + 1A732F131FC30565001E730B /* src */ = { + isa = PBXGroup; + children = ( + 1A732F141FC30565001E730B /* core */, + 1A732F2E1FC30565001E730B /* models */, + 1A732F441FC30565001E730B /* xmm.h */, + ); + path = src; + sourceTree = "<group>"; + }; + 1A732F141FC30565001E730B /* core */ = { + isa = PBXGroup; + children = ( + 1A732F151FC30565001E730B /* common */, + 1A732F1D1FC30565001E730B /* distributions */, + 1A732F201FC30565001E730B /* model */, + 1A732F291FC30565001E730B /* trainingset */, + ); + path = core; + sourceTree = "<group>"; + }; + 1A732F151FC30565001E730B /* common */ = { + isa = PBXGroup; + children = ( + 1A732F161FC30565001E730B /* xmmAttribute.cpp */, + 1A732F171FC30565001E730B /* xmmAttribute.hpp */, + 1A732F181FC30565001E730B /* xmmCircularbuffer.hpp */, + 1A732F191FC30565001E730B /* xmmEvents.hpp */, + 1A732F1A1FC30565001E730B /* xmmJson.cpp */, + 1A732F1B1FC30565001E730B /* xmmJson.hpp */, + 1A732F1C1FC30565001E730B /* xmmMatrix.hpp */, + ); + path = common; + sourceTree = "<group>"; + }; + 1A732F1D1FC30565001E730B /* distributions */ = { + isa = PBXGroup; + children = ( + 1A732F1E1FC30565001E730B /* xmmGaussianDistribution.cpp */, + 1A732F1F1FC30565001E730B /* xmmGaussianDistribution.hpp */, + ); + path = distributions; + sourceTree = "<group>"; + }; + 1A732F201FC30565001E730B /* model */ = { + isa = PBXGroup; + children = ( + 1A732F211FC30565001E730B /* xmmModel.hpp */, + 1A732F221FC30565001E730B /* xmmModelConfiguration.hpp */, + 1A732F231FC30565001E730B /* xmmModelParameters.hpp */, + 1A732F241FC30565001E730B /* xmmModelResults.hpp */, + 1A732F251FC30565001E730B /* xmmModelSharedParameters.cpp */, + 1A732F261FC30565001E730B /* xmmModelSharedParameters.hpp */, + 1A732F271FC30565001E730B /* xmmModelSingleClass.cpp */, + 1A732F281FC30565001E730B /* xmmModelSingleClass.hpp */, + ); + path = model; + sourceTree = "<group>"; + }; + 1A732F291FC30565001E730B /* trainingset */ = { + isa = PBXGroup; + children = ( + 1A732F2A1FC30565001E730B /* xmmPhrase.cpp */, + 1A732F2B1FC30565001E730B /* xmmPhrase.hpp */, + 1A732F2C1FC30565001E730B /* xmmTrainingSet.cpp */, + 1A732F2D1FC30565001E730B /* xmmTrainingSet.hpp */, + ); + path = trainingset; + sourceTree = "<group>"; + }; + 1A732F2E1FC30565001E730B /* models */ = { + isa = PBXGroup; + children = ( + 1A732F2F1FC30565001E730B /* gmm */, + 1A732F361FC30565001E730B /* hmm */, + 1A732F3E1FC30565001E730B /* kmeans */, + ); + path = models; + sourceTree = "<group>"; + }; + 1A732F2F1FC30565001E730B /* gmm */ = { + isa = PBXGroup; + children = ( + 1A732F301FC30565001E730B /* xmmGmm.cpp */, + 1A732F311FC30565001E730B /* xmmGmm.hpp */, + 1A732F321FC30565001E730B /* xmmGmmParameters.cpp */, + 1A732F331FC30565001E730B /* xmmGmmParameters.hpp */, + 1A732F341FC30565001E730B /* xmmGmmSingleClass.cpp */, + 1A732F351FC30565001E730B /* xmmGmmSingleClass.hpp */, + ); + path = gmm; + sourceTree = "<group>"; + }; + 1A732F361FC30565001E730B /* hmm */ = { + isa = PBXGroup; + children = ( + 1A732F371FC30565001E730B /* xmmHierarchicalHmm.cpp */, + 1A732F381FC30565001E730B /* xmmHierarchicalHmm.hpp */, + 1A732F391FC30565001E730B /* xmmHmmParameters.cpp */, + 1A732F3A1FC30565001E730B /* xmmHmmParameters.hpp */, + 1A732F3B1FC30565001E730B /* xmmHmmResults.hpp */, + 1A732F3C1FC30565001E730B /* xmmHmmSingleClass.cpp */, + 1A732F3D1FC30565001E730B /* xmmHmmSingleClass.hpp */, + ); + path = hmm; + sourceTree = "<group>"; + }; + 1A732F3E1FC30565001E730B /* kmeans */ = { + isa = PBXGroup; + children = ( + 1A732F3F1FC30565001E730B /* xmmKMeans.cpp */, + 1A732F401FC30565001E730B /* xmmKMeans.hpp */, + 1A732F411FC30565001E730B /* xmmKMeansParameters.cpp */, + 1A732F421FC30565001E730B /* xmmKMeansParameters.hpp */, + 1A732F431FC30565001E730B /* xmmKMeansResults.hpp */, + ); + path = kmeans; + sourceTree = "<group>"; + }; + 1AF8F4F51FBFBA68007845B3 /* Bitalino */ = { + isa = PBXGroup; + children = ( + 1AF8F4F31FBFBA56007845B3 /* bitalino.h */, + 1AF8F4F21FBFBA56007845B3 /* bitalino.cpp */, + 1AF8F4FF1FC106D2007845B3 /* ThreadedProcess.h */, + 1AF8F5001FC108DE007845B3 /* BitalinoThread.h */, + 1AFD55011FC1C73500BDC5EC /* RapidMixThread.h */, + 1AF8F4FD1FC0D5C6007845B3 /* RingBuffer.hpp */, + 1A04D8C21FC31C0000D725DC /* RapidBitalino.h */, + 1A04D8C31FC31D0E00D725DC /* RapidBitalino.cpp */, + ); + name = Bitalino; + sourceTree = "<group>"; + }; + 30CB364908817057B430D528 /* osc */ = { + isa = PBXGroup; + children = ( + F0448463C9530F4935705C48 /* MessageMappingOscPacketListener.h */, + D6A1246E09C6B8CDA06EEC4F /* OscException.h */, + 7FDED04B5307798C8725EDDE /* OscHostEndianness.h */, + 16F2E6A76B43CC86E0875826 /* OscOutboundPacketStream.cpp */, + 771343C29ADB1A34A5E3F2D7 /* OscOutboundPacketStream.h */, + 7805756184CF7E3670EBA6B9 /* OscPacketListener.h */, + 6EFE170390703388444A995C /* OscPrintReceivedElements.cpp */, + AA63660625DF3459DBD8486C /* OscPrintReceivedElements.h */, + 333B161A45E42EF09ADEC7A5 /* OscReceivedElements.cpp */, + 6107D0B5FEEE887645CC8673 /* OscReceivedElements.h */, + E87C4F253FACA6BBF714AD99 /* OscTypes.cpp */, + 47DFCF539679C49445A74E64 /* OscTypes.h */, + ); + name = osc; + sourceTree = "<group>"; + }; + 38871A5825686AE018EC2BF0 /* libs */ = { + isa = PBXGroup; + children = ( + 86D2677079A3AF4A5A88E29A /* oscpack */, + ); + name = libs; + sourceTree = "<group>"; + }; + 480A780D8D0308AE4A368801 /* ofxGui */ = { + isa = PBXGroup; + children = ( + A763ED608B35AE3310251DEE /* src */, + ); + name = ofxGui; + sourceTree = "<group>"; + }; + 4ACC32F17B7623DA048865D1 /* libs */ = { + isa = PBXGroup; + children = ( + DC8DE4E32DB58B5849214F05 /* fft.cpp */, + 43AF2D57607DD0B4AF3A6183 /* fft.h */, + 21080C6D8829F198543F568E /* maxiAtoms.cpp */, + EB00468633B458B3AF898FAC /* maxiAtoms.h */, + E79D78A192005C0D7FDA98C0 /* maxiBark.cpp */, + 50B91A7EB2184FD67A06D044 /* maxiBark.h */, + 6D7D4C890B7E7E86CF67EDE9 /* maxiFFT.cpp */, + 3B129EA9D541BE47A473BC06 /* maxiFFT.h */, + 300B4DCCFFECBD546568227A /* maxiGrains.cpp */, + E808847ECDCE62ABFF8D5E4D /* maxiGrains.h */, + C590EAED7C04204257DE2745 /* maxiMFCC.cpp */, + FC08FD52F6639D7D5EC893D6 /* maxiMFCC.h */, + 0FEC22E5BFC33148A93E906A /* maximilian.cpp */, + 008629CF1C50CAC655956424 /* maximilian.h */, + 3F1F7648BBA70B28FE923560 /* sineTable.h */, + 8DC5D79A78655BF028FBDE30 /* stb_vorbis.c */, + 57C2E0F28BA237CECA2DD2F3 /* stb_vorbis.h */, + ); + name = libs; + sourceTree = "<group>"; + }; + 6234D3BCE87D1C3BA2230F19 /* ofxMaxim */ = { + isa = PBXGroup; + children = ( + 8F6BFB59AB6D0A458C2F3C53 /* src */, + 4ACC32F17B7623DA048865D1 /* libs */, + ); + name = ofxMaxim; + sourceTree = "<group>"; + }; + 641362CA659FAFEE4E81001B /* posix */ = { + isa = PBXGroup; + children = ( + 54C5AF569662A8351667313E /* NetworkingUtils.cpp */, + 138DE2396984C9C63DA7FDD6 /* UdpSocket.cpp */, + ); + name = posix; + sourceTree = "<group>"; + }; + 6948EE371B920CB800B5AC1A /* local_addons */ = { + isa = PBXGroup; + children = ( + ); + name = local_addons; + sourceTree = "<group>"; + }; + 86D2677079A3AF4A5A88E29A /* oscpack */ = { + isa = PBXGroup; + children = ( + D27B2221A225CA523C019676 /* src */, + ); + name = oscpack; + sourceTree = "<group>"; + }; + 8F6BFB59AB6D0A458C2F3C53 /* src */ = { + isa = PBXGroup; + children = ( + A93736CA5EE7029E798A22AA /* ofxMaxim.h */, + ); + name = src; + sourceTree = "<group>"; + }; + A763ED608B35AE3310251DEE /* src */ = { + isa = PBXGroup; + children = ( + 283D3449127FCD4AE5F47F88 /* ofxBaseGui.cpp */, + 3A6FBE64E557C85D306947E4 /* ofxBaseGui.h */, + E76982C6091099847AF4A689 /* ofxButton.cpp */, + 4A2FCA86040F43BCB2C12BCA /* ofxButton.h */, + D9460E080AF572AB4FE572C2 /* ofxGui.h */, + 161030033DD4104A32E68FA8 /* ofxGuiGroup.cpp */, + F4750E6716D760CCBF1143CF /* ofxGuiGroup.h */, + C85AEC4A09E7407508E41723 /* ofxLabel.cpp */, + 4169271F18AE49EFC953B0AB /* ofxLabel.h */, + 3646FFD002EE9FED0DD367F3 /* ofxPanel.cpp */, + 86ECBAD17F7B1D927CB1931F /* ofxPanel.h */, + 951C54CCCD72A0FFC773653F /* ofxSlider.cpp */, + F890C575BD59092852BD3CB2 /* ofxSlider.h */, + E661ACAA5BEC5B96FD2F6532 /* ofxSliderGroup.cpp */, + B86B7BDD7ADBAB228DB14744 /* ofxSliderGroup.h */, + 5BA6903E0287C0B3CBF81989 /* ofxToggle.cpp */, + C00AD5B8094B3634B06C5926 /* ofxToggle.h */, + ); + name = src; + sourceTree = "<group>"; + }; + BB4B014C10F69532006C3DED /* addons */ = { + isa = PBXGroup; + children = ( + 480A780D8D0308AE4A368801 /* ofxGui */, + 6234D3BCE87D1C3BA2230F19 /* ofxMaxim */, + E6053AB7FEC63D5F83825B88 /* ofxOsc */, + ); + name = addons; + sourceTree = "<group>"; + }; + BD2F1A9F8D0C05EDB29122D0 /* src */ = { + isa = PBXGroup; + children = ( + 33C51958AA0CAE4F88D953DC /* ofxOsc.h */, + DE6FBA724BBE5D9249AC3BCF /* ofxOscArg.h */, + 1661CDE0EE45AC19EF11DA8E /* ofxOscBundle.cpp */, + 6D68865B98C85481FB07D746 /* ofxOscBundle.h */, + D39514497AFC9A4AAE903696 /* ofxOscMessage.cpp */, + F0DBD3DF50BD6761963D69B6 /* ofxOscMessage.h */, + DCB987CA7BF7FB3A39EF3514 /* ofxOscParameterSync.cpp */, + 5D3DC557A3FD0ADFC8D06276 /* ofxOscParameterSync.h */, + 8F5FFC9C08A87AE48EA5E66C /* ofxOscReceiver.cpp */, + 0D0D8D193987B4296465A319 /* ofxOscReceiver.h */, + AEC6D21EB03AE1B72B35D0D9 /* ofxOscSender.cpp */, + FCCD68796F8A249EA9FEDD44 /* ofxOscSender.h */, + ); + name = src; + sourceTree = "<group>"; + }; + D27B2221A225CA523C019676 /* src */ = { + isa = PBXGroup; + children = ( + FF8CDF57858E9B94E3237115 /* ip */, + 30CB364908817057B430D528 /* osc */, + ); + name = src; + sourceTree = "<group>"; + }; + E4328144138ABC890047C5CB /* Products */ = { + isa = PBXGroup; + children = ( + E4328148138ABC890047C5CB /* openFrameworksDebug.a */, + ); + name = Products; + sourceTree = "<group>"; + }; + E4B69B4A0A3A1720003C02F2 = { + isa = PBXGroup; + children = ( + E4B6FCAD0C3E899E008CF71C /* openFrameworks-Info.plist */, + E4EB6923138AFD0F00A09F29 /* Project.xcconfig */, + 1A04D8D71FC38F3700D725DC /* libRAPID-MIX_API.a */, + 1A002A861FC303F700E02B93 /* Rapid-Mix */, + E4B69E1C0A3A1BDC003C02F2 /* src */, + E4EEC9E9138DF44700A80321 /* openFrameworks */, + BB4B014C10F69532006C3DED /* addons */, + 6948EE371B920CB800B5AC1A /* local_addons */, + E4B69B5B0A3A1756003C02F2 /* BitalinoDebug.app */, + ); + sourceTree = "<group>"; + }; + E4B69E1C0A3A1BDC003C02F2 /* src */ = { + isa = PBXGroup; + children = ( + 1AF8F4F51FBFBA68007845B3 /* Bitalino */, + E4B69E1F0A3A1BDC003C02F2 /* ofApp.h */, + E4B69E1E0A3A1BDC003C02F2 /* ofApp.cpp */, + E4B69E1D0A3A1BDC003C02F2 /* main.cpp */, + ); + path = src; + sourceTree = SOURCE_ROOT; + }; + E4EEC9E9138DF44700A80321 /* openFrameworks */ = { + isa = PBXGroup; + children = ( + E4EB691F138AFCF100A09F29 /* CoreOF.xcconfig */, + E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */, + ); + name = openFrameworks; + sourceTree = "<group>"; + }; + E6053AB7FEC63D5F83825B88 /* ofxOsc */ = { + isa = PBXGroup; + children = ( + BD2F1A9F8D0C05EDB29122D0 /* src */, + 38871A5825686AE018EC2BF0 /* libs */, + ); + name = ofxOsc; + sourceTree = "<group>"; + }; + FF8CDF57858E9B94E3237115 /* ip */ = { + isa = PBXGroup; + children = ( + 552D90E7024A93518E711979 /* IpEndpointName.cpp */, + 2E39787D52B2DB29CF1FCF66 /* IpEndpointName.h */, + 5065E0436E391619A021DE76 /* NetworkingUtils.h */, + 09AEC4E5ECE805EAD349DBCE /* PacketListener.h */, + 641362CA659FAFEE4E81001B /* posix */, + 0972B751F7A633CC3CCD4C70 /* TimerListener.h */, + DD3E35208D66CC444D100690 /* UdpSocket.h */, + ); + name = ip; + sourceTree = "<group>"; + }; +/* End PBXGroup section */ + +/* Begin PBXNativeTarget section */ + E4B69B5A0A3A1756003C02F2 /* Bitalino */ = { + isa = PBXNativeTarget; + buildConfigurationList = E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "Bitalino" */; + buildPhases = ( + E4B69B580A3A1756003C02F2 /* Sources */, + E4B69B590A3A1756003C02F2 /* Frameworks */, + E4B6FFFD0C3F9AB9008CF71C /* ShellScript */, + E4C2427710CC5ABF004149E2 /* CopyFiles */, + ); + buildRules = ( + ); + dependencies = ( + E4EEB9AC138B136A00A80321 /* PBXTargetDependency */, + ); + name = Bitalino; + productName = myOFApp; + productReference = E4B69B5B0A3A1756003C02F2 /* BitalinoDebug.app */; + productType = "com.apple.product-type.application"; + }; +/* End PBXNativeTarget section */ + +/* Begin PBXProject section */ + E4B69B4C0A3A1720003C02F2 /* Project object */ = { + isa = PBXProject; + attributes = { + LastUpgradeCheck = 0600; + }; + buildConfigurationList = E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "Bitalino" */; + compatibilityVersion = "Xcode 3.2"; + developmentRegion = English; + hasScannedForEncodings = 0; + knownRegions = ( + English, + Japanese, + French, + German, + ); + mainGroup = E4B69B4A0A3A1720003C02F2; + productRefGroup = E4B69B4A0A3A1720003C02F2; + projectDirPath = ""; + projectReferences = ( + { + ProductGroup = E4328144138ABC890047C5CB /* Products */; + ProjectRef = E4328143138ABC890047C5CB /* openFrameworksLib.xcodeproj */; + }, + ); + projectRoot = ""; + targets = ( + E4B69B5A0A3A1756003C02F2 /* Bitalino */, + ); + }; +/* End PBXProject section */ + +/* Begin PBXReferenceProxy section */ + E4328148138ABC890047C5CB /* openFrameworksDebug.a */ = { + isa = PBXReferenceProxy; + fileType = archive.ar; + path = openFrameworksDebug.a; + remoteRef = E4328147138ABC890047C5CB /* PBXContainerItemProxy */; + sourceTree = BUILT_PRODUCTS_DIR; + }; +/* End PBXReferenceProxy section */ + +/* Begin PBXShellScriptBuildPhase section */ + E4B6FFFD0C3F9AB9008CF71C /* ShellScript */ = { + isa = PBXShellScriptBuildPhase; + buildActionMask = 2147483647; + files = ( + ); + inputPaths = ( + ); + outputPaths = ( + ); + runOnlyForDeploymentPostprocessing = 0; + shellPath = /bin/sh; + shellScript = "mkdir -p \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n# Copy default icon file into App/Resources\nrsync -aved \"$ICON_FILE\" \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Resources/\"\n# Copy libfmod and change install directory for fmod to run\nrsync -aved ../../../../../Documents/of_v0.9.8_osx_release/libs/fmodex/lib/osx/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\";\ninstall_name_tool -change @executable_path/libfmodex.dylib @executable_path/../Frameworks/libfmodex.dylib \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/MacOS/$PRODUCT_NAME\";\n# Copy GLUT framework (must remove for AppStore submissions)\nrsync -aved ../../../../../Documents/of_v0.9.8_osx_release/libs/glut/lib/osx/GLUT.framework \"$TARGET_BUILD_DIR/$PRODUCT_NAME.app/Contents/Frameworks/\"\n"; + }; +/* End PBXShellScriptBuildPhase section */ + +/* Begin PBXSourcesBuildPhase section */ + E4B69B580A3A1756003C02F2 /* Sources */ = { + isa = PBXSourcesBuildPhase; + buildActionMask = 2147483647; + files = ( + E4B69E200A3A1BDC003C02F2 /* main.cpp in Sources */, + 1A732FE01FC30566001E730B /* rta_lpc.c in Sources */, + 1A7330231FC30566001E730B /* xmmGmm.cpp in Sources */, + E4B69E210A3A1BDC003C02F2 /* ofApp.cpp in Sources */, + E6E8C6BA7D5DD18D84DCE6B9 /* ofxBaseGui.cpp in Sources */, + 1A732FE71FC30566001E730B /* rta_selection.c in Sources */, + 1F4CACB1B7D09B43508A7EC3 /* ofxButton.cpp in Sources */, + 1A732FF41FC30566001E730B /* libsvm.cpp in Sources */, + 1A73302A1FC30566001E730B /* xmmKMeansParameters.cpp in Sources */, + 9B232A695C4183B7E9D6DE6B /* ofxGuiGroup.cpp in Sources */, + 1A732FD11FC30566001E730B /* filter_utilities.cpp in Sources */, + 9DB59557693F5AF1C3B86978 /* ofxLabel.cpp in Sources */, + A6B3D68D6CAF91615E79B729 /* ofxPanel.cpp in Sources */, + 1A7330251FC30566001E730B /* xmmGmmSingleClass.cpp in Sources */, + 1A732FDB1FC30566001E730B /* rta_cubic.c in Sources */, + 1A7329241FC304D0001E730B /* rapidGVF.cpp in Sources */, + 1A732FDC1FC30566001E730B /* rta_dct.c in Sources */, + C1CCEDB5321AA5A832D215F0 /* ofxSlider.cpp in Sources */, + 0289606657F3E1B14D87F2BC /* ofxSliderGroup.cpp in Sources */, + 1A7329231FC304D0001E730B /* machineLearning.cpp in Sources */, + 1A732FE11FC30566001E730B /* rta_mean_variance.c in Sources */, + 1A73301F1FC30566001E730B /* xmmModelSharedParameters.cpp in Sources */, + 1AF8F4F41FBFBA56007845B3 /* bitalino.cpp in Sources */, + BE5879D980EF1A321B38BDED /* ofxToggle.cpp in Sources */, + CBF1E66610EC3ED02B8E7810 /* fft.cpp in Sources */, + 1A732FE81FC30566001E730B /* rta_svd.c in Sources */, + 1A732FD71FC30566001E730B /* rta_util.c in Sources */, + AE5D0283C3A439F21F24D146 /* maxiAtoms.cpp in Sources */, + 460809B55AD9FA35FEEF18E9 /* maxiBark.cpp in Sources */, + 821FDA0B1E4F7BB6AF683071 /* maxiFFT.cpp in Sources */, + 1A732FE61FC30566001E730B /* rta_resample.c in Sources */, + 10C531C84875D2C829391B4E /* maxiGrains.cpp in Sources */, + 1A7330071FC30566001E730B /* knnClassification.cpp in Sources */, + 982961365190FE97577EC25D /* maxiMFCC.cpp in Sources */, + 1A73300E1FC30566001E730B /* svmClassification.cpp in Sources */, + 77C1DBAB01757716D71545F7 /* maximilian.cpp in Sources */, + 1A732FDE1FC30566001E730B /* rta_fft.c in Sources */, + 1A732FD61FC30566001E730B /* rta_int.c in Sources */, + 1A732FE21FC30566001E730B /* rta_mel.c in Sources */, + 1A7330221FC30566001E730B /* xmmTrainingSet.cpp in Sources */, + 6DEA5ACAF78C6AE7BB6BFDCF /* stb_vorbis.c in Sources */, + 1A732FE51FC30566001E730B /* rta_preemphasis.c in Sources */, + 7BF363788124DFB219FEA2D9 /* ofxOscBundle.cpp in Sources */, + 1A732F4E1FC30565001E730B /* GVF.cpp in Sources */, + 83944CBA55088BC6E0CB8655 /* ofxOscMessage.cpp in Sources */, + 1A732FCF1FC30566001E730B /* README.md in Sources */, + 1A73300D1FC30566001E730B /* seriesClassification.cpp in Sources */, + 1A73300B1FC30566001E730B /* regression.cpp in Sources */, + 1A7330091FC30566001E730B /* neuralNetwork.cpp in Sources */, + 1A7330211FC30566001E730B /* xmmPhrase.cpp in Sources */, + 1A7330261FC30566001E730B /* xmmHierarchicalHmm.cpp in Sources */, + 1A7330061FC30566001E730B /* fastDTW.cpp in Sources */, + 1A7329261FC304D0001E730B /* trainingData.cpp in Sources */, + 1A7329251FC304D0001E730B /* rapidXMM.cpp in Sources */, + 1A732FE41FC30566001E730B /* rta_onepole.c in Sources */, + 1A73300F1FC30566001E730B /* warpPath.cpp in Sources */, + 1A732FDA1FC30566001E730B /* rta_correlation.c in Sources */, + C061F0FB55B94C461FF5D520 /* ofxOscParameterSync.cpp in Sources */, + 1A7330281FC30566001E730B /* xmmHmmSingleClass.cpp in Sources */, + 1A7330141FC30566001E730B /* jsoncpp.cpp in Sources */, + 617ACA40B63357D76A9595A8 /* ofxOscReceiver.cpp in Sources */, + C0A43D1F56B1198FC5EE7031 /* ofxOscSender.cpp in Sources */, + 1A732FD51FC30566001E730B /* rta_bpf.c in Sources */, + 1A73293D1FC304D5001E730B /* rapidPiPoHost.cpp in Sources */, + 1A732FDD1FC30566001E730B /* rta_delta.c in Sources */, + 06B42CCB73078EB0E8E265EE /* IpEndpointName.cpp in Sources */, + 1A7330081FC30566001E730B /* modelSet.cpp in Sources */, + 39B159E39B6636BFC65B0F2A /* NetworkingUtils.cpp in Sources */, + 230128348F328F3A83D41798 /* UdpSocket.cpp in Sources */, + A22B63CBE8E52759908258DF /* OscOutboundPacketStream.cpp in Sources */, + 1A73301C1FC30566001E730B /* xmmAttribute.cpp in Sources */, + 1A732FD31FC30566001E730B /* bbpr.cpp in Sources */, + 1A7330271FC30566001E730B /* xmmHmmParameters.cpp in Sources */, + 1A73301D1FC30566001E730B /* xmmJson.cpp in Sources */, + 1A7330041FC30566001E730B /* classification.cpp in Sources */, + 1A732FD21FC30566001E730B /* finitedifferences.c in Sources */, + 638D65104AC275AFCB576B80 /* OscPrintReceivedElements.cpp in Sources */, + 1A7330241FC30566001E730B /* xmmGmmParameters.cpp in Sources */, + 1A7330051FC30566001E730B /* dtw.cpp in Sources */, + 1A732FE31FC30566001E730B /* rta_moments.c in Sources */, + 1A73300C1FC30566001E730B /* searchWindow.cpp in Sources */, + 1A73300A1FC30566001E730B /* rapidStream.cpp in Sources */, + 1A732FD01FC30566001E730B /* BayesianFilter.cpp in Sources */, + 1A732FD41FC30566001E730B /* rpoly.cpp in Sources */, + 1A732FD91FC30566001E730B /* rta_biquad.c in Sources */, + 1A732FEA1FC30566001E730B /* PiPoCollection.cpp in Sources */, + 1A04D8C41FC31D0E00D725DC /* RapidBitalino.cpp in Sources */, + 0B9EEAF6D1EBB25B81373273 /* OscReceivedElements.cpp in Sources */, + 1A73301B1FC30566001E730B /* readme.md in Sources */, + 66078BCDF7C6B8F85391BD78 /* OscTypes.cpp in Sources */, + 1A732FDF1FC30566001E730B /* rta_lifter.c in Sources */, + 1A7330291FC30566001E730B /* xmmKMeans.cpp in Sources */, + 1A732FE91FC30566001E730B /* rta_window.c in Sources */, + 1A732FD81FC30566001E730B /* rta_bands.c in Sources */, + 1A7330201FC30566001E730B /* xmmModelSingleClass.cpp in Sources */, + 1A73301E1FC30566001E730B /* xmmGaussianDistribution.cpp in Sources */, + ); + runOnlyForDeploymentPostprocessing = 0; + }; +/* End PBXSourcesBuildPhase section */ + +/* Begin PBXTargetDependency section */ + E4EEB9AC138B136A00A80321 /* PBXTargetDependency */ = { + isa = PBXTargetDependency; + name = openFrameworks; + targetProxy = E4EEB9AB138B136A00A80321 /* PBXContainerItemProxy */; + }; +/* End PBXTargetDependency section */ + +/* Begin XCBuildConfiguration section */ + E4B69B4E0A3A1720003C02F2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; + COPY_PHASE_STRIP = NO; + DEAD_CODE_STRIPPING = YES; + GCC_AUTO_VECTORIZATION = YES; + GCC_ENABLE_SSE3_EXTENSIONS = YES; + GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_OPTIMIZATION_LEVEL = 0; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = ( + "$(OF_CORE_HEADERS)", + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/src, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip/posix, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip/win32, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/osc, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/src, + ); + MACOSX_DEPLOYMENT_TARGET = 10.8; + ONLY_ACTIVE_ARCH = YES; + OTHER_CPLUSPLUSFLAGS = ( + "-D__MACOSX_CORE__", + "-mtune=native", + ); + SDKROOT = macosx; + }; + name = Debug; + }; + E4B69B4F0A3A1720003C02F2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; + buildSettings = { + CONFIGURATION_BUILD_DIR = "$(SRCROOT)/bin/"; + COPY_PHASE_STRIP = YES; + DEAD_CODE_STRIPPING = YES; + GCC_AUTO_VECTORIZATION = YES; + GCC_ENABLE_SSE3_EXTENSIONS = YES; + GCC_ENABLE_SUPPLEMENTAL_SSE3_INSTRUCTIONS = YES; + GCC_INLINES_ARE_PRIVATE_EXTERN = NO; + GCC_OPTIMIZATION_LEVEL = 3; + GCC_SYMBOLS_PRIVATE_EXTERN = NO; + GCC_UNROLL_LOOPS = YES; + GCC_WARN_ABOUT_DEPRECATED_FUNCTIONS = YES; + GCC_WARN_ABOUT_INVALID_OFFSETOF_MACRO = NO; + GCC_WARN_ALLOW_INCOMPLETE_PROTOCOL = NO; + GCC_WARN_UNINITIALIZED_AUTOS = NO; + GCC_WARN_UNUSED_VALUE = NO; + GCC_WARN_UNUSED_VARIABLE = NO; + HEADER_SEARCH_PATHS = ( + "$(OF_CORE_HEADERS)", + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/src, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip/posix, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip/win32, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/osc, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/src, + ); + MACOSX_DEPLOYMENT_TARGET = 10.8; + OTHER_CPLUSPLUSFLAGS = ( + "-D__MACOSX_CORE__", + "-mtune=native", + ); + SDKROOT = macosx; + }; + name = Release; + }; + E4B69B600A3A1757003C02F2 /* Debug */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; + buildSettings = { + "CLANG_CXX_LANGUAGE_STANDARD[arch=i386]" = "c++0x"; + "CLANG_CXX_LANGUAGE_STANDARD[arch=x86_64]" = "c++0x"; + "CLANG_CXX_LIBRARY[arch=i386]" = "libc++"; + "CLANG_CXX_LIBRARY[arch=x86_64]" = "libc++"; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = NO; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(PROJECT_DIR)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../../../Documents/of_v0.9.8_osx_release/libs/glut/lib/osx\""; + GCC_DYNAMIC_NO_PIC = NO; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = NONE; + HEADER_SEARCH_PATHS = ( + "$(OF_CORE_HEADERS)", + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/src, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip/posix, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip/win32, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/osc, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/src, + ); + ICON = "$(ICON_NAME_DEBUG)"; + ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; + INFOPLIST_FILE = "openFrameworks-Info.plist"; + INSTALL_PATH = /Applications; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/third_party_dependancies/pipo/sdk/examples/jucepipo", + "$(PROJECT_DIR)/third_party_dependancies/pipo-sdk/examples/jucepipo", + "$(PROJECT_DIR)/dependencies/Maximilian/openFrameworks/openFrameworksExamples/windows/ofMaximExampleVS2010/bin", + "$(PROJECT_DIR)/dependencies/pipo/bin/osx", + "$(PROJECT_DIR)/dependencies/pipo/examples/jucepipo", + "$(PROJECT_DIR)", + ); + PRODUCT_NAME = "$(TARGET_NAME)Debug"; + WRAPPER_EXTENSION = app; + }; + name = Debug; + }; + E4B69B610A3A1757003C02F2 /* Release */ = { + isa = XCBuildConfiguration; + baseConfigurationReference = E4EB6923138AFD0F00A09F29 /* Project.xcconfig */; + buildSettings = { + "CLANG_CXX_LANGUAGE_STANDARD[arch=i386]" = "c++0x"; + "CLANG_CXX_LANGUAGE_STANDARD[arch=x86_64]" = "c++0x"; + "CLANG_CXX_LIBRARY[arch=i386]" = "libc++"; + "CLANG_CXX_LIBRARY[arch=x86_64]" = "libc++"; + COMBINE_HIDPI_IMAGES = YES; + COPY_PHASE_STRIP = YES; + FRAMEWORK_SEARCH_PATHS = ( + "$(inherited)", + "$(FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1)", + "$(PROJECT_DIR)", + ); + FRAMEWORK_SEARCH_PATHS_QUOTED_FOR_TARGET_1 = "\"$(SRCROOT)/../../../../../Documents/of_v0.9.8_osx_release/libs/glut/lib/osx\""; + GCC_GENERATE_DEBUGGING_SYMBOLS = YES; + GCC_MODEL_TUNING = NONE; + HEADER_SEARCH_PATHS = ( + "$(OF_CORE_HEADERS)", + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxGui/src, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/libs, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxMaxim/src, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip/posix, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/ip/win32, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/libs/oscpack/src/osc, + ../../../../../Documents/of_v0.9.8_osx_release/addons/ofxOsc/src, + ); + ICON = "$(ICON_NAME_RELEASE)"; + ICON_FILE = "$(ICON_FILE_PATH)$(ICON)"; + INFOPLIST_FILE = "openFrameworks-Info.plist"; + INSTALL_PATH = /Applications; + LIBRARY_SEARCH_PATHS = ( + "$(inherited)", + "$(PROJECT_DIR)/third_party_dependancies/pipo/sdk/examples/jucepipo", + "$(PROJECT_DIR)/third_party_dependancies/pipo-sdk/examples/jucepipo", + "$(PROJECT_DIR)/dependencies/Maximilian/openFrameworks/openFrameworksExamples/windows/ofMaximExampleVS2010/bin", + "$(PROJECT_DIR)/dependencies/pipo/bin/osx", + "$(PROJECT_DIR)/dependencies/pipo/examples/jucepipo", + "$(PROJECT_DIR)", + ); + PRODUCT_NAME = "$(TARGET_NAME)"; + WRAPPER_EXTENSION = app; + baseConfigurationReference = E4EB6923138AFD0F00A09F29; + }; + name = Release; + }; +/* End XCBuildConfiguration section */ + +/* Begin XCConfigurationList section */ + E4B69B4D0A3A1720003C02F2 /* Build configuration list for PBXProject "Bitalino" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E4B69B4E0A3A1720003C02F2 /* Debug */, + E4B69B4F0A3A1720003C02F2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; + E4B69B5F0A3A1757003C02F2 /* Build configuration list for PBXNativeTarget "Bitalino" */ = { + isa = XCConfigurationList; + buildConfigurations = ( + E4B69B600A3A1757003C02F2 /* Debug */, + E4B69B610A3A1757003C02F2 /* Release */, + ); + defaultConfigurationIsVisible = 0; + defaultConfigurationName = Release; + }; +/* End XCConfigurationList section */ + }; + rootObject = E4B69B4C0A3A1720003C02F2 /* Project object */; +} diff --git a/examples/ofx/Bitalino_rapidmix/Bitalino.xcodeproj/project.xcworkspace/contents.xcworkspacedata b/examples/ofx/Bitalino_rapidmix/Bitalino.xcodeproj/project.xcworkspace/contents.xcworkspacedata new file mode 100644 index 0000000..919434a --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/Bitalino.xcodeproj/project.xcworkspace/contents.xcworkspacedata @@ -0,0 +1,7 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Workspace + version = "1.0"> + <FileRef + location = "self:"> + </FileRef> +</Workspace> diff --git a/examples/ofx/Bitalino_rapidmix/Bitalino.xcodeproj/xcshareddata/xcschemes/Bitalino Debug.xcscheme b/examples/ofx/Bitalino_rapidmix/Bitalino.xcodeproj/xcshareddata/xcschemes/Bitalino Debug.xcscheme new file mode 100644 index 0000000..b82151e --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/Bitalino.xcodeproj/xcshareddata/xcschemes/Bitalino Debug.xcscheme @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "0600" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2" + BuildableName = "Bitalino.app" + BlueprintName = "Bitalino" + ReferencedContainer = "container:Bitalino.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES" + buildConfiguration = "Debug"> + <Testables> + </Testables> + <MacroExpansion> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2" + BuildableName = "Bitalino.app" + BlueprintName = "Bitalino" + ReferencedContainer = "container:Bitalino.xcodeproj"> + </BuildableReference> + </MacroExpansion> + </TestAction> + <LaunchAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Debug" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + allowLocationSimulation = "YES"> + <BuildableProductRunnable> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2" + BuildableName = "Bitalino.app" + BlueprintName = "Bitalino" + ReferencedContainer = "container:Bitalino.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + <AdditionalOptions> + </AdditionalOptions> + </LaunchAction> + <ProfileAction + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Debug" + debugDocumentVersioning = "YES"> + <BuildableProductRunnable> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2" + BuildableName = "Bitalino.app" + BlueprintName = "Bitalino" + ReferencedContainer = "container:Bitalino.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Debug"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Debug" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/examples/ofx/Bitalino_rapidmix/Bitalino.xcodeproj/xcshareddata/xcschemes/Bitalino Release.xcscheme b/examples/ofx/Bitalino_rapidmix/Bitalino.xcodeproj/xcshareddata/xcschemes/Bitalino Release.xcscheme new file mode 100644 index 0000000..6f5bb44 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/Bitalino.xcodeproj/xcshareddata/xcschemes/Bitalino Release.xcscheme @@ -0,0 +1,86 @@ +<?xml version="1.0" encoding="UTF-8"?> +<Scheme + LastUpgradeVersion = "0600" + version = "1.3"> + <BuildAction + parallelizeBuildables = "YES" + buildImplicitDependencies = "YES"> + <BuildActionEntries> + <BuildActionEntry + buildForTesting = "YES" + buildForRunning = "YES" + buildForProfiling = "YES" + buildForArchiving = "YES" + buildForAnalyzing = "YES"> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2" + BuildableName = "Bitalino.app" + BlueprintName = "Bitalino" + ReferencedContainer = "container:Bitalino.xcodeproj"> + </BuildableReference> + </BuildActionEntry> + </BuildActionEntries> + </BuildAction> + <TestAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + shouldUseLaunchSchemeArgsEnv = "YES" + buildConfiguration = "Release"> + <Testables> + </Testables> + <MacroExpansion> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2" + BuildableName = "Bitalino.app" + BlueprintName = "Bitalino" + ReferencedContainer = "container:Bitalino.xcodeproj"> + </BuildableReference> + </MacroExpansion> + </TestAction> + <LaunchAction + selectedDebuggerIdentifier = "Xcode.DebuggerFoundation.Debugger.LLDB" + selectedLauncherIdentifier = "Xcode.DebuggerFoundation.Launcher.LLDB" + launchStyle = "0" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Release" + ignoresPersistentStateOnLaunch = "NO" + debugDocumentVersioning = "YES" + allowLocationSimulation = "YES"> + <BuildableProductRunnable> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2" + BuildableName = "Bitalino.app" + BlueprintName = "Bitalino" + ReferencedContainer = "container:Bitalino.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + <AdditionalOptions> + </AdditionalOptions> + </LaunchAction> + <ProfileAction + shouldUseLaunchSchemeArgsEnv = "YES" + savedToolIdentifier = "" + useCustomWorkingDirectory = "NO" + buildConfiguration = "Release" + debugDocumentVersioning = "YES"> + <BuildableProductRunnable> + <BuildableReference + BuildableIdentifier = "primary" + BlueprintIdentifier = "E4B69B5A0A3A1756003C02F2" + BuildableName = "Bitalino.app" + BlueprintName = "Bitalino" + ReferencedContainer = "container:Bitalino.xcodeproj"> + </BuildableReference> + </BuildableProductRunnable> + </ProfileAction> + <AnalyzeAction + buildConfiguration = "Release"> + </AnalyzeAction> + <ArchiveAction + buildConfiguration = "Release" + revealArchiveInOrganizer = "YES"> + </ArchiveAction> +</Scheme> diff --git a/examples/ofx/Bitalino_rapidmix/Makefile b/examples/ofx/Bitalino_rapidmix/Makefile new file mode 100644 index 0000000..7ea4333 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/Makefile @@ -0,0 +1,13 @@ +# Attempt to load a config.make file. +# If none is found, project defaults in config.project.make will be used. +ifneq ($(wildcard config.make),) + include config.make +endif + +# make sure the the OF_ROOT location is defined +ifndef OF_ROOT + OF_ROOT=$(realpath ../../../../../Documents/of_v0.9.8_osx_release) +endif + +# call the project makefile! +include $(OF_ROOT)/libs/openFrameworksCompiled/project/makefileCommon/compile.project.mk diff --git a/examples/ofx/Bitalino_rapidmix/Project.xcconfig b/examples/ofx/Bitalino_rapidmix/Project.xcconfig new file mode 100644 index 0000000..9097eba --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/Project.xcconfig @@ -0,0 +1,17 @@ +//THE PATH TO THE ROOT OF OUR OF PATH RELATIVE TO THIS PROJECT. +//THIS NEEDS TO BE DEFINED BEFORE CoreOF.xcconfig IS INCLUDED +OF_PATH = ../../../../../Documents/of_v0.9.8_osx_release + +//THIS HAS ALL THE HEADER AND LIBS FOR OF CORE +#include "../../../../../Documents/of_v0.9.8_osx_release/libs/openFrameworksCompiled/project/osx/CoreOF.xcconfig" + +//ICONS - NEW IN 0072 +ICON_NAME_DEBUG = icon-debug.icns +ICON_NAME_RELEASE = icon.icns +ICON_FILE_PATH = $(OF_PATH)/libs/openFrameworksCompiled/project/osx/ + +//IF YOU WANT AN APP TO HAVE A CUSTOM ICON - PUT THEM IN YOUR DATA FOLDER AND CHANGE ICON_FILE_PATH to: +//ICON_FILE_PATH = bin/data/ + +OTHER_LDFLAGS = $(OF_CORE_LIBS) $(OF_CORE_FRAMEWORKS) +HEADER_SEARCH_PATHS = $(OF_CORE_HEADERS) diff --git a/examples/ofx/Bitalino_rapidmix/addons.make b/examples/ofx/Bitalino_rapidmix/addons.make new file mode 100644 index 0000000..2d84199 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/addons.make @@ -0,0 +1,3 @@ +ofxGui +ofxMaxim +ofxOsc diff --git a/examples/ofx/Bitalino_rapidmix/bin/data/.gitkeep b/examples/ofx/Bitalino_rapidmix/bin/data/.gitkeep new file mode 100644 index 0000000..e69de29 diff --git a/examples/ofx/Bitalino_rapidmix/config.make b/examples/ofx/Bitalino_rapidmix/config.make new file mode 100644 index 0000000..963b07d --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/config.make @@ -0,0 +1,142 @@ +################################################################################ +# CONFIGURE PROJECT MAKEFILE (optional) +# This file is where we make project specific configurations. +################################################################################ + +################################################################################ +# OF ROOT +# The location of your root openFrameworks installation +# (default) OF_ROOT = ../../../../../Documents/of_v0.9.8_osx_release +################################################################################ +# OF_ROOT = ../../../../../Documents/of_v0.9.8_osx_release + +################################################################################ +# PROJECT ROOT +# The location of the project - a starting place for searching for files +# (default) PROJECT_ROOT = . (this directory) +# +################################################################################ +# PROJECT_ROOT = . + +################################################################################ +# PROJECT SPECIFIC CHECKS +# This is a project defined section to create internal makefile flags to +# conditionally enable or disable the addition of various features within +# this makefile. For instance, if you want to make changes based on whether +# GTK is installed, one might test that here and create a variable to check. +################################################################################ +# None + +################################################################################ +# PROJECT EXTERNAL SOURCE PATHS +# These are fully qualified paths that are not within the PROJECT_ROOT folder. +# Like source folders in the PROJECT_ROOT, these paths are subject to +# exlclusion via the PROJECT_EXLCUSIONS list. +# +# (default) PROJECT_EXTERNAL_SOURCE_PATHS = (blank) +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_EXTERNAL_SOURCE_PATHS = + +################################################################################ +# PROJECT EXCLUSIONS +# These makefiles assume that all folders in your current project directory +# and any listed in the PROJECT_EXTERNAL_SOURCH_PATHS are are valid locations +# to look for source code. The any folders or files that match any of the +# items in the PROJECT_EXCLUSIONS list below will be ignored. +# +# Each item in the PROJECT_EXCLUSIONS list will be treated as a complete +# string unless teh user adds a wildcard (%) operator to match subdirectories. +# GNU make only allows one wildcard for matching. The second wildcard (%) is +# treated literally. +# +# (default) PROJECT_EXCLUSIONS = (blank) +# +# Will automatically exclude the following: +# +# $(PROJECT_ROOT)/bin% +# $(PROJECT_ROOT)/obj% +# $(PROJECT_ROOT)/%.xcodeproj +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_EXCLUSIONS = + +################################################################################ +# PROJECT LINKER FLAGS +# These flags will be sent to the linker when compiling the executable. +# +# (default) PROJECT_LDFLAGS = -Wl,-rpath=./libs +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ + +# Currently, shared libraries that are needed are copied to the +# $(PROJECT_ROOT)/bin/libs directory. The following LDFLAGS tell the linker to +# add a runtime path to search for those shared libraries, since they aren't +# incorporated directly into the final executable application binary. +# TODO: should this be a default setting? +# PROJECT_LDFLAGS=-Wl,-rpath=./libs + +################################################################################ +# PROJECT DEFINES +# Create a space-delimited list of DEFINES. The list will be converted into +# CFLAGS with the "-D" flag later in the makefile. +# +# (default) PROJECT_DEFINES = (blank) +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_DEFINES = + +################################################################################ +# PROJECT CFLAGS +# This is a list of fully qualified CFLAGS required when compiling for this +# project. These CFLAGS will be used IN ADDITION TO the PLATFORM_CFLAGS +# defined in your platform specific core configuration files. These flags are +# presented to the compiler BEFORE the PROJECT_OPTIMIZATION_CFLAGS below. +# +# (default) PROJECT_CFLAGS = (blank) +# +# Note: Before adding PROJECT_CFLAGS, note that the PLATFORM_CFLAGS defined in +# your platform specific configuration file will be applied by default and +# further flags here may not be needed. +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_CFLAGS = + +################################################################################ +# PROJECT OPTIMIZATION CFLAGS +# These are lists of CFLAGS that are target-specific. While any flags could +# be conditionally added, they are usually limited to optimization flags. +# These flags are added BEFORE the PROJECT_CFLAGS. +# +# PROJECT_OPTIMIZATION_CFLAGS_RELEASE flags are only applied to RELEASE targets. +# +# (default) PROJECT_OPTIMIZATION_CFLAGS_RELEASE = (blank) +# +# PROJECT_OPTIMIZATION_CFLAGS_DEBUG flags are only applied to DEBUG targets. +# +# (default) PROJECT_OPTIMIZATION_CFLAGS_DEBUG = (blank) +# +# Note: Before adding PROJECT_OPTIMIZATION_CFLAGS, please note that the +# PLATFORM_OPTIMIZATION_CFLAGS defined in your platform specific configuration +# file will be applied by default and further optimization flags here may not +# be needed. +# +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_OPTIMIZATION_CFLAGS_RELEASE = +# PROJECT_OPTIMIZATION_CFLAGS_DEBUG = + +################################################################################ +# PROJECT COMPILERS +# Custom compilers can be set for CC and CXX +# (default) PROJECT_CXX = (blank) +# (default) PROJECT_CC = (blank) +# Note: Leave a leading space when adding list items with the += operator +################################################################################ +# PROJECT_CXX = +# PROJECT_CC = diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/GVF/GVF.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/GVF/GVF.cpp new file mode 100755 index 0000000..36ef7d5 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/GVF/GVF.cpp @@ -0,0 +1,1375 @@ +/** + * Gesture Variation Follower class allows for early gesture recognition and variation tracking + * + * @details Original algorithm designed and implemented in 2011 at Ircam Centre Pompidou + * by Baptiste Caramiaux and Nicola Montecchio. The library has been created and is maintained by Baptiste Caramiaux + * + * Copyright (C) 2015 Baptiste Caramiaux, Nicola Montecchio + * STMS lab Ircam-CRNS-UPMC, University of Padova, Goldsmiths College University of London + * + * The library is under the GNU Lesser General Public License (LGPL v3) + */ + +#include "GVF.h" +#include <string.h> +#include <stdio.h> +#include <iostream> +#include <fstream> +#include <sstream> +#include <memory> +#include <algorithm> +#include <numeric> + +//debug max +//#include "ext.h" + + +using namespace std; + +//-------------------------------------------------------------- +GVF::GVF() +{ + config.inputDimensions = 2; + config.translate = true; + config.segmentation = false; + + parameters.numberParticles = 1000; + parameters.tolerance = 0.2f; + parameters.resamplingThreshold = 250; + parameters.distribution = 0.0f; + parameters.alignmentVariance = sqrt(0.000001f); + parameters.dynamicsVariance = vector<float>(1,sqrt(0.001f)); + parameters.scalingsVariance = vector<float>(1,sqrt(0.00001f)); + parameters.rotationsVariance = vector<float>(1,sqrt(0.0f)); + parameters.predictionSteps = 1; + parameters.dimWeights = vector<float>(1,sqrt(1.0f)); + parameters.alignmentSpreadingCenter = 0.0; + parameters.alignmentSpreadingRange = 0.2; + parameters.dynamicsSpreadingCenter = 1.0; + parameters.dynamicsSpreadingRange = 0.3; + parameters.scalingsSpreadingCenter = 1.0; + parameters.scalingsSpreadingRange = 0.3; + parameters.rotationsSpreadingCenter = 0.0; + parameters.rotationsSpreadingRange = 0.5; + + tolerancesetmanually = false; + learningGesture = -1; + + normgen = std::mt19937(rd()); + rndnorm = new std::normal_distribution<float>(0.0,1.0); + unifgen = std::default_random_engine(rd()); + rndunif = new std::uniform_real_distribution<float>(0.0,1.0); + +} + +////-------------------------------------------------------------- +//GVF::GVF(GVFConfig _config){ +// setup(_config); +//} +// +////-------------------------------------------------------------- +//GVF::GVF(GVFConfig _config, GVFParameters _parameters){ +// setup(_config, _parameters); +//} +// +////-------------------------------------------------------------- +//void GVF::setup(){ +// +// // use defualt parameters +// GVFConfig defaultConfig; +// +// defaultConfig.inputDimensions = 2; +// defaultConfig.translate = true; +// defaultConfig.segmentation = false; +// +// setup(defaultConfig); +//} +// +////-------------------------------------------------------------- +//void GVF::setup(GVFConfig _config){ +// +// clear(); // just in case +// +// learningGesture = -1; +// +// // Set configuration: +// config = _config; +// +// // default parameters +// GVFParameters defaultParameters; +// defaultParameters.numberParticles = 1000; +// defaultParameters.tolerance = 0.2f; +// defaultParameters.resamplingThreshold = 250; +// defaultParameters.distribution = 0.0f; +// defaultParameters.alignmentVariance = sqrt(0.000001f); +// defaultParameters.dynamicsVariance = vector<float>(1,sqrt(0.001f)); +// defaultParameters.scalingsVariance = vector<float>(1,sqrt(0.00001f)); +// defaultParameters.rotationsVariance = vector<float>(1,sqrt(0.0f)); +// defaultParameters.predictionSteps = 1; +// defaultParameters.dimWeights = vector<float>(1,sqrt(1.0f)); +// +// // default spreading +// defaultParameters.alignmentSpreadingCenter = 0.0; +// defaultParameters.alignmentSpreadingRange = 0.2; +// +// defaultParameters.dynamicsSpreadingCenter = 1.0; +// defaultParameters.dynamicsSpreadingRange = 0.3; +// +// defaultParameters.scalingsSpreadingCenter = 1.0; +// defaultParameters.scalingsSpreadingRange = 0.3; +// +// defaultParameters.rotationsSpreadingCenter = 0.0; +// defaultParameters.rotationsSpreadingRange = 0.0; +// +// tolerancesetmanually = false; +// +// setup(_config, defaultParameters); +// +//} +// +////-------------------------------------------------------------- +//void GVF::setup(GVFConfig _config, GVFParameters _parameters) +//{ +// clear(); // just in case +// // Set configuration and parameters +// config = _config; +// parameters = _parameters; +// // Init random generators +// normgen = std::mt19937(rd()); +// rndnorm = new std::normal_distribution<float>(0.0,1.0); +// unifgen = std::default_random_engine(rd()); +// rndunif = new std::uniform_real_distribution<float>(0.0,1.0); +//} + +//-------------------------------------------------------------- +GVF::~GVF() +{ + if (rndnorm != NULL) + delete (rndnorm); + clear(); // not really necessary but it's polite ;) +} + +//-------------------------------------------------------------- +void GVF::clear() +{ + state = STATE_CLEAR; + gestureTemplates.clear(); + mostProbableIndex = -1; +} + +//-------------------------------------------------------------- +void GVF::startGesture() +{ + if (state==STATE_FOLLOWING) + { + restart(); + } + else if (state==STATE_LEARNING) + { + if (theGesture.getNumberOfTemplates()>0) + { + if (theGesture.getTemplateLength()>0) + addGestureTemplate(theGesture); + } + theGesture.clear(); + } +} + +//-------------------------------------------------------------- +void GVF::addObservation(vector<float> data) +{ + theGesture.addObservation(data); +} + +//-------------------------------------------------------------- +void GVF::addGestureTemplate(GVFGesture & gestureTemplate) +{ + + // if (getState() != GVF::STATE_LEARNING) + // setState(GVF::STATE_LEARNING); + + int inputDimension = gestureTemplate.getNumberDimensions(); + config.inputDimensions = inputDimension; + + gestureTemplates.push_back(gestureTemplate); + activeGestures.push_back(gestureTemplates.size()); + + if(minRange.size() == 0){ + minRange.resize(inputDimension); + maxRange.resize(inputDimension); + } + + for(int j = 0; j < inputDimension; j++){ + minRange[j] = INFINITY; + maxRange[j] = -INFINITY; + } + + // compute min/max from the data + for(int i = 0; i < gestureTemplates.size(); i++){ + GVFGesture& tGestureTemplate = gestureTemplates[i]; + vector<float>& tMinRange = tGestureTemplate.getMinRange(); + vector<float>& tMaxRange = tGestureTemplate.getMaxRange(); + for(int j = 0; j < inputDimension; j++){ + if(tMinRange[j] < minRange[j]) minRange[j] = tMinRange[j]; + if(tMaxRange[j] > maxRange[j]) maxRange[j] = tMaxRange[j]; + } + } + + for(int i = 0; i < gestureTemplates.size(); i++){ + GVFGesture& tGestureTemplate = gestureTemplates[i]; + tGestureTemplate.setMinRange(minRange); + tGestureTemplate.setMaxRange(maxRange); + } + train(); + +} + +//-------------------------------------------------------------- +void GVF::replaceGestureTemplate(GVFGesture & gestureTemplate, int index) +{ + if(gestureTemplate.getNumberDimensions()!=config.inputDimensions) + return; + if(minRange.size() == 0) + { + minRange.resize(config.inputDimensions); + maxRange.resize(config.inputDimensions); + } + for(int j = 0; j < config.inputDimensions; j++) + { + minRange[j] = INFINITY; + maxRange[j] = -INFINITY; + } + if (index<=gestureTemplates.size()) + gestureTemplates[index-1]=gestureTemplate; + for(int i = 0; i < gestureTemplates.size(); i++) + { + GVFGesture& tGestureTemplate = gestureTemplates[i]; + vector<float>& tMinRange = tGestureTemplate.getMinRange(); + vector<float>& tMaxRange = tGestureTemplate.getMaxRange(); + for(int j = 0; j < config.inputDimensions; j++){ + if(tMinRange[j] < minRange[j]) minRange[j] = tMinRange[j]; + if(tMaxRange[j] > maxRange[j]) maxRange[j] = tMaxRange[j]; + } + } + for(int i = 0; i < gestureTemplates.size(); i++) + { + GVFGesture& tGestureTemplate = gestureTemplates[i]; + tGestureTemplate.setMinRange(minRange); + tGestureTemplate.setMaxRange(maxRange); + } +} + +////-------------------------------------------------------------- +//vector<float>& GVF::getGestureTemplateSample(int gestureIndex, float cursor) +//{ +// int frameindex = min((int)(gestureTemplates[gestureIndex].getTemplateLength() - 1), +// (int)(floor(cursor * gestureTemplates[gestureIndex].getTemplateLength() ) ) ); +// return gestureTemplates[gestureIndex].getTemplate()[frameindex]; +//} + +//-------------------------------------------------------------- +GVFGesture & GVF::getGestureTemplate(int index){ + assert(index < gestureTemplates.size()); + return gestureTemplates[index]; +} + +//-------------------------------------------------------------- +vector<GVFGesture> & GVF::getAllGestureTemplates(){ + return gestureTemplates; +} + +//-------------------------------------------------------------- +int GVF::getNumberOfGestureTemplates(){ + return (int)gestureTemplates.size(); +} + +//-------------------------------------------------------------- +void GVF::removeGestureTemplate(int index){ + assert(index < gestureTemplates.size()); + gestureTemplates.erase(gestureTemplates.begin() + index); +} + +//-------------------------------------------------------------- +void GVF::removeAllGestureTemplates(){ + gestureTemplates.clear(); +} + +//---------------------------------------------- +void GVF::train(){ + + if (gestureTemplates.size() > 0) + { + + // get the number of dimension in templates + config.inputDimensions = gestureTemplates[0].getTemplateDimension(); + + dynamicsDim = 2; // hard coded: just speed now + scalingsDim = config.inputDimensions; + + // manage orientation + if (config.inputDimensions==2) rotationsDim=1; + else if (config.inputDimensions==3) rotationsDim=3; + else rotationsDim=0; + + // Init state space + initVec(classes, parameters.numberParticles); // Vector of gesture class + initVec(alignment, parameters.numberParticles); // Vector of phase values (alignment) + initMat(dynamics, parameters.numberParticles, dynamicsDim); // Matric of dynamics + initMat(scalings, parameters.numberParticles, scalingsDim); // Matrix of scaling + if (rotationsDim!=0) initMat(rotations, parameters.numberParticles, rotationsDim); // Matrix of rotations + initMat(offsets, parameters.numberParticles, config.inputDimensions); + initVec(weights, parameters.numberParticles); // Weights + + initMat(particles, parameters.numberParticles, 3); + // std::cout << particles.size() << " " << parameters.numberParticles << std::endl; + + // bayesian elements + initVec(prior, parameters.numberParticles); + initVec(posterior, parameters.numberParticles); + initVec(likelihood, parameters.numberParticles); + + + initPrior(); // prior on init state values + initNoiseParameters(); // init noise parameters (transition and likelihood) + + + // weighted dimensions in case: default is not weighted + if (parameters.dimWeights.size()!=config.inputDimensions){ + parameters.dimWeights = vector<float> (config.inputDimensions); + for(int k = 0; k < config.inputDimensions; k++) parameters.dimWeights[k] = 1.0 / config.inputDimensions; + } + + // NORMALIZATION +// if (config.normalization) { // update the global normaliation factor +// globalNormalizationFactor = -1.0; +// // loop on previous gestures already learned +// // take the max of all the gesture learned ... +// for (int k=0; k<getNumberOfGestureTemplates() ; k++){ +// for(int j = 0; j < config.inputDimensions; j++){ +// float rangetmp = fabs(getGestureTemplate(k).getMaxRange()[j]-getGestureTemplate(k).getMinRange()[j]); +// if (rangetmp > globalNormalizationFactor) +// globalNormalizationFactor=rangetmp; +// } +// } +// } +// // only for logs +// if (config.logOn) { +// vecRef = vector<vector<float> > (parameters.numberParticles); +// vecObs = vector<float> (config.inputDimensions); +// stateNoiseDist = vector<float> (parameters.numberParticles); +// } + } +} + +//-------------------------------------------------------------- +//void GVF::initPrior() +//{ +// +// // PATICLE FILTERING +// for (int k = 0; k < parameters.numberParticles; k++) +// { +// initPrior(k); +// +// classes[k] = activeGestures[k % activeGestures.size()] - 1; +// } +// +//} + +//-------------------------------------------------------------- +void GVF::initPrior() //int pf_n) +{ + for (int pf_n = 0; pf_n < parameters.numberParticles; pf_n++) + { + // alignment + alignment[pf_n] = ((*rndunif)(unifgen) - 0.5) * parameters.alignmentSpreadingRange + parameters.alignmentSpreadingCenter; // spread phase + + + // dynamics + dynamics[pf_n][0] = ((*rndunif)(unifgen) - 0.5) * parameters.dynamicsSpreadingRange + parameters.dynamicsSpreadingCenter; // spread speed + if (dynamics[pf_n].size()>1) + { + dynamics[pf_n][1] = ((*rndunif)(unifgen) - 0.5) * parameters.dynamicsSpreadingRange; // spread accel + } + + // scalings + for(int l = 0; l < scalings[pf_n].size(); l++) { + scalings[pf_n][l] = ((*rndunif)(unifgen) - 0.5) * parameters.scalingsSpreadingRange + parameters.scalingsSpreadingCenter; // spread scalings + } + + // rotations + if (rotationsDim!=0) + for(int l = 0; l < rotations[pf_n].size(); l++) + rotations[pf_n][l] = ((*rndunif)(unifgen) - 0.5) * parameters.rotationsSpreadingRange + parameters.rotationsSpreadingCenter; // spread rotations + + if (config.translate) for(int l = 0; l < offsets[pf_n].size(); l++) offsets[pf_n][l] = 0.0; + + + prior[pf_n] = 1.0 / (float) parameters.numberParticles; + + // set the posterior to the prior at the initialization + posterior[pf_n] = prior[pf_n]; + + classes[pf_n] = activeGestures[pf_n % activeGestures.size()] - 1; + } + +} + +//-------------------------------------------------------------- +void GVF::initNoiseParameters() { + + // NOISE (ADDITIVE GAUSSIAN NOISE) + // --------------------------- + + if (parameters.dynamicsVariance.size() != dynamicsDim) + { + float variance = parameters.dynamicsVariance[0]; + parameters.dynamicsVariance.resize(dynamicsDim); + for (int k=0; k<dynamicsDim; k++) + parameters.dynamicsVariance[k] = variance; + } + + if (parameters.scalingsVariance.size() != scalingsDim) + { + float variance = parameters.scalingsVariance[0]; + parameters.scalingsVariance.resize(scalingsDim); + for (int k=0; k<scalingsDim; k++) + parameters.scalingsVariance[k] = variance; + } + + if (rotationsDim!=0) + { + if (parameters.rotationsVariance.size() != rotationsDim) + { + float variance = parameters.rotationsVariance[0]; + parameters.rotationsVariance.resize(rotationsDim); + for (int k=0; k<rotationsDim; k++) + parameters.rotationsVariance[k] = variance; + } + } + + // ADAPTATION OF THE TOLERANCE IF DEFAULT PARAMTERS + // --------------------------- + if (!tolerancesetmanually){ + float obsMeanRange = 0.0f; + for (int gt=0; gt<gestureTemplates.size(); gt++) { + for (int d=0; d<config.inputDimensions; d++) + obsMeanRange += (gestureTemplates[gt].getMaxRange()[d] - gestureTemplates[gt].getMinRange()[d]) + /config.inputDimensions; + } + obsMeanRange /= gestureTemplates.size(); + parameters.tolerance = obsMeanRange / 4.0f; // dividing by an heuristic factor [to be learned?] + } +} + +//-------------------------------------------------------------- +void GVF::setState(GVFState _state, vector<int> indexes) +{ + switch (_state) + { + case STATE_CLEAR: + clear(); + theGesture.clear(); + break; + + case STATE_LEARNING: + if ((state==STATE_LEARNING) && (theGesture.getNumberOfTemplates()>0)) + { + if (learningGesture==-1) + addGestureTemplate(theGesture); + else + { + replaceGestureTemplate(theGesture, learningGesture); + learningGesture=-1; + } + if (indexes.size()!=0) + learningGesture=indexes[0]; + } + state = _state; + theGesture.clear(); + break; + + case STATE_FOLLOWING: + if ((state==STATE_LEARNING) && (theGesture.getNumberOfTemplates()>0)) + { + if (learningGesture==-1) + addGestureTemplate(theGesture); + else + { + replaceGestureTemplate(theGesture, learningGesture); + learningGesture=-1; + } + } + if (gestureTemplates.size() > 0) + { + train(); + state = _state; + } + else + state = STATE_CLEAR; + theGesture.clear(); + break; + + default: + theGesture.clear(); + break; + } +} + +//-------------------------------------------------------------- +GVF::GVFState GVF::getState() +{ + return state; +} + +////-------------------------------------------------------------- +//int GVF::getDynamicsDimension(){ +// return dynamicsDim; +//} + +//-------------------------------------------------------------- +vector<int> GVF::getGestureClasses() +{ + return classes; +} + +////-------------------------------------------------------------- +//vector<float> GVF::getAlignment(){ +// return alignment; +//} +// +////-------------------------------------------------------------- +//vector<float> GVF::getEstimatedAlignment(){ +// return estimatedAlignment; +//} +// +////-------------------------------------------------------------- +//vector< vector<float> > GVF::getDynamics(){ +// return dynamics; +//} +// +////-------------------------------------------------------------- +//vector< vector<float> > GVF::getEstimatedDynamics(){ +// return estimatedDynamics; +//} +// +////-------------------------------------------------------------- +//vector< vector<float> > GVF::getScalings(){ +// return scalings; +//} +// +////-------------------------------------------------------------- +//vector< vector<float> > GVF::getEstimatedScalings(){ +// return estimatedScalings; +//} +// +////-------------------------------------------------------------- +//vector< vector<float> > GVF::getRotations(){ +// return rotations; +//} +// +////-------------------------------------------------------------- +//vector< vector<float> > GVF::getEstimatedRotations(){ +// return estimatedRotations; +//} + +////-------------------------------------------------------------- +//vector<float> GVF::getEstimatedProbabilities(){ +// return estimatedProbabilities; +//} +// +////-------------------------------------------------------------- +//vector<float> GVF::getEstimatedLikelihoods(){ +// return estimatedLikelihoods; +//} +// +////-------------------------------------------------------------- +//vector<float> GVF::getWeights(){ +// return weights; +//} +// +////-------------------------------------------------------------- +//vector<float> GVF::getPrior(){ +// return prior; +//} + +////-------------------------------------------------------------- +//vector<vector<float> > GVF::getVecRef() { +// return vecRef; +//} +// +////-------------------------------------------------------------- +//vector<float> GVF::getVecObs() { +// return vecObs; +//} +// +////-------------------------------------------------------------- +//vector<float> GVF::getStateNoiseDist(){ +// return stateNoiseDist; +//} + +////-------------------------------------------------------------- +//int GVF::getScalingsDim(){ +// return scalingsDim; +//} +// +////-------------------------------------------------------------- +//int GVF::getRotationsDim(){ +// return rotationsDim; +//} + +//-------------------------------------------------------------- +void GVF::restart() +{ + theGesture.clear(); + initPrior(); +} + +#pragma mark - PARTICLE FILTERING + +//-------------------------------------------------------------- +void GVF::updatePrior(int n) { + + // Update alignment / dynamics / scalings + float L = gestureTemplates[classes[n]].getTemplateLength(); + alignment[n] += (*rndnorm)(normgen) * parameters.alignmentVariance + dynamics[n][0]/L; // + dynamics[n][1]/(L*L); + + if (dynamics[n].size()>1){ + dynamics[n][0] += (*rndnorm)(normgen) * parameters.dynamicsVariance[0] + dynamics[n][1]/L; + dynamics[n][1] += (*rndnorm)(normgen) * parameters.dynamicsVariance[1]; + } + else { + dynamics[n][0] += (*rndnorm)(normgen) * parameters.dynamicsVariance[0]; + } + + // for(int l= 0; l < dynamics[n].size(); l++) dynamics[n][l] += (*rndnorm)(normgen) * parameters.dynamicsVariance[l]; + for(int l= 0; l < scalings[n].size(); l++) scalings[n][l] += (*rndnorm)(normgen) * parameters.scalingsVariance[l]; + if (rotationsDim!=0) for(int l= 0; l < rotations[n].size(); l++) rotations[n][l] += (*rndnorm)(normgen) * parameters.rotationsVariance[l]; + + // update prior (bayesian incremental inference) + prior[n] = posterior[n]; +} + +//-------------------------------------------------------------- +void GVF::updateLikelihood(vector<float> obs, int n) +{ + +// if (config.normalization) for (int kk=0; kk<vobs.size(); kk++) vobs[kk] = vobs[kk] / globalNormalizationFactor; + + if(alignment[n] < 0.0) + { + alignment[n] = fabs(alignment[n]); // re-spread at the beginning +// if (config.segmentation) +// classes[n] = n % getNumberOfGestureTemplates(); + } + else if(alignment[n] > 1.0) + { + if (config.segmentation) + { +// alignment[n] = fabs(1.0-alignment[n]); // re-spread at the beginning + alignment[n] = fabs((*rndunif)(unifgen) * 0.5); // + classes[n] = n % getNumberOfGestureTemplates(); + offsets[n] = obs; + // dynamics + dynamics[n][0] = ((*rndunif)(unifgen) - 0.5) * parameters.dynamicsSpreadingRange + parameters.dynamicsSpreadingCenter; // spread speed + if (dynamics[n].size()>1) + dynamics[n][1] = ((*rndunif)(unifgen) - 0.5) * parameters.dynamicsSpreadingRange; + // scalings + for(int l = 0; l < scalings[n].size(); l++) + scalings[n][l] = ((*rndunif)(unifgen) - 0.5) * parameters.scalingsSpreadingRange + parameters.scalingsSpreadingCenter; // spread scalings + // rotations + if (rotationsDim!=0) + for(int l = 0; l < rotations[n].size(); l++) + rotations[n][l] = ((*rndunif)(unifgen) - 0.5) * parameters.rotationsSpreadingRange + parameters.rotationsSpreadingCenter; // spread rotations + // prior + prior[n] = 1/(float)parameters.numberParticles; + } + else{ + alignment[n] = fabs(2.0-alignment[n]); // re-spread at the end + } + } + + vector<float> vobs(config.inputDimensions); + setVec(vobs, obs); + + if (config.translate) + for (int j=0; j < config.inputDimensions; j++) + vobs[j] = vobs[j] - offsets[n][j]; + + + // take vref from template at the given alignment + int gestureIndex = classes[n]; + float cursor = alignment[n]; + int frameindex = min((int)(gestureTemplates[gestureIndex].getTemplateLength() - 1), + (int)(floor(cursor * gestureTemplates[gestureIndex].getTemplateLength() ) ) ); +// return gestureTemplates[gestureIndex].getTemplate()[frameindex]; + vector<float> vref = gestureTemplates[gestureIndex].getTemplate()[frameindex];; //getGestureTemplateSample(classes[n], alignment[n]); + + // Apply scaling coefficients + for (int k=0;k < config.inputDimensions; k++) + { +// if (config.normalization) vref[k] = vref[k] / globalNormalizationFactor; + vref[k] *= scalings[n][k]; + } + + // Apply rotation coefficients + if (config.inputDimensions==2) { + float tmp0=vref[0]; float tmp1=vref[1]; + vref[0] = cos(rotations[n][0])*tmp0 - sin(rotations[n][0])*tmp1; + vref[1] = sin(rotations[n][0])*tmp0 + cos(rotations[n][0])*tmp1; + } + else if (config.inputDimensions==3) { + // Rotate template sample according to the estimated angles of rotations (3d) + vector<vector< float> > RotMatrix = getRotationMatrix3d(rotations[n][0],rotations[n][1],rotations[n][2]); + vref = multiplyMat(RotMatrix, vref); + } + + // weighted euclidean distance + float dist = distance_weightedEuclidean(vref,vobs,parameters.dimWeights); + + if(parameters.distribution == 0.0f){ // Gaussian distribution + likelihood[n] = exp(- dist * 1 / (parameters.tolerance * parameters.tolerance)); + } + else { // Student's distribution + likelihood[n] = pow(dist/parameters.distribution + 1, -parameters.distribution/2 - 1); // dimension is 2 .. pay attention if editing] + } +// // if log on keep track on vref and vobs +// if (config.logOn){ +// vecRef.push_back(vref); +// vecObs = vobs; +// } +} + +//-------------------------------------------------------------- +void GVF::updatePosterior(int n) { + posterior[n] = prior[n] * likelihood[n]; +} + +//-------------------------------------------------------------- +GVFOutcomes & GVF::update(vector<float> & observation) +{ + + if (state != GVF::STATE_FOLLOWING) setState(GVF::STATE_FOLLOWING); + + theGesture.addObservation(observation); + vector<float> obs = theGesture.getLastObservation(); + + // std::cout << obs[0] << " " << obs[0] << " " + // << gestureTemplates[0].getTemplate()[20][0] << " " << gestureTemplates[0].getTemplate()[20][1] << " " + // << gestureTemplates[1].getTemplate()[20][0] << " " << gestureTemplates[1].getTemplate()[20][1] << std::endl; + + + // for each particle: perform updates of state space / likelihood / prior (weights) + float sumw = 0.0; + for(int n = 0; n< parameters.numberParticles; n++) + { + + for (int m=0; m<parameters.predictionSteps; m++) + { + updatePrior(n); + updateLikelihood(obs, n); + updatePosterior(n); + } + + sumw += posterior[n]; // sum posterior to normalise the distrib afterwards + + particles[n][0] = alignment[n]; + particles[n][1] = scalings[n][0]; + particles[n][2] = classes[n]; + } + + // normalize the weights and compute the resampling criterion + float dotProdw = 0.0; + for (int k = 0; k < parameters.numberParticles; k++){ + posterior[k] /= sumw; + dotProdw += posterior[k] * posterior[k]; + } + // avoid degeneracy (no particles active, i.e. weight = 0) by resampling + if( (1./dotProdw) < parameters.resamplingThreshold) + resampleAccordingToWeights(obs); + + // estimate outcomes + estimates(); + + return outcomes; + +} + +//-------------------------------------------------------------- +void GVF::resampleAccordingToWeights(vector<float> obs) +{ + // covennient + int numOfPart = parameters.numberParticles; + + // cumulative dist + vector<float> c(numOfPart); + + // tmp matrices + vector<int> oldClasses; + vector<float> oldAlignment; + vector< vector<float> > oldDynamics; + vector< vector<float> > oldScalings; + vector< vector<float> > oldRotations; + + setVec(oldClasses, classes); + setVec(oldAlignment, alignment); + setMat(oldDynamics, dynamics); + setMat(oldScalings, scalings); + if (rotationsDim!=0) setMat(oldRotations, rotations); + + + c[0] = 0; + for(int i = 1; i < numOfPart; i++) c[i] = c[i-1] + posterior[i]; + + + float u0 = (*rndunif)(unifgen)/numOfPart; + + int i = 0; + for (int j = 0; j < numOfPart; j++) + { + float uj = u0 + (j + 0.) / numOfPart; + + while (uj > c[i] && i < numOfPart - 1){ + i++; + } + + classes[j] = oldClasses[i]; + alignment[j] = oldAlignment[i]; + + for (int l=0;l<dynamicsDim;l++) dynamics[j][l] = oldDynamics[i][l]; + for (int l=0;l<scalingsDim;l++) scalings[j][l] = oldScalings[i][l]; + if (rotationsDim!=0) for (int l=0;l<rotationsDim;l++) rotations[j][l] = oldRotations[i][l]; + + // update posterior (partilces' weights) + posterior[j] = 1.0/(float)numOfPart; + } + +} + + +//-------------------------------------------------------------- +void GVF::estimates(){ + + + int numOfPart = parameters.numberParticles; + vector<float> probabilityNormalisation(getNumberOfGestureTemplates()); + setVec(probabilityNormalisation, 0.0f, getNumberOfGestureTemplates()); // rows are gestures + setVec(estimatedAlignment, 0.0f, getNumberOfGestureTemplates()); // rows are gestures + setMat(estimatedDynamics, 0.0f, getNumberOfGestureTemplates(), dynamicsDim); // rows are gestures, cols are features + probabilities + setMat(estimatedScalings, 0.0f, getNumberOfGestureTemplates(), scalingsDim); // rows are gestures, cols are features + probabilities + if (rotationsDim!=0) setMat(estimatedRotations, 0.0f, getNumberOfGestureTemplates(), rotationsDim); // .. + setVec(estimatedProbabilities, 0.0f, getNumberOfGestureTemplates()); // rows are gestures + setVec(estimatedLikelihoods, 0.0f, getNumberOfGestureTemplates()); // rows are gestures + + // float sumposterior = 0.; + + for(int n = 0; n < numOfPart; n++) + { + probabilityNormalisation[classes[n]] += posterior[n]; + } + + + // compute the estimated features and likelihoods + for(int n = 0; n < numOfPart; n++) + { + + // sumposterior += posterior[n]; + estimatedAlignment[classes[n]] += alignment[n] * posterior[n]; + + for(int m = 0; m < dynamicsDim; m++) + estimatedDynamics[classes[n]][m] += dynamics[n][m] * (posterior[n]/probabilityNormalisation[classes[n]]); + + for(int m = 0; m < scalingsDim; m++) + estimatedScalings[classes[n]][m] += scalings[n][m] * (posterior[n]/probabilityNormalisation[classes[n]]); + + if (rotationsDim!=0) + for(int m = 0; m < rotationsDim; m++) + estimatedRotations[classes[n]][m] += rotations[n][m] * (posterior[n]/probabilityNormalisation[classes[n]]); + + if (!isnan(posterior[n])) + estimatedProbabilities[classes[n]] += posterior[n]; + estimatedLikelihoods[classes[n]] += likelihood[n]; + } + + // calculate most probable index during scaling... + float maxProbability = 0.0f; + mostProbableIndex = -1; + + for(int gi = 0; gi < getNumberOfGestureTemplates(); gi++) + { + if(estimatedProbabilities[gi] > maxProbability){ + maxProbability = estimatedProbabilities[gi]; + mostProbableIndex = gi; + } + } + // std::cout << estimatedProbabilities[0] << " " << estimatedProbabilities[1] << std::endl; + + // outcomes.estimations.clear(); + outcomes.likelihoods.clear(); + outcomes.alignments.clear(); + outcomes.scalings.clear(); + outcomes.dynamics.clear(); + outcomes.rotations.clear(); + + // most probable gesture index + outcomes.likeliestGesture = mostProbableIndex; + + // Fill estimation for each gesture + for (int gi = 0; gi < gestureTemplates.size(); ++gi) { + + // GVFEstimation estimation; + outcomes.likelihoods.push_back(estimatedProbabilities[gi]); + outcomes.alignments.push_back(estimatedAlignment[gi]); + // estimation.probability = estimatedProbabilities[gi]; + // estimation.alignment = estimatedAlignment[gi]; + + + vector<float> gDynamics(dynamicsDim, 0.0); + for (int j = 0; j < dynamicsDim; ++j) gDynamics[j] = estimatedDynamics[gi][j]; + outcomes.dynamics.push_back(gDynamics); + + vector<float> gScalings(scalingsDim, 0.0); + for (int j = 0; j < scalingsDim; ++j) gScalings[j] = estimatedScalings[gi][j]; + outcomes.scalings.push_back(gScalings); + + vector<float> gRotations; + if (rotationsDim!=0) + { + gRotations.resize(rotationsDim); + for (int j = 0; j < rotationsDim; ++j) gRotations[j] = estimatedRotations[gi][j]; + outcomes.rotations.push_back(gRotations); + } + + // estimation.likelihood = estimatedLikelihoods[gi]; + + // push estimation for gesture gi in outcomes + // outcomes.estimations.push_back(estimation); + } + + + // assert(outcomes.estimations.size() == gestureTemplates.size()); + +} + +////-------------------------------------------------------------- +//int GVF::getMostProbableGestureIndex() +//{ +// return mostProbableIndex; +//} + +////-------------------------------------------------------------- +//GVFOutcomes GVF::getOutcomes() +//{ +// return outcomes; +//} + +////-------------------------------------------------------------- +//GVFEstimation GVF::getTemplateRecogInfo(int templateNumber) +//{ +// if (getOutcomes().estimations.size() <= templateNumber) { +// GVFEstimation estimation; +// return estimation; // blank +// } +// else +// return getOutcomes().estimations[templateNumber]; +//} +// +////-------------------------------------------------------------- +//GVFEstimation GVF::getRecogInfoOfMostProbable() // FIXME: Rename! +//{ +// int indexMostProbable = getMostProbableGestureIndex(); +// +// if ((getState() == GVF::STATE_FOLLOWING) && (getMostProbableGestureIndex() != -1)) { +// return getTemplateRecogInfo(indexMostProbable); +// } +// else { +// GVFEstimation estimation; +// return estimation; // blank +// } +//} + + +////-------------------------------------------------------------- +//vector<float> & GVF::getGestureProbabilities() +//{ +// gestureProbabilities.resize(getNumberOfGestureTemplates()); +// setVec(gestureProbabilities, 0.0f); +// for(int n = 0; n < parameters.numberParticles; n++) +// gestureProbabilities[classes[n]] += posterior[n]; +// +// return gestureProbabilities; +//} + +//-------------------------------------------------------------- +const vector<vector<float> > & GVF::getParticlesPositions(){ + return particles; +} + +////-------------------------------------------------------------- +//void GVF::setParameters(GVFParameters _parameters){ +// +// // if the number of particles has changed, we have to re-allocate matrices +// if (_parameters.numberParticles != parameters.numberParticles) +// { +// parameters = _parameters; +// +// // minimum number of particles allowed +// if (parameters.numberParticles < 4) parameters.numberParticles = 4; +// +// // re-learn +// train(); +// +// // adapt the resampling threshold in case if RT < NS +// if (parameters.numberParticles <= parameters.resamplingThreshold) +// parameters.resamplingThreshold = parameters.numberParticles / 4; +// +// } +// else +// parameters = _parameters; +// +// +//} +// +//GVFParameters GVF::getParameters(){ +// return parameters; +//} + +//-------------------------------------------------------------- +// Update the number of particles +void GVF::setNumberOfParticles(int numberOfParticles){ + + parameters.numberParticles = numberOfParticles; + + if (parameters.numberParticles < 4) // minimum number of particles allowed + parameters.numberParticles = 4; + + train(); + + if (parameters.numberParticles <= parameters.resamplingThreshold) { + parameters.resamplingThreshold = parameters.numberParticles / 4; + } + +} + +//-------------------------------------------------------------- +int GVF::getNumberOfParticles(){ + return parameters.numberParticles; // Return the number of particles +} + +//-------------------------------------------------------------- +void GVF::setActiveGestures(vector<int> activeGestureIds) +{ + int argmax = *std::max_element(activeGestureIds.begin(), activeGestureIds.end()); + if (activeGestureIds[argmax] <= gestureTemplates.size()) + { + activeGestures = activeGestureIds; + } + else + { + activeGestures.resize(gestureTemplates.size()); + std::iota(activeGestures.begin(), activeGestures.end(), 1); + } +} + +//-------------------------------------------------------------- +void GVF::setPredictionSteps(int predictionSteps) +{ + if (predictionSteps<1) + parameters.predictionSteps = 1; + else + parameters.predictionSteps = predictionSteps; +} + +//-------------------------------------------------------------- +int GVF::getPredictionSteps() +{ + return parameters.predictionSteps; // Return the number of particles +} + +//-------------------------------------------------------------- +// Update the resampling threshold used to avoid degeneracy problem +void GVF::setResamplingThreshold(int _resamplingThreshold){ + if (_resamplingThreshold >= parameters.numberParticles) + _resamplingThreshold = floor(parameters.numberParticles/2.0f); + parameters.resamplingThreshold = _resamplingThreshold; +} + +//-------------------------------------------------------------- +// Return the resampling threshold used to avoid degeneracy problem +int GVF::getResamplingThreshold(){ + return parameters.resamplingThreshold; +} + +//-------------------------------------------------------------- +// Update the standard deviation of the observation distribution +// this value acts as a tolerance for the algorithm +// low value: less tolerant so more precise but can diverge +// high value: more tolerant so less precise but converge more easily +void GVF::setTolerance(float _tolerance){ + if (_tolerance <= 0.0) _tolerance = 0.1; + parameters.tolerance = _tolerance; + tolerancesetmanually = true; +} + +//-------------------------------------------------------------- +float GVF::getTolerance(){ + return parameters.tolerance; +} + +////-------------------------------------------------------------- +void GVF::setDistribution(float _distribution){ + //nu = _distribution; + parameters.distribution = _distribution; +} +// +////-------------------------------------------------------------- +//float GVF::getDistribution(){ +// return parameters.distribution; +//} + +//void GVF::setDimWeights(vector<float> dimWeights){ +// if (dimWeights.size()!=parameters.dimWeights.size()) +// parameters.dimWeights.resize(dimWeights.size()); +// parameters.dimWeights = dimWeights; +//} +// +//vector<float> GVF::getDimWeights(){ +// return parameters.dimWeights; +//} + + +//// VARIANCE COEFFICIENTS: PHASE +////-------------------------------------------------------------- +//void GVF::setAlignmentVariance(float alignmentVariance){ +// parameters.alignmentVariance = sqrt(alignmentVariance); +//} +////-------------------------------------------------------------- +//float GVF::getAlignmentVariance(){ +// return parameters.alignmentVariance; +//} + + +// VARIANCE COEFFICIENTS: DYNAMICS +//-------------------------------------------------------------- +//void GVF::setDynamicsVariance(float dynVariance) +//{ +// for (int k=0; k< parameters.dynamicsVariance.size(); k++) +// parameters.dynamicsVariance[k] = dynVariance; +//} +//-------------------------------------------------------------- +void GVF::setDynamicsVariance(float dynVariance, int dim) +{ + if (dim == -1) + { + for (int k=0; k< parameters.dynamicsVariance.size(); k++) + parameters.dynamicsVariance[k] = dynVariance; + } + else + { + if (dim<parameters.dynamicsVariance.size()) + parameters.dynamicsVariance[dim-1] = dynVariance; + } +} + +//-------------------------------------------------------------- +void GVF::setDynamicsVariance(vector<float> dynVariance) +{ + parameters.dynamicsVariance = dynVariance; +} +//-------------------------------------------------------------- +vector<float> GVF::getDynamicsVariance() +{ + return parameters.dynamicsVariance; +} + +//-------------------------------------------------------------- +void GVF::setScalingsVariance(float scaleVariance, int dim) +{ + if (dim == -1) + { + for (int k=0; k< parameters.scalingsVariance.size(); k++) + parameters.scalingsVariance[k] = scaleVariance; + } + else + { + if (dim<parameters.scalingsVariance.size()) + parameters.scalingsVariance[dim-1] = scaleVariance; + } +} + +//-------------------------------------------------------------- +void GVF::setScalingsVariance(vector<float> scaleVariance) +{ + parameters.scaleVariance = scaleVariance; +} + +//-------------------------------------------------------------- +vector<float> GVF::getScalingsVariance() +{ + return parameters.scalingsVariance; +} + +//-------------------------------------------------------------- +void GVF::setRotationsVariance(float rotationVariance, int dim) +{ + if (dim == -1) + { + for (int k=0; k< parameters.rotationsVariance.size(); k++) + parameters.rotationsVariance[k] = rotationVariance; + } + else + { + if (dim<parameters.rotationsVariance.size()) + parameters.scalingsVariance[dim-1] = rotationVariance; + } +} + +//-------------------------------------------------------------- +void GVF::setRotationsVariance(vector<float> rotationVariance) +{ + parameters.scaleVariance = rotationVariance; +} + +//-------------------------------------------------------------- +vector<float> GVF::getRotationsVariance() +{ + return parameters.rotationsVariance; +} + +//-------------------------------------------------------------- +void GVF::setSpreadDynamics(float center, float range, int dim) +{ + parameters.dynamicsSpreadingCenter = center; + parameters.dynamicsSpreadingRange = range; +} + +//-------------------------------------------------------------- +void GVF::setSpreadScalings(float center, float range, int dim) +{ + parameters.scalingsSpreadingCenter = center; + parameters.scalingsSpreadingRange = range; +} + +//-------------------------------------------------------------- +void GVF::setSpreadRotations(float center, float range, int dim) +{ + parameters.rotationsSpreadingCenter = center; + parameters.rotationsSpreadingRange = range; +} + +//-------------------------------------------------------------- +void GVF::translate(bool translateFlag) +{ + config.translate = translateFlag; +} + +//-------------------------------------------------------------- +void GVF::segmentation(bool segmentationFlag) +{ + config.segmentation = segmentationFlag; +} + + +// UTILITIES + +//-------------------------------------------------------------- +// Save function. This function is used by applications to save the +// vocabulary in a text file given by filename (filename is also the complete path + filename) +void GVF::saveTemplates(string filename){ + + std::string directory = filename; + + std::ofstream file_write(directory.c_str()); + + for(int i=0; i < gestureTemplates.size(); i++) // Number of gesture templates + { + file_write << "template " << i << " " << config.inputDimensions << endl; + vector<vector<float> > templateTmp = gestureTemplates[i].getTemplate(); + for(int j = 0; j < templateTmp.size(); j++) + { + for(int k = 0; k < config.inputDimensions; k++) + file_write << templateTmp[j][k] << " "; + file_write << endl; + } + } + file_write.close(); + +} + + + + +//-------------------------------------------------------------- +// Load function. This function is used by applications to load a vocabulary +// given by filename (filename is also the complete path + filename) +void GVF::loadTemplates(string filename){ + // clear(); + // + + GVFGesture loadedGesture; + loadedGesture.clear(); + + ifstream infile; + stringstream doung; + + infile.open (filename.c_str(), ifstream::in); + // + string line; + vector<string> list; + int cl = -1; + while(!infile.eof()) + { + cl++; + infile >> line; + + list.push_back(line); + } + + int k = 0; + int template_id = -1; + int template_dim = 0; + + + while (k < (list.size() - 1)){ // TODO to be changed if dim>2 + + + if (!strcmp(list[k].c_str(),"template")) + { + template_id = atoi(list[k+1].c_str()); + template_dim = atoi(list[k+2].c_str()); + k = k + 3; + + if (loadedGesture.getNumberOfTemplates() > 0){ + addGestureTemplate(loadedGesture); + loadedGesture.clear(); + } + } + + if (template_dim <= 0){ + //post("bug dim = -1"); + } + else{ + + vector<float> vect(template_dim); + + for (int kk = 0; kk < template_dim; kk++) + vect[kk] = (float) atof(list[k + kk].c_str()); + + loadedGesture.addObservation(vect); + } + k += template_dim; + + } + + if (loadedGesture.getTemplateLength() > 0){ + addGestureTemplate(loadedGesture); + loadedGesture.clear(); + } + + infile.close(); +} + + + + + + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/GVF/GVF.h b/examples/ofx/Bitalino_rapidmix/dependencies/GVF/GVF.h new file mode 100755 index 0000000..647fe7c --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/GVF/GVF.h @@ -0,0 +1,487 @@ +/** + * Gesture Variation Follower class allows for early gesture recognition and variation tracking + * + * @details Original algorithm designed and implemented in 2011 at Ircam Centre Pompidou + * by Baptiste Caramiaux and Nicola Montecchio. The library has been created and is maintained by Baptiste Caramiaux + * + * Copyright (C) 2015 Baptiste Caramiaux, Nicola Montecchio + * STMS lab Ircam-CRNS-UPMC, University of Padova, Goldsmiths College University of London + * + * The library is under the GNU Lesser General Public License (LGPL v3) + */ + + +#ifndef _H_GVF +#define _H_GVF + +#include "GVFUtils.h" +#include "GVFGesture.h" +#include <random> +#include <iostream> +#include <iomanip> +#include <string> +#include <map> +#include <random> +#include <cmath> + + +using namespace std; + +class GVF +{ + +public: + + /** + * GVF possible states + */ + enum GVFState + { + STATE_CLEAR = 0, /**< STATE_CLEAR: clear the GVF and be in standby */ + STATE_LEARNING, /**< STATE_LEARNING: recording mode, input gestures are added to the templates */ + STATE_FOLLOWING, /**< STATE_FOLLOWING: tracking mode, input gestures are classifed and their variations tracked (need the GVF to be trained) */ + STATE_BYPASS /**< STATE_BYPASS: by pass GVF but does not erase templates or training */ + }; + + +#pragma mark - Constructors + + /** + * GVF default constructor + * @details use default configuration and parameters, can be changed using accessors + */ + GVF(); + + /** + * GVF default destructor + */ + ~GVF(); + +#pragma mark - Gesture templates + + /** + * Start a gesture either to be recorded or followed + */ + void startGesture(); + + /** + * Add an observation to a gesture template + * @details + * @param data vector of features + */ + void addObservation(vector<float> data); + + /** + * Add gesture template to the vocabulary + * + * @details a gesture template is a GVFGesture object and can be added directly to the vocabulqry or + * recorded gesture templates by using this method + * @param gestureTemplate the gesture template to be recorded + */ + void addGestureTemplate(GVFGesture & gestureTemplate); + + /** + * Replace a specific gesture template by another + * + * @param gestureTemplate the gesture template to be used + * @param index the gesture index (as integer) to be replaced + */ + void replaceGestureTemplate(GVFGesture & gestureTemplate, int index); + + /** + * Remove a specific template + * + * @param index the gesture index (as integer) to be removed + */ + void removeGestureTemplate(int index); + + /** + * Remove every recorded gesture template + */ + void removeAllGestureTemplates(); + + /** + * Get a specific gesture template a gesture template by another + * + * @param index the index of the template to be returned + * @return the template + */ + GVFGesture & getGestureTemplate(int index); + + /** + * Get every recorded gesture template + * + * @return the vecotr of gesture templates + */ + vector<GVFGesture> & getAllGestureTemplates(); + + /** + * Get number of gesture templates in the vocabulary + * @return the number of templates + */ + int getNumberOfGestureTemplates(); + + /** + * Get gesture classes + */ + vector<int> getGestureClasses(); + + +#pragma mark - Recognition and tracking + + /** + * Set the state of GVF + * @param _state the state to be given to GVF, it is a GVFState + * @param indexes an optional argument providing a list of gesture index. + * In learning mode the index of the gesture being recorded can be given as an argument + * since the type is vector<int>, it should be something like '{3}'. In following mode, the list of indexes + * is the list of active gestures to be considered in the recognition/tracking. + */ + void setState(GVFState _state, vector<int> indexes = vector<int>()); + + /** + * Return the current state of GVF + * @return GVFState the current state + */ + GVFState getState(); + + /** + * Compute the estimated gesture and its potential variations + * + * @details infers the probability that the current observation belongs to + * one of the recorded gesture template and track the variations of this gesture + * according to each template + * + * @param observation vector of the observation data at current time + * @return the estimated probabilities and variaitons relative to each template + */ + GVFOutcomes & update(vector<float> & observation); + + /** + * Define a subset of gesture templates on which to perform the recognition + * and variation tracking + * + * @details By default every recorded gesture template is considered + * @param set of gesture template index to consider + */ + void setActiveGestures(vector<int> activeGestureIds); + + /** + * Restart GVF + * @details re-sample particles at the origin (i.e. initial prior) + */ + void restart(); + + /** + * Clear GVF + * @details delete templates + */ + void clear(); + + /** + * Translate data according to the first point + * @details substract each gesture feature by the first point of the gesture + * @param boolean to activate or deactivate translation + */ + void translate(bool translateFlag); + + /** + * Segment gestures within a continuous gesture stream + * @details if segmentation is true, the method will segment a continuous gesture into a sequence + * of gestures. In other words no need to call the method startGesture(), it is done automatically + * @param segmentationFlag boolean to activate or deactivate segmentation + */ + void segmentation(bool segmentationFlag); + +#pragma mark - [ Accessors ] +#pragma mark > Parameters + /** + * Set tolerance between observation and estimation + * @details tolerance depends on the range of the data + * typially tolerance = (data range)/3.0; + * @param tolerance value + */ + void setTolerance(float tolerance); + + /** + * Get the obervation tolerance value + * @details see setTolerance(float tolerance) + * @return the current toleranc value + */ + float getTolerance(); + + void setDistribution(float _distribution); + + /** + * Set number of particles used in estimation + * @details default valye is 1000, note that the computational + * cost directly depends on the number of particles + * @param new number of particles + */ + void setNumberOfParticles(int numberOfParticles); + + /** + * Get the current number of particles + * @return the current number of particles + */ + int getNumberOfParticles(); + + /** + * Number of prediciton steps + * @details it is possible to leave GVF to perform few steps of prediction + * ahead which can be useful to estimate more fastly the variations. Default value is 1 + * which means no prediction ahead + * @param the number of prediction steps + */ + void setPredictionSteps(int predictionSteps); + + /** + * Get the current number of prediction steps + * @return current number of prediciton steps + */ + int getPredictionSteps(); + + /** + * Set resampling threshold + * @details resampling threshold is the minimum number of active particles + * before resampling all the particles by the estimated posterior distribution. + * in other words, it re-targets particles around the best current estimates + * @param the minimum number of particles (default is (number of particles)/2) + */ + void setResamplingThreshold(int resamplingThreshold); + + /** + * Get the current resampling threshold + * @return resampling threshold + */ + int getResamplingThreshold(); + +#pragma mark > Dynamics + /** + * Change variance of adaptation in dynamics + * @details if dynamics adaptation variance is high the method will adapt faster to + * fast changes in dynamics. Dynamics is 2-dimensional: the first dimension is the speed + * The second dimension is the acceleration. + * + * Typically the variance is the average amount the speed or acceleration can change from + * one sample to another. As an example, if the relative estimated speed can change from 1.1 to 1.2 + * from one sample to another, the variance should allow a change of 0.1 in speed. So the variance + * should be set to 0.1*0.1 = 0.01 + * + * @param dynVariance dynamics variance value + * @param dim optional dimension of the dynamics for which the change of variance is applied (default value is 1) + */ + void setDynamicsVariance(float dynVariance, int dim = -1); + + /** + * Change variance of adaptation in dynamics + * @details See setDynamicsVariance(float dynVariance, int dim) for more details + * @param dynVariance vector of dynamics variances, each vector index is the variance to be applied to + * each dynamics dimension (consequently the vector should be 2-dimensional). + */ + void setDynamicsVariance(vector<float> dynVariance); + + /** + * Get dynamics variances + * @return the vector of variances (the returned vector is 2-dimensional) + */ + vector<float> getDynamicsVariance(); + +#pragma mark > Scalings + /** + * Change variance of adaptation in scalings + * @details if scalings adaptation variance is high the method will adapt faster to + * fast changes in relative sizes. There is one scaling variance for each dimension + * of the input gesture. If the gesture is 2-dimensional, the scalings variances will + * also be 2-dimensional. + * + * Typically the variance is the average amount the size can change from + * one sample to another. As an example, if the relative estimated size changes from 1.1 to 1.15 + * from one sample to another, the variance should allow a change of 0.05 in size. So the variance + * should be set to 0.05*0.05 = 0.0025 + * + * @param scalings variance value + * @param dimension of the scalings for which the change of variance is applied + */ + void setScalingsVariance(float scaleVariance, int dim = -1); + + /** + * Change variance of adaptation in dynamics + * @details See setScalingsVariance(float scaleVariance, int dim) for more details + * @param vector of scalings variances, each vector index is the variance to be applied to + * each scaling dimension. + * @param vector of variances (should be the size of the template gestures dimension) + */ + void setScalingsVariance(vector<float> scaleVariance); + + /** + * Get scalings variances + * @return the vector of variances + */ + vector<float> getScalingsVariance(); + +#pragma mark > Rotations + /** + * Change variance of adaptation in orientation + * @details if rotation adaptation variance is high the method will adapt faster to + * fast changes in relative orientation. If the gesture is 2-dimensional, there is + * one variance value since the rotation can be defined by only one angle of rotation. If + * the gesture is 3-dimensional, there are 3 variance values since the rotation in 3-d is + * defined by 3 rotation angles. For any other dimension, the rotation is not defined. + * + * The variance is the average amount the orientation can change from one sample to another. + * As an example, if the relative orientation in rad changes from 0.1 to 0.2 from one observation + * to another, the variance should allow a change of 0.1 in rotation angle. So the variance + * should be set to 0.1*0.1 = 0.01 + * + * @param rotationsVariance rotation variance value + * @param dim optional dimension of the rotation for which the change of variance is applied + */ + void setRotationsVariance(float rotationsVariance, int dim = -1); + + /** + * Change variance of adaptation in orientation + * @details See setRotationsVariance(float rotationsVariance, int dim) for more details + * @param vector of rotation variances, each vector index is the variance to be applied to + * each rotation angle (1 or 3) + * @param vector of variances (should be 1 if the the template gestures are 2-dim or 3 if + * they are 3-dim) + */ + void setRotationsVariance(vector<float> rotationsVariance); + + /** + * Get rotation variances + * @return the vector of variances + */ + vector<float> getRotationsVariance(); + + +#pragma mark > Others + + /** + * Get particle values + * @return vector of list of estimated particles + */ + const vector<vector<float> > & getParticlesPositions(); + + /** + * Set the interval on which the dynamics values should be spread at the beginning (before adaptation) + * @details this interval can be used to concentrate the potential dynamics value on a narrow interval, + * typically around 1 (the default value), for instance between -0.05 and 0.05, or to allow at the very + * beginning, high changes in dynamics by spreading, for instance between 0.0 and 2.0 + * @param min lower value of the inital values for dynamics + * @param max higher value of the inital values for dynamics + * @param dim the dimension on which the change of initial interval should be applied (optional) + */ + void setSpreadDynamics(float min, float max, int dim = -1); + + /** + * Set the interval on which the scalings values should be spread at the beginning (before adaptation) + * @details this interval can be used to concentrate the potential scalings value on a narrow interval, + * typically around 1.0 (the default value), for instance between 0.95 and 1.05, or to allow at the very + * beginning high changes in dynamics by spreading, for instance, between 0.0 and 2.0 + * @param min lower value of the inital values for scalings + * @param max higher value of the inital values for scalings + * @param dim the dimension on which the change of initial interval should be applied (optional) + */ + void setSpreadScalings(float min, float max, int dim = -1); + + /** + * Set the interval on which the angle of rotation values should be spread at the beginning (before adaptation) + * @details this interval can be used to concentrate the potential angle values on a narrow interval, + * typically around 0.0 (the default value), for instance between -0.05 and 0.05, or to allow at the very + * beginning, high changes in orientation by spreading, for instance, between -0.5 and 0.5 + * @param min lower value of the inital values for angle of rotation + * @param max higher value of the inital values for angle of rotation + * @param dim the dimension on which the change of initial interval should be applied (optional) + */ + void setSpreadRotations(float min, float max, int dim = -1); + +#pragma mark - Import/Export templates + /** + * Export template data in a filename + * @param filename file name as a string + */ + void saveTemplates(string filename); + + /** + * Import template data in a filename + * @details needs to respect a given format provided by saveTemplates() + * @param file name as a string + */ + void loadTemplates(string filename); + +protected: + + GVFConfig config; // Structure storing the configuration of GVF (in GVFUtils.h) + GVFParameters parameters; // Structure storing the parameters of GVF (in GVFUtils.h) + GVFOutcomes outcomes; // Structure storing the outputs of GVF (in GVFUtils.h) + GVFState state; // State (defined above) + GVFGesture theGesture; // GVFGesture object to handle incoming data in learning and following modes + + vector<GVFGesture> gestureTemplates; // vector storing the gesture templates recorded when using the methods addObservation(vector<float> data) or addGestureTemplate(GVFGesture & gestureTemplate) + + vector<float> dimWeights; // TOOD: to be put in parameters? + vector<float> maxRange; + vector<float> minRange; + int dynamicsDim; // dynamics state dimension + int scalingsDim; // scalings state dimension + int rotationsDim; // rotation state dimension + float globalNormalizationFactor; // flagged if normalization + int mostProbableIndex; // cached most probable index + int learningGesture; + + vector<int> classes; // gesture index for each particle [ns x 1] + vector<float > alignment; // alignment index (between 0 and 1) [ns x 1] + vector<vector<float> > dynamics; // dynamics estimation [ns x 2] + vector<vector<float> > scalings; // scalings estimation [ns x D] + vector<vector<float> > rotations; // rotations estimation [ns x A] + vector<float> weights; // weight of each particle [ns x 1] + vector<float> prior; // prior of each particle [ns x 1] + vector<float> posterior; // poserior of each particle [ns x 1] + vector<float> likelihood; // likelihood of each particle [ns x 1] + + // estimations + vector<float> estimatedGesture; // .. + vector<float> estimatedAlignment; // .. + vector<vector<float> > estimatedDynamics; // .. + vector<vector<float> > estimatedScalings; // .. + vector<vector<float> > estimatedRotations; // .. + vector<float> estimatedProbabilities; // .. + vector<float> estimatedLikelihoods; // .. + vector<float> absoluteLikelihoods; // .. + + bool tolerancesetmanually; + + + vector<vector<float> > offsets; // translation offset + + vector<int> activeGestures; + + vector<float> gestureProbabilities; + vector< vector<float> > particles; + +private: + + // random number generator + std::random_device rd; + std::mt19937 normgen; + std::normal_distribution<float> *rndnorm; + std::default_random_engine unifgen; + std::uniform_real_distribution<float> *rndunif; + +#pragma mark - Private methods for model mechanics + void initPrior(); + void initNoiseParameters(); + void updateLikelihood(vector<float> obs, int n); + void updatePrior(int n); + void updatePosterior(int n); + void resampleAccordingToWeights(vector<float> obs); + void estimates(); // update estimated outcome + void train(); + + +}; + + +#endif \ No newline at end of file diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/GVF/GVFGesture.h b/examples/ofx/Bitalino_rapidmix/dependencies/GVF/GVFGesture.h new file mode 100644 index 0000000..20a3fa7 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/GVF/GVFGesture.h @@ -0,0 +1,240 @@ +// +// GVFGesture.h +// gvf +// +// Created by Baptiste Caramiaux on 22/01/16. +// +// + +#ifndef GVFGesture_h +#define GVFGesture_h + +#ifndef MAX +#define MAX(a,b) (((a) > (b)) ? (a) : (b)) +#endif + +#ifndef MIN +#define MIN(a,b) (((a) < (b)) ? (a) : (b)) +#endif + + +class GVFGesture +{ +public: + + GVFGesture() + { + inputDimensions = 2; + setAutoAdjustRanges(true); + templatesRaw = vector<vector<vector<float > > >(); + templatesNormal = vector<vector<vector<float > > >(); + clear(); + } + + GVFGesture(int inputDimension){ + inputDimensions = inputDimension; + setAutoAdjustRanges(true); + templatesRaw = vector<vector<vector<float > > >(); + templatesNormal = vector<vector<vector<float > > >(); + clear(); + } + + ~GVFGesture(){ + clear(); + } + + void setNumberDimensions(int dimensions){ + assert(dimensions > 0); + inputDimensions = dimensions; + } + + void setAutoAdjustRanges(bool b){ + // if(b) bIsRangeMinSet = bIsRangeMaxSet = false; + bAutoAdjustNormalRange = b; + } + + void setMax(float x, float y){ + assert(inputDimensions == 2); + vector<float> r(2); + r[0] = x; r[1] = y; + setMaxRange(r); + } + + void setMin(float x, float y){ + assert(inputDimensions == 2); + vector<float> r(2); + r[0] = x; r[1] = y; + setMinRange(r); + } + + void setMax(float x, float y, float z){ + assert(inputDimensions == 3); + vector<float> r(3); + r[0] = x; r[1] = y; r[2] = z; + setMaxRange(r); + } + + void setMin(float x, float y, float z){ + assert(inputDimensions == 3); + vector<float> r(3); + r[0] = x; r[1] = y; r[2] = z; + setMinRange(r); + } + + void setMaxRange(vector<float> observationRangeMax){ + this->observationRangeMax = observationRangeMax; + // bIsRangeMaxSet = true; + normalise(); + } + + void setMinRange(vector<float> observationRangeMin){ + this->observationRangeMin = observationRangeMin; + // bIsRangeMinSet = true; + normalise(); + } + + vector<float>& getMaxRange(){ + return observationRangeMax; + } + + vector<float>& getMinRange(){ + return observationRangeMin; + } + + void autoAdjustMinMax(vector<float> & observation){ + if(observationRangeMax.size() < inputDimensions){ + observationRangeMax.assign(inputDimensions, -INFINITY); + observationRangeMin.assign(inputDimensions, INFINITY); + } + for(int i = 0; i < inputDimensions; i++){ + observationRangeMax[i] = MAX(observationRangeMax[i], observation[i]); + observationRangeMin[i] = MIN(observationRangeMin[i], observation[i]); + } + } + + void addObservation(vector<float> observation, int templateIndex = 0){ + if (observation.size() != inputDimensions) + inputDimensions = int(observation.size()); + + // check we have a valid templateIndex and correct number of input dimensions + assert(templateIndex <= templatesRaw.size()); + assert(observation.size() == inputDimensions); + + // if the template index is same as the number of temlates make a new template + if(templateIndex == templatesRaw.size()){ // make a new template + + // reserve space in raw and normal template storage + templatesRaw.resize(templatesRaw.size() + 1); + templatesNormal.resize(templatesNormal.size() + 1); + + } + + if(templatesRaw[templateIndex].size() == 0) + { + templateInitialObservation = observation; + templateInitialNormal = observation; + } + + for(int j = 0; j < observation.size(); j++) + observation[j] = observation[j] - templateInitialObservation[j]; + + // store the raw observation + templatesRaw[templateIndex].push_back(observation); + + autoAdjustMinMax(observation); + + normalise(); + } + + + + void normalise() + { + templatesNormal.resize(templatesRaw.size()); + for(int t = 0; t < templatesRaw.size(); t++) + { + templatesNormal[t].resize(templatesRaw[t].size()); + for(int o = 0; o < templatesRaw[t].size(); o++) + { + templatesNormal[t][o].resize(inputDimensions); + for(int d = 0; d < inputDimensions; d++) + { + templatesNormal[t][o][d] = templatesRaw[t][o][d] / (observationRangeMax[d] - observationRangeMin[d]); + templateInitialNormal[d] = templateInitialObservation[d] / (observationRangeMax[d] - observationRangeMin[d]); + } + } + } + } + + void setTemplate(vector< vector<float> > & observations, int templateIndex = 0){ + for(int i = 0; i < observations.size(); i++){ + addObservation(observations[i], templateIndex); + } + } + + vector< vector<float> > & getTemplate(int templateIndex = 0){ + assert(templateIndex < templatesRaw.size()); + return templatesRaw[templateIndex]; + } + + int getNumberOfTemplates(){ + return int(templatesRaw.size()); + } + + int getNumberDimensions(){ + return inputDimensions; + } + + int getTemplateLength(int templateIndex = 0){ + return int(templatesRaw[templateIndex].size()); + } + + int getTemplateDimension(int templateIndex = 0){ + return int(templatesRaw[templateIndex][0].size()); + } + + vector<float>& getLastObservation(int templateIndex = 0){ + return templatesRaw[templateIndex][templatesRaw[templateIndex].size() - 1]; + } + + vector< vector< vector<float> > >& getTemplates(){ + return templatesRaw; + } + + vector<float>& getInitialObservation(){ + return templateInitialObservation; + } + + void deleteTemplate(int templateIndex = 0) + { + assert(templateIndex < templatesRaw.size()); + templatesRaw[templateIndex].clear(); + templatesNormal[templateIndex].clear(); + } + + void clear() + { + templatesRaw.clear(); + templatesNormal.clear(); + observationRangeMax.assign(inputDimensions, -INFINITY); + observationRangeMin.assign(inputDimensions, INFINITY); + } + +private: + + int inputDimensions; + bool bAutoAdjustNormalRange; + + vector<float> observationRangeMax; + vector<float> observationRangeMin; + + vector<float> templateInitialObservation; + vector<float> templateInitialNormal; + + vector< vector< vector<float> > > templatesRaw; + vector< vector< vector<float> > > templatesNormal; + + vector<vector<float> > gestureDataFromFile; +}; + +#endif /* GVFGesture_h */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/GVF/GVFUtils.h b/examples/ofx/Bitalino_rapidmix/dependencies/GVF/GVFUtils.h new file mode 100755 index 0000000..28c5270 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/GVF/GVFUtils.h @@ -0,0 +1,309 @@ +// +// GVFTypesAndUtils.h +// +// +// + +#ifndef __H_GVFTYPES +#define __H_GVFTYPES + +#include <map> +#include <vector> +#include <iostream> +#include <random> +#include <iostream> +#include <math.h> +#include <assert.h> + +using namespace std; + +/** + * Configuration structure + */ +typedef struct +{ + int inputDimensions; /**< input dimesnion */ + bool translate; /**< translate flag */ + bool segmentation; /**< segmentation flag */ +} GVFConfig; + +/** + * Parameters structure + */ +typedef struct +{ + float tolerance; /**< input dimesnion */ + float distribution; + int numberParticles; + int resamplingThreshold; + float alignmentVariance; + float speedVariance; + vector<float> scaleVariance; + vector<float> dynamicsVariance; + vector<float> scalingsVariance; + vector<float> rotationsVariance; + // spreadings + float alignmentSpreadingCenter; + float alignmentSpreadingRange; + float dynamicsSpreadingCenter; + float dynamicsSpreadingRange; + float scalingsSpreadingCenter; + float scalingsSpreadingRange; + float rotationsSpreadingCenter; + float rotationsSpreadingRange; + + int predictionSteps; + vector<float> dimWeights; +} GVFParameters; + +// Outcomes structure +typedef struct +{ + int likeliestGesture; + vector<float> likelihoods; + vector<float> alignments; + vector<vector<float> > dynamics; + vector<vector<float> > scalings; + vector<vector<float> > rotations; +} GVFOutcomes; + + +//-------------------------------------------------------------- +// init matrix by allocating memory +template <typename T> +inline void initMat(vector< vector<T> > & M, int rows, int cols){ + M.resize(rows); + for (int n=0; n<rows; n++){ + M[n].resize(cols); + } +} + +//-------------------------------------------------------------- +// init matrix and copy values from another matrix +template <typename T> +inline void setMat(vector< vector<T> > & C, vector< vector<float> > & M){ + int rows = int(M.size()); + int cols = int(M[0].size()); + //C.resize(rows); + C = vector<vector<T> >(rows); + for (int n=0; n<rows; n++){ + //C[n].resize(cols); + C[n] = vector<T>(cols); + for (int m=0;m<cols;m++){ + C[n][m] = M[n][m]; + } + } +} + +//-------------------------------------------------------------- +// init matrix by allocating memory and fill with T value +template <typename T> +inline void setMat(vector< vector<T> > & M, T value, int rows, int cols){ + M.resize(rows); + for (int n=0; n<rows; n++){ + M[n].resize(cols); + for (int m=0; m<cols; m++){ + M[n][m] = value; + } + } +} + +//-------------------------------------------------------------- +// set matrix filled with T value +template <typename T> +inline void setMat(vector< vector<T> > & M, T value){ + for (int n=0; n<M.size(); n++){ + for (int m=0; m<M[n].size(); m++){ + M[n][m] = value; + } + } +} + +//-------------------------------------------------------------- +template <typename T> +inline void printMat(vector< vector<T> > & M){ + for (int k=0; k<M.size(); k++){ + cout << k << ": "; + for (int l=0; l<M[0].size(); l++){ + cout << M[k][l] << " "; + } + cout << endl; + } + cout << endl; +} + +//-------------------------------------------------------------- +template <typename T> +inline void printVec(vector<T> & V){ + for (int k=0; k<V.size(); k++){ + cout << k << ": " << V[k] << (k == V.size() - 1 ? "" : " ,"); + } + cout << endl; +} + +//-------------------------------------------------------------- +template <typename T> +inline void initVec(vector<T> & V, int rows){ + V.resize(rows); +} + +//-------------------------------------------------------------- +template <typename T> +inline void setVec(vector<T> & C, vector<int> &V){ + int rows = int(V.size()); + C = vector<T>(rows); + //C.resize(rows); + for (int n=0; n<rows; n++){ + C[n] = V[n]; + } +} + +//-------------------------------------------------------------- +template <typename T> +inline void setVec(vector<T> & C, vector<float> & V){ + int rows = int(V.size()); + C.resize(rows); + for (int n=0; n<rows; n++){ + C[n] = V[n]; + } +} + +//-------------------------------------------------------------- +template <typename T> +inline void setVec(vector<T> & V, T value){ + for (int n=0; n<V.size(); n++){ + V[n] = value; + } +} + +//-------------------------------------------------------------- +template <typename T> +inline void setVec(vector<T> & V, T value, int rows){ + V.resize(rows); + setVec(V, value); +} + +//-------------------------------------------------------------- +template <typename T> +inline vector< vector<T> > dotMat(vector< vector<T> > & M1, vector< vector<T> > & M2){ + // TODO(Baptiste) +} + +//-------------------------------------------------------------- +template <typename T> +inline vector< vector<T> > multiplyMatf(vector< vector<T> > & M1, T v){ + vector< vector<T> > multiply; + initMat(multiply, M1.size(), M1[0].size()); + for (int i=0; i<M1.size(); i++){ + for (int j=0; j<M1[i].size(); j++){ + multiply[i][j] = M1[i][j] * v; + } + } + return multiply; +} + +//-------------------------------------------------------------- +template <typename T> +inline vector< vector<T> > multiplyMatf(vector< vector<T> > & M1, vector< vector<T> > & M2){ + assert(M1[0].size() == M2.size()); // columns in M1 == rows in M2 + vector< vector<T> > multiply; + initMat(multiply, M1.size(), M2[0].size()); // rows in M1 x cols in M2 + for (int i=0; i<M1.size(); i++){ + for (int j=0; j<M2[i].size(); j++){ + multiply[i][j] = 0.0f; + for(int k=0; k<M1[0].size(); k++){ + multiply[i][j] += M1[i][k] * M2[k][j]; + } + + } + } + return multiply; +} + +//-------------------------------------------------------------- +template <typename T> +inline vector<T> multiplyMat(vector< vector<T> > & M1, vector< T> & Vect){ + assert(Vect.size() == M1[0].size()); // columns in M1 == rows in Vect + vector<T> multiply; + initVec(multiply, Vect.size()); + for (int i=0; i<M1.size(); i++){ + multiply[i] = 0.0f; + for (int j=0; j<M1[i].size(); j++){ + multiply[i] += M1[i][j] * Vect[j]; + } + } + return multiply; +} + +//-------------------------------------------------------------- +template <typename T> +inline float getMeanVec(vector<T>& V){ + float tSum = 0.0f; + for (int n=0; n<V.size(); n++){ + tSum += V[n]; + } + return tSum / (float)V.size(); +} + +template <typename T> +inline vector<vector<float> > getRotationMatrix3d(T phi, T theta, T psi) +{ + vector< vector<float> > M; + initMat(M,3,3); + + M[0][0] = cos(theta)*cos(psi); + M[0][1] = -cos(phi)*sin(psi)+sin(phi)*sin(theta)*cos(psi); + M[0][2] = sin(phi)*sin(psi)+cos(phi)*sin(theta)*cos(psi); + + M[1][0] = cos(theta)*sin(psi); + M[1][1] = cos(phi)*cos(psi)+sin(phi)*sin(theta)*sin(psi); + M[1][2] = -sin(phi)*cos(psi)+cos(phi)*sin(theta)*sin(psi); + + M[2][0] = -sin(theta); + M[2][1] = sin(phi)*cos(theta); + M[2][2] = cos(phi)*cos(theta); + + return M; +} + +template <typename T> +float distance_weightedEuclidean(vector<T> x, vector<T> y, vector<T> w) +{ + int count = x.size(); + if (count <= 0) return 0; + float dist = 0.0; + for(int k = 0; k < count; k++) dist += w[k] * pow((x[k] - y[k]), 2); + return dist; +} + +////-------------------------------------------------------------- +//vector<vector<float> > getRotationMatrix3d(float phi, float theta, float psi) +//{ +// vector< vector<float> > M; +// initMat(M,3,3); +// +// M[0][0] = cos(theta)*cos(psi); +// M[0][1] = -cos(phi)*sin(psi)+sin(phi)*sin(theta)*cos(psi); +// M[0][2] = sin(phi)*sin(psi)+cos(phi)*sin(theta)*cos(psi); +// +// M[1][0] = cos(theta)*sin(psi); +// M[1][1] = cos(phi)*cos(psi)+sin(phi)*sin(theta)*sin(psi); +// M[1][2] = -sin(phi)*cos(psi)+cos(phi)*sin(theta)*sin(psi); +// +// M[2][0] = -sin(theta); +// M[2][1] = sin(phi)*cos(theta); +// M[2][2] = cos(phi)*cos(theta); +// +// return M; +//} + +//float distance_weightedEuclidean(vector<float> x, vector<float> y, vector<float> w) +//{ +// int count = x.size(); +// if (count <= 0) return 0; +// float dist = 0.0; +// for(int k = 0; k < count; k++) dist += w[k] * pow((x[k] - y[k]), 2); +// return dist; +//} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/GVF/LICENSE b/examples/ofx/Bitalino_rapidmix/dependencies/GVF/LICENSE new file mode 100755 index 0000000..6600f1c --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/GVF/LICENSE @@ -0,0 +1,165 @@ +GNU LESSER 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. + + + This version of the GNU Lesser General Public License incorporates +the terms and conditions of version 3 of the GNU General Public +License, supplemented by the additional permissions listed below. + + 0. Additional Definitions. + + As used herein, "this License" refers to version 3 of the GNU Lesser +General Public License, and the "GNU GPL" refers to version 3 of the GNU +General Public License. + + "The Library" refers to a covered work governed by this License, +other than an Application or a Combined Work as defined below. + + An "Application" is any work that makes use of an interface provided +by the Library, but which is not otherwise based on the Library. +Defining a subclass of a class defined by the Library is deemed a mode +of using an interface provided by the Library. + + A "Combined Work" is a work produced by combining or linking an +Application with the Library. The particular version of the Library +with which the Combined Work was made is also called the "Linked +Version". + + The "Minimal Corresponding Source" for a Combined Work means the +Corresponding Source for the Combined Work, excluding any source code +for portions of the Combined Work that, considered in isolation, are +based on the Application, and not on the Linked Version. + + The "Corresponding Application Code" for a Combined Work means the +object code and/or source code for the Application, including any data +and utility programs needed for reproducing the Combined Work from the +Application, but excluding the System Libraries of the Combined Work. + + 1. Exception to Section 3 of the GNU GPL. + + You may convey a covered work under sections 3 and 4 of this License +without being bound by section 3 of the GNU GPL. + + 2. Conveying Modified Versions. + + If you modify a copy of the Library, and, in your modifications, a +facility refers to a function or data to be supplied by an Application +that uses the facility (other than as an argument passed when the +facility is invoked), then you may convey a copy of the modified +version: + + a) under this License, provided that you make a good faith effort to + ensure that, in the event an Application does not supply the + function or data, the facility still operates, and performs + whatever part of its purpose remains meaningful, or + + b) under the GNU GPL, with none of the additional permissions of + this License applicable to that copy. + + 3. Object Code Incorporating Material from Library Header Files. + + The object code form of an Application may incorporate material from +a header file that is part of the Library. You may convey such object +code under terms of your choice, provided that, if the incorporated +material is not limited to numerical parameters, data structure +layouts and accessors, or small macros, inline functions and templates +(ten or fewer lines in length), you do both of the following: + + a) Give prominent notice with each copy of the object code that the + Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the object code with a copy of the GNU GPL and this license + document. + + 4. Combined Works. + + You may convey a Combined Work under terms of your choice that, +taken together, effectively do not restrict modification of the +portions of the Library contained in the Combined Work and reverse +engineering for debugging such modifications, if you also do each of +the following: + + a) Give prominent notice with each copy of the Combined Work that + the Library is used in it and that the Library and its use are + covered by this License. + + b) Accompany the Combined Work with a copy of the GNU GPL and this license + document. + + c) For a Combined Work that displays copyright notices during + execution, include the copyright notice for the Library among + these notices, as well as a reference directing the user to the + copies of the GNU GPL and this license document. + + d) Do one of the following: + + 0) Convey the Minimal Corresponding Source under the terms of this + License, and the Corresponding Application Code in a form + suitable for, and under terms that permit, the user to + recombine or relink the Application with a modified version of + the Linked Version to produce a modified Combined Work, in the + manner specified by section 6 of the GNU GPL for conveying + Corresponding Source. + + 1) Use a suitable shared library mechanism for linking with the + Library. A suitable mechanism is one that (a) uses at run time + a copy of the Library already present on the user's computer + system, and (b) will operate properly with a modified version + of the Library that is interface-compatible with the Linked + Version. + + e) Provide Installation Information, but only if you would otherwise + be required to provide such information under section 6 of the + GNU GPL, and only to the extent that such information is + necessary to install and execute a modified version of the + Combined Work produced by recombining or relinking the + Application with a modified version of the Linked Version. (If + you use option 4d0, the Installation Information must accompany + the Minimal Corresponding Source and Corresponding Application + Code. If you use option 4d1, you must provide the Installation + Information in the manner specified by section 6 of the GNU GPL + for conveying Corresponding Source.) + + 5. Combined Libraries. + + 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 that are not Applications and are not covered by this +License, and convey such a combined library under terms of your +choice, if you do both of the following: + + a) Accompany the combined library with a copy of the same work based + on the Library, uncombined with any other library facilities, + conveyed under the terms of this License. + + b) Give prominent notice with the combined library that part of it + is a work based on the Library, and explaining where to find the + accompanying uncombined form of the same work. + + 6. Revised Versions of the GNU Lesser General Public License. + + The Free Software Foundation may publish revised and/or new versions +of the GNU Lesser General Public License from time to time. Such new +versions will be similar in spirit to the present version, but may +differ in detail to address new problems or concerns. + + Each version is given a distinguishing version number. If the +Library as you received it specifies that a certain numbered version +of the GNU Lesser General Public License "or any later version" +applies to it, you have the option of following the terms and +conditions either of that published version or of any later version +published by the Free Software Foundation. If the Library as you +received it does not specify a version number of the GNU Lesser +General Public License, you may choose any version of the GNU Lesser +General Public License ever published by the Free Software Foundation. + + If the Library as you received it specifies that a proxy can decide +whether future versions of the GNU Lesser General Public License shall +apply, that proxy's public statement of acceptance of any version is +permanent authorization for you to choose that version for the +Library. diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/json/json-forwards.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/json/json-forwards.h new file mode 100644 index 0000000..65e8dfb --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/json/json-forwards.h @@ -0,0 +1,324 @@ +/// Json-cpp amalgated forward header (http://jsoncpp.sourceforge.net/). +/// It is intended to be used with #include "json/json-forwards.h" +/// This header provides forward declaration for all JsonCpp types. + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + +/* +The JsonCpp library's source code, including accompanying documentation, +tests and demonstration applications, are licensed under the following +conditions... + +The author (Baptiste Lepilleur) explicitly disclaims copyright in all +jurisdictions which recognize such a disclaimer. In such jurisdictions, +this software is released into the Public Domain. + +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is +released under the terms of the MIT License (see below). + +In jurisdictions which recognize Public Domain property, the user of this +software may choose to accept it either as 1) Public Domain, 2) under the +conditions of the MIT License (see below), or 3) under the terms of dual +Public Domain/MIT License conditions described here, as they choose. + +The MIT License is about as close to Public Domain as a license can get, and is +described in clear, concise terms at: + + http://en.wikipedia.org/wiki/MIT_License + +The full text of the MIT License follows: + +======================================================================== +Copyright (c) 2007-2010 Baptiste Lepilleur + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +======================================================================== +(END LICENSE TEXT) + +The MIT license is compatible with both the GPL and commercial +software, affording one all of the rights of Public Domain with the +minor nuisance of being required to keep the above copyright notice +and license text in the source code. Note also that by accepting the +Public Domain "license" you can re-license your copy using whatever +license you like. + +*/ + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + + + + + +#ifndef JSON_FORWARD_AMALGATED_H_INCLUDED +# define JSON_FORWARD_AMALGATED_H_INCLUDED +/// If defined, indicates that the source file is amalgated +/// to prevent private header inclusion. +#define JSON_IS_AMALGAMATION + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/config.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_CONFIG_H_INCLUDED +#define JSON_CONFIG_H_INCLUDED +#include <stddef.h> +#include <string> //typedef String +#include <stdint.h> //typedef int64_t, uint64_t + +/// If defined, indicates that json library is embedded in CppTL library. +//# define JSON_IN_CPPTL 1 + +/// If defined, indicates that json may leverage CppTL library +//# define JSON_USE_CPPTL 1 +/// If defined, indicates that cpptl vector based map should be used instead of +/// std::map +/// as Value container. +//# define JSON_USE_CPPTL_SMALLMAP 1 + +// If non-zero, the library uses exceptions to report bad input instead of C +// assertion macros. The default is to use exceptions. +#ifndef JSON_USE_EXCEPTION +#define JSON_USE_EXCEPTION 1 +#endif + +/// If defined, indicates that the source file is amalgated +/// to prevent private header inclusion. +/// Remarks: it is automatically defined in the generated amalgated header. +// #define JSON_IS_AMALGAMATION + +#ifdef JSON_IN_CPPTL +#include <cpptl/config.h> +#ifndef JSON_USE_CPPTL +#define JSON_USE_CPPTL 1 +#endif +#endif + +#ifdef JSON_IN_CPPTL +#define JSON_API CPPTL_API +#elif defined(JSON_DLL_BUILD) +#if defined(_MSC_VER) || defined(__MINGW32__) +#define JSON_API __declspec(dllexport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#endif // if defined(_MSC_VER) +#elif defined(JSON_DLL) +#if defined(_MSC_VER) || defined(__MINGW32__) +#define JSON_API __declspec(dllimport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#endif // if defined(_MSC_VER) +#endif // ifdef JSON_IN_CPPTL +#if !defined(JSON_API) +#define JSON_API +#endif + +// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for +// integer +// Storages, and 64 bits integer support is disabled. +// #define JSON_NO_INT64 1 + +#if defined(_MSC_VER) // MSVC +# if _MSC_VER <= 1200 // MSVC 6 + // Microsoft Visual Studio 6 only support conversion from __int64 to double + // (no conversion from unsigned __int64). +# define JSON_USE_INT64_DOUBLE_CONVERSION 1 + // Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255' + // characters in the debug information) + // All projects I've ever seen with VS6 were using this globally (not bothering + // with pragma push/pop). +# pragma warning(disable : 4786) +# endif // MSVC 6 + +# if _MSC_VER >= 1500 // MSVC 2008 + /// Indicates that the following function is deprecated. +# define JSONCPP_DEPRECATED(message) __declspec(deprecated(message)) +# endif + +#endif // defined(_MSC_VER) + +// In c++11 the override keyword allows you to explicity define that a function +// is intended to override the base-class version. This makes the code more +// managable and fixes a set of common hard-to-find bugs. +#if __cplusplus >= 201103L +# define JSONCPP_OVERRIDE override +#elif defined(_MSC_VER) && _MSC_VER > 1600 +# define JSONCPP_OVERRIDE override +#else +# define JSONCPP_OVERRIDE +#endif + +#ifndef JSON_HAS_RVALUE_REFERENCES + +#if defined(_MSC_VER) && _MSC_VER >= 1600 // MSVC >= 2010 +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // MSVC >= 2010 + +#ifdef __clang__ +#if __has_feature(cxx_rvalue_references) +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // has_feature + +#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) +#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L) +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // GXX_EXPERIMENTAL + +#endif // __clang__ || __GNUC__ + +#endif // not defined JSON_HAS_RVALUE_REFERENCES + +#ifndef JSON_HAS_RVALUE_REFERENCES +#define JSON_HAS_RVALUE_REFERENCES 0 +#endif + +#ifdef __clang__ +#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) +# if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +# define JSONCPP_DEPRECATED(message) __attribute__ ((deprecated(message))) +# elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) +# define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__)) +# endif // GNUC version +#endif // __clang__ || __GNUC__ + +#if !defined(JSONCPP_DEPRECATED) +#define JSONCPP_DEPRECATED(message) +#endif // if !defined(JSONCPP_DEPRECATED) + +#if __GNUC__ >= 6 +# define JSON_USE_INT64_DOUBLE_CONVERSION 1 +#endif + +#if !defined(JSON_IS_AMALGAMATION) + +# include "version.h" + +# if JSONCPP_USING_SECURE_MEMORY +# include "allocator.h" //typedef Allocator +# endif + +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { +typedef int Int; +typedef unsigned int UInt; +#if defined(JSON_NO_INT64) +typedef int LargestInt; +typedef unsigned int LargestUInt; +#undef JSON_HAS_INT64 +#else // if defined(JSON_NO_INT64) +// For Microsoft Visual use specific types as long long is not supported +#if defined(_MSC_VER) // Microsoft Visual Studio +typedef __int64 Int64; +typedef unsigned __int64 UInt64; +#else // if defined(_MSC_VER) // Other platforms, use long long +typedef int64_t Int64; +typedef uint64_t UInt64; +#endif // if defined(_MSC_VER) +typedef Int64 LargestInt; +typedef UInt64 LargestUInt; +#define JSON_HAS_INT64 +#endif // if defined(JSON_NO_INT64) +#if JSONCPP_USING_SECURE_MEMORY +#define JSONCPP_STRING std::basic_string<char, std::char_traits<char>, Json::SecureAllocator<char> > +#define JSONCPP_OSTRINGSTREAM std::basic_ostringstream<char, std::char_traits<char>, Json::SecureAllocator<char> > +#define JSONCPP_OSTREAM std::basic_ostream<char, std::char_traits<char>> +#define JSONCPP_ISTRINGSTREAM std::basic_istringstream<char, std::char_traits<char>, Json::SecureAllocator<char> > +#define JSONCPP_ISTREAM std::istream +#else +#define JSONCPP_STRING std::string +#define JSONCPP_OSTRINGSTREAM std::ostringstream +#define JSONCPP_OSTREAM std::ostream +#define JSONCPP_ISTRINGSTREAM std::istringstream +#define JSONCPP_ISTREAM std::istream +#endif // if JSONCPP_USING_SECURE_MEMORY +} // end namespace Json + +#endif // JSON_CONFIG_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/config.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/forwards.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_FORWARDS_H_INCLUDED +#define JSON_FORWARDS_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "config.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +// writer.h +class FastWriter; +class StyledWriter; + +// reader.h +class Reader; + +// features.h +class Features; + +// value.h +typedef unsigned int ArrayIndex; +class StaticString; +class Path; +class PathArgument; +class Value; +class ValueIteratorBase; +class ValueIterator; +class ValueConstIterator; + +} // namespace Json + +#endif // JSON_FORWARDS_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/forwards.h +// ////////////////////////////////////////////////////////////////////// + + + + + +#endif //ifndef JSON_FORWARD_AMALGATED_H_INCLUDED diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/json/json.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/json/json.h new file mode 100644 index 0000000..de79502 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/json/json.h @@ -0,0 +1,2140 @@ +/// Json-cpp amalgated header (http://jsoncpp.sourceforge.net/). +/// It is intended to be used with #include "json/json.h" + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + +/* +The JsonCpp library's source code, including accompanying documentation, +tests and demonstration applications, are licensed under the following +conditions... + +The author (Baptiste Lepilleur) explicitly disclaims copyright in all +jurisdictions which recognize such a disclaimer. In such jurisdictions, +this software is released into the Public Domain. + +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is +released under the terms of the MIT License (see below). + +In jurisdictions which recognize Public Domain property, the user of this +software may choose to accept it either as 1) Public Domain, 2) under the +conditions of the MIT License (see below), or 3) under the terms of dual +Public Domain/MIT License conditions described here, as they choose. + +The MIT License is about as close to Public Domain as a license can get, and is +described in clear, concise terms at: + + http://en.wikipedia.org/wiki/MIT_License + +The full text of the MIT License follows: + +======================================================================== +Copyright (c) 2007-2010 Baptiste Lepilleur + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +======================================================================== +(END LICENSE TEXT) + +The MIT license is compatible with both the GPL and commercial +software, affording one all of the rights of Public Domain with the +minor nuisance of being required to keep the above copyright notice +and license text in the source code. Note also that by accepting the +Public Domain "license" you can re-license your copy using whatever +license you like. + +*/ + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + + + + + +#ifndef JSON_AMALGATED_H_INCLUDED +# define JSON_AMALGATED_H_INCLUDED +/// If defined, indicates that the source file is amalgated +/// to prevent private header inclusion. +#define JSON_IS_AMALGAMATION + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/version.h +// ////////////////////////////////////////////////////////////////////// + +// DO NOT EDIT. This file (and "version") is generated by CMake. +// Run CMake configure step to update it. +#ifndef JSON_VERSION_H_INCLUDED +# define JSON_VERSION_H_INCLUDED + +# define JSONCPP_VERSION_STRING "1.7.7" +# define JSONCPP_VERSION_MAJOR 1 +# define JSONCPP_VERSION_MINOR 7 +# define JSONCPP_VERSION_PATCH 7 +# define JSONCPP_VERSION_QUALIFIER +# define JSONCPP_VERSION_HEXA ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | (JSONCPP_VERSION_PATCH << 8)) + +#ifdef JSONCPP_USING_SECURE_MEMORY +#undef JSONCPP_USING_SECURE_MEMORY +#endif +#define JSONCPP_USING_SECURE_MEMORY 0 +// If non-zero, the library zeroes any memory that it has allocated before +// it frees its memory. + +#endif // JSON_VERSION_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/version.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/config.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_CONFIG_H_INCLUDED +#define JSON_CONFIG_H_INCLUDED +#include <stddef.h> +#include <string> //typedef String +#include <stdint.h> //typedef int64_t, uint64_t + +/// If defined, indicates that json library is embedded in CppTL library. +//# define JSON_IN_CPPTL 1 + +/// If defined, indicates that json may leverage CppTL library +//# define JSON_USE_CPPTL 1 +/// If defined, indicates that cpptl vector based map should be used instead of +/// std::map +/// as Value container. +//# define JSON_USE_CPPTL_SMALLMAP 1 + +// If non-zero, the library uses exceptions to report bad input instead of C +// assertion macros. The default is to use exceptions. +#ifndef JSON_USE_EXCEPTION +#define JSON_USE_EXCEPTION 1 +#endif + +/// If defined, indicates that the source file is amalgated +/// to prevent private header inclusion. +/// Remarks: it is automatically defined in the generated amalgated header. +// #define JSON_IS_AMALGAMATION + +#ifdef JSON_IN_CPPTL +#include <cpptl/config.h> +#ifndef JSON_USE_CPPTL +#define JSON_USE_CPPTL 1 +#endif +#endif + +#ifdef JSON_IN_CPPTL +#define JSON_API CPPTL_API +#elif defined(JSON_DLL_BUILD) +#if defined(_MSC_VER) || defined(__MINGW32__) +#define JSON_API __declspec(dllexport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#endif // if defined(_MSC_VER) +#elif defined(JSON_DLL) +#if defined(_MSC_VER) || defined(__MINGW32__) +#define JSON_API __declspec(dllimport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#endif // if defined(_MSC_VER) +#endif // ifdef JSON_IN_CPPTL +#if !defined(JSON_API) +#define JSON_API +#endif + +// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for +// integer +// Storages, and 64 bits integer support is disabled. +// #define JSON_NO_INT64 1 + +#if defined(_MSC_VER) // MSVC +# if _MSC_VER <= 1200 // MSVC 6 + // Microsoft Visual Studio 6 only support conversion from __int64 to double + // (no conversion from unsigned __int64). +# define JSON_USE_INT64_DOUBLE_CONVERSION 1 + // Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255' + // characters in the debug information) + // All projects I've ever seen with VS6 were using this globally (not bothering + // with pragma push/pop). +# pragma warning(disable : 4786) +# endif // MSVC 6 + +# if _MSC_VER >= 1500 // MSVC 2008 + /// Indicates that the following function is deprecated. +# define JSONCPP_DEPRECATED(message) __declspec(deprecated(message)) +# endif + +#endif // defined(_MSC_VER) + +// In c++11 the override keyword allows you to explicity define that a function +// is intended to override the base-class version. This makes the code more +// managable and fixes a set of common hard-to-find bugs. +#if __cplusplus >= 201103L +# define JSONCPP_OVERRIDE override +#elif defined(_MSC_VER) && _MSC_VER > 1600 +# define JSONCPP_OVERRIDE override +#else +# define JSONCPP_OVERRIDE +#endif + +#ifndef JSON_HAS_RVALUE_REFERENCES + +#if defined(_MSC_VER) && _MSC_VER >= 1600 // MSVC >= 2010 +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // MSVC >= 2010 + +#ifdef __clang__ +#if __has_feature(cxx_rvalue_references) +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // has_feature + +#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) +#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L) +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // GXX_EXPERIMENTAL + +#endif // __clang__ || __GNUC__ + +#endif // not defined JSON_HAS_RVALUE_REFERENCES + +#ifndef JSON_HAS_RVALUE_REFERENCES +#define JSON_HAS_RVALUE_REFERENCES 0 +#endif + +#ifdef __clang__ +#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) +# if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +# define JSONCPP_DEPRECATED(message) __attribute__ ((deprecated(message))) +# elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) +# define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__)) +# endif // GNUC version +#endif // __clang__ || __GNUC__ + +#if !defined(JSONCPP_DEPRECATED) +#define JSONCPP_DEPRECATED(message) +#endif // if !defined(JSONCPP_DEPRECATED) + +#if __GNUC__ >= 6 +# define JSON_USE_INT64_DOUBLE_CONVERSION 1 +#endif + +#if !defined(JSON_IS_AMALGAMATION) + +# include "version.h" + +# if JSONCPP_USING_SECURE_MEMORY +# include "allocator.h" //typedef Allocator +# endif + +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { +typedef int Int; +typedef unsigned int UInt; +#if defined(JSON_NO_INT64) +typedef int LargestInt; +typedef unsigned int LargestUInt; +#undef JSON_HAS_INT64 +#else // if defined(JSON_NO_INT64) +// For Microsoft Visual use specific types as long long is not supported +#if defined(_MSC_VER) // Microsoft Visual Studio +typedef __int64 Int64; +typedef unsigned __int64 UInt64; +#else // if defined(_MSC_VER) // Other platforms, use long long +typedef int64_t Int64; +typedef uint64_t UInt64; +#endif // if defined(_MSC_VER) +typedef Int64 LargestInt; +typedef UInt64 LargestUInt; +#define JSON_HAS_INT64 +#endif // if defined(JSON_NO_INT64) +#if JSONCPP_USING_SECURE_MEMORY +#define JSONCPP_STRING std::basic_string<char, std::char_traits<char>, Json::SecureAllocator<char> > +#define JSONCPP_OSTRINGSTREAM std::basic_ostringstream<char, std::char_traits<char>, Json::SecureAllocator<char> > +#define JSONCPP_OSTREAM std::basic_ostream<char, std::char_traits<char>> +#define JSONCPP_ISTRINGSTREAM std::basic_istringstream<char, std::char_traits<char>, Json::SecureAllocator<char> > +#define JSONCPP_ISTREAM std::istream +#else +#define JSONCPP_STRING std::string +#define JSONCPP_OSTRINGSTREAM std::ostringstream +#define JSONCPP_OSTREAM std::ostream +#define JSONCPP_ISTRINGSTREAM std::istringstream +#define JSONCPP_ISTREAM std::istream +#endif // if JSONCPP_USING_SECURE_MEMORY +} // end namespace Json + +#endif // JSON_CONFIG_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/config.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/forwards.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_FORWARDS_H_INCLUDED +#define JSON_FORWARDS_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "config.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +// writer.h +class FastWriter; +class StyledWriter; + +// reader.h +class Reader; + +// features.h +class Features; + +// value.h +typedef unsigned int ArrayIndex; +class StaticString; +class Path; +class PathArgument; +class Value; +class ValueIteratorBase; +class ValueIterator; +class ValueConstIterator; + +} // namespace Json + +#endif // JSON_FORWARDS_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/forwards.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/features.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_FEATURES_H_INCLUDED +#define CPPTL_JSON_FEATURES_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "forwards.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +/** \brief Configuration passed to reader and writer. + * This configuration object can be used to force the Reader or Writer + * to behave in a standard conforming way. + */ +class JSON_API Features { +public: + /** \brief A configuration that allows all features and assumes all strings + * are UTF-8. + * - C & C++ comments are allowed + * - Root object can be any JSON value + * - Assumes Value strings are encoded in UTF-8 + */ + static Features all(); + + /** \brief A configuration that is strictly compatible with the JSON + * specification. + * - Comments are forbidden. + * - Root object must be either an array or an object value. + * - Assumes Value strings are encoded in UTF-8 + */ + static Features strictMode(); + + /** \brief Initialize the configuration like JsonConfig::allFeatures; + */ + Features(); + + /// \c true if comments are allowed. Default: \c true. + bool allowComments_; + + /// \c true if root must be either an array or an object value. Default: \c + /// false. + bool strictRoot_; + + /// \c true if dropped null placeholders are allowed. Default: \c false. + bool allowDroppedNullPlaceholders_; + + /// \c true if numeric object key are allowed. Default: \c false. + bool allowNumericKeys_; +}; + +} // namespace Json + +#endif // CPPTL_JSON_FEATURES_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/features.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/value.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_H_INCLUDED +#define CPPTL_JSON_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "forwards.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <string> +#include <vector> +#include <exception> + +#ifndef JSON_USE_CPPTL_SMALLMAP +#include <map> +#else +#include <cpptl/smallmap.h> +#endif +#ifdef JSON_USE_CPPTL +#include <cpptl/forwards.h> +#endif + +//Conditional NORETURN attribute on the throw functions would: +// a) suppress false positives from static code analysis +// b) possibly improve optimization opportunities. +#if !defined(JSONCPP_NORETURN) +# if defined(_MSC_VER) +# define JSONCPP_NORETURN __declspec(noreturn) +# elif defined(__GNUC__) +# define JSONCPP_NORETURN __attribute__ ((__noreturn__)) +# else +# define JSONCPP_NORETURN +# endif +#endif + +// Disable warning C4251: <data member>: <type> needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +/** \brief JSON (JavaScript Object Notation). + */ +namespace Json { + +/** Base class for all exceptions we throw. + * + * We use nothing but these internally. Of course, STL can throw others. + */ +class JSON_API Exception : public std::exception { +public: + Exception(JSONCPP_STRING const& msg); + ~Exception() throw() JSONCPP_OVERRIDE; + char const* what() const throw() JSONCPP_OVERRIDE; +protected: + JSONCPP_STRING msg_; +}; + +/** Exceptions which the user cannot easily avoid. + * + * E.g. out-of-memory (when we use malloc), stack-overflow, malicious input + * + * \remark derived from Json::Exception + */ +class JSON_API RuntimeError : public Exception { +public: + RuntimeError(JSONCPP_STRING const& msg); +}; + +/** Exceptions thrown by JSON_ASSERT/JSON_FAIL macros. + * + * These are precondition-violations (user bugs) and internal errors (our bugs). + * + * \remark derived from Json::Exception + */ +class JSON_API LogicError : public Exception { +public: + LogicError(JSONCPP_STRING const& msg); +}; + +/// used internally +JSONCPP_NORETURN void throwRuntimeError(JSONCPP_STRING const& msg); +/// used internally +JSONCPP_NORETURN void throwLogicError(JSONCPP_STRING const& msg); + +/** \brief Type of the value held by a Value object. + */ +enum ValueType { + nullValue = 0, ///< 'null' value + intValue, ///< signed integer value + uintValue, ///< unsigned integer value + realValue, ///< double value + stringValue, ///< UTF-8 string value + booleanValue, ///< bool value + arrayValue, ///< array value (ordered list) + objectValue ///< object value (collection of name/value pairs). +}; + +enum CommentPlacement { + commentBefore = 0, ///< a comment placed on the line before a value + commentAfterOnSameLine, ///< a comment just after a value on the same line + commentAfter, ///< a comment on the line after a value (only make sense for + /// root value) + numberOfCommentPlacement +}; + +//# ifdef JSON_USE_CPPTL +// typedef CppTL::AnyEnumerator<const char *> EnumMemberNames; +// typedef CppTL::AnyEnumerator<const Value &> EnumValues; +//# endif + +/** \brief Lightweight wrapper to tag static string. + * + * Value constructor and objectValue member assignement takes advantage of the + * StaticString and avoid the cost of string duplication when storing the + * string or the member name. + * + * Example of usage: + * \code + * Json::Value aValue( StaticString("some text") ); + * Json::Value object; + * static const StaticString code("code"); + * object[code] = 1234; + * \endcode + */ +class JSON_API StaticString { +public: + explicit StaticString(const char* czstring) : c_str_(czstring) {} + + operator const char*() const { return c_str_; } + + const char* c_str() const { return c_str_; } + +private: + const char* c_str_; +}; + +/** \brief Represents a <a HREF="http://www.json.org">JSON</a> value. + * + * This class is a discriminated union wrapper that can represents a: + * - signed integer [range: Value::minInt - Value::maxInt] + * - unsigned integer (range: 0 - Value::maxUInt) + * - double + * - UTF-8 string + * - boolean + * - 'null' + * - an ordered list of Value + * - collection of name/value pairs (javascript object) + * + * The type of the held value is represented by a #ValueType and + * can be obtained using type(). + * + * Values of an #objectValue or #arrayValue can be accessed using operator[]() + * methods. + * Non-const methods will automatically create the a #nullValue element + * if it does not exist. + * The sequence of an #arrayValue will be automatically resized and initialized + * with #nullValue. resize() can be used to enlarge or truncate an #arrayValue. + * + * The get() methods can be used to obtain default value in the case the + * required element does not exist. + * + * It is possible to iterate over the list of a #objectValue values using + * the getMemberNames() method. + * + * \note #Value string-length fit in size_t, but keys must be < 2^30. + * (The reason is an implementation detail.) A #CharReader will raise an + * exception if a bound is exceeded to avoid security holes in your app, + * but the Value API does *not* check bounds. That is the responsibility + * of the caller. + */ +class JSON_API Value { + friend class ValueIteratorBase; +public: + typedef std::vector<JSONCPP_STRING> Members; + typedef ValueIterator iterator; + typedef ValueConstIterator const_iterator; + typedef Json::UInt UInt; + typedef Json::Int Int; +#if defined(JSON_HAS_INT64) + typedef Json::UInt64 UInt64; + typedef Json::Int64 Int64; +#endif // defined(JSON_HAS_INT64) + typedef Json::LargestInt LargestInt; + typedef Json::LargestUInt LargestUInt; + typedef Json::ArrayIndex ArrayIndex; + + static const Value& null; ///< We regret this reference to a global instance; prefer the simpler Value(). + static const Value& nullRef; ///< just a kludge for binary-compatibility; same as null + static Value const& nullSingleton(); ///< Prefer this to null or nullRef. + + /// Minimum signed integer value that can be stored in a Json::Value. + static const LargestInt minLargestInt; + /// Maximum signed integer value that can be stored in a Json::Value. + static const LargestInt maxLargestInt; + /// Maximum unsigned integer value that can be stored in a Json::Value. + static const LargestUInt maxLargestUInt; + + /// Minimum signed int value that can be stored in a Json::Value. + static const Int minInt; + /// Maximum signed int value that can be stored in a Json::Value. + static const Int maxInt; + /// Maximum unsigned int value that can be stored in a Json::Value. + static const UInt maxUInt; + +#if defined(JSON_HAS_INT64) + /// Minimum signed 64 bits int value that can be stored in a Json::Value. + static const Int64 minInt64; + /// Maximum signed 64 bits int value that can be stored in a Json::Value. + static const Int64 maxInt64; + /// Maximum unsigned 64 bits int value that can be stored in a Json::Value. + static const UInt64 maxUInt64; +#endif // defined(JSON_HAS_INT64) + +private: +#ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION + class CZString { + public: + enum DuplicationPolicy { + noDuplication = 0, + duplicate, + duplicateOnCopy + }; + CZString(ArrayIndex index); + CZString(char const* str, unsigned length, DuplicationPolicy allocate); + CZString(CZString const& other); +#if JSON_HAS_RVALUE_REFERENCES + CZString(CZString&& other); +#endif + ~CZString(); + CZString& operator=(CZString other); + bool operator<(CZString const& other) const; + bool operator==(CZString const& other) const; + ArrayIndex index() const; + //const char* c_str() const; ///< \deprecated + char const* data() const; + unsigned length() const; + bool isStaticString() const; + + private: + void swap(CZString& other); + + struct StringStorage { + unsigned policy_: 2; + unsigned length_: 30; // 1GB max + }; + + char const* cstr_; // actually, a prefixed string, unless policy is noDup + union { + ArrayIndex index_; + StringStorage storage_; + }; + }; + +public: +#ifndef JSON_USE_CPPTL_SMALLMAP + typedef std::map<CZString, Value> ObjectValues; +#else + typedef CppTL::SmallMap<CZString, Value> ObjectValues; +#endif // ifndef JSON_USE_CPPTL_SMALLMAP +#endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION + +public: + /** \brief Create a default Value of the given type. + + This is a very useful constructor. + To create an empty array, pass arrayValue. + To create an empty object, pass objectValue. + Another Value can then be set to this one by assignment. +This is useful since clear() and resize() will not alter types. + + Examples: +\code +Json::Value null_value; // null +Json::Value arr_value(Json::arrayValue); // [] +Json::Value obj_value(Json::objectValue); // {} +\endcode + */ + Value(ValueType type = nullValue); + Value(Int value); + Value(UInt value); +#if defined(JSON_HAS_INT64) + Value(Int64 value); + Value(UInt64 value); +#endif // if defined(JSON_HAS_INT64) + Value(double value); + Value(const char* value); ///< Copy til first 0. (NULL causes to seg-fault.) + Value(const char* begin, const char* end); ///< Copy all, incl zeroes. + /** \brief Constructs a value from a static string. + + * Like other value string constructor but do not duplicate the string for + * internal storage. The given string must remain alive after the call to this + * constructor. + * \note This works only for null-terminated strings. (We cannot change the + * size of this class, so we have nowhere to store the length, + * which might be computed later for various operations.) + * + * Example of usage: + * \code + * static StaticString foo("some text"); + * Json::Value aValue(foo); + * \endcode + */ + Value(const StaticString& value); + Value(const JSONCPP_STRING& value); ///< Copy data() til size(). Embedded zeroes too. +#ifdef JSON_USE_CPPTL + Value(const CppTL::ConstString& value); +#endif + Value(bool value); + /// Deep copy. + Value(const Value& other); +#if JSON_HAS_RVALUE_REFERENCES + /// Move constructor + Value(Value&& other); +#endif + ~Value(); + + /// Deep copy, then swap(other). + /// \note Over-write existing comments. To preserve comments, use #swapPayload(). + Value& operator=(Value other); + /// Swap everything. + void swap(Value& other); + /// Swap values but leave comments and source offsets in place. + void swapPayload(Value& other); + + ValueType type() const; + + /// Compare payload only, not comments etc. + bool operator<(const Value& other) const; + bool operator<=(const Value& other) const; + bool operator>=(const Value& other) const; + bool operator>(const Value& other) const; + bool operator==(const Value& other) const; + bool operator!=(const Value& other) const; + int compare(const Value& other) const; + + const char* asCString() const; ///< Embedded zeroes could cause you trouble! +#if JSONCPP_USING_SECURE_MEMORY + unsigned getCStringLength() const; //Allows you to understand the length of the CString +#endif + JSONCPP_STRING asString() const; ///< Embedded zeroes are possible. + /** Get raw char* of string-value. + * \return false if !string. (Seg-fault if str or end are NULL.) + */ + bool getString( + char const** begin, char const** end) const; +#ifdef JSON_USE_CPPTL + CppTL::ConstString asConstString() const; +#endif + Int asInt() const; + UInt asUInt() const; +#if defined(JSON_HAS_INT64) + Int64 asInt64() const; + UInt64 asUInt64() const; +#endif // if defined(JSON_HAS_INT64) + LargestInt asLargestInt() const; + LargestUInt asLargestUInt() const; + float asFloat() const; + double asDouble() const; + bool asBool() const; + + bool isNull() const; + bool isBool() const; + bool isInt() const; + bool isInt64() const; + bool isUInt() const; + bool isUInt64() const; + bool isIntegral() const; + bool isDouble() const; + bool isNumeric() const; + bool isString() const; + bool isArray() const; + bool isObject() const; + + bool isConvertibleTo(ValueType other) const; + + /// Number of values in array or object + ArrayIndex size() const; + + /// \brief Return true if empty array, empty object, or null; + /// otherwise, false. + bool empty() const; + + /// Return isNull() + bool operator!() const; + + /// Remove all object members and array elements. + /// \pre type() is arrayValue, objectValue, or nullValue + /// \post type() is unchanged + void clear(); + + /// Resize the array to size elements. + /// New elements are initialized to null. + /// May only be called on nullValue or arrayValue. + /// \pre type() is arrayValue or nullValue + /// \post type() is arrayValue + void resize(ArrayIndex size); + + /// Access an array element (zero based index ). + /// If the array contains less than index element, then null value are + /// inserted + /// in the array so that its size is index+1. + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + Value& operator[](ArrayIndex index); + + /// Access an array element (zero based index ). + /// If the array contains less than index element, then null value are + /// inserted + /// in the array so that its size is index+1. + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + Value& operator[](int index); + + /// Access an array element (zero based index ) + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + const Value& operator[](ArrayIndex index) const; + + /// Access an array element (zero based index ) + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + const Value& operator[](int index) const; + + /// If the array contains at least index+1 elements, returns the element + /// value, + /// otherwise returns defaultValue. + Value get(ArrayIndex index, const Value& defaultValue) const; + /// Return true if index < size(). + bool isValidIndex(ArrayIndex index) const; + /// \brief Append value to array at the end. + /// + /// Equivalent to jsonvalue[jsonvalue.size()] = value; + Value& append(const Value& value); + + /// Access an object value by name, create a null member if it does not exist. + /// \note Because of our implementation, keys are limited to 2^30 -1 chars. + /// Exceeding that will cause an exception. + Value& operator[](const char* key); + /// Access an object value by name, returns null if there is no member with + /// that name. + const Value& operator[](const char* key) const; + /// Access an object value by name, create a null member if it does not exist. + /// \param key may contain embedded nulls. + Value& operator[](const JSONCPP_STRING& key); + /// Access an object value by name, returns null if there is no member with + /// that name. + /// \param key may contain embedded nulls. + const Value& operator[](const JSONCPP_STRING& key) const; + /** \brief Access an object value by name, create a null member if it does not + exist. + + * If the object has no entry for that name, then the member name used to store + * the new entry is not duplicated. + * Example of use: + * \code + * Json::Value object; + * static const StaticString code("code"); + * object[code] = 1234; + * \endcode + */ + Value& operator[](const StaticString& key); +#ifdef JSON_USE_CPPTL + /// Access an object value by name, create a null member if it does not exist. + Value& operator[](const CppTL::ConstString& key); + /// Access an object value by name, returns null if there is no member with + /// that name. + const Value& operator[](const CppTL::ConstString& key) const; +#endif + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + Value get(const char* key, const Value& defaultValue) const; + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + /// \note key may contain embedded nulls. + Value get(const char* begin, const char* end, const Value& defaultValue) const; + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + /// \param key may contain embedded nulls. + Value get(const JSONCPP_STRING& key, const Value& defaultValue) const; +#ifdef JSON_USE_CPPTL + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + Value get(const CppTL::ConstString& key, const Value& defaultValue) const; +#endif + /// Most general and efficient version of isMember()const, get()const, + /// and operator[]const + /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 + Value const* find(char const* begin, char const* end) const; + /// Most general and efficient version of object-mutators. + /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 + /// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue. + Value const* demand(char const* begin, char const* end); + /// \brief Remove and return the named member. + /// + /// Do nothing if it did not exist. + /// \return the removed Value, or null. + /// \pre type() is objectValue or nullValue + /// \post type() is unchanged + /// \deprecated + Value removeMember(const char* key); + /// Same as removeMember(const char*) + /// \param key may contain embedded nulls. + /// \deprecated + Value removeMember(const JSONCPP_STRING& key); + /// Same as removeMember(const char* begin, const char* end, Value* removed), + /// but 'key' is null-terminated. + bool removeMember(const char* key, Value* removed); + /** \brief Remove the named map member. + + Update 'removed' iff removed. + \param key may contain embedded nulls. + \return true iff removed (no exceptions) + */ + bool removeMember(JSONCPP_STRING const& key, Value* removed); + /// Same as removeMember(JSONCPP_STRING const& key, Value* removed) + bool removeMember(const char* begin, const char* end, Value* removed); + /** \brief Remove the indexed array element. + + O(n) expensive operations. + Update 'removed' iff removed. + \return true iff removed (no exceptions) + */ + bool removeIndex(ArrayIndex i, Value* removed); + + /// Return true if the object has a member named key. + /// \note 'key' must be null-terminated. + bool isMember(const char* key) const; + /// Return true if the object has a member named key. + /// \param key may contain embedded nulls. + bool isMember(const JSONCPP_STRING& key) const; + /// Same as isMember(JSONCPP_STRING const& key)const + bool isMember(const char* begin, const char* end) const; +#ifdef JSON_USE_CPPTL + /// Return true if the object has a member named key. + bool isMember(const CppTL::ConstString& key) const; +#endif + + /// \brief Return a list of the member names. + /// + /// If null, return an empty list. + /// \pre type() is objectValue or nullValue + /// \post if type() was nullValue, it remains nullValue + Members getMemberNames() const; + + //# ifdef JSON_USE_CPPTL + // EnumMemberNames enumMemberNames() const; + // EnumValues enumValues() const; + //# endif + + /// \deprecated Always pass len. + JSONCPP_DEPRECATED("Use setComment(JSONCPP_STRING const&) instead.") + void setComment(const char* comment, CommentPlacement placement); + /// Comments must be //... or /* ... */ + void setComment(const char* comment, size_t len, CommentPlacement placement); + /// Comments must be //... or /* ... */ + void setComment(const JSONCPP_STRING& comment, CommentPlacement placement); + bool hasComment(CommentPlacement placement) const; + /// Include delimiters and embedded newlines. + JSONCPP_STRING getComment(CommentPlacement placement) const; + + JSONCPP_STRING toStyledString() const; + + const_iterator begin() const; + const_iterator end() const; + + iterator begin(); + iterator end(); + + // Accessors for the [start, limit) range of bytes within the JSON text from + // which this value was parsed, if any. + void setOffsetStart(ptrdiff_t start); + void setOffsetLimit(ptrdiff_t limit); + ptrdiff_t getOffsetStart() const; + ptrdiff_t getOffsetLimit() const; + +private: + void initBasic(ValueType type, bool allocated = false); + + Value& resolveReference(const char* key); + Value& resolveReference(const char* key, const char* end); + + struct CommentInfo { + CommentInfo(); + ~CommentInfo(); + + void setComment(const char* text, size_t len); + + char* comment_; + }; + + // struct MemberNamesTransform + //{ + // typedef const char *result_type; + // const char *operator()( const CZString &name ) const + // { + // return name.c_str(); + // } + //}; + + union ValueHolder { + LargestInt int_; + LargestUInt uint_; + double real_; + bool bool_; + char* string_; // actually ptr to unsigned, followed by str, unless !allocated_ + ObjectValues* map_; + } value_; + ValueType type_ : 8; + unsigned int allocated_ : 1; // Notes: if declared as bool, bitfield is useless. + // If not allocated_, string_ must be null-terminated. + CommentInfo* comments_; + + // [start, limit) byte offsets in the source JSON text from which this Value + // was extracted. + ptrdiff_t start_; + ptrdiff_t limit_; +}; + +/** \brief Experimental and untested: represents an element of the "path" to + * access a node. + */ +class JSON_API PathArgument { +public: + friend class Path; + + PathArgument(); + PathArgument(ArrayIndex index); + PathArgument(const char* key); + PathArgument(const JSONCPP_STRING& key); + +private: + enum Kind { + kindNone = 0, + kindIndex, + kindKey + }; + JSONCPP_STRING key_; + ArrayIndex index_; + Kind kind_; +}; + +/** \brief Experimental and untested: represents a "path" to access a node. + * + * Syntax: + * - "." => root node + * - ".[n]" => elements at index 'n' of root node (an array value) + * - ".name" => member named 'name' of root node (an object value) + * - ".name1.name2.name3" + * - ".[0][1][2].name1[3]" + * - ".%" => member name is provided as parameter + * - ".[%]" => index is provied as parameter + */ +class JSON_API Path { +public: + Path(const JSONCPP_STRING& path, + const PathArgument& a1 = PathArgument(), + const PathArgument& a2 = PathArgument(), + const PathArgument& a3 = PathArgument(), + const PathArgument& a4 = PathArgument(), + const PathArgument& a5 = PathArgument()); + + const Value& resolve(const Value& root) const; + Value resolve(const Value& root, const Value& defaultValue) const; + /// Creates the "path" to access the specified node and returns a reference on + /// the node. + Value& make(Value& root) const; + +private: + typedef std::vector<const PathArgument*> InArgs; + typedef std::vector<PathArgument> Args; + + void makePath(const JSONCPP_STRING& path, const InArgs& in); + void addPathInArg(const JSONCPP_STRING& path, + const InArgs& in, + InArgs::const_iterator& itInArg, + PathArgument::Kind kind); + void invalidPath(const JSONCPP_STRING& path, int location); + + Args args_; +}; + +/** \brief base class for Value iterators. + * + */ +class JSON_API ValueIteratorBase { +public: + typedef std::bidirectional_iterator_tag iterator_category; + typedef unsigned int size_t; + typedef int difference_type; + typedef ValueIteratorBase SelfType; + + bool operator==(const SelfType& other) const { return isEqual(other); } + + bool operator!=(const SelfType& other) const { return !isEqual(other); } + + difference_type operator-(const SelfType& other) const { + return other.computeDistance(*this); + } + + /// Return either the index or the member name of the referenced value as a + /// Value. + Value key() const; + + /// Return the index of the referenced Value, or -1 if it is not an arrayValue. + UInt index() const; + + /// Return the member name of the referenced Value, or "" if it is not an + /// objectValue. + /// \note Avoid `c_str()` on result, as embedded zeroes are possible. + JSONCPP_STRING name() const; + + /// Return the member name of the referenced Value. "" if it is not an + /// objectValue. + /// \deprecated This cannot be used for UTF-8 strings, since there can be embedded nulls. + JSONCPP_DEPRECATED("Use `key = name();` instead.") + char const* memberName() const; + /// Return the member name of the referenced Value, or NULL if it is not an + /// objectValue. + /// \note Better version than memberName(). Allows embedded nulls. + char const* memberName(char const** end) const; + +protected: + Value& deref() const; + + void increment(); + + void decrement(); + + difference_type computeDistance(const SelfType& other) const; + + bool isEqual(const SelfType& other) const; + + void copy(const SelfType& other); + +private: + Value::ObjectValues::iterator current_; + // Indicates that iterator is for a null value. + bool isNull_; + +public: + // For some reason, BORLAND needs these at the end, rather + // than earlier. No idea why. + ValueIteratorBase(); + explicit ValueIteratorBase(const Value::ObjectValues::iterator& current); +}; + +/** \brief const iterator for object and array value. + * + */ +class JSON_API ValueConstIterator : public ValueIteratorBase { + friend class Value; + +public: + typedef const Value value_type; + //typedef unsigned int size_t; + //typedef int difference_type; + typedef const Value& reference; + typedef const Value* pointer; + typedef ValueConstIterator SelfType; + + ValueConstIterator(); + ValueConstIterator(ValueIterator const& other); + +private: +/*! \internal Use by Value to create an iterator. + */ + explicit ValueConstIterator(const Value::ObjectValues::iterator& current); +public: + SelfType& operator=(const ValueIteratorBase& other); + + SelfType operator++(int) { + SelfType temp(*this); + ++*this; + return temp; + } + + SelfType operator--(int) { + SelfType temp(*this); + --*this; + return temp; + } + + SelfType& operator--() { + decrement(); + return *this; + } + + SelfType& operator++() { + increment(); + return *this; + } + + reference operator*() const { return deref(); } + + pointer operator->() const { return &deref(); } +}; + +/** \brief Iterator for object and array value. + */ +class JSON_API ValueIterator : public ValueIteratorBase { + friend class Value; + +public: + typedef Value value_type; + typedef unsigned int size_t; + typedef int difference_type; + typedef Value& reference; + typedef Value* pointer; + typedef ValueIterator SelfType; + + ValueIterator(); + explicit ValueIterator(const ValueConstIterator& other); + ValueIterator(const ValueIterator& other); + +private: +/*! \internal Use by Value to create an iterator. + */ + explicit ValueIterator(const Value::ObjectValues::iterator& current); +public: + SelfType& operator=(const SelfType& other); + + SelfType operator++(int) { + SelfType temp(*this); + ++*this; + return temp; + } + + SelfType operator--(int) { + SelfType temp(*this); + --*this; + return temp; + } + + SelfType& operator--() { + decrement(); + return *this; + } + + SelfType& operator++() { + increment(); + return *this; + } + + reference operator*() const { return deref(); } + + pointer operator->() const { return &deref(); } +}; + +} // namespace Json + + +namespace std { +/// Specialize std::swap() for Json::Value. +template<> +inline void swap(Json::Value& a, Json::Value& b) { a.swap(b); } +} + + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // CPPTL_JSON_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/value.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/reader.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_READER_H_INCLUDED +#define CPPTL_JSON_READER_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "features.h" +#include "value.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <deque> +#include <iosfwd> +#include <stack> +#include <string> +#include <istream> + +// Disable warning C4251: <data member>: <type> needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +namespace Json { + +/** \brief Unserialize a <a HREF="http://www.json.org">JSON</a> document into a + *Value. + * + * \deprecated Use CharReader and CharReaderBuilder. + */ +class JSON_API Reader { +public: + typedef char Char; + typedef const Char* Location; + + /** \brief An error tagged with where in the JSON text it was encountered. + * + * The offsets give the [start, limit) range of bytes within the text. Note + * that this is bytes, not codepoints. + * + */ + struct StructuredError { + ptrdiff_t offset_start; + ptrdiff_t offset_limit; + JSONCPP_STRING message; + }; + + /** \brief Constructs a Reader allowing all features + * for parsing. + */ + Reader(); + + /** \brief Constructs a Reader allowing the specified feature set + * for parsing. + */ + Reader(const Features& features); + + /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a> + * document. + * \param document UTF-8 encoded string containing the document to read. + * \param root [out] Contains the root value of the document if it was + * successfully parsed. + * \param collectComments \c true to collect comment and allow writing them + * back during + * serialization, \c false to discard comments. + * This parameter is ignored if + * Features::allowComments_ + * is \c false. + * \return \c true if the document was successfully parsed, \c false if an + * error occurred. + */ + bool + parse(const std::string& document, Value& root, bool collectComments = true); + + /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a> + document. + * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the + document to read. + * \param endDoc Pointer on the end of the UTF-8 encoded string of the + document to read. + * Must be >= beginDoc. + * \param root [out] Contains the root value of the document if it was + * successfully parsed. + * \param collectComments \c true to collect comment and allow writing them + back during + * serialization, \c false to discard comments. + * This parameter is ignored if + Features::allowComments_ + * is \c false. + * \return \c true if the document was successfully parsed, \c false if an + error occurred. + */ + bool parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments = true); + + /// \brief Parse from input stream. + /// \see Json::operator>>(std::istream&, Json::Value&). + bool parse(JSONCPP_ISTREAM& is, Value& root, bool collectComments = true); + + /** \brief Returns a user friendly string that list errors in the parsed + * document. + * \return Formatted error message with the list of errors with their location + * in + * the parsed document. An empty string is returned if no error + * occurred + * during parsing. + * \deprecated Use getFormattedErrorMessages() instead (typo fix). + */ + JSONCPP_DEPRECATED("Use getFormattedErrorMessages() instead.") + JSONCPP_STRING getFormatedErrorMessages() const; + + /** \brief Returns a user friendly string that list errors in the parsed + * document. + * \return Formatted error message with the list of errors with their location + * in + * the parsed document. An empty string is returned if no error + * occurred + * during parsing. + */ + JSONCPP_STRING getFormattedErrorMessages() const; + + /** \brief Returns a vector of structured erros encounted while parsing. + * \return A (possibly empty) vector of StructuredError objects. Currently + * only one error can be returned, but the caller should tolerate + * multiple + * errors. This can occur if the parser recovers from a non-fatal + * parse error and then encounters additional errors. + */ + std::vector<StructuredError> getStructuredErrors() const; + + /** \brief Add a semantic error message. + * \param value JSON Value location associated with the error + * \param message The error message. + * \return \c true if the error was successfully added, \c false if the + * Value offset exceeds the document size. + */ + bool pushError(const Value& value, const JSONCPP_STRING& message); + + /** \brief Add a semantic error message with extra context. + * \param value JSON Value location associated with the error + * \param message The error message. + * \param extra Additional JSON Value location to contextualize the error + * \return \c true if the error was successfully added, \c false if either + * Value offset exceeds the document size. + */ + bool pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra); + + /** \brief Return whether there are any errors. + * \return \c true if there are no errors to report \c false if + * errors have occurred. + */ + bool good() const; + +private: + enum TokenType { + tokenEndOfStream = 0, + tokenObjectBegin, + tokenObjectEnd, + tokenArrayBegin, + tokenArrayEnd, + tokenString, + tokenNumber, + tokenTrue, + tokenFalse, + tokenNull, + tokenArraySeparator, + tokenMemberSeparator, + tokenComment, + tokenError + }; + + class Token { + public: + TokenType type_; + Location start_; + Location end_; + }; + + class ErrorInfo { + public: + Token token_; + JSONCPP_STRING message_; + Location extra_; + }; + + typedef std::deque<ErrorInfo> Errors; + + bool readToken(Token& token); + void skipSpaces(); + bool match(Location pattern, int patternLength); + bool readComment(); + bool readCStyleComment(); + bool readCppStyleComment(); + bool readString(); + void readNumber(); + bool readValue(); + bool readObject(Token& token); + bool readArray(Token& token); + bool decodeNumber(Token& token); + bool decodeNumber(Token& token, Value& decoded); + bool decodeString(Token& token); + bool decodeString(Token& token, JSONCPP_STRING& decoded); + bool decodeDouble(Token& token); + bool decodeDouble(Token& token, Value& decoded); + bool decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool addError(const JSONCPP_STRING& message, Token& token, Location extra = 0); + bool recoverFromError(TokenType skipUntilToken); + bool addErrorAndRecover(const JSONCPP_STRING& message, + Token& token, + TokenType skipUntilToken); + void skipUntilSpace(); + Value& currentValue(); + Char getNextChar(); + void + getLocationLineAndColumn(Location location, int& line, int& column) const; + JSONCPP_STRING getLocationLineAndColumn(Location location) const; + void addComment(Location begin, Location end, CommentPlacement placement); + void skipCommentTokens(Token& token); + + typedef std::stack<Value*> Nodes; + Nodes nodes_; + Errors errors_; + JSONCPP_STRING document_; + Location begin_; + Location end_; + Location current_; + Location lastValueEnd_; + Value* lastValue_; + JSONCPP_STRING commentsBefore_; + Features features_; + bool collectComments_; +}; // Reader + +/** Interface for reading JSON from a char array. + */ +class JSON_API CharReader { +public: + virtual ~CharReader() {} + /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a> + document. + * The document must be a UTF-8 encoded string containing the document to read. + * + * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the + document to read. + * \param endDoc Pointer on the end of the UTF-8 encoded string of the + document to read. + * Must be >= beginDoc. + * \param root [out] Contains the root value of the document if it was + * successfully parsed. + * \param errs [out] Formatted error messages (if not NULL) + * a user friendly string that lists errors in the parsed + * document. + * \return \c true if the document was successfully parsed, \c false if an + error occurred. + */ + virtual bool parse( + char const* beginDoc, char const* endDoc, + Value* root, JSONCPP_STRING* errs) = 0; + + class JSON_API Factory { + public: + virtual ~Factory() {} + /** \brief Allocate a CharReader via operator new(). + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + virtual CharReader* newCharReader() const = 0; + }; // Factory +}; // CharReader + +/** \brief Build a CharReader implementation. + +Usage: +\code + using namespace Json; + CharReaderBuilder builder; + builder["collectComments"] = false; + Value value; + JSONCPP_STRING errs; + bool ok = parseFromStream(builder, std::cin, &value, &errs); +\endcode +*/ +class JSON_API CharReaderBuilder : public CharReader::Factory { +public: + // Note: We use a Json::Value so that we can add data-members to this class + // without a major version bump. + /** Configuration of this builder. + These are case-sensitive. + Available settings (case-sensitive): + - `"collectComments": false or true` + - true to collect comment and allow writing them + back during serialization, false to discard comments. + This parameter is ignored if allowComments is false. + - `"allowComments": false or true` + - true if comments are allowed. + - `"strictRoot": false or true` + - true if root must be either an array or an object value + - `"allowDroppedNullPlaceholders": false or true` + - true if dropped null placeholders are allowed. (See StreamWriterBuilder.) + - `"allowNumericKeys": false or true` + - true if numeric object keys are allowed. + - `"allowSingleQuotes": false or true` + - true if '' are allowed for strings (both keys and values) + - `"stackLimit": integer` + - Exceeding stackLimit (recursive depth of `readValue()`) will + cause an exception. + - This is a security issue (seg-faults caused by deeply nested JSON), + so the default is low. + - `"failIfExtra": false or true` + - If true, `parse()` returns false when extra non-whitespace trails + the JSON value in the input string. + - `"rejectDupKeys": false or true` + - If true, `parse()` returns false when a key is duplicated within an object. + - `"allowSpecialFloats": false or true` + - If true, special float values (NaNs and infinities) are allowed + and their values are lossfree restorable. + + You can examine 'settings_` yourself + to see the defaults. You can also write and read them just like any + JSON Value. + \sa setDefaults() + */ + Json::Value settings_; + + CharReaderBuilder(); + ~CharReaderBuilder() JSONCPP_OVERRIDE; + + CharReader* newCharReader() const JSONCPP_OVERRIDE; + + /** \return true if 'settings' are legal and consistent; + * otherwise, indicate bad settings via 'invalid'. + */ + bool validate(Json::Value* invalid) const; + + /** A simple way to update a specific setting. + */ + Value& operator[](JSONCPP_STRING key); + + /** Called by ctor, but you can use this to reset settings_. + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_reader.cpp CharReaderBuilderDefaults + */ + static void setDefaults(Json::Value* settings); + /** Same as old Features::strictMode(). + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_reader.cpp CharReaderBuilderStrictMode + */ + static void strictMode(Json::Value* settings); +}; + +/** Consume entire stream and use its begin/end. + * Someday we might have a real StreamReader, but for now this + * is convenient. + */ +bool JSON_API parseFromStream( + CharReader::Factory const&, + JSONCPP_ISTREAM&, + Value* root, std::string* errs); + +/** \brief Read from 'sin' into 'root'. + + Always keep comments from the input JSON. + + This can be used to read a file into a particular sub-object. + For example: + \code + Json::Value root; + cin >> root["dir"]["file"]; + cout << root; + \endcode + Result: + \verbatim + { + "dir": { + "file": { + // The input stream JSON would be nested here. + } + } + } + \endverbatim + \throw std::exception on parse error. + \see Json::operator<<() +*/ +JSON_API JSONCPP_ISTREAM& operator>>(JSONCPP_ISTREAM&, Value&); + +} // namespace Json + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // CPPTL_JSON_READER_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/reader.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/writer.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_WRITER_H_INCLUDED +#define JSON_WRITER_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "value.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <vector> +#include <string> +#include <ostream> + +// Disable warning C4251: <data member>: <type> needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +namespace Json { + +class Value; + +/** + +Usage: +\code + using namespace Json; + void writeToStdout(StreamWriter::Factory const& factory, Value const& value) { + std::unique_ptr<StreamWriter> const writer( + factory.newStreamWriter()); + writer->write(value, &std::cout); + std::cout << std::endl; // add lf and flush + } +\endcode +*/ +class JSON_API StreamWriter { +protected: + JSONCPP_OSTREAM* sout_; // not owned; will not delete +public: + StreamWriter(); + virtual ~StreamWriter(); + /** Write Value into document as configured in sub-class. + Do not take ownership of sout, but maintain a reference during function. + \pre sout != NULL + \return zero on success (For now, we always return zero, so check the stream instead.) + \throw std::exception possibly, depending on configuration + */ + virtual int write(Value const& root, JSONCPP_OSTREAM* sout) = 0; + + /** \brief A simple abstract factory. + */ + class JSON_API Factory { + public: + virtual ~Factory(); + /** \brief Allocate a CharReader via operator new(). + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + virtual StreamWriter* newStreamWriter() const = 0; + }; // Factory +}; // StreamWriter + +/** \brief Write into stringstream, then return string, for convenience. + * A StreamWriter will be created from the factory, used, and then deleted. + */ +JSONCPP_STRING JSON_API writeString(StreamWriter::Factory const& factory, Value const& root); + + +/** \brief Build a StreamWriter implementation. + +Usage: +\code + using namespace Json; + Value value = ...; + StreamWriterBuilder builder; + builder["commentStyle"] = "None"; + builder["indentation"] = " "; // or whatever you like + std::unique_ptr<Json::StreamWriter> writer( + builder.newStreamWriter()); + writer->write(value, &std::cout); + std::cout << std::endl; // add lf and flush +\endcode +*/ +class JSON_API StreamWriterBuilder : public StreamWriter::Factory { +public: + // Note: We use a Json::Value so that we can add data-members to this class + // without a major version bump. + /** Configuration of this builder. + Available settings (case-sensitive): + - "commentStyle": "None" or "All" + - "indentation": "<anything>" + - "enableYAMLCompatibility": false or true + - slightly change the whitespace around colons + - "dropNullPlaceholders": false or true + - Drop the "null" string from the writer's output for nullValues. + Strictly speaking, this is not valid JSON. But when the output is being + fed to a browser's Javascript, it makes for smaller output and the + browser can handle the output just fine. + - "useSpecialFloats": false or true + - If true, outputs non-finite floating point values in the following way: + NaN values as "NaN", positive infinity as "Infinity", and negative infinity + as "-Infinity". + + You can examine 'settings_` yourself + to see the defaults. You can also write and read them just like any + JSON Value. + \sa setDefaults() + */ + Json::Value settings_; + + StreamWriterBuilder(); + ~StreamWriterBuilder() JSONCPP_OVERRIDE; + + /** + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + StreamWriter* newStreamWriter() const JSONCPP_OVERRIDE; + + /** \return true if 'settings' are legal and consistent; + * otherwise, indicate bad settings via 'invalid'. + */ + bool validate(Json::Value* invalid) const; + /** A simple way to update a specific setting. + */ + Value& operator[](JSONCPP_STRING key); + + /** Called by ctor, but you can use this to reset settings_. + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_writer.cpp StreamWriterBuilderDefaults + */ + static void setDefaults(Json::Value* settings); +}; + +/** \brief Abstract class for writers. + * \deprecated Use StreamWriter. (And really, this is an implementation detail.) + */ +class JSON_API Writer { +public: + virtual ~Writer(); + + virtual JSONCPP_STRING write(const Value& root) = 0; +}; + +/** \brief Outputs a Value in <a HREF="http://www.json.org">JSON</a> format + *without formatting (not human friendly). + * + * The JSON document is written in a single line. It is not intended for 'human' + *consumption, + * but may be usefull to support feature such as RPC where bandwith is limited. + * \sa Reader, Value + * \deprecated Use StreamWriterBuilder. + */ +class JSON_API FastWriter : public Writer { + +public: + FastWriter(); + ~FastWriter() JSONCPP_OVERRIDE {} + + void enableYAMLCompatibility(); + + /** \brief Drop the "null" string from the writer's output for nullValues. + * Strictly speaking, this is not valid JSON. But when the output is being + * fed to a browser's Javascript, it makes for smaller output and the + * browser can handle the output just fine. + */ + void dropNullPlaceholders(); + + void omitEndingLineFeed(); + +public: // overridden from Writer + JSONCPP_STRING write(const Value& root) JSONCPP_OVERRIDE; + +private: + void writeValue(const Value& value); + + JSONCPP_STRING document_; + bool yamlCompatiblityEnabled_; + bool dropNullPlaceholders_; + bool omitEndingLineFeed_; +}; + +/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a + *human friendly way. + * + * The rules for line break and indent are as follow: + * - Object value: + * - if empty then print {} without indent and line break + * - if not empty the print '{', line break & indent, print one value per + *line + * and then unindent and line break and print '}'. + * - Array value: + * - if empty then print [] without indent and line break + * - if the array contains no object value, empty array or some other value + *types, + * and all the values fit on one lines, then print the array on a single + *line. + * - otherwise, it the values do not fit on one line, or the array contains + * object or non empty array, then print one value per line. + * + * If the Value have comments then they are outputed according to their + *#CommentPlacement. + * + * \sa Reader, Value, Value::setComment() + * \deprecated Use StreamWriterBuilder. + */ +class JSON_API StyledWriter : public Writer { +public: + StyledWriter(); + ~StyledWriter() JSONCPP_OVERRIDE {} + +public: // overridden from Writer + /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format. + * \param root Value to serialize. + * \return String containing the JSON document that represents the root value. + */ + JSONCPP_STRING write(const Value& root) JSONCPP_OVERRIDE; + +private: + void writeValue(const Value& value); + void writeArrayValue(const Value& value); + bool isMultineArray(const Value& value); + void pushValue(const JSONCPP_STRING& value); + void writeIndent(); + void writeWithIndent(const JSONCPP_STRING& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(const Value& root); + void writeCommentAfterValueOnSameLine(const Value& root); + bool hasCommentForValue(const Value& value); + static JSONCPP_STRING normalizeEOL(const JSONCPP_STRING& text); + + typedef std::vector<JSONCPP_STRING> ChildValues; + + ChildValues childValues_; + JSONCPP_STRING document_; + JSONCPP_STRING indentString_; + unsigned int rightMargin_; + unsigned int indentSize_; + bool addChildValues_; +}; + +/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a + human friendly way, + to a stream rather than to a string. + * + * The rules for line break and indent are as follow: + * - Object value: + * - if empty then print {} without indent and line break + * - if not empty the print '{', line break & indent, print one value per + line + * and then unindent and line break and print '}'. + * - Array value: + * - if empty then print [] without indent and line break + * - if the array contains no object value, empty array or some other value + types, + * and all the values fit on one lines, then print the array on a single + line. + * - otherwise, it the values do not fit on one line, or the array contains + * object or non empty array, then print one value per line. + * + * If the Value have comments then they are outputed according to their + #CommentPlacement. + * + * \param indentation Each level will be indented by this amount extra. + * \sa Reader, Value, Value::setComment() + * \deprecated Use StreamWriterBuilder. + */ +class JSON_API StyledStreamWriter { +public: + StyledStreamWriter(JSONCPP_STRING indentation = "\t"); + ~StyledStreamWriter() {} + +public: + /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format. + * \param out Stream to write to. (Can be ostringstream, e.g.) + * \param root Value to serialize. + * \note There is no point in deriving from Writer, since write() should not + * return a value. + */ + void write(JSONCPP_OSTREAM& out, const Value& root); + +private: + void writeValue(const Value& value); + void writeArrayValue(const Value& value); + bool isMultineArray(const Value& value); + void pushValue(const JSONCPP_STRING& value); + void writeIndent(); + void writeWithIndent(const JSONCPP_STRING& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(const Value& root); + void writeCommentAfterValueOnSameLine(const Value& root); + bool hasCommentForValue(const Value& value); + static JSONCPP_STRING normalizeEOL(const JSONCPP_STRING& text); + + typedef std::vector<JSONCPP_STRING> ChildValues; + + ChildValues childValues_; + JSONCPP_OSTREAM* document_; + JSONCPP_STRING indentString_; + unsigned int rightMargin_; + JSONCPP_STRING indentation_; + bool addChildValues_ : 1; + bool indented_ : 1; +}; + +#if defined(JSON_HAS_INT64) +JSONCPP_STRING JSON_API valueToString(Int value); +JSONCPP_STRING JSON_API valueToString(UInt value); +#endif // if defined(JSON_HAS_INT64) +JSONCPP_STRING JSON_API valueToString(LargestInt value); +JSONCPP_STRING JSON_API valueToString(LargestUInt value); +JSONCPP_STRING JSON_API valueToString(double value); +JSONCPP_STRING JSON_API valueToString(bool value); +JSONCPP_STRING JSON_API valueToQuotedString(const char* value); + +/// \brief Output using the StyledStreamWriter. +/// \see Json::operator>>() +JSON_API JSONCPP_OSTREAM& operator<<(JSONCPP_OSTREAM&, const Value& root); + +} // namespace Json + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // JSON_WRITER_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/writer.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/assertions.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_ASSERTIONS_H_INCLUDED +#define CPPTL_JSON_ASSERTIONS_H_INCLUDED + +#include <stdlib.h> +#include <sstream> + +#if !defined(JSON_IS_AMALGAMATION) +#include "config.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +/** It should not be possible for a maliciously designed file to + * cause an abort() or seg-fault, so these macros are used only + * for pre-condition violations and internal logic errors. + */ +#if JSON_USE_EXCEPTION + +// @todo <= add detail about condition in exception +# define JSON_ASSERT(condition) \ + {if (!(condition)) {Json::throwLogicError( "assert json failed" );}} + +# define JSON_FAIL_MESSAGE(message) \ + { \ + JSONCPP_OSTRINGSTREAM oss; oss << message; \ + Json::throwLogicError(oss.str()); \ + abort(); \ + } + +#else // JSON_USE_EXCEPTION + +# define JSON_ASSERT(condition) assert(condition) + +// The call to assert() will show the failure message in debug builds. In +// release builds we abort, for a core-dump or debugger. +# define JSON_FAIL_MESSAGE(message) \ + { \ + JSONCPP_OSTRINGSTREAM oss; oss << message; \ + assert(false && oss.str().c_str()); \ + abort(); \ + } + + +#endif + +#define JSON_ASSERT_MESSAGE(condition, message) \ + if (!(condition)) { \ + JSON_FAIL_MESSAGE(message); \ + } + +#endif // CPPTL_JSON_ASSERTIONS_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/assertions.h +// ////////////////////////////////////////////////////////////////////// + + + + + +#endif //ifndef JSON_AMALGATED_H_INCLUDED diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/jsoncpp.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/jsoncpp.cpp new file mode 100644 index 0000000..6ec7dde --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/jsoncpp.cpp @@ -0,0 +1,5290 @@ +/// Json-cpp amalgated source (http://jsoncpp.sourceforge.net/). +/// It is intended to be used with #include "json/json.h" + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + +/* +The JsonCpp library's source code, including accompanying documentation, +tests and demonstration applications, are licensed under the following +conditions... + +The author (Baptiste Lepilleur) explicitly disclaims copyright in all +jurisdictions which recognize such a disclaimer. In such jurisdictions, +this software is released into the Public Domain. + +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is +released under the terms of the MIT License (see below). + +In jurisdictions which recognize Public Domain property, the user of this +software may choose to accept it either as 1) Public Domain, 2) under the +conditions of the MIT License (see below), or 3) under the terms of dual +Public Domain/MIT License conditions described here, as they choose. + +The MIT License is about as close to Public Domain as a license can get, and is +described in clear, concise terms at: + + http://en.wikipedia.org/wiki/MIT_License + +The full text of the MIT License follows: + +======================================================================== +Copyright (c) 2007-2010 Baptiste Lepilleur + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +======================================================================== +(END LICENSE TEXT) + +The MIT license is compatible with both the GPL and commercial +software, affording one all of the rights of Public Domain with the +minor nuisance of being required to keep the above copyright notice +and license text in the source code. Note also that by accepting the +Public Domain "license" you can re-license your copy using whatever +license you like. + +*/ + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + + + + + + +#include "json/json.h" + +#ifndef JSON_IS_AMALGAMATION +#error "Compile with -I PATH_TO_JSON_DIRECTORY" +#endif + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_tool.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED +#define LIB_JSONCPP_JSON_TOOL_H_INCLUDED + +#ifndef NO_LOCALE_SUPPORT +#include <clocale> +#endif + +/* This header provides common string manipulation support, such as UTF-8, + * portable conversion from/to string... + * + * It is an internal header that must not be exposed. + */ + +namespace Json { +static char getDecimalPoint() { +#ifdef NO_LOCALE_SUPPORT + return '\0'; +#else + struct lconv* lc = localeconv(); + return lc ? *(lc->decimal_point) : '\0'; +#endif +} + +/// Converts a unicode code-point to UTF-8. +static inline JSONCPP_STRING codePointToUTF8(unsigned int cp) { + JSONCPP_STRING result; + + // based on description from http://en.wikipedia.org/wiki/UTF-8 + + if (cp <= 0x7f) { + result.resize(1); + result[0] = static_cast<char>(cp); + } else if (cp <= 0x7FF) { + result.resize(2); + result[1] = static_cast<char>(0x80 | (0x3f & cp)); + result[0] = static_cast<char>(0xC0 | (0x1f & (cp >> 6))); + } else if (cp <= 0xFFFF) { + result.resize(3); + result[2] = static_cast<char>(0x80 | (0x3f & cp)); + result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 6))); + result[0] = static_cast<char>(0xE0 | (0xf & (cp >> 12))); + } else if (cp <= 0x10FFFF) { + result.resize(4); + result[3] = static_cast<char>(0x80 | (0x3f & cp)); + result[2] = static_cast<char>(0x80 | (0x3f & (cp >> 6))); + result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 12))); + result[0] = static_cast<char>(0xF0 | (0x7 & (cp >> 18))); + } + + return result; +} + +/// Returns true if ch is a control character (in range [1,31]). +static inline bool isControlCharacter(char ch) { return ch > 0 && ch <= 0x1F; } + +enum { + /// Constant that specify the size of the buffer that must be passed to + /// uintToString. + uintToStringBufferSize = 3 * sizeof(LargestUInt) + 1 +}; + +// Defines a char buffer for use with uintToString(). +typedef char UIntToStringBuffer[uintToStringBufferSize]; + +/** Converts an unsigned integer to string. + * @param value Unsigned interger to convert to string + * @param current Input/Output string buffer. + * Must have at least uintToStringBufferSize chars free. + */ +static inline void uintToString(LargestUInt value, char*& current) { + *--current = 0; + do { + *--current = static_cast<char>(value % 10U + static_cast<unsigned>('0')); + value /= 10; + } while (value != 0); +} + +/** Change ',' to '.' everywhere in buffer. + * + * We had a sophisticated way, but it did not work in WinCE. + * @see https://github.com/open-source-parsers/jsoncpp/pull/9 + */ +static inline void fixNumericLocale(char* begin, char* end) { + while (begin < end) { + if (*begin == ',') { + *begin = '.'; + } + ++begin; + } +} + +static inline void fixNumericLocaleInput(char* begin, char* end) { + char decimalPoint = getDecimalPoint(); + if (decimalPoint != '\0' && decimalPoint != '.') { + while (begin < end) { + if (*begin == '.') { + *begin = decimalPoint; + } + ++begin; + } + } +} + +} // namespace Json { + +#endif // LIB_JSONCPP_JSON_TOOL_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_tool.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_reader.cpp +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2011 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#if !defined(JSON_IS_AMALGAMATION) +#include <json/assertions.h> +#include <json/reader.h> +#include <json/value.h> +#include "json_tool.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <utility> +#include <cstdio> +#include <cassert> +#include <cstring> +#include <istream> +#include <sstream> +#include <memory> +#include <set> +#include <limits> + +#if defined(_MSC_VER) +#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above +#define snprintf sprintf_s +#elif _MSC_VER >= 1900 // VC++ 14.0 and above +#define snprintf std::snprintf +#else +#define snprintf _snprintf +#endif +#elif defined(__ANDROID__) || defined(__QNXNTO__) +#define snprintf snprintf +#elif __cplusplus >= 201103L +#if !defined(__MINGW32__) && !defined(__CYGWIN__) +#define snprintf std::snprintf +#endif +#endif + +#if defined(__QNXNTO__) +#define sscanf std::sscanf +#endif + +#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0 +// Disable warning about strdup being deprecated. +#pragma warning(disable : 4996) +#endif + +static int const stackLimit_g = 1000; +static int stackDepth_g = 0; // see readValue() + +namespace Json { + +#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520) +typedef std::unique_ptr<CharReader> CharReaderPtr; +#else +typedef std::auto_ptr<CharReader> CharReaderPtr; +#endif + +// Implementation of class Features +// //////////////////////////////// + +Features::Features() + : allowComments_(true), strictRoot_(false), + allowDroppedNullPlaceholders_(false), allowNumericKeys_(false) {} + +Features Features::all() { return Features(); } + +Features Features::strictMode() { + Features features; + features.allowComments_ = false; + features.strictRoot_ = true; + features.allowDroppedNullPlaceholders_ = false; + features.allowNumericKeys_ = false; + return features; +} + +// Implementation of class Reader +// //////////////////////////////// + +static bool containsNewLine(Reader::Location begin, Reader::Location end) { + for (; begin < end; ++begin) + if (*begin == '\n' || *begin == '\r') + return true; + return false; +} + +// Class Reader +// ////////////////////////////////////////////////////////////////// + +Reader::Reader() + : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), + lastValue_(), commentsBefore_(), features_(Features::all()), + collectComments_() {} + +Reader::Reader(const Features& features) + : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), + lastValue_(), commentsBefore_(), features_(features), collectComments_() { +} + +bool +Reader::parse(const std::string& document, Value& root, bool collectComments) { + JSONCPP_STRING documentCopy(document.data(), document.data() + document.capacity()); + std::swap(documentCopy, document_); + const char* begin = document_.c_str(); + const char* end = begin + document_.length(); + return parse(begin, end, root, collectComments); +} + +bool Reader::parse(std::istream& sin, Value& root, bool collectComments) { + // std::istream_iterator<char> begin(sin); + // std::istream_iterator<char> end; + // Those would allow streamed input from a file, if parse() were a + // template function. + + // Since JSONCPP_STRING is reference-counted, this at least does not + // create an extra copy. + JSONCPP_STRING doc; + std::getline(sin, doc, (char)EOF); + return parse(doc.data(), doc.data() + doc.size(), root, collectComments); +} + +bool Reader::parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments) { + if (!features_.allowComments_) { + collectComments = false; + } + + begin_ = beginDoc; + end_ = endDoc; + collectComments_ = collectComments; + current_ = begin_; + lastValueEnd_ = 0; + lastValue_ = 0; + commentsBefore_ = ""; + errors_.clear(); + while (!nodes_.empty()) + nodes_.pop(); + nodes_.push(&root); + + stackDepth_g = 0; // Yes, this is bad coding, but options are limited. + bool successful = readValue(); + Token token; + skipCommentTokens(token); + if (collectComments_ && !commentsBefore_.empty()) + root.setComment(commentsBefore_, commentAfter); + if (features_.strictRoot_) { + if (!root.isArray() && !root.isObject()) { + // Set error location to start of doc, ideally should be first token found + // in doc + token.type_ = tokenError; + token.start_ = beginDoc; + token.end_ = endDoc; + addError( + "A valid JSON document must be either an array or an object value.", + token); + return false; + } + } + return successful; +} + +bool Reader::readValue() { + // This is a non-reentrant way to support a stackLimit. Terrible! + // But this deprecated class has a security problem: Bad input can + // cause a seg-fault. This seems like a fair, binary-compatible way + // to prevent the problem. + if (stackDepth_g >= stackLimit_g) throwRuntimeError("Exceeded stackLimit in readValue()."); + ++stackDepth_g; + + Token token; + skipCommentTokens(token); + bool successful = true; + + if (collectComments_ && !commentsBefore_.empty()) { + currentValue().setComment(commentsBefore_, commentBefore); + commentsBefore_ = ""; + } + + switch (token.type_) { + case tokenObjectBegin: + successful = readObject(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenArrayBegin: + successful = readArray(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenNumber: + successful = decodeNumber(token); + break; + case tokenString: + successful = decodeString(token); + break; + case tokenTrue: + { + Value v(true); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenFalse: + { + Value v(false); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNull: + { + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenArraySeparator: + case tokenObjectEnd: + case tokenArrayEnd: + if (features_.allowDroppedNullPlaceholders_) { + // "Un-read" the current token and mark the current value as a null + // token. + current_--; + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(current_ - begin_ - 1); + currentValue().setOffsetLimit(current_ - begin_); + break; + } // Else, fall through... + default: + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return addError("Syntax error: value, object or array expected.", token); + } + + if (collectComments_) { + lastValueEnd_ = current_; + lastValue_ = ¤tValue(); + } + + --stackDepth_g; + return successful; +} + +void Reader::skipCommentTokens(Token& token) { + if (features_.allowComments_) { + do { + readToken(token); + } while (token.type_ == tokenComment); + } else { + readToken(token); + } +} + +bool Reader::readToken(Token& token) { + skipSpaces(); + token.start_ = current_; + Char c = getNextChar(); + bool ok = true; + switch (c) { + case '{': + token.type_ = tokenObjectBegin; + break; + case '}': + token.type_ = tokenObjectEnd; + break; + case '[': + token.type_ = tokenArrayBegin; + break; + case ']': + token.type_ = tokenArrayEnd; + break; + case '"': + token.type_ = tokenString; + ok = readString(); + break; + case '/': + token.type_ = tokenComment; + ok = readComment(); + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '-': + token.type_ = tokenNumber; + readNumber(); + break; + case 't': + token.type_ = tokenTrue; + ok = match("rue", 3); + break; + case 'f': + token.type_ = tokenFalse; + ok = match("alse", 4); + break; + case 'n': + token.type_ = tokenNull; + ok = match("ull", 3); + break; + case ',': + token.type_ = tokenArraySeparator; + break; + case ':': + token.type_ = tokenMemberSeparator; + break; + case 0: + token.type_ = tokenEndOfStream; + break; + default: + ok = false; + break; + } + if (!ok) + token.type_ = tokenError; + token.end_ = current_; + return true; +} + +void Reader::skipSpaces() { + while (current_ != end_) { + Char c = *current_; + if (c == ' ' || c == '\t' || c == '\r' || c == '\n') + ++current_; + else + break; + } +} + +bool Reader::match(Location pattern, int patternLength) { + if (end_ - current_ < patternLength) + return false; + int index = patternLength; + while (index--) + if (current_[index] != pattern[index]) + return false; + current_ += patternLength; + return true; +} + +bool Reader::readComment() { + Location commentBegin = current_ - 1; + Char c = getNextChar(); + bool successful = false; + if (c == '*') + successful = readCStyleComment(); + else if (c == '/') + successful = readCppStyleComment(); + if (!successful) + return false; + + if (collectComments_) { + CommentPlacement placement = commentBefore; + if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) { + if (c != '*' || !containsNewLine(commentBegin, current_)) + placement = commentAfterOnSameLine; + } + + addComment(commentBegin, current_, placement); + } + return true; +} + +static JSONCPP_STRING normalizeEOL(Reader::Location begin, Reader::Location end) { + JSONCPP_STRING normalized; + normalized.reserve(static_cast<size_t>(end - begin)); + Reader::Location current = begin; + while (current != end) { + char c = *current++; + if (c == '\r') { + if (current != end && *current == '\n') + // convert dos EOL + ++current; + // convert Mac EOL + normalized += '\n'; + } else { + normalized += c; + } + } + return normalized; +} + +void +Reader::addComment(Location begin, Location end, CommentPlacement placement) { + assert(collectComments_); + const JSONCPP_STRING& normalized = normalizeEOL(begin, end); + if (placement == commentAfterOnSameLine) { + assert(lastValue_ != 0); + lastValue_->setComment(normalized, placement); + } else { + commentsBefore_ += normalized; + } +} + +bool Reader::readCStyleComment() { + while ((current_ + 1) < end_) { + Char c = getNextChar(); + if (c == '*' && *current_ == '/') + break; + } + return getNextChar() == '/'; +} + +bool Reader::readCppStyleComment() { + while (current_ != end_) { + Char c = getNextChar(); + if (c == '\n') + break; + if (c == '\r') { + // Consume DOS EOL. It will be normalized in addComment. + if (current_ != end_ && *current_ == '\n') + getNextChar(); + // Break on Moc OS 9 EOL. + break; + } + } + return true; +} + +void Reader::readNumber() { + const char *p = current_; + char c = '0'; // stopgap for already consumed character + // integral part + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : '\0'; + // fractional part + if (c == '.') { + c = (current_ = p) < end_ ? *p++ : '\0'; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : '\0'; + } + // exponential part + if (c == 'e' || c == 'E') { + c = (current_ = p) < end_ ? *p++ : '\0'; + if (c == '+' || c == '-') + c = (current_ = p) < end_ ? *p++ : '\0'; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : '\0'; + } +} + +bool Reader::readString() { + Char c = '\0'; + while (current_ != end_) { + c = getNextChar(); + if (c == '\\') + getNextChar(); + else if (c == '"') + break; + } + return c == '"'; +} + +bool Reader::readObject(Token& tokenStart) { + Token tokenName; + JSONCPP_STRING name; + Value init(objectValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + while (readToken(tokenName)) { + bool initialTokenOk = true; + while (tokenName.type_ == tokenComment && initialTokenOk) + initialTokenOk = readToken(tokenName); + if (!initialTokenOk) + break; + if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object + return true; + name = ""; + if (tokenName.type_ == tokenString) { + if (!decodeString(tokenName, name)) + return recoverFromError(tokenObjectEnd); + } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) { + Value numberName; + if (!decodeNumber(tokenName, numberName)) + return recoverFromError(tokenObjectEnd); + name = JSONCPP_STRING(numberName.asCString()); + } else { + break; + } + + Token colon; + if (!readToken(colon) || colon.type_ != tokenMemberSeparator) { + return addErrorAndRecover( + "Missing ':' after object member name", colon, tokenObjectEnd); + } + Value& value = currentValue()[name]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenObjectEnd); + + Token comma; + if (!readToken(comma) || + (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator && + comma.type_ != tokenComment)) { + return addErrorAndRecover( + "Missing ',' or '}' in object declaration", comma, tokenObjectEnd); + } + bool finalizeTokenOk = true; + while (comma.type_ == tokenComment && finalizeTokenOk) + finalizeTokenOk = readToken(comma); + if (comma.type_ == tokenObjectEnd) + return true; + } + return addErrorAndRecover( + "Missing '}' or object member name", tokenName, tokenObjectEnd); +} + +bool Reader::readArray(Token& tokenStart) { + Value init(arrayValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + skipSpaces(); + if (current_ != end_ && *current_ == ']') // empty array + { + Token endArray; + readToken(endArray); + return true; + } + int index = 0; + for (;;) { + Value& value = currentValue()[index++]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenArrayEnd); + + Token token; + // Accept Comment after last item in the array. + ok = readToken(token); + while (token.type_ == tokenComment && ok) { + ok = readToken(token); + } + bool badTokenType = + (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd); + if (!ok || badTokenType) { + return addErrorAndRecover( + "Missing ',' or ']' in array declaration", token, tokenArrayEnd); + } + if (token.type_ == tokenArrayEnd) + break; + } + return true; +} + +bool Reader::decodeNumber(Token& token) { + Value decoded; + if (!decodeNumber(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool Reader::decodeNumber(Token& token, Value& decoded) { + // Attempts to parse the number as an integer. If the number is + // larger than the maximum supported value of an integer then + // we decode the number as a double. + Location current = token.start_; + bool isNegative = *current == '-'; + if (isNegative) + ++current; + // TODO: Help the compiler do the div and mod at compile time or get rid of them. + Value::LargestUInt maxIntegerValue = + isNegative ? Value::LargestUInt(Value::maxLargestInt) + 1 + : Value::maxLargestUInt; + Value::LargestUInt threshold = maxIntegerValue / 10; + Value::LargestUInt value = 0; + while (current < token.end_) { + Char c = *current++; + if (c < '0' || c > '9') + return decodeDouble(token, decoded); + Value::UInt digit(static_cast<Value::UInt>(c - '0')); + if (value >= threshold) { + // We've hit or exceeded the max value divided by 10 (rounded down). If + // a) we've only just touched the limit, b) this is the last digit, and + // c) it's small enough to fit in that rounding delta, we're okay. + // Otherwise treat this number as a double to avoid overflow. + if (value > threshold || current != token.end_ || + digit > maxIntegerValue % 10) { + return decodeDouble(token, decoded); + } + } + value = value * 10 + digit; + } + if (isNegative && value == maxIntegerValue) + decoded = Value::minLargestInt; + else if (isNegative) + decoded = -Value::LargestInt(value); + else if (value <= Value::LargestUInt(Value::maxInt)) + decoded = Value::LargestInt(value); + else + decoded = value; + return true; +} + +bool Reader::decodeDouble(Token& token) { + Value decoded; + if (!decodeDouble(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool Reader::decodeDouble(Token& token, Value& decoded) { + double value = 0; + JSONCPP_STRING buffer(token.start_, token.end_); + JSONCPP_ISTRINGSTREAM is(buffer); + if (!(is >> value)) + return addError("'" + JSONCPP_STRING(token.start_, token.end_) + + "' is not a number.", + token); + decoded = value; + return true; +} + +bool Reader::decodeString(Token& token) { + JSONCPP_STRING decoded_string; + if (!decodeString(token, decoded_string)) + return false; + Value decoded(decoded_string); + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool Reader::decodeString(Token& token, JSONCPP_STRING& decoded) { + decoded.reserve(static_cast<size_t>(token.end_ - token.start_ - 2)); + Location current = token.start_ + 1; // skip '"' + Location end = token.end_ - 1; // do not include '"' + while (current != end) { + Char c = *current++; + if (c == '"') + break; + else if (c == '\\') { + if (current == end) + return addError("Empty escape sequence in string", token, current); + Char escape = *current++; + switch (escape) { + case '"': + decoded += '"'; + break; + case '/': + decoded += '/'; + break; + case '\\': + decoded += '\\'; + break; + case 'b': + decoded += '\b'; + break; + case 'f': + decoded += '\f'; + break; + case 'n': + decoded += '\n'; + break; + case 'r': + decoded += '\r'; + break; + case 't': + decoded += '\t'; + break; + case 'u': { + unsigned int unicode; + if (!decodeUnicodeCodePoint(token, current, end, unicode)) + return false; + decoded += codePointToUTF8(unicode); + } break; + default: + return addError("Bad escape sequence in string", token, current); + } + } else { + decoded += c; + } + } + return true; +} + +bool Reader::decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode) { + + if (!decodeUnicodeEscapeSequence(token, current, end, unicode)) + return false; + if (unicode >= 0xD800 && unicode <= 0xDBFF) { + // surrogate pairs + if (end - current < 6) + return addError( + "additional six characters expected to parse unicode surrogate pair.", + token, + current); + unsigned int surrogatePair; + if (*(current++) == '\\' && *(current++) == 'u') { + if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) { + unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF); + } else + return false; + } else + return addError("expecting another \\u token to begin the second half of " + "a unicode surrogate pair", + token, + current); + } + return true; +} + +bool Reader::decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& ret_unicode) { + if (end - current < 4) + return addError( + "Bad unicode escape sequence in string: four digits expected.", + token, + current); + int unicode = 0; + for (int index = 0; index < 4; ++index) { + Char c = *current++; + unicode *= 16; + if (c >= '0' && c <= '9') + unicode += c - '0'; + else if (c >= 'a' && c <= 'f') + unicode += c - 'a' + 10; + else if (c >= 'A' && c <= 'F') + unicode += c - 'A' + 10; + else + return addError( + "Bad unicode escape sequence in string: hexadecimal digit expected.", + token, + current); + } + ret_unicode = static_cast<unsigned int>(unicode); + return true; +} + +bool +Reader::addError(const JSONCPP_STRING& message, Token& token, Location extra) { + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = extra; + errors_.push_back(info); + return false; +} + +bool Reader::recoverFromError(TokenType skipUntilToken) { + size_t const errorCount = errors_.size(); + Token skip; + for (;;) { + if (!readToken(skip)) + errors_.resize(errorCount); // discard errors caused by recovery + if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream) + break; + } + errors_.resize(errorCount); + return false; +} + +bool Reader::addErrorAndRecover(const JSONCPP_STRING& message, + Token& token, + TokenType skipUntilToken) { + addError(message, token); + return recoverFromError(skipUntilToken); +} + +Value& Reader::currentValue() { return *(nodes_.top()); } + +Reader::Char Reader::getNextChar() { + if (current_ == end_) + return 0; + return *current_++; +} + +void Reader::getLocationLineAndColumn(Location location, + int& line, + int& column) const { + Location current = begin_; + Location lastLineStart = current; + line = 0; + while (current < location && current != end_) { + Char c = *current++; + if (c == '\r') { + if (*current == '\n') + ++current; + lastLineStart = current; + ++line; + } else if (c == '\n') { + lastLineStart = current; + ++line; + } + } + // column & line start at 1 + column = int(location - lastLineStart) + 1; + ++line; +} + +JSONCPP_STRING Reader::getLocationLineAndColumn(Location location) const { + int line, column; + getLocationLineAndColumn(location, line, column); + char buffer[18 + 16 + 16 + 1]; + snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column); + return buffer; +} + +// Deprecated. Preserved for backward compatibility +JSONCPP_STRING Reader::getFormatedErrorMessages() const { + return getFormattedErrorMessages(); +} + +JSONCPP_STRING Reader::getFormattedErrorMessages() const { + JSONCPP_STRING formattedMessage; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + formattedMessage += + "* " + getLocationLineAndColumn(error.token_.start_) + "\n"; + formattedMessage += " " + error.message_ + "\n"; + if (error.extra_) + formattedMessage += + "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n"; + } + return formattedMessage; +} + +std::vector<Reader::StructuredError> Reader::getStructuredErrors() const { + std::vector<Reader::StructuredError> allErrors; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + Reader::StructuredError structured; + structured.offset_start = error.token_.start_ - begin_; + structured.offset_limit = error.token_.end_ - begin_; + structured.message = error.message_; + allErrors.push_back(structured); + } + return allErrors; +} + +bool Reader::pushError(const Value& value, const JSONCPP_STRING& message) { + ptrdiff_t const length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = end_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = 0; + errors_.push_back(info); + return true; +} + +bool Reader::pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra) { + ptrdiff_t const length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length + || extra.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = begin_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = begin_ + extra.getOffsetStart(); + errors_.push_back(info); + return true; +} + +bool Reader::good() const { + return !errors_.size(); +} + +// exact copy of Features +class OurFeatures { +public: + static OurFeatures all(); + bool allowComments_; + bool strictRoot_; + bool allowDroppedNullPlaceholders_; + bool allowNumericKeys_; + bool allowSingleQuotes_; + bool failIfExtra_; + bool rejectDupKeys_; + bool allowSpecialFloats_; + int stackLimit_; +}; // OurFeatures + +// exact copy of Implementation of class Features +// //////////////////////////////// + +OurFeatures OurFeatures::all() { return OurFeatures(); } + +// Implementation of class Reader +// //////////////////////////////// + +// exact copy of Reader, renamed to OurReader +class OurReader { +public: + typedef char Char; + typedef const Char* Location; + struct StructuredError { + ptrdiff_t offset_start; + ptrdiff_t offset_limit; + JSONCPP_STRING message; + }; + + OurReader(OurFeatures const& features); + bool parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments = true); + JSONCPP_STRING getFormattedErrorMessages() const; + std::vector<StructuredError> getStructuredErrors() const; + bool pushError(const Value& value, const JSONCPP_STRING& message); + bool pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra); + bool good() const; + +private: + OurReader(OurReader const&); // no impl + void operator=(OurReader const&); // no impl + + enum TokenType { + tokenEndOfStream = 0, + tokenObjectBegin, + tokenObjectEnd, + tokenArrayBegin, + tokenArrayEnd, + tokenString, + tokenNumber, + tokenTrue, + tokenFalse, + tokenNull, + tokenNaN, + tokenPosInf, + tokenNegInf, + tokenArraySeparator, + tokenMemberSeparator, + tokenComment, + tokenError + }; + + class Token { + public: + TokenType type_; + Location start_; + Location end_; + }; + + class ErrorInfo { + public: + Token token_; + JSONCPP_STRING message_; + Location extra_; + }; + + typedef std::deque<ErrorInfo> Errors; + + bool readToken(Token& token); + void skipSpaces(); + bool match(Location pattern, int patternLength); + bool readComment(); + bool readCStyleComment(); + bool readCppStyleComment(); + bool readString(); + bool readStringSingleQuote(); + bool readNumber(bool checkInf); + bool readValue(); + bool readObject(Token& token); + bool readArray(Token& token); + bool decodeNumber(Token& token); + bool decodeNumber(Token& token, Value& decoded); + bool decodeString(Token& token); + bool decodeString(Token& token, JSONCPP_STRING& decoded); + bool decodeDouble(Token& token); + bool decodeDouble(Token& token, Value& decoded); + bool decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool addError(const JSONCPP_STRING& message, Token& token, Location extra = 0); + bool recoverFromError(TokenType skipUntilToken); + bool addErrorAndRecover(const JSONCPP_STRING& message, + Token& token, + TokenType skipUntilToken); + void skipUntilSpace(); + Value& currentValue(); + Char getNextChar(); + void + getLocationLineAndColumn(Location location, int& line, int& column) const; + JSONCPP_STRING getLocationLineAndColumn(Location location) const; + void addComment(Location begin, Location end, CommentPlacement placement); + void skipCommentTokens(Token& token); + + typedef std::stack<Value*> Nodes; + Nodes nodes_; + Errors errors_; + JSONCPP_STRING document_; + Location begin_; + Location end_; + Location current_; + Location lastValueEnd_; + Value* lastValue_; + JSONCPP_STRING commentsBefore_; + int stackDepth_; + + OurFeatures const features_; + bool collectComments_; +}; // OurReader + +// complete copy of Read impl, for OurReader + +OurReader::OurReader(OurFeatures const& features) + : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), + lastValue_(), commentsBefore_(), + stackDepth_(0), + features_(features), collectComments_() { +} + +bool OurReader::parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments) { + if (!features_.allowComments_) { + collectComments = false; + } + + begin_ = beginDoc; + end_ = endDoc; + collectComments_ = collectComments; + current_ = begin_; + lastValueEnd_ = 0; + lastValue_ = 0; + commentsBefore_ = ""; + errors_.clear(); + while (!nodes_.empty()) + nodes_.pop(); + nodes_.push(&root); + + stackDepth_ = 0; + bool successful = readValue(); + Token token; + skipCommentTokens(token); + if (features_.failIfExtra_) { + if ((features_.strictRoot_ || token.type_ != tokenError) && token.type_ != tokenEndOfStream) { + addError("Extra non-whitespace after JSON value.", token); + return false; + } + } + if (collectComments_ && !commentsBefore_.empty()) + root.setComment(commentsBefore_, commentAfter); + if (features_.strictRoot_) { + if (!root.isArray() && !root.isObject()) { + // Set error location to start of doc, ideally should be first token found + // in doc + token.type_ = tokenError; + token.start_ = beginDoc; + token.end_ = endDoc; + addError( + "A valid JSON document must be either an array or an object value.", + token); + return false; + } + } + return successful; +} + +bool OurReader::readValue() { + if (stackDepth_ >= features_.stackLimit_) throwRuntimeError("Exceeded stackLimit in readValue()."); + ++stackDepth_; + Token token; + skipCommentTokens(token); + bool successful = true; + + if (collectComments_ && !commentsBefore_.empty()) { + currentValue().setComment(commentsBefore_, commentBefore); + commentsBefore_ = ""; + } + + switch (token.type_) { + case tokenObjectBegin: + successful = readObject(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenArrayBegin: + successful = readArray(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenNumber: + successful = decodeNumber(token); + break; + case tokenString: + successful = decodeString(token); + break; + case tokenTrue: + { + Value v(true); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenFalse: + { + Value v(false); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNull: + { + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNaN: + { + Value v(std::numeric_limits<double>::quiet_NaN()); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenPosInf: + { + Value v(std::numeric_limits<double>::infinity()); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNegInf: + { + Value v(-std::numeric_limits<double>::infinity()); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenArraySeparator: + case tokenObjectEnd: + case tokenArrayEnd: + if (features_.allowDroppedNullPlaceholders_) { + // "Un-read" the current token and mark the current value as a null + // token. + current_--; + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(current_ - begin_ - 1); + currentValue().setOffsetLimit(current_ - begin_); + break; + } // else, fall through ... + default: + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return addError("Syntax error: value, object or array expected.", token); + } + + if (collectComments_) { + lastValueEnd_ = current_; + lastValue_ = ¤tValue(); + } + + --stackDepth_; + return successful; +} + +void OurReader::skipCommentTokens(Token& token) { + if (features_.allowComments_) { + do { + readToken(token); + } while (token.type_ == tokenComment); + } else { + readToken(token); + } +} + +bool OurReader::readToken(Token& token) { + skipSpaces(); + token.start_ = current_; + Char c = getNextChar(); + bool ok = true; + switch (c) { + case '{': + token.type_ = tokenObjectBegin; + break; + case '}': + token.type_ = tokenObjectEnd; + break; + case '[': + token.type_ = tokenArrayBegin; + break; + case ']': + token.type_ = tokenArrayEnd; + break; + case '"': + token.type_ = tokenString; + ok = readString(); + break; + case '\'': + if (features_.allowSingleQuotes_) { + token.type_ = tokenString; + ok = readStringSingleQuote(); + break; + } // else continue + case '/': + token.type_ = tokenComment; + ok = readComment(); + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + token.type_ = tokenNumber; + readNumber(false); + break; + case '-': + if (readNumber(true)) { + token.type_ = tokenNumber; + } else { + token.type_ = tokenNegInf; + ok = features_.allowSpecialFloats_ && match("nfinity", 7); + } + break; + case 't': + token.type_ = tokenTrue; + ok = match("rue", 3); + break; + case 'f': + token.type_ = tokenFalse; + ok = match("alse", 4); + break; + case 'n': + token.type_ = tokenNull; + ok = match("ull", 3); + break; + case 'N': + if (features_.allowSpecialFloats_) { + token.type_ = tokenNaN; + ok = match("aN", 2); + } else { + ok = false; + } + break; + case 'I': + if (features_.allowSpecialFloats_) { + token.type_ = tokenPosInf; + ok = match("nfinity", 7); + } else { + ok = false; + } + break; + case ',': + token.type_ = tokenArraySeparator; + break; + case ':': + token.type_ = tokenMemberSeparator; + break; + case 0: + token.type_ = tokenEndOfStream; + break; + default: + ok = false; + break; + } + if (!ok) + token.type_ = tokenError; + token.end_ = current_; + return true; +} + +void OurReader::skipSpaces() { + while (current_ != end_) { + Char c = *current_; + if (c == ' ' || c == '\t' || c == '\r' || c == '\n') + ++current_; + else + break; + } +} + +bool OurReader::match(Location pattern, int patternLength) { + if (end_ - current_ < patternLength) + return false; + int index = patternLength; + while (index--) + if (current_[index] != pattern[index]) + return false; + current_ += patternLength; + return true; +} + +bool OurReader::readComment() { + Location commentBegin = current_ - 1; + Char c = getNextChar(); + bool successful = false; + if (c == '*') + successful = readCStyleComment(); + else if (c == '/') + successful = readCppStyleComment(); + if (!successful) + return false; + + if (collectComments_) { + CommentPlacement placement = commentBefore; + if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) { + if (c != '*' || !containsNewLine(commentBegin, current_)) + placement = commentAfterOnSameLine; + } + + addComment(commentBegin, current_, placement); + } + return true; +} + +void +OurReader::addComment(Location begin, Location end, CommentPlacement placement) { + assert(collectComments_); + const JSONCPP_STRING& normalized = normalizeEOL(begin, end); + if (placement == commentAfterOnSameLine) { + assert(lastValue_ != 0); + lastValue_->setComment(normalized, placement); + } else { + commentsBefore_ += normalized; + } +} + +bool OurReader::readCStyleComment() { + while ((current_ + 1) < end_) { + Char c = getNextChar(); + if (c == '*' && *current_ == '/') + break; + } + return getNextChar() == '/'; +} + +bool OurReader::readCppStyleComment() { + while (current_ != end_) { + Char c = getNextChar(); + if (c == '\n') + break; + if (c == '\r') { + // Consume DOS EOL. It will be normalized in addComment. + if (current_ != end_ && *current_ == '\n') + getNextChar(); + // Break on Moc OS 9 EOL. + break; + } + } + return true; +} + +bool OurReader::readNumber(bool checkInf) { + const char *p = current_; + if (checkInf && p != end_ && *p == 'I') { + current_ = ++p; + return false; + } + char c = '0'; // stopgap for already consumed character + // integral part + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : '\0'; + // fractional part + if (c == '.') { + c = (current_ = p) < end_ ? *p++ : '\0'; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : '\0'; + } + // exponential part + if (c == 'e' || c == 'E') { + c = (current_ = p) < end_ ? *p++ : '\0'; + if (c == '+' || c == '-') + c = (current_ = p) < end_ ? *p++ : '\0'; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : '\0'; + } + return true; +} +bool OurReader::readString() { + Char c = 0; + while (current_ != end_) { + c = getNextChar(); + if (c == '\\') + getNextChar(); + else if (c == '"') + break; + } + return c == '"'; +} + + +bool OurReader::readStringSingleQuote() { + Char c = 0; + while (current_ != end_) { + c = getNextChar(); + if (c == '\\') + getNextChar(); + else if (c == '\'') + break; + } + return c == '\''; +} + +bool OurReader::readObject(Token& tokenStart) { + Token tokenName; + JSONCPP_STRING name; + Value init(objectValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + while (readToken(tokenName)) { + bool initialTokenOk = true; + while (tokenName.type_ == tokenComment && initialTokenOk) + initialTokenOk = readToken(tokenName); + if (!initialTokenOk) + break; + if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object + return true; + name = ""; + if (tokenName.type_ == tokenString) { + if (!decodeString(tokenName, name)) + return recoverFromError(tokenObjectEnd); + } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) { + Value numberName; + if (!decodeNumber(tokenName, numberName)) + return recoverFromError(tokenObjectEnd); + name = numberName.asString(); + } else { + break; + } + + Token colon; + if (!readToken(colon) || colon.type_ != tokenMemberSeparator) { + return addErrorAndRecover( + "Missing ':' after object member name", colon, tokenObjectEnd); + } + if (name.length() >= (1U<<30)) throwRuntimeError("keylength >= 2^30"); + if (features_.rejectDupKeys_ && currentValue().isMember(name)) { + JSONCPP_STRING msg = "Duplicate key: '" + name + "'"; + return addErrorAndRecover( + msg, tokenName, tokenObjectEnd); + } + Value& value = currentValue()[name]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenObjectEnd); + + Token comma; + if (!readToken(comma) || + (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator && + comma.type_ != tokenComment)) { + return addErrorAndRecover( + "Missing ',' or '}' in object declaration", comma, tokenObjectEnd); + } + bool finalizeTokenOk = true; + while (comma.type_ == tokenComment && finalizeTokenOk) + finalizeTokenOk = readToken(comma); + if (comma.type_ == tokenObjectEnd) + return true; + } + return addErrorAndRecover( + "Missing '}' or object member name", tokenName, tokenObjectEnd); +} + +bool OurReader::readArray(Token& tokenStart) { + Value init(arrayValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + skipSpaces(); + if (current_ != end_ && *current_ == ']') // empty array + { + Token endArray; + readToken(endArray); + return true; + } + int index = 0; + for (;;) { + Value& value = currentValue()[index++]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenArrayEnd); + + Token token; + // Accept Comment after last item in the array. + ok = readToken(token); + while (token.type_ == tokenComment && ok) { + ok = readToken(token); + } + bool badTokenType = + (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd); + if (!ok || badTokenType) { + return addErrorAndRecover( + "Missing ',' or ']' in array declaration", token, tokenArrayEnd); + } + if (token.type_ == tokenArrayEnd) + break; + } + return true; +} + +bool OurReader::decodeNumber(Token& token) { + Value decoded; + if (!decodeNumber(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool OurReader::decodeNumber(Token& token, Value& decoded) { + // Attempts to parse the number as an integer. If the number is + // larger than the maximum supported value of an integer then + // we decode the number as a double. + Location current = token.start_; + bool isNegative = *current == '-'; + if (isNegative) + ++current; + // TODO: Help the compiler do the div and mod at compile time or get rid of them. + Value::LargestUInt maxIntegerValue = + isNegative ? Value::LargestUInt(-Value::minLargestInt) + : Value::maxLargestUInt; + Value::LargestUInt threshold = maxIntegerValue / 10; + Value::LargestUInt value = 0; + while (current < token.end_) { + Char c = *current++; + if (c < '0' || c > '9') + return decodeDouble(token, decoded); + Value::UInt digit(static_cast<Value::UInt>(c - '0')); + if (value >= threshold) { + // We've hit or exceeded the max value divided by 10 (rounded down). If + // a) we've only just touched the limit, b) this is the last digit, and + // c) it's small enough to fit in that rounding delta, we're okay. + // Otherwise treat this number as a double to avoid overflow. + if (value > threshold || current != token.end_ || + digit > maxIntegerValue % 10) { + return decodeDouble(token, decoded); + } + } + value = value * 10 + digit; + } + if (isNegative) + decoded = -Value::LargestInt(value); + else if (value <= Value::LargestUInt(Value::maxInt)) + decoded = Value::LargestInt(value); + else + decoded = value; + return true; +} + +bool OurReader::decodeDouble(Token& token) { + Value decoded; + if (!decodeDouble(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool OurReader::decodeDouble(Token& token, Value& decoded) { + double value = 0; + const int bufferSize = 32; + int count; + ptrdiff_t const length = token.end_ - token.start_; + + // Sanity check to avoid buffer overflow exploits. + if (length < 0) { + return addError("Unable to parse token length", token); + } + size_t const ulength = static_cast<size_t>(length); + + // Avoid using a string constant for the format control string given to + // sscanf, as this can cause hard to debug crashes on OS X. See here for more + // info: + // + // http://developer.apple.com/library/mac/#DOCUMENTATION/DeveloperTools/gcc-4.0.1/gcc/Incompatibilities.html + char format[] = "%lf"; + + if (length <= bufferSize) { + Char buffer[bufferSize + 1]; + memcpy(buffer, token.start_, ulength); + buffer[length] = 0; + fixNumericLocaleInput(buffer, buffer + length); + count = sscanf(buffer, format, &value); + } else { + JSONCPP_STRING buffer(token.start_, token.end_); + count = sscanf(buffer.c_str(), format, &value); + } + + if (count != 1) + return addError("'" + JSONCPP_STRING(token.start_, token.end_) + + "' is not a number.", + token); + decoded = value; + return true; +} + +bool OurReader::decodeString(Token& token) { + JSONCPP_STRING decoded_string; + if (!decodeString(token, decoded_string)) + return false; + Value decoded(decoded_string); + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool OurReader::decodeString(Token& token, JSONCPP_STRING& decoded) { + decoded.reserve(static_cast<size_t>(token.end_ - token.start_ - 2)); + Location current = token.start_ + 1; // skip '"' + Location end = token.end_ - 1; // do not include '"' + while (current != end) { + Char c = *current++; + if (c == '"') + break; + else if (c == '\\') { + if (current == end) + return addError("Empty escape sequence in string", token, current); + Char escape = *current++; + switch (escape) { + case '"': + decoded += '"'; + break; + case '/': + decoded += '/'; + break; + case '\\': + decoded += '\\'; + break; + case 'b': + decoded += '\b'; + break; + case 'f': + decoded += '\f'; + break; + case 'n': + decoded += '\n'; + break; + case 'r': + decoded += '\r'; + break; + case 't': + decoded += '\t'; + break; + case 'u': { + unsigned int unicode; + if (!decodeUnicodeCodePoint(token, current, end, unicode)) + return false; + decoded += codePointToUTF8(unicode); + } break; + default: + return addError("Bad escape sequence in string", token, current); + } + } else { + decoded += c; + } + } + return true; +} + +bool OurReader::decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode) { + + if (!decodeUnicodeEscapeSequence(token, current, end, unicode)) + return false; + if (unicode >= 0xD800 && unicode <= 0xDBFF) { + // surrogate pairs + if (end - current < 6) + return addError( + "additional six characters expected to parse unicode surrogate pair.", + token, + current); + unsigned int surrogatePair; + if (*(current++) == '\\' && *(current++) == 'u') { + if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) { + unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF); + } else + return false; + } else + return addError("expecting another \\u token to begin the second half of " + "a unicode surrogate pair", + token, + current); + } + return true; +} + +bool OurReader::decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& ret_unicode) { + if (end - current < 4) + return addError( + "Bad unicode escape sequence in string: four digits expected.", + token, + current); + int unicode = 0; + for (int index = 0; index < 4; ++index) { + Char c = *current++; + unicode *= 16; + if (c >= '0' && c <= '9') + unicode += c - '0'; + else if (c >= 'a' && c <= 'f') + unicode += c - 'a' + 10; + else if (c >= 'A' && c <= 'F') + unicode += c - 'A' + 10; + else + return addError( + "Bad unicode escape sequence in string: hexadecimal digit expected.", + token, + current); + } + ret_unicode = static_cast<unsigned int>(unicode); + return true; +} + +bool +OurReader::addError(const JSONCPP_STRING& message, Token& token, Location extra) { + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = extra; + errors_.push_back(info); + return false; +} + +bool OurReader::recoverFromError(TokenType skipUntilToken) { + size_t errorCount = errors_.size(); + Token skip; + for (;;) { + if (!readToken(skip)) + errors_.resize(errorCount); // discard errors caused by recovery + if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream) + break; + } + errors_.resize(errorCount); + return false; +} + +bool OurReader::addErrorAndRecover(const JSONCPP_STRING& message, + Token& token, + TokenType skipUntilToken) { + addError(message, token); + return recoverFromError(skipUntilToken); +} + +Value& OurReader::currentValue() { return *(nodes_.top()); } + +OurReader::Char OurReader::getNextChar() { + if (current_ == end_) + return 0; + return *current_++; +} + +void OurReader::getLocationLineAndColumn(Location location, + int& line, + int& column) const { + Location current = begin_; + Location lastLineStart = current; + line = 0; + while (current < location && current != end_) { + Char c = *current++; + if (c == '\r') { + if (*current == '\n') + ++current; + lastLineStart = current; + ++line; + } else if (c == '\n') { + lastLineStart = current; + ++line; + } + } + // column & line start at 1 + column = int(location - lastLineStart) + 1; + ++line; +} + +JSONCPP_STRING OurReader::getLocationLineAndColumn(Location location) const { + int line, column; + getLocationLineAndColumn(location, line, column); + char buffer[18 + 16 + 16 + 1]; + snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column); + return buffer; +} + +JSONCPP_STRING OurReader::getFormattedErrorMessages() const { + JSONCPP_STRING formattedMessage; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + formattedMessage += + "* " + getLocationLineAndColumn(error.token_.start_) + "\n"; + formattedMessage += " " + error.message_ + "\n"; + if (error.extra_) + formattedMessage += + "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n"; + } + return formattedMessage; +} + +std::vector<OurReader::StructuredError> OurReader::getStructuredErrors() const { + std::vector<OurReader::StructuredError> allErrors; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + OurReader::StructuredError structured; + structured.offset_start = error.token_.start_ - begin_; + structured.offset_limit = error.token_.end_ - begin_; + structured.message = error.message_; + allErrors.push_back(structured); + } + return allErrors; +} + +bool OurReader::pushError(const Value& value, const JSONCPP_STRING& message) { + ptrdiff_t length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = end_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = 0; + errors_.push_back(info); + return true; +} + +bool OurReader::pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra) { + ptrdiff_t length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length + || extra.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = begin_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = begin_ + extra.getOffsetStart(); + errors_.push_back(info); + return true; +} + +bool OurReader::good() const { + return !errors_.size(); +} + + +class OurCharReader : public CharReader { + bool const collectComments_; + OurReader reader_; +public: + OurCharReader( + bool collectComments, + OurFeatures const& features) + : collectComments_(collectComments) + , reader_(features) + {} + bool parse( + char const* beginDoc, char const* endDoc, + Value* root, JSONCPP_STRING* errs) JSONCPP_OVERRIDE { + bool ok = reader_.parse(beginDoc, endDoc, *root, collectComments_); + if (errs) { + *errs = reader_.getFormattedErrorMessages(); + } + return ok; + } +}; + +CharReaderBuilder::CharReaderBuilder() +{ + setDefaults(&settings_); +} +CharReaderBuilder::~CharReaderBuilder() +{} +CharReader* CharReaderBuilder::newCharReader() const +{ + bool collectComments = settings_["collectComments"].asBool(); + OurFeatures features = OurFeatures::all(); + features.allowComments_ = settings_["allowComments"].asBool(); + features.strictRoot_ = settings_["strictRoot"].asBool(); + features.allowDroppedNullPlaceholders_ = settings_["allowDroppedNullPlaceholders"].asBool(); + features.allowNumericKeys_ = settings_["allowNumericKeys"].asBool(); + features.allowSingleQuotes_ = settings_["allowSingleQuotes"].asBool(); + features.stackLimit_ = settings_["stackLimit"].asInt(); + features.failIfExtra_ = settings_["failIfExtra"].asBool(); + features.rejectDupKeys_ = settings_["rejectDupKeys"].asBool(); + features.allowSpecialFloats_ = settings_["allowSpecialFloats"].asBool(); + return new OurCharReader(collectComments, features); +} +static void getValidReaderKeys(std::set<JSONCPP_STRING>* valid_keys) +{ + valid_keys->clear(); + valid_keys->insert("collectComments"); + valid_keys->insert("allowComments"); + valid_keys->insert("strictRoot"); + valid_keys->insert("allowDroppedNullPlaceholders"); + valid_keys->insert("allowNumericKeys"); + valid_keys->insert("allowSingleQuotes"); + valid_keys->insert("stackLimit"); + valid_keys->insert("failIfExtra"); + valid_keys->insert("rejectDupKeys"); + valid_keys->insert("allowSpecialFloats"); +} +bool CharReaderBuilder::validate(Json::Value* invalid) const +{ + Json::Value my_invalid; + if (!invalid) invalid = &my_invalid; // so we do not need to test for NULL + Json::Value& inv = *invalid; + std::set<JSONCPP_STRING> valid_keys; + getValidReaderKeys(&valid_keys); + Value::Members keys = settings_.getMemberNames(); + size_t n = keys.size(); + for (size_t i = 0; i < n; ++i) { + JSONCPP_STRING const& key = keys[i]; + if (valid_keys.find(key) == valid_keys.end()) { + inv[key] = settings_[key]; + } + } + return 0u == inv.size(); +} +Value& CharReaderBuilder::operator[](JSONCPP_STRING key) +{ + return settings_[key]; +} +// static +void CharReaderBuilder::strictMode(Json::Value* settings) +{ +//! [CharReaderBuilderStrictMode] + (*settings)["allowComments"] = false; + (*settings)["strictRoot"] = true; + (*settings)["allowDroppedNullPlaceholders"] = false; + (*settings)["allowNumericKeys"] = false; + (*settings)["allowSingleQuotes"] = false; + (*settings)["stackLimit"] = 1000; + (*settings)["failIfExtra"] = true; + (*settings)["rejectDupKeys"] = true; + (*settings)["allowSpecialFloats"] = false; +//! [CharReaderBuilderStrictMode] +} +// static +void CharReaderBuilder::setDefaults(Json::Value* settings) +{ +//! [CharReaderBuilderDefaults] + (*settings)["collectComments"] = true; + (*settings)["allowComments"] = true; + (*settings)["strictRoot"] = false; + (*settings)["allowDroppedNullPlaceholders"] = false; + (*settings)["allowNumericKeys"] = false; + (*settings)["allowSingleQuotes"] = false; + (*settings)["stackLimit"] = 1000; + (*settings)["failIfExtra"] = false; + (*settings)["rejectDupKeys"] = false; + (*settings)["allowSpecialFloats"] = false; +//! [CharReaderBuilderDefaults] +} + +////////////////////////////////// +// global functions + +bool parseFromStream( + CharReader::Factory const& fact, JSONCPP_ISTREAM& sin, + Value* root, JSONCPP_STRING* errs) +{ + JSONCPP_OSTRINGSTREAM ssin; + ssin << sin.rdbuf(); + JSONCPP_STRING doc = ssin.str(); + char const* begin = doc.data(); + char const* end = begin + doc.size(); + // Note that we do not actually need a null-terminator. + CharReaderPtr const reader(fact.newCharReader()); + return reader->parse(begin, end, root, errs); +} + +JSONCPP_ISTREAM& operator>>(JSONCPP_ISTREAM& sin, Value& root) { + CharReaderBuilder b; + JSONCPP_STRING errs; + bool ok = parseFromStream(b, sin, &root, &errs); + if (!ok) { + fprintf(stderr, + "Error from reader: %s", + errs.c_str()); + + throwRuntimeError(errs); + } + return sin; +} + +} // namespace Json + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_reader.cpp +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_valueiterator.inl +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +// included by json_value.cpp + +namespace Json { + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class ValueIteratorBase +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +ValueIteratorBase::ValueIteratorBase() + : current_(), isNull_(true) { +} + +ValueIteratorBase::ValueIteratorBase( + const Value::ObjectValues::iterator& current) + : current_(current), isNull_(false) {} + +Value& ValueIteratorBase::deref() const { + return current_->second; +} + +void ValueIteratorBase::increment() { + ++current_; +} + +void ValueIteratorBase::decrement() { + --current_; +} + +ValueIteratorBase::difference_type +ValueIteratorBase::computeDistance(const SelfType& other) const { +#ifdef JSON_USE_CPPTL_SMALLMAP + return other.current_ - current_; +#else + // Iterator for null value are initialized using the default + // constructor, which initialize current_ to the default + // std::map::iterator. As begin() and end() are two instance + // of the default std::map::iterator, they can not be compared. + // To allow this, we handle this comparison specifically. + if (isNull_ && other.isNull_) { + return 0; + } + + // Usage of std::distance is not portable (does not compile with Sun Studio 12 + // RogueWave STL, + // which is the one used by default). + // Using a portable hand-made version for non random iterator instead: + // return difference_type( std::distance( current_, other.current_ ) ); + difference_type myDistance = 0; + for (Value::ObjectValues::iterator it = current_; it != other.current_; + ++it) { + ++myDistance; + } + return myDistance; +#endif +} + +bool ValueIteratorBase::isEqual(const SelfType& other) const { + if (isNull_) { + return other.isNull_; + } + return current_ == other.current_; +} + +void ValueIteratorBase::copy(const SelfType& other) { + current_ = other.current_; + isNull_ = other.isNull_; +} + +Value ValueIteratorBase::key() const { + const Value::CZString czstring = (*current_).first; + if (czstring.data()) { + if (czstring.isStaticString()) + return Value(StaticString(czstring.data())); + return Value(czstring.data(), czstring.data() + czstring.length()); + } + return Value(czstring.index()); +} + +UInt ValueIteratorBase::index() const { + const Value::CZString czstring = (*current_).first; + if (!czstring.data()) + return czstring.index(); + return Value::UInt(-1); +} + +JSONCPP_STRING ValueIteratorBase::name() const { + char const* keey; + char const* end; + keey = memberName(&end); + if (!keey) return JSONCPP_STRING(); + return JSONCPP_STRING(keey, end); +} + +char const* ValueIteratorBase::memberName() const { + const char* cname = (*current_).first.data(); + return cname ? cname : ""; +} + +char const* ValueIteratorBase::memberName(char const** end) const { + const char* cname = (*current_).first.data(); + if (!cname) { + *end = NULL; + return NULL; + } + *end = cname + (*current_).first.length(); + return cname; +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class ValueConstIterator +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +ValueConstIterator::ValueConstIterator() {} + +ValueConstIterator::ValueConstIterator( + const Value::ObjectValues::iterator& current) + : ValueIteratorBase(current) {} + +ValueConstIterator::ValueConstIterator(ValueIterator const& other) + : ValueIteratorBase(other) {} + +ValueConstIterator& ValueConstIterator:: +operator=(const ValueIteratorBase& other) { + copy(other); + return *this; +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class ValueIterator +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +ValueIterator::ValueIterator() {} + +ValueIterator::ValueIterator(const Value::ObjectValues::iterator& current) + : ValueIteratorBase(current) {} + +ValueIterator::ValueIterator(const ValueConstIterator& other) + : ValueIteratorBase(other) { + throwRuntimeError("ConstIterator to Iterator should never be allowed."); +} + +ValueIterator::ValueIterator(const ValueIterator& other) + : ValueIteratorBase(other) {} + +ValueIterator& ValueIterator::operator=(const SelfType& other) { + copy(other); + return *this; +} + +} // namespace Json + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_valueiterator.inl +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_value.cpp +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2011 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#if !defined(JSON_IS_AMALGAMATION) +#include <json/assertions.h> +#include <json/value.h> +#include <json/writer.h> +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <math.h> +#include <sstream> +#include <utility> +#include <cstring> +#include <cassert> +#ifdef JSON_USE_CPPTL +#include <cpptl/conststring.h> +#endif +#include <cstddef> // size_t +#include <algorithm> // min() + +#define JSON_ASSERT_UNREACHABLE assert(false) + +namespace Json { + +// This is a walkaround to avoid the static initialization of Value::null. +// kNull must be word-aligned to avoid crashing on ARM. We use an alignment of +// 8 (instead of 4) as a bit of future-proofing. +#if defined(__ARMEL__) +#define ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment))) +#else +#define ALIGNAS(byte_alignment) +#endif +//static const unsigned char ALIGNAS(8) kNull[sizeof(Value)] = { 0 }; +//const unsigned char& kNullRef = kNull[0]; +//const Value& Value::null = reinterpret_cast<const Value&>(kNullRef); +//const Value& Value::nullRef = null; + +// static +Value const& Value::nullSingleton() +{ + static Value const nullStatic; + return nullStatic; +} + +// for backwards compatibility, we'll leave these global references around, but DO NOT +// use them in JSONCPP library code any more! +Value const& Value::null = Value::nullSingleton(); +Value const& Value::nullRef = Value::nullSingleton(); + +const Int Value::minInt = Int(~(UInt(-1) / 2)); +const Int Value::maxInt = Int(UInt(-1) / 2); +const UInt Value::maxUInt = UInt(-1); +#if defined(JSON_HAS_INT64) +const Int64 Value::minInt64 = Int64(~(UInt64(-1) / 2)); +const Int64 Value::maxInt64 = Int64(UInt64(-1) / 2); +const UInt64 Value::maxUInt64 = UInt64(-1); +// The constant is hard-coded because some compiler have trouble +// converting Value::maxUInt64 to a double correctly (AIX/xlC). +// Assumes that UInt64 is a 64 bits integer. +static const double maxUInt64AsDouble = 18446744073709551615.0; +#endif // defined(JSON_HAS_INT64) +const LargestInt Value::minLargestInt = LargestInt(~(LargestUInt(-1) / 2)); +const LargestInt Value::maxLargestInt = LargestInt(LargestUInt(-1) / 2); +const LargestUInt Value::maxLargestUInt = LargestUInt(-1); + +#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) +template <typename T, typename U> +static inline bool InRange(double d, T min, U max) { + // The casts can lose precision, but we are looking only for + // an approximate range. Might fail on edge cases though. ~cdunn + //return d >= static_cast<double>(min) && d <= static_cast<double>(max); + return d >= min && d <= max; +} +#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) +static inline double integerToDouble(Json::UInt64 value) { + return static_cast<double>(Int64(value / 2)) * 2.0 + static_cast<double>(Int64(value & 1)); +} + +template <typename T> static inline double integerToDouble(T value) { + return static_cast<double>(value); +} + +template <typename T, typename U> +static inline bool InRange(double d, T min, U max) { + return d >= integerToDouble(min) && d <= integerToDouble(max); +} +#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + +/** Duplicates the specified string value. + * @param value Pointer to the string to duplicate. Must be zero-terminated if + * length is "unknown". + * @param length Length of the value. if equals to unknown, then it will be + * computed using strlen(value). + * @return Pointer on the duplicate instance of string. + */ +static inline char* duplicateStringValue(const char* value, + size_t length) +{ + // Avoid an integer overflow in the call to malloc below by limiting length + // to a sane value. + if (length >= static_cast<size_t>(Value::maxInt)) + length = Value::maxInt - 1; + + char* newString = static_cast<char*>(malloc(length + 1)); + if (newString == NULL) { + throwRuntimeError( + "in Json::Value::duplicateStringValue(): " + "Failed to allocate string value buffer"); + } + memcpy(newString, value, length); + newString[length] = 0; + return newString; +} + +/* Record the length as a prefix. + */ +static inline char* duplicateAndPrefixStringValue( + const char* value, + unsigned int length) +{ + // Avoid an integer overflow in the call to malloc below by limiting length + // to a sane value. + JSON_ASSERT_MESSAGE(length <= static_cast<unsigned>(Value::maxInt) - sizeof(unsigned) - 1U, + "in Json::Value::duplicateAndPrefixStringValue(): " + "length too big for prefixing"); + unsigned actualLength = length + static_cast<unsigned>(sizeof(unsigned)) + 1U; + char* newString = static_cast<char*>(malloc(actualLength)); + if (newString == 0) { + throwRuntimeError( + "in Json::Value::duplicateAndPrefixStringValue(): " + "Failed to allocate string value buffer"); + } + *reinterpret_cast<unsigned*>(newString) = length; + memcpy(newString + sizeof(unsigned), value, length); + newString[actualLength - 1U] = 0; // to avoid buffer over-run accidents by users later + return newString; +} +inline static void decodePrefixedString( + bool isPrefixed, char const* prefixed, + unsigned* length, char const** value) +{ + if (!isPrefixed) { + *length = static_cast<unsigned>(strlen(prefixed)); + *value = prefixed; + } else { + *length = *reinterpret_cast<unsigned const*>(prefixed); + *value = prefixed + sizeof(unsigned); + } +} +/** Free the string duplicated by duplicateStringValue()/duplicateAndPrefixStringValue(). + */ +#if JSONCPP_USING_SECURE_MEMORY +static inline void releasePrefixedStringValue(char* value) { + unsigned length = 0; + char const* valueDecoded; + decodePrefixedString(true, value, &length, &valueDecoded); + size_t const size = sizeof(unsigned) + length + 1U; + memset(value, 0, size); + free(value); +} +static inline void releaseStringValue(char* value, unsigned length) { + // length==0 => we allocated the strings memory + size_t size = (length==0) ? strlen(value) : length; + memset(value, 0, size); + free(value); +} +#else // !JSONCPP_USING_SECURE_MEMORY +static inline void releasePrefixedStringValue(char* value) { + free(value); +} +static inline void releaseStringValue(char* value, unsigned) { + free(value); +} +#endif // JSONCPP_USING_SECURE_MEMORY + +} // namespace Json + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ValueInternals... +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +#if !defined(JSON_IS_AMALGAMATION) + +#include "json_valueiterator.inl" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +Exception::Exception(JSONCPP_STRING const& msg) + : msg_(msg) +{} +Exception::~Exception() throw() +{} +char const* Exception::what() const throw() +{ + return msg_.c_str(); +} +RuntimeError::RuntimeError(JSONCPP_STRING const& msg) + : Exception(msg) +{} +LogicError::LogicError(JSONCPP_STRING const& msg) + : Exception(msg) +{} +JSONCPP_NORETURN void throwRuntimeError(JSONCPP_STRING const& msg) +{ + throw RuntimeError(msg); +} +JSONCPP_NORETURN void throwLogicError(JSONCPP_STRING const& msg) +{ + throw LogicError(msg); +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class Value::CommentInfo +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +Value::CommentInfo::CommentInfo() : comment_(0) +{} + +Value::CommentInfo::~CommentInfo() { + if (comment_) + releaseStringValue(comment_, 0u); +} + +void Value::CommentInfo::setComment(const char* text, size_t len) { + if (comment_) { + releaseStringValue(comment_, 0u); + comment_ = 0; + } + JSON_ASSERT(text != 0); + JSON_ASSERT_MESSAGE( + text[0] == '\0' || text[0] == '/', + "in Json::Value::setComment(): Comments must start with /"); + // It seems that /**/ style comments are acceptable as well. + comment_ = duplicateStringValue(text, len); +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class Value::CZString +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +// Notes: policy_ indicates if the string was allocated when +// a string is stored. + +Value::CZString::CZString(ArrayIndex aindex) : cstr_(0), index_(aindex) {} + +Value::CZString::CZString(char const* str, unsigned ulength, DuplicationPolicy allocate) + : cstr_(str) { + // allocate != duplicate + storage_.policy_ = allocate & 0x3; + storage_.length_ = ulength & 0x3FFFFFFF; +} + +Value::CZString::CZString(const CZString& other) { + cstr_ = (other.storage_.policy_ != noDuplication && other.cstr_ != 0 + ? duplicateStringValue(other.cstr_, other.storage_.length_) + : other.cstr_); + storage_.policy_ = static_cast<unsigned>(other.cstr_ + ? (static_cast<DuplicationPolicy>(other.storage_.policy_) == noDuplication + ? noDuplication : duplicate) + : static_cast<DuplicationPolicy>(other.storage_.policy_)) & 3U; + storage_.length_ = other.storage_.length_; +} + +#if JSON_HAS_RVALUE_REFERENCES +Value::CZString::CZString(CZString&& other) + : cstr_(other.cstr_), index_(other.index_) { + other.cstr_ = nullptr; +} +#endif + +Value::CZString::~CZString() { + if (cstr_ && storage_.policy_ == duplicate) { + releaseStringValue(const_cast<char*>(cstr_), storage_.length_ + 1u); //+1 for null terminating character for sake of completeness but not actually necessary + } +} + +void Value::CZString::swap(CZString& other) { + std::swap(cstr_, other.cstr_); + std::swap(index_, other.index_); +} + +Value::CZString& Value::CZString::operator=(CZString other) { + swap(other); + return *this; +} + +bool Value::CZString::operator<(const CZString& other) const { + if (!cstr_) return index_ < other.index_; + //return strcmp(cstr_, other.cstr_) < 0; + // Assume both are strings. + unsigned this_len = this->storage_.length_; + unsigned other_len = other.storage_.length_; + unsigned min_len = std::min(this_len, other_len); + JSON_ASSERT(this->cstr_ && other.cstr_); + int comp = memcmp(this->cstr_, other.cstr_, min_len); + if (comp < 0) return true; + if (comp > 0) return false; + return (this_len < other_len); +} + +bool Value::CZString::operator==(const CZString& other) const { + if (!cstr_) return index_ == other.index_; + //return strcmp(cstr_, other.cstr_) == 0; + // Assume both are strings. + unsigned this_len = this->storage_.length_; + unsigned other_len = other.storage_.length_; + if (this_len != other_len) return false; + JSON_ASSERT(this->cstr_ && other.cstr_); + int comp = memcmp(this->cstr_, other.cstr_, this_len); + return comp == 0; +} + +ArrayIndex Value::CZString::index() const { return index_; } + +//const char* Value::CZString::c_str() const { return cstr_; } +const char* Value::CZString::data() const { return cstr_; } +unsigned Value::CZString::length() const { return storage_.length_; } +bool Value::CZString::isStaticString() const { return storage_.policy_ == noDuplication; } + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class Value::Value +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +/*! \internal Default constructor initialization must be equivalent to: + * memset( this, 0, sizeof(Value) ) + * This optimization is used in ValueInternalMap fast allocator. + */ +Value::Value(ValueType vtype) { + static char const empty[] = ""; + initBasic(vtype); + switch (vtype) { + case nullValue: + break; + case intValue: + case uintValue: + value_.int_ = 0; + break; + case realValue: + value_.real_ = 0.0; + break; + case stringValue: + // allocated_ == false, so this is safe. + value_.string_ = const_cast<char*>(static_cast<char const*>(empty)); + break; + case arrayValue: + case objectValue: + value_.map_ = new ObjectValues(); + break; + case booleanValue: + value_.bool_ = false; + break; + default: + JSON_ASSERT_UNREACHABLE; + } +} + +Value::Value(Int value) { + initBasic(intValue); + value_.int_ = value; +} + +Value::Value(UInt value) { + initBasic(uintValue); + value_.uint_ = value; +} +#if defined(JSON_HAS_INT64) +Value::Value(Int64 value) { + initBasic(intValue); + value_.int_ = value; +} +Value::Value(UInt64 value) { + initBasic(uintValue); + value_.uint_ = value; +} +#endif // defined(JSON_HAS_INT64) + +Value::Value(double value) { + initBasic(realValue); + value_.real_ = value; +} + +Value::Value(const char* value) { + initBasic(stringValue, true); + value_.string_ = duplicateAndPrefixStringValue(value, static_cast<unsigned>(strlen(value))); +} + +Value::Value(const char* beginValue, const char* endValue) { + initBasic(stringValue, true); + value_.string_ = + duplicateAndPrefixStringValue(beginValue, static_cast<unsigned>(endValue - beginValue)); +} + +Value::Value(const JSONCPP_STRING& value) { + initBasic(stringValue, true); + value_.string_ = + duplicateAndPrefixStringValue(value.data(), static_cast<unsigned>(value.length())); +} + +Value::Value(const StaticString& value) { + initBasic(stringValue); + value_.string_ = const_cast<char*>(value.c_str()); +} + +#ifdef JSON_USE_CPPTL +Value::Value(const CppTL::ConstString& value) { + initBasic(stringValue, true); + value_.string_ = duplicateAndPrefixStringValue(value, static_cast<unsigned>(value.length())); +} +#endif + +Value::Value(bool value) { + initBasic(booleanValue); + value_.bool_ = value; +} + +Value::Value(Value const& other) + : type_(other.type_), allocated_(false) + , + comments_(0), start_(other.start_), limit_(other.limit_) +{ + switch (type_) { + case nullValue: + case intValue: + case uintValue: + case realValue: + case booleanValue: + value_ = other.value_; + break; + case stringValue: + if (other.value_.string_ && other.allocated_) { + unsigned len; + char const* str; + decodePrefixedString(other.allocated_, other.value_.string_, + &len, &str); + value_.string_ = duplicateAndPrefixStringValue(str, len); + allocated_ = true; + } else { + value_.string_ = other.value_.string_; + allocated_ = false; + } + break; + case arrayValue: + case objectValue: + value_.map_ = new ObjectValues(*other.value_.map_); + break; + default: + JSON_ASSERT_UNREACHABLE; + } + if (other.comments_) { + comments_ = new CommentInfo[numberOfCommentPlacement]; + for (int comment = 0; comment < numberOfCommentPlacement; ++comment) { + const CommentInfo& otherComment = other.comments_[comment]; + if (otherComment.comment_) + comments_[comment].setComment( + otherComment.comment_, strlen(otherComment.comment_)); + } + } +} + +#if JSON_HAS_RVALUE_REFERENCES +// Move constructor +Value::Value(Value&& other) { + initBasic(nullValue); + swap(other); +} +#endif + +Value::~Value() { + switch (type_) { + case nullValue: + case intValue: + case uintValue: + case realValue: + case booleanValue: + break; + case stringValue: + if (allocated_) + releasePrefixedStringValue(value_.string_); + break; + case arrayValue: + case objectValue: + delete value_.map_; + break; + default: + JSON_ASSERT_UNREACHABLE; + } + + delete[] comments_; + + value_.uint_ = 0; +} + +Value& Value::operator=(Value other) { + swap(other); + return *this; +} + +void Value::swapPayload(Value& other) { + ValueType temp = type_; + type_ = other.type_; + other.type_ = temp; + std::swap(value_, other.value_); + int temp2 = allocated_; + allocated_ = other.allocated_; + other.allocated_ = temp2 & 0x1; +} + +void Value::swap(Value& other) { + swapPayload(other); + std::swap(comments_, other.comments_); + std::swap(start_, other.start_); + std::swap(limit_, other.limit_); +} + +ValueType Value::type() const { return type_; } + +int Value::compare(const Value& other) const { + if (*this < other) + return -1; + if (*this > other) + return 1; + return 0; +} + +bool Value::operator<(const Value& other) const { + int typeDelta = type_ - other.type_; + if (typeDelta) + return typeDelta < 0 ? true : false; + switch (type_) { + case nullValue: + return false; + case intValue: + return value_.int_ < other.value_.int_; + case uintValue: + return value_.uint_ < other.value_.uint_; + case realValue: + return value_.real_ < other.value_.real_; + case booleanValue: + return value_.bool_ < other.value_.bool_; + case stringValue: + { + if ((value_.string_ == 0) || (other.value_.string_ == 0)) { + if (other.value_.string_) return true; + else return false; + } + unsigned this_len; + unsigned other_len; + char const* this_str; + char const* other_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str); + unsigned min_len = std::min(this_len, other_len); + JSON_ASSERT(this_str && other_str); + int comp = memcmp(this_str, other_str, min_len); + if (comp < 0) return true; + if (comp > 0) return false; + return (this_len < other_len); + } + case arrayValue: + case objectValue: { + int delta = int(value_.map_->size() - other.value_.map_->size()); + if (delta) + return delta < 0; + return (*value_.map_) < (*other.value_.map_); + } + default: + JSON_ASSERT_UNREACHABLE; + } + return false; // unreachable +} + +bool Value::operator<=(const Value& other) const { return !(other < *this); } + +bool Value::operator>=(const Value& other) const { return !(*this < other); } + +bool Value::operator>(const Value& other) const { return other < *this; } + +bool Value::operator==(const Value& other) const { + // if ( type_ != other.type_ ) + // GCC 2.95.3 says: + // attempt to take address of bit-field structure member `Json::Value::type_' + // Beats me, but a temp solves the problem. + int temp = other.type_; + if (type_ != temp) + return false; + switch (type_) { + case nullValue: + return true; + case intValue: + return value_.int_ == other.value_.int_; + case uintValue: + return value_.uint_ == other.value_.uint_; + case realValue: + return value_.real_ == other.value_.real_; + case booleanValue: + return value_.bool_ == other.value_.bool_; + case stringValue: + { + if ((value_.string_ == 0) || (other.value_.string_ == 0)) { + return (value_.string_ == other.value_.string_); + } + unsigned this_len; + unsigned other_len; + char const* this_str; + char const* other_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str); + if (this_len != other_len) return false; + JSON_ASSERT(this_str && other_str); + int comp = memcmp(this_str, other_str, this_len); + return comp == 0; + } + case arrayValue: + case objectValue: + return value_.map_->size() == other.value_.map_->size() && + (*value_.map_) == (*other.value_.map_); + default: + JSON_ASSERT_UNREACHABLE; + } + return false; // unreachable +} + +bool Value::operator!=(const Value& other) const { return !(*this == other); } + +const char* Value::asCString() const { + JSON_ASSERT_MESSAGE(type_ == stringValue, + "in Json::Value::asCString(): requires stringValue"); + if (value_.string_ == 0) return 0; + unsigned this_len; + char const* this_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + return this_str; +} + +#if JSONCPP_USING_SECURE_MEMORY +unsigned Value::getCStringLength() const { + JSON_ASSERT_MESSAGE(type_ == stringValue, + "in Json::Value::asCString(): requires stringValue"); + if (value_.string_ == 0) return 0; + unsigned this_len; + char const* this_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + return this_len; +} +#endif + +bool Value::getString(char const** str, char const** cend) const { + if (type_ != stringValue) return false; + if (value_.string_ == 0) return false; + unsigned length; + decodePrefixedString(this->allocated_, this->value_.string_, &length, str); + *cend = *str + length; + return true; +} + +JSONCPP_STRING Value::asString() const { + switch (type_) { + case nullValue: + return ""; + case stringValue: + { + if (value_.string_ == 0) return ""; + unsigned this_len; + char const* this_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + return JSONCPP_STRING(this_str, this_len); + } + case booleanValue: + return value_.bool_ ? "true" : "false"; + case intValue: + return valueToString(value_.int_); + case uintValue: + return valueToString(value_.uint_); + case realValue: + return valueToString(value_.real_); + default: + JSON_FAIL_MESSAGE("Type is not convertible to string"); + } +} + +#ifdef JSON_USE_CPPTL +CppTL::ConstString Value::asConstString() const { + unsigned len; + char const* str; + decodePrefixedString(allocated_, value_.string_, + &len, &str); + return CppTL::ConstString(str, len); +} +#endif + +Value::Int Value::asInt() const { + switch (type_) { + case intValue: + JSON_ASSERT_MESSAGE(isInt(), "LargestInt out of Int range"); + return Int(value_.int_); + case uintValue: + JSON_ASSERT_MESSAGE(isInt(), "LargestUInt out of Int range"); + return Int(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt, maxInt), + "double out of Int range"); + return Int(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to Int."); +} + +Value::UInt Value::asUInt() const { + switch (type_) { + case intValue: + JSON_ASSERT_MESSAGE(isUInt(), "LargestInt out of UInt range"); + return UInt(value_.int_); + case uintValue: + JSON_ASSERT_MESSAGE(isUInt(), "LargestUInt out of UInt range"); + return UInt(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt), + "double out of UInt range"); + return UInt(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to UInt."); +} + +#if defined(JSON_HAS_INT64) + +Value::Int64 Value::asInt64() const { + switch (type_) { + case intValue: + return Int64(value_.int_); + case uintValue: + JSON_ASSERT_MESSAGE(isInt64(), "LargestUInt out of Int64 range"); + return Int64(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt64, maxInt64), + "double out of Int64 range"); + return Int64(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to Int64."); +} + +Value::UInt64 Value::asUInt64() const { + switch (type_) { + case intValue: + JSON_ASSERT_MESSAGE(isUInt64(), "LargestInt out of UInt64 range"); + return UInt64(value_.int_); + case uintValue: + return UInt64(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt64), + "double out of UInt64 range"); + return UInt64(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to UInt64."); +} +#endif // if defined(JSON_HAS_INT64) + +LargestInt Value::asLargestInt() const { +#if defined(JSON_NO_INT64) + return asInt(); +#else + return asInt64(); +#endif +} + +LargestUInt Value::asLargestUInt() const { +#if defined(JSON_NO_INT64) + return asUInt(); +#else + return asUInt64(); +#endif +} + +double Value::asDouble() const { + switch (type_) { + case intValue: + return static_cast<double>(value_.int_); + case uintValue: +#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return static_cast<double>(value_.uint_); +#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return integerToDouble(value_.uint_); +#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + case realValue: + return value_.real_; + case nullValue: + return 0.0; + case booleanValue: + return value_.bool_ ? 1.0 : 0.0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to double."); +} + +float Value::asFloat() const { + switch (type_) { + case intValue: + return static_cast<float>(value_.int_); + case uintValue: +#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return static_cast<float>(value_.uint_); +#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + // This can fail (silently?) if the value is bigger than MAX_FLOAT. + return static_cast<float>(integerToDouble(value_.uint_)); +#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + case realValue: + return static_cast<float>(value_.real_); + case nullValue: + return 0.0; + case booleanValue: + return value_.bool_ ? 1.0f : 0.0f; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to float."); +} + +bool Value::asBool() const { + switch (type_) { + case booleanValue: + return value_.bool_; + case nullValue: + return false; + case intValue: + return value_.int_ ? true : false; + case uintValue: + return value_.uint_ ? true : false; + case realValue: + // This is kind of strange. Not recommended. + return (value_.real_ != 0.0) ? true : false; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to bool."); +} + +bool Value::isConvertibleTo(ValueType other) const { + switch (other) { + case nullValue: + return (isNumeric() && asDouble() == 0.0) || + (type_ == booleanValue && value_.bool_ == false) || + (type_ == stringValue && asString() == "") || + (type_ == arrayValue && value_.map_->size() == 0) || + (type_ == objectValue && value_.map_->size() == 0) || + type_ == nullValue; + case intValue: + return isInt() || + (type_ == realValue && InRange(value_.real_, minInt, maxInt)) || + type_ == booleanValue || type_ == nullValue; + case uintValue: + return isUInt() || + (type_ == realValue && InRange(value_.real_, 0, maxUInt)) || + type_ == booleanValue || type_ == nullValue; + case realValue: + return isNumeric() || type_ == booleanValue || type_ == nullValue; + case booleanValue: + return isNumeric() || type_ == booleanValue || type_ == nullValue; + case stringValue: + return isNumeric() || type_ == booleanValue || type_ == stringValue || + type_ == nullValue; + case arrayValue: + return type_ == arrayValue || type_ == nullValue; + case objectValue: + return type_ == objectValue || type_ == nullValue; + } + JSON_ASSERT_UNREACHABLE; + return false; +} + +/// Number of values in array or object +ArrayIndex Value::size() const { + switch (type_) { + case nullValue: + case intValue: + case uintValue: + case realValue: + case booleanValue: + case stringValue: + return 0; + case arrayValue: // size of the array is highest index + 1 + if (!value_.map_->empty()) { + ObjectValues::const_iterator itLast = value_.map_->end(); + --itLast; + return (*itLast).first.index() + 1; + } + return 0; + case objectValue: + return ArrayIndex(value_.map_->size()); + } + JSON_ASSERT_UNREACHABLE; + return 0; // unreachable; +} + +bool Value::empty() const { + if (isNull() || isArray() || isObject()) + return size() == 0u; + else + return false; +} + +bool Value::operator!() const { return isNull(); } + +void Value::clear() { + JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue || + type_ == objectValue, + "in Json::Value::clear(): requires complex value"); + start_ = 0; + limit_ = 0; + switch (type_) { + case arrayValue: + case objectValue: + value_.map_->clear(); + break; + default: + break; + } +} + +void Value::resize(ArrayIndex newSize) { + JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue, + "in Json::Value::resize(): requires arrayValue"); + if (type_ == nullValue) + *this = Value(arrayValue); + ArrayIndex oldSize = size(); + if (newSize == 0) + clear(); + else if (newSize > oldSize) + (*this)[newSize - 1]; + else { + for (ArrayIndex index = newSize; index < oldSize; ++index) { + value_.map_->erase(index); + } + JSON_ASSERT(size() == newSize); + } +} + +Value& Value::operator[](ArrayIndex index) { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == arrayValue, + "in Json::Value::operator[](ArrayIndex): requires arrayValue"); + if (type_ == nullValue) + *this = Value(arrayValue); + CZString key(index); + ObjectValues::iterator it = value_.map_->lower_bound(key); + if (it != value_.map_->end() && (*it).first == key) + return (*it).second; + + ObjectValues::value_type defaultValue(key, nullSingleton()); + it = value_.map_->insert(it, defaultValue); + return (*it).second; +} + +Value& Value::operator[](int index) { + JSON_ASSERT_MESSAGE( + index >= 0, + "in Json::Value::operator[](int index): index cannot be negative"); + return (*this)[ArrayIndex(index)]; +} + +const Value& Value::operator[](ArrayIndex index) const { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == arrayValue, + "in Json::Value::operator[](ArrayIndex)const: requires arrayValue"); + if (type_ == nullValue) + return nullSingleton(); + CZString key(index); + ObjectValues::const_iterator it = value_.map_->find(key); + if (it == value_.map_->end()) + return nullSingleton(); + return (*it).second; +} + +const Value& Value::operator[](int index) const { + JSON_ASSERT_MESSAGE( + index >= 0, + "in Json::Value::operator[](int index) const: index cannot be negative"); + return (*this)[ArrayIndex(index)]; +} + +void Value::initBasic(ValueType vtype, bool allocated) { + type_ = vtype; + allocated_ = allocated; + comments_ = 0; + start_ = 0; + limit_ = 0; +} + +// Access an object value by name, create a null member if it does not exist. +// @pre Type of '*this' is object or null. +// @param key is null-terminated. +Value& Value::resolveReference(const char* key) { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::resolveReference(): requires objectValue"); + if (type_ == nullValue) + *this = Value(objectValue); + CZString actualKey( + key, static_cast<unsigned>(strlen(key)), CZString::noDuplication); // NOTE! + ObjectValues::iterator it = value_.map_->lower_bound(actualKey); + if (it != value_.map_->end() && (*it).first == actualKey) + return (*it).second; + + ObjectValues::value_type defaultValue(actualKey, nullSingleton()); + it = value_.map_->insert(it, defaultValue); + Value& value = (*it).second; + return value; +} + +// @param key is not null-terminated. +Value& Value::resolveReference(char const* key, char const* cend) +{ + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::resolveReference(key, end): requires objectValue"); + if (type_ == nullValue) + *this = Value(objectValue); + CZString actualKey( + key, static_cast<unsigned>(cend-key), CZString::duplicateOnCopy); + ObjectValues::iterator it = value_.map_->lower_bound(actualKey); + if (it != value_.map_->end() && (*it).first == actualKey) + return (*it).second; + + ObjectValues::value_type defaultValue(actualKey, nullSingleton()); + it = value_.map_->insert(it, defaultValue); + Value& value = (*it).second; + return value; +} + +Value Value::get(ArrayIndex index, const Value& defaultValue) const { + const Value* value = &((*this)[index]); + return value == &nullSingleton() ? defaultValue : *value; +} + +bool Value::isValidIndex(ArrayIndex index) const { return index < size(); } + +Value const* Value::find(char const* key, char const* cend) const +{ + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::find(key, end, found): requires objectValue or nullValue"); + if (type_ == nullValue) return NULL; + CZString actualKey(key, static_cast<unsigned>(cend-key), CZString::noDuplication); + ObjectValues::const_iterator it = value_.map_->find(actualKey); + if (it == value_.map_->end()) return NULL; + return &(*it).second; +} +const Value& Value::operator[](const char* key) const +{ + Value const* found = find(key, key + strlen(key)); + if (!found) return nullSingleton(); + return *found; +} +Value const& Value::operator[](JSONCPP_STRING const& key) const +{ + Value const* found = find(key.data(), key.data() + key.length()); + if (!found) return nullSingleton(); + return *found; +} + +Value& Value::operator[](const char* key) { + return resolveReference(key, key + strlen(key)); +} + +Value& Value::operator[](const JSONCPP_STRING& key) { + return resolveReference(key.data(), key.data() + key.length()); +} + +Value& Value::operator[](const StaticString& key) { + return resolveReference(key.c_str()); +} + +#ifdef JSON_USE_CPPTL +Value& Value::operator[](const CppTL::ConstString& key) { + return resolveReference(key.c_str(), key.end_c_str()); +} +Value const& Value::operator[](CppTL::ConstString const& key) const +{ + Value const* found = find(key.c_str(), key.end_c_str()); + if (!found) return nullSingleton(); + return *found; +} +#endif + +Value& Value::append(const Value& value) { return (*this)[size()] = value; } + +Value Value::get(char const* key, char const* cend, Value const& defaultValue) const +{ + Value const* found = find(key, cend); + return !found ? defaultValue : *found; +} +Value Value::get(char const* key, Value const& defaultValue) const +{ + return get(key, key + strlen(key), defaultValue); +} +Value Value::get(JSONCPP_STRING const& key, Value const& defaultValue) const +{ + return get(key.data(), key.data() + key.length(), defaultValue); +} + + +bool Value::removeMember(const char* key, const char* cend, Value* removed) +{ + if (type_ != objectValue) { + return false; + } + CZString actualKey(key, static_cast<unsigned>(cend-key), CZString::noDuplication); + ObjectValues::iterator it = value_.map_->find(actualKey); + if (it == value_.map_->end()) + return false; + *removed = it->second; + value_.map_->erase(it); + return true; +} +bool Value::removeMember(const char* key, Value* removed) +{ + return removeMember(key, key + strlen(key), removed); +} +bool Value::removeMember(JSONCPP_STRING const& key, Value* removed) +{ + return removeMember(key.data(), key.data() + key.length(), removed); +} +Value Value::removeMember(const char* key) +{ + JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue, + "in Json::Value::removeMember(): requires objectValue"); + if (type_ == nullValue) + return nullSingleton(); + + Value removed; // null + removeMember(key, key + strlen(key), &removed); + return removed; // still null if removeMember() did nothing +} +Value Value::removeMember(const JSONCPP_STRING& key) +{ + return removeMember(key.c_str()); +} + +bool Value::removeIndex(ArrayIndex index, Value* removed) { + if (type_ != arrayValue) { + return false; + } + CZString key(index); + ObjectValues::iterator it = value_.map_->find(key); + if (it == value_.map_->end()) { + return false; + } + *removed = it->second; + ArrayIndex oldSize = size(); + // shift left all items left, into the place of the "removed" + for (ArrayIndex i = index; i < (oldSize - 1); ++i){ + CZString keey(i); + (*value_.map_)[keey] = (*this)[i + 1]; + } + // erase the last one ("leftover") + CZString keyLast(oldSize - 1); + ObjectValues::iterator itLast = value_.map_->find(keyLast); + value_.map_->erase(itLast); + return true; +} + +#ifdef JSON_USE_CPPTL +Value Value::get(const CppTL::ConstString& key, + const Value& defaultValue) const { + return get(key.c_str(), key.end_c_str(), defaultValue); +} +#endif + +bool Value::isMember(char const* key, char const* cend) const +{ + Value const* value = find(key, cend); + return NULL != value; +} +bool Value::isMember(char const* key) const +{ + return isMember(key, key + strlen(key)); +} +bool Value::isMember(JSONCPP_STRING const& key) const +{ + return isMember(key.data(), key.data() + key.length()); +} + +#ifdef JSON_USE_CPPTL +bool Value::isMember(const CppTL::ConstString& key) const { + return isMember(key.c_str(), key.end_c_str()); +} +#endif + +Value::Members Value::getMemberNames() const { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::getMemberNames(), value must be objectValue"); + if (type_ == nullValue) + return Value::Members(); + Members members; + members.reserve(value_.map_->size()); + ObjectValues::const_iterator it = value_.map_->begin(); + ObjectValues::const_iterator itEnd = value_.map_->end(); + for (; it != itEnd; ++it) { + members.push_back(JSONCPP_STRING((*it).first.data(), + (*it).first.length())); + } + return members; +} +// +//# ifdef JSON_USE_CPPTL +// EnumMemberNames +// Value::enumMemberNames() const +//{ +// if ( type_ == objectValue ) +// { +// return CppTL::Enum::any( CppTL::Enum::transform( +// CppTL::Enum::keys( *(value_.map_), CppTL::Type<const CZString &>() ), +// MemberNamesTransform() ) ); +// } +// return EnumMemberNames(); +//} +// +// +// EnumValues +// Value::enumValues() const +//{ +// if ( type_ == objectValue || type_ == arrayValue ) +// return CppTL::Enum::anyValues( *(value_.map_), +// CppTL::Type<const Value &>() ); +// return EnumValues(); +//} +// +//# endif + +static bool IsIntegral(double d) { + double integral_part; + return modf(d, &integral_part) == 0.0; +} + +bool Value::isNull() const { return type_ == nullValue; } + +bool Value::isBool() const { return type_ == booleanValue; } + +bool Value::isInt() const { + switch (type_) { + case intValue: + return value_.int_ >= minInt && value_.int_ <= maxInt; + case uintValue: + return value_.uint_ <= UInt(maxInt); + case realValue: + return value_.real_ >= minInt && value_.real_ <= maxInt && + IsIntegral(value_.real_); + default: + break; + } + return false; +} + +bool Value::isUInt() const { + switch (type_) { + case intValue: + return value_.int_ >= 0 && LargestUInt(value_.int_) <= LargestUInt(maxUInt); + case uintValue: + return value_.uint_ <= maxUInt; + case realValue: + return value_.real_ >= 0 && value_.real_ <= maxUInt && + IsIntegral(value_.real_); + default: + break; + } + return false; +} + +bool Value::isInt64() const { +#if defined(JSON_HAS_INT64) + switch (type_) { + case intValue: + return true; + case uintValue: + return value_.uint_ <= UInt64(maxInt64); + case realValue: + // Note that maxInt64 (= 2^63 - 1) is not exactly representable as a + // double, so double(maxInt64) will be rounded up to 2^63. Therefore we + // require the value to be strictly less than the limit. + return value_.real_ >= double(minInt64) && + value_.real_ < double(maxInt64) && IsIntegral(value_.real_); + default: + break; + } +#endif // JSON_HAS_INT64 + return false; +} + +bool Value::isUInt64() const { +#if defined(JSON_HAS_INT64) + switch (type_) { + case intValue: + return value_.int_ >= 0; + case uintValue: + return true; + case realValue: + // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a + // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we + // require the value to be strictly less than the limit. + return value_.real_ >= 0 && value_.real_ < maxUInt64AsDouble && + IsIntegral(value_.real_); + default: + break; + } +#endif // JSON_HAS_INT64 + return false; +} + +bool Value::isIntegral() const { +#if defined(JSON_HAS_INT64) + return isInt64() || isUInt64(); +#else + return isInt() || isUInt(); +#endif +} + +bool Value::isDouble() const { return type_ == realValue || isIntegral(); } + +bool Value::isNumeric() const { return isIntegral() || isDouble(); } + +bool Value::isString() const { return type_ == stringValue; } + +bool Value::isArray() const { return type_ == arrayValue; } + +bool Value::isObject() const { return type_ == objectValue; } + +void Value::setComment(const char* comment, size_t len, CommentPlacement placement) { + if (!comments_) + comments_ = new CommentInfo[numberOfCommentPlacement]; + if ((len > 0) && (comment[len-1] == '\n')) { + // Always discard trailing newline, to aid indentation. + len -= 1; + } + comments_[placement].setComment(comment, len); +} + +void Value::setComment(const char* comment, CommentPlacement placement) { + setComment(comment, strlen(comment), placement); +} + +void Value::setComment(const JSONCPP_STRING& comment, CommentPlacement placement) { + setComment(comment.c_str(), comment.length(), placement); +} + +bool Value::hasComment(CommentPlacement placement) const { + return comments_ != 0 && comments_[placement].comment_ != 0; +} + +JSONCPP_STRING Value::getComment(CommentPlacement placement) const { + if (hasComment(placement)) + return comments_[placement].comment_; + return ""; +} + +void Value::setOffsetStart(ptrdiff_t start) { start_ = start; } + +void Value::setOffsetLimit(ptrdiff_t limit) { limit_ = limit; } + +ptrdiff_t Value::getOffsetStart() const { return start_; } + +ptrdiff_t Value::getOffsetLimit() const { return limit_; } + +JSONCPP_STRING Value::toStyledString() const { + StyledWriter writer; + return writer.write(*this); +} + +Value::const_iterator Value::begin() const { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return const_iterator(value_.map_->begin()); + break; + default: + break; + } + return const_iterator(); +} + +Value::const_iterator Value::end() const { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return const_iterator(value_.map_->end()); + break; + default: + break; + } + return const_iterator(); +} + +Value::iterator Value::begin() { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return iterator(value_.map_->begin()); + break; + default: + break; + } + return iterator(); +} + +Value::iterator Value::end() { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return iterator(value_.map_->end()); + break; + default: + break; + } + return iterator(); +} + +// class PathArgument +// ////////////////////////////////////////////////////////////////// + +PathArgument::PathArgument() : key_(), index_(), kind_(kindNone) {} + +PathArgument::PathArgument(ArrayIndex index) + : key_(), index_(index), kind_(kindIndex) {} + +PathArgument::PathArgument(const char* key) + : key_(key), index_(), kind_(kindKey) {} + +PathArgument::PathArgument(const JSONCPP_STRING& key) + : key_(key.c_str()), index_(), kind_(kindKey) {} + +// class Path +// ////////////////////////////////////////////////////////////////// + +Path::Path(const JSONCPP_STRING& path, + const PathArgument& a1, + const PathArgument& a2, + const PathArgument& a3, + const PathArgument& a4, + const PathArgument& a5) { + InArgs in; + in.push_back(&a1); + in.push_back(&a2); + in.push_back(&a3); + in.push_back(&a4); + in.push_back(&a5); + makePath(path, in); +} + +void Path::makePath(const JSONCPP_STRING& path, const InArgs& in) { + const char* current = path.c_str(); + const char* end = current + path.length(); + InArgs::const_iterator itInArg = in.begin(); + while (current != end) { + if (*current == '[') { + ++current; + if (*current == '%') + addPathInArg(path, in, itInArg, PathArgument::kindIndex); + else { + ArrayIndex index = 0; + for (; current != end && *current >= '0' && *current <= '9'; ++current) + index = index * 10 + ArrayIndex(*current - '0'); + args_.push_back(index); + } + if (current == end || *++current != ']') + invalidPath(path, int(current - path.c_str())); + } else if (*current == '%') { + addPathInArg(path, in, itInArg, PathArgument::kindKey); + ++current; + } else if (*current == '.' || *current == ']') { + ++current; + } else { + const char* beginName = current; + while (current != end && !strchr("[.", *current)) + ++current; + args_.push_back(JSONCPP_STRING(beginName, current)); + } + } +} + +void Path::addPathInArg(const JSONCPP_STRING& /*path*/, + const InArgs& in, + InArgs::const_iterator& itInArg, + PathArgument::Kind kind) { + if (itInArg == in.end()) { + // Error: missing argument %d + } else if ((*itInArg)->kind_ != kind) { + // Error: bad argument type + } else { + args_.push_back(**itInArg++); + } +} + +void Path::invalidPath(const JSONCPP_STRING& /*path*/, int /*location*/) { + // Error: invalid path. +} + +const Value& Path::resolve(const Value& root) const { + const Value* node = &root; + for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { + const PathArgument& arg = *it; + if (arg.kind_ == PathArgument::kindIndex) { + if (!node->isArray() || !node->isValidIndex(arg.index_)) { + // Error: unable to resolve path (array value expected at position... + return Value::null; + } + node = &((*node)[arg.index_]); + } else if (arg.kind_ == PathArgument::kindKey) { + if (!node->isObject()) { + // Error: unable to resolve path (object value expected at position...) + return Value::null; + } + node = &((*node)[arg.key_]); + if (node == &Value::nullSingleton()) { + // Error: unable to resolve path (object has no member named '' at + // position...) + return Value::null; + } + } + } + return *node; +} + +Value Path::resolve(const Value& root, const Value& defaultValue) const { + const Value* node = &root; + for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { + const PathArgument& arg = *it; + if (arg.kind_ == PathArgument::kindIndex) { + if (!node->isArray() || !node->isValidIndex(arg.index_)) + return defaultValue; + node = &((*node)[arg.index_]); + } else if (arg.kind_ == PathArgument::kindKey) { + if (!node->isObject()) + return defaultValue; + node = &((*node)[arg.key_]); + if (node == &Value::nullSingleton()) + return defaultValue; + } + } + return *node; +} + +Value& Path::make(Value& root) const { + Value* node = &root; + for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { + const PathArgument& arg = *it; + if (arg.kind_ == PathArgument::kindIndex) { + if (!node->isArray()) { + // Error: node is not an array at position ... + } + node = &((*node)[arg.index_]); + } else if (arg.kind_ == PathArgument::kindKey) { + if (!node->isObject()) { + // Error: node is not an object at position... + } + node = &((*node)[arg.key_]); + } + } + return *node; +} + +} // namespace Json + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_value.cpp +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_writer.cpp +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2011 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#if !defined(JSON_IS_AMALGAMATION) +#include <json/writer.h> +#include "json_tool.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <iomanip> +#include <memory> +#include <sstream> +#include <utility> +#include <set> +#include <cassert> +#include <cstring> +#include <cstdio> + +#if defined(_MSC_VER) && _MSC_VER >= 1200 && _MSC_VER < 1800 // Between VC++ 6.0 and VC++ 11.0 +#include <float.h> +#define isfinite _finite +#elif defined(__sun) && defined(__SVR4) //Solaris +#if !defined(isfinite) +#include <ieeefp.h> +#define isfinite finite +#endif +#elif defined(_AIX) +#if !defined(isfinite) +#include <math.h> +#define isfinite finite +#endif +#elif defined(__hpux) +#if !defined(isfinite) +#if defined(__ia64) && !defined(finite) +#define isfinite(x) ((sizeof(x) == sizeof(float) ? \ + _Isfinitef(x) : _IsFinite(x))) +#else +#include <math.h> +#define isfinite finite +#endif +#endif +#else +#include <cmath> +#if !(defined(__QNXNTO__)) // QNX already defines isfinite +#define isfinite std::isfinite +#endif +#endif + +#if defined(_MSC_VER) +#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above +#define snprintf sprintf_s +#elif _MSC_VER >= 1900 // VC++ 14.0 and above +#define snprintf std::snprintf +#else +#define snprintf _snprintf +#endif +#elif defined(__ANDROID__) || defined(__QNXNTO__) +#define snprintf snprintf +#elif __cplusplus >= 201103L +#if !defined(__MINGW32__) && !defined(__CYGWIN__) +#define snprintf std::snprintf +#endif +#endif + +#if defined(__BORLANDC__) +#include <float.h> +#define isfinite _finite +#define snprintf _snprintf +#endif + +#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0 +// Disable warning about strdup being deprecated. +#pragma warning(disable : 4996) +#endif + +namespace Json { + +#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520) +typedef std::unique_ptr<StreamWriter> StreamWriterPtr; +#else +typedef std::auto_ptr<StreamWriter> StreamWriterPtr; +#endif + +static bool containsControlCharacter(const char* str) { + while (*str) { + if (isControlCharacter(*(str++))) + return true; + } + return false; +} + +static bool containsControlCharacter0(const char* str, unsigned len) { + char const* end = str + len; + while (end != str) { + if (isControlCharacter(*str) || 0==*str) + return true; + ++str; + } + return false; +} + +JSONCPP_STRING valueToString(LargestInt value) { + UIntToStringBuffer buffer; + char* current = buffer + sizeof(buffer); + if (value == Value::minLargestInt) { + uintToString(LargestUInt(Value::maxLargestInt) + 1, current); + *--current = '-'; + } else if (value < 0) { + uintToString(LargestUInt(-value), current); + *--current = '-'; + } else { + uintToString(LargestUInt(value), current); + } + assert(current >= buffer); + return current; +} + +JSONCPP_STRING valueToString(LargestUInt value) { + UIntToStringBuffer buffer; + char* current = buffer + sizeof(buffer); + uintToString(value, current); + assert(current >= buffer); + return current; +} + +#if defined(JSON_HAS_INT64) + +JSONCPP_STRING valueToString(Int value) { + return valueToString(LargestInt(value)); +} + +JSONCPP_STRING valueToString(UInt value) { + return valueToString(LargestUInt(value)); +} + +#endif // # if defined(JSON_HAS_INT64) + +namespace { +JSONCPP_STRING valueToString(double value, bool useSpecialFloats, unsigned int precision) { + // Allocate a buffer that is more than large enough to store the 16 digits of + // precision requested below. + char buffer[32]; + int len = -1; + + char formatString[6]; + sprintf(formatString, "%%.%dg", precision); + + // Print into the buffer. We need not request the alternative representation + // that always has a decimal point because JSON doesn't distingish the + // concepts of reals and integers. + if (isfinite(value)) { + len = snprintf(buffer, sizeof(buffer), formatString, value); + } else { + // IEEE standard states that NaN values will not compare to themselves + if (value != value) { + len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "NaN" : "null"); + } else if (value < 0) { + len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "-Infinity" : "-1e+9999"); + } else { + len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "Infinity" : "1e+9999"); + } + // For those, we do not need to call fixNumLoc, but it is fast. + } + assert(len >= 0); + fixNumericLocale(buffer, buffer + len); + return buffer; +} +} + +JSONCPP_STRING valueToString(double value) { return valueToString(value, false, 17); } + +JSONCPP_STRING valueToString(bool value) { return value ? "true" : "false"; } + +JSONCPP_STRING valueToQuotedString(const char* value) { + if (value == NULL) + return ""; + // Not sure how to handle unicode... + if (strpbrk(value, "\"\\\b\f\n\r\t") == NULL && + !containsControlCharacter(value)) + return JSONCPP_STRING("\"") + value + "\""; + // We have to walk value and escape any special characters. + // Appending to JSONCPP_STRING is not efficient, but this should be rare. + // (Note: forward slashes are *not* rare, but I am not escaping them.) + JSONCPP_STRING::size_type maxsize = + strlen(value) * 2 + 3; // allescaped+quotes+NULL + JSONCPP_STRING result; + result.reserve(maxsize); // to avoid lots of mallocs + result += "\""; + for (const char* c = value; *c != 0; ++c) { + switch (*c) { + case '\"': + result += "\\\""; + break; + case '\\': + result += "\\\\"; + break; + case '\b': + result += "\\b"; + break; + case '\f': + result += "\\f"; + break; + case '\n': + result += "\\n"; + break; + case '\r': + result += "\\r"; + break; + case '\t': + result += "\\t"; + break; + // case '/': + // Even though \/ is considered a legal escape in JSON, a bare + // slash is also legal, so I see no reason to escape it. + // (I hope I am not misunderstanding something. + // blep notes: actually escaping \/ may be useful in javascript to avoid </ + // sequence. + // Should add a flag to allow this compatibility mode and prevent this + // sequence from occurring. + default: + if (isControlCharacter(*c)) { + JSONCPP_OSTRINGSTREAM oss; + oss << "\\u" << std::hex << std::uppercase << std::setfill('0') + << std::setw(4) << static_cast<int>(*c); + result += oss.str(); + } else { + result += *c; + } + break; + } + } + result += "\""; + return result; +} + +// https://github.com/upcaste/upcaste/blob/master/src/upcore/src/cstring/strnpbrk.cpp +static char const* strnpbrk(char const* s, char const* accept, size_t n) { + assert((s || !n) && accept); + + char const* const end = s + n; + for (char const* cur = s; cur < end; ++cur) { + int const c = *cur; + for (char const* a = accept; *a; ++a) { + if (*a == c) { + return cur; + } + } + } + return NULL; +} +static JSONCPP_STRING valueToQuotedStringN(const char* value, unsigned length) { + if (value == NULL) + return ""; + // Not sure how to handle unicode... + if (strnpbrk(value, "\"\\\b\f\n\r\t", length) == NULL && + !containsControlCharacter0(value, length)) + return JSONCPP_STRING("\"") + value + "\""; + // We have to walk value and escape any special characters. + // Appending to JSONCPP_STRING is not efficient, but this should be rare. + // (Note: forward slashes are *not* rare, but I am not escaping them.) + JSONCPP_STRING::size_type maxsize = + length * 2 + 3; // allescaped+quotes+NULL + JSONCPP_STRING result; + result.reserve(maxsize); // to avoid lots of mallocs + result += "\""; + char const* end = value + length; + for (const char* c = value; c != end; ++c) { + switch (*c) { + case '\"': + result += "\\\""; + break; + case '\\': + result += "\\\\"; + break; + case '\b': + result += "\\b"; + break; + case '\f': + result += "\\f"; + break; + case '\n': + result += "\\n"; + break; + case '\r': + result += "\\r"; + break; + case '\t': + result += "\\t"; + break; + // case '/': + // Even though \/ is considered a legal escape in JSON, a bare + // slash is also legal, so I see no reason to escape it. + // (I hope I am not misunderstanding something.) + // blep notes: actually escaping \/ may be useful in javascript to avoid </ + // sequence. + // Should add a flag to allow this compatibility mode and prevent this + // sequence from occurring. + default: + if ((isControlCharacter(*c)) || (*c == 0)) { + JSONCPP_OSTRINGSTREAM oss; + oss << "\\u" << std::hex << std::uppercase << std::setfill('0') + << std::setw(4) << static_cast<int>(*c); + result += oss.str(); + } else { + result += *c; + } + break; + } + } + result += "\""; + return result; +} + +// Class Writer +// ////////////////////////////////////////////////////////////////// +Writer::~Writer() {} + +// Class FastWriter +// ////////////////////////////////////////////////////////////////// + +FastWriter::FastWriter() + : yamlCompatiblityEnabled_(false), dropNullPlaceholders_(false), + omitEndingLineFeed_(false) {} + +void FastWriter::enableYAMLCompatibility() { yamlCompatiblityEnabled_ = true; } + +void FastWriter::dropNullPlaceholders() { dropNullPlaceholders_ = true; } + +void FastWriter::omitEndingLineFeed() { omitEndingLineFeed_ = true; } + +JSONCPP_STRING FastWriter::write(const Value& root) { + document_ = ""; + writeValue(root); + if (!omitEndingLineFeed_) + document_ += "\n"; + return document_; +} + +void FastWriter::writeValue(const Value& value) { + switch (value.type()) { + case nullValue: + if (!dropNullPlaceholders_) + document_ += "null"; + break; + case intValue: + document_ += valueToString(value.asLargestInt()); + break; + case uintValue: + document_ += valueToString(value.asLargestUInt()); + break; + case realValue: + document_ += valueToString(value.asDouble()); + break; + case stringValue: + { + // Is NULL possible for value.string_? No. + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) document_ += valueToQuotedStringN(str, static_cast<unsigned>(end-str)); + break; + } + case booleanValue: + document_ += valueToString(value.asBool()); + break; + case arrayValue: { + document_ += '['; + ArrayIndex size = value.size(); + for (ArrayIndex index = 0; index < size; ++index) { + if (index > 0) + document_ += ','; + writeValue(value[index]); + } + document_ += ']'; + } break; + case objectValue: { + Value::Members members(value.getMemberNames()); + document_ += '{'; + for (Value::Members::iterator it = members.begin(); it != members.end(); + ++it) { + const JSONCPP_STRING& name = *it; + if (it != members.begin()) + document_ += ','; + document_ += valueToQuotedStringN(name.data(), static_cast<unsigned>(name.length())); + document_ += yamlCompatiblityEnabled_ ? ": " : ":"; + writeValue(value[name]); + } + document_ += '}'; + } break; + } +} + +// Class StyledWriter +// ////////////////////////////////////////////////////////////////// + +StyledWriter::StyledWriter() + : rightMargin_(74), indentSize_(3), addChildValues_() {} + +JSONCPP_STRING StyledWriter::write(const Value& root) { + document_ = ""; + addChildValues_ = false; + indentString_ = ""; + writeCommentBeforeValue(root); + writeValue(root); + writeCommentAfterValueOnSameLine(root); + document_ += "\n"; + return document_; +} + +void StyledWriter::writeValue(const Value& value) { + switch (value.type()) { + case nullValue: + pushValue("null"); + break; + case intValue: + pushValue(valueToString(value.asLargestInt())); + break; + case uintValue: + pushValue(valueToString(value.asLargestUInt())); + break; + case realValue: + pushValue(valueToString(value.asDouble())); + break; + case stringValue: + { + // Is NULL possible for value.string_? No. + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str))); + else pushValue(""); + break; + } + case booleanValue: + pushValue(valueToString(value.asBool())); + break; + case arrayValue: + writeArrayValue(value); + break; + case objectValue: { + Value::Members members(value.getMemberNames()); + if (members.empty()) + pushValue("{}"); + else { + writeWithIndent("{"); + indent(); + Value::Members::iterator it = members.begin(); + for (;;) { + const JSONCPP_STRING& name = *it; + const Value& childValue = value[name]; + writeCommentBeforeValue(childValue); + writeWithIndent(valueToQuotedString(name.c_str())); + document_ += " : "; + writeValue(childValue); + if (++it == members.end()) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + document_ += ','; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("}"); + } + } break; + } +} + +void StyledWriter::writeArrayValue(const Value& value) { + unsigned size = value.size(); + if (size == 0) + pushValue("[]"); + else { + bool isArrayMultiLine = isMultineArray(value); + if (isArrayMultiLine) { + writeWithIndent("["); + indent(); + bool hasChildValue = !childValues_.empty(); + unsigned index = 0; + for (;;) { + const Value& childValue = value[index]; + writeCommentBeforeValue(childValue); + if (hasChildValue) + writeWithIndent(childValues_[index]); + else { + writeIndent(); + writeValue(childValue); + } + if (++index == size) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + document_ += ','; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("]"); + } else // output on a single line + { + assert(childValues_.size() == size); + document_ += "[ "; + for (unsigned index = 0; index < size; ++index) { + if (index > 0) + document_ += ", "; + document_ += childValues_[index]; + } + document_ += " ]"; + } + } +} + +bool StyledWriter::isMultineArray(const Value& value) { + ArrayIndex const size = value.size(); + bool isMultiLine = size * 3 >= rightMargin_; + childValues_.clear(); + for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) { + const Value& childValue = value[index]; + isMultiLine = ((childValue.isArray() || childValue.isObject()) && + childValue.size() > 0); + } + if (!isMultiLine) // check if line length > max line length + { + childValues_.reserve(size); + addChildValues_ = true; + ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' + for (ArrayIndex index = 0; index < size; ++index) { + if (hasCommentForValue(value[index])) { + isMultiLine = true; + } + writeValue(value[index]); + lineLength += static_cast<ArrayIndex>(childValues_[index].length()); + } + addChildValues_ = false; + isMultiLine = isMultiLine || lineLength >= rightMargin_; + } + return isMultiLine; +} + +void StyledWriter::pushValue(const JSONCPP_STRING& value) { + if (addChildValues_) + childValues_.push_back(value); + else + document_ += value; +} + +void StyledWriter::writeIndent() { + if (!document_.empty()) { + char last = document_[document_.length() - 1]; + if (last == ' ') // already indented + return; + if (last != '\n') // Comments may add new-line + document_ += '\n'; + } + document_ += indentString_; +} + +void StyledWriter::writeWithIndent(const JSONCPP_STRING& value) { + writeIndent(); + document_ += value; +} + +void StyledWriter::indent() { indentString_ += JSONCPP_STRING(indentSize_, ' '); } + +void StyledWriter::unindent() { + assert(indentString_.size() >= indentSize_); + indentString_.resize(indentString_.size() - indentSize_); +} + +void StyledWriter::writeCommentBeforeValue(const Value& root) { + if (!root.hasComment(commentBefore)) + return; + + document_ += "\n"; + writeIndent(); + const JSONCPP_STRING& comment = root.getComment(commentBefore); + JSONCPP_STRING::const_iterator iter = comment.begin(); + while (iter != comment.end()) { + document_ += *iter; + if (*iter == '\n' && + (iter != comment.end() && *(iter + 1) == '/')) + writeIndent(); + ++iter; + } + + // Comments are stripped of trailing newlines, so add one here + document_ += "\n"; +} + +void StyledWriter::writeCommentAfterValueOnSameLine(const Value& root) { + if (root.hasComment(commentAfterOnSameLine)) + document_ += " " + root.getComment(commentAfterOnSameLine); + + if (root.hasComment(commentAfter)) { + document_ += "\n"; + document_ += root.getComment(commentAfter); + document_ += "\n"; + } +} + +bool StyledWriter::hasCommentForValue(const Value& value) { + return value.hasComment(commentBefore) || + value.hasComment(commentAfterOnSameLine) || + value.hasComment(commentAfter); +} + +// Class StyledStreamWriter +// ////////////////////////////////////////////////////////////////// + +StyledStreamWriter::StyledStreamWriter(JSONCPP_STRING indentation) + : document_(NULL), rightMargin_(74), indentation_(indentation), + addChildValues_() {} + +void StyledStreamWriter::write(JSONCPP_OSTREAM& out, const Value& root) { + document_ = &out; + addChildValues_ = false; + indentString_ = ""; + indented_ = true; + writeCommentBeforeValue(root); + if (!indented_) writeIndent(); + indented_ = true; + writeValue(root); + writeCommentAfterValueOnSameLine(root); + *document_ << "\n"; + document_ = NULL; // Forget the stream, for safety. +} + +void StyledStreamWriter::writeValue(const Value& value) { + switch (value.type()) { + case nullValue: + pushValue("null"); + break; + case intValue: + pushValue(valueToString(value.asLargestInt())); + break; + case uintValue: + pushValue(valueToString(value.asLargestUInt())); + break; + case realValue: + pushValue(valueToString(value.asDouble())); + break; + case stringValue: + { + // Is NULL possible for value.string_? No. + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str))); + else pushValue(""); + break; + } + case booleanValue: + pushValue(valueToString(value.asBool())); + break; + case arrayValue: + writeArrayValue(value); + break; + case objectValue: { + Value::Members members(value.getMemberNames()); + if (members.empty()) + pushValue("{}"); + else { + writeWithIndent("{"); + indent(); + Value::Members::iterator it = members.begin(); + for (;;) { + const JSONCPP_STRING& name = *it; + const Value& childValue = value[name]; + writeCommentBeforeValue(childValue); + writeWithIndent(valueToQuotedString(name.c_str())); + *document_ << " : "; + writeValue(childValue); + if (++it == members.end()) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *document_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("}"); + } + } break; + } +} + +void StyledStreamWriter::writeArrayValue(const Value& value) { + unsigned size = value.size(); + if (size == 0) + pushValue("[]"); + else { + bool isArrayMultiLine = isMultineArray(value); + if (isArrayMultiLine) { + writeWithIndent("["); + indent(); + bool hasChildValue = !childValues_.empty(); + unsigned index = 0; + for (;;) { + const Value& childValue = value[index]; + writeCommentBeforeValue(childValue); + if (hasChildValue) + writeWithIndent(childValues_[index]); + else { + if (!indented_) writeIndent(); + indented_ = true; + writeValue(childValue); + indented_ = false; + } + if (++index == size) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *document_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("]"); + } else // output on a single line + { + assert(childValues_.size() == size); + *document_ << "[ "; + for (unsigned index = 0; index < size; ++index) { + if (index > 0) + *document_ << ", "; + *document_ << childValues_[index]; + } + *document_ << " ]"; + } + } +} + +bool StyledStreamWriter::isMultineArray(const Value& value) { + ArrayIndex const size = value.size(); + bool isMultiLine = size * 3 >= rightMargin_; + childValues_.clear(); + for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) { + const Value& childValue = value[index]; + isMultiLine = ((childValue.isArray() || childValue.isObject()) && + childValue.size() > 0); + } + if (!isMultiLine) // check if line length > max line length + { + childValues_.reserve(size); + addChildValues_ = true; + ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' + for (ArrayIndex index = 0; index < size; ++index) { + if (hasCommentForValue(value[index])) { + isMultiLine = true; + } + writeValue(value[index]); + lineLength += static_cast<ArrayIndex>(childValues_[index].length()); + } + addChildValues_ = false; + isMultiLine = isMultiLine || lineLength >= rightMargin_; + } + return isMultiLine; +} + +void StyledStreamWriter::pushValue(const JSONCPP_STRING& value) { + if (addChildValues_) + childValues_.push_back(value); + else + *document_ << value; +} + +void StyledStreamWriter::writeIndent() { + // blep intended this to look at the so-far-written string + // to determine whether we are already indented, but + // with a stream we cannot do that. So we rely on some saved state. + // The caller checks indented_. + *document_ << '\n' << indentString_; +} + +void StyledStreamWriter::writeWithIndent(const JSONCPP_STRING& value) { + if (!indented_) writeIndent(); + *document_ << value; + indented_ = false; +} + +void StyledStreamWriter::indent() { indentString_ += indentation_; } + +void StyledStreamWriter::unindent() { + assert(indentString_.size() >= indentation_.size()); + indentString_.resize(indentString_.size() - indentation_.size()); +} + +void StyledStreamWriter::writeCommentBeforeValue(const Value& root) { + if (!root.hasComment(commentBefore)) + return; + + if (!indented_) writeIndent(); + const JSONCPP_STRING& comment = root.getComment(commentBefore); + JSONCPP_STRING::const_iterator iter = comment.begin(); + while (iter != comment.end()) { + *document_ << *iter; + if (*iter == '\n' && + (iter != comment.end() && *(iter + 1) == '/')) + // writeIndent(); // would include newline + *document_ << indentString_; + ++iter; + } + indented_ = false; +} + +void StyledStreamWriter::writeCommentAfterValueOnSameLine(const Value& root) { + if (root.hasComment(commentAfterOnSameLine)) + *document_ << ' ' << root.getComment(commentAfterOnSameLine); + + if (root.hasComment(commentAfter)) { + writeIndent(); + *document_ << root.getComment(commentAfter); + } + indented_ = false; +} + +bool StyledStreamWriter::hasCommentForValue(const Value& value) { + return value.hasComment(commentBefore) || + value.hasComment(commentAfterOnSameLine) || + value.hasComment(commentAfter); +} + +////////////////////////// +// BuiltStyledStreamWriter + +/// Scoped enums are not available until C++11. +struct CommentStyle { + /// Decide whether to write comments. + enum Enum { + None, ///< Drop all comments. + Most, ///< Recover odd behavior of previous versions (not implemented yet). + All ///< Keep all comments. + }; +}; + +struct BuiltStyledStreamWriter : public StreamWriter +{ + BuiltStyledStreamWriter( + JSONCPP_STRING const& indentation, + CommentStyle::Enum cs, + JSONCPP_STRING const& colonSymbol, + JSONCPP_STRING const& nullSymbol, + JSONCPP_STRING const& endingLineFeedSymbol, + bool useSpecialFloats, + unsigned int precision); + int write(Value const& root, JSONCPP_OSTREAM* sout) JSONCPP_OVERRIDE; +private: + void writeValue(Value const& value); + void writeArrayValue(Value const& value); + bool isMultineArray(Value const& value); + void pushValue(JSONCPP_STRING const& value); + void writeIndent(); + void writeWithIndent(JSONCPP_STRING const& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(Value const& root); + void writeCommentAfterValueOnSameLine(Value const& root); + static bool hasCommentForValue(const Value& value); + + typedef std::vector<JSONCPP_STRING> ChildValues; + + ChildValues childValues_; + JSONCPP_STRING indentString_; + unsigned int rightMargin_; + JSONCPP_STRING indentation_; + CommentStyle::Enum cs_; + JSONCPP_STRING colonSymbol_; + JSONCPP_STRING nullSymbol_; + JSONCPP_STRING endingLineFeedSymbol_; + bool addChildValues_ : 1; + bool indented_ : 1; + bool useSpecialFloats_ : 1; + unsigned int precision_; +}; +BuiltStyledStreamWriter::BuiltStyledStreamWriter( + JSONCPP_STRING const& indentation, + CommentStyle::Enum cs, + JSONCPP_STRING const& colonSymbol, + JSONCPP_STRING const& nullSymbol, + JSONCPP_STRING const& endingLineFeedSymbol, + bool useSpecialFloats, + unsigned int precision) + : rightMargin_(74) + , indentation_(indentation) + , cs_(cs) + , colonSymbol_(colonSymbol) + , nullSymbol_(nullSymbol) + , endingLineFeedSymbol_(endingLineFeedSymbol) + , addChildValues_(false) + , indented_(false) + , useSpecialFloats_(useSpecialFloats) + , precision_(precision) +{ +} +int BuiltStyledStreamWriter::write(Value const& root, JSONCPP_OSTREAM* sout) +{ + sout_ = sout; + addChildValues_ = false; + indented_ = true; + indentString_ = ""; + writeCommentBeforeValue(root); + if (!indented_) writeIndent(); + indented_ = true; + writeValue(root); + writeCommentAfterValueOnSameLine(root); + *sout_ << endingLineFeedSymbol_; + sout_ = NULL; + return 0; +} +void BuiltStyledStreamWriter::writeValue(Value const& value) { + switch (value.type()) { + case nullValue: + pushValue(nullSymbol_); + break; + case intValue: + pushValue(valueToString(value.asLargestInt())); + break; + case uintValue: + pushValue(valueToString(value.asLargestUInt())); + break; + case realValue: + pushValue(valueToString(value.asDouble(), useSpecialFloats_, precision_)); + break; + case stringValue: + { + // Is NULL is possible for value.string_? No. + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str))); + else pushValue(""); + break; + } + case booleanValue: + pushValue(valueToString(value.asBool())); + break; + case arrayValue: + writeArrayValue(value); + break; + case objectValue: { + Value::Members members(value.getMemberNames()); + if (members.empty()) + pushValue("{}"); + else { + writeWithIndent("{"); + indent(); + Value::Members::iterator it = members.begin(); + for (;;) { + JSONCPP_STRING const& name = *it; + Value const& childValue = value[name]; + writeCommentBeforeValue(childValue); + writeWithIndent(valueToQuotedStringN(name.data(), static_cast<unsigned>(name.length()))); + *sout_ << colonSymbol_; + writeValue(childValue); + if (++it == members.end()) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *sout_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("}"); + } + } break; + } +} + +void BuiltStyledStreamWriter::writeArrayValue(Value const& value) { + unsigned size = value.size(); + if (size == 0) + pushValue("[]"); + else { + bool isMultiLine = (cs_ == CommentStyle::All) || isMultineArray(value); + if (isMultiLine) { + writeWithIndent("["); + indent(); + bool hasChildValue = !childValues_.empty(); + unsigned index = 0; + for (;;) { + Value const& childValue = value[index]; + writeCommentBeforeValue(childValue); + if (hasChildValue) + writeWithIndent(childValues_[index]); + else { + if (!indented_) writeIndent(); + indented_ = true; + writeValue(childValue); + indented_ = false; + } + if (++index == size) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *sout_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("]"); + } else // output on a single line + { + assert(childValues_.size() == size); + *sout_ << "["; + if (!indentation_.empty()) *sout_ << " "; + for (unsigned index = 0; index < size; ++index) { + if (index > 0) + *sout_ << ((!indentation_.empty()) ? ", " : ","); + *sout_ << childValues_[index]; + } + if (!indentation_.empty()) *sout_ << " "; + *sout_ << "]"; + } + } +} + +bool BuiltStyledStreamWriter::isMultineArray(Value const& value) { + ArrayIndex const size = value.size(); + bool isMultiLine = size * 3 >= rightMargin_; + childValues_.clear(); + for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) { + Value const& childValue = value[index]; + isMultiLine = ((childValue.isArray() || childValue.isObject()) && + childValue.size() > 0); + } + if (!isMultiLine) // check if line length > max line length + { + childValues_.reserve(size); + addChildValues_ = true; + ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' + for (ArrayIndex index = 0; index < size; ++index) { + if (hasCommentForValue(value[index])) { + isMultiLine = true; + } + writeValue(value[index]); + lineLength += static_cast<ArrayIndex>(childValues_[index].length()); + } + addChildValues_ = false; + isMultiLine = isMultiLine || lineLength >= rightMargin_; + } + return isMultiLine; +} + +void BuiltStyledStreamWriter::pushValue(JSONCPP_STRING const& value) { + if (addChildValues_) + childValues_.push_back(value); + else + *sout_ << value; +} + +void BuiltStyledStreamWriter::writeIndent() { + // blep intended this to look at the so-far-written string + // to determine whether we are already indented, but + // with a stream we cannot do that. So we rely on some saved state. + // The caller checks indented_. + + if (!indentation_.empty()) { + // In this case, drop newlines too. + *sout_ << '\n' << indentString_; + } +} + +void BuiltStyledStreamWriter::writeWithIndent(JSONCPP_STRING const& value) { + if (!indented_) writeIndent(); + *sout_ << value; + indented_ = false; +} + +void BuiltStyledStreamWriter::indent() { indentString_ += indentation_; } + +void BuiltStyledStreamWriter::unindent() { + assert(indentString_.size() >= indentation_.size()); + indentString_.resize(indentString_.size() - indentation_.size()); +} + +void BuiltStyledStreamWriter::writeCommentBeforeValue(Value const& root) { + if (cs_ == CommentStyle::None) return; + if (!root.hasComment(commentBefore)) + return; + + if (!indented_) writeIndent(); + const JSONCPP_STRING& comment = root.getComment(commentBefore); + JSONCPP_STRING::const_iterator iter = comment.begin(); + while (iter != comment.end()) { + *sout_ << *iter; + if (*iter == '\n' && + (iter != comment.end() && *(iter + 1) == '/')) + // writeIndent(); // would write extra newline + *sout_ << indentString_; + ++iter; + } + indented_ = false; +} + +void BuiltStyledStreamWriter::writeCommentAfterValueOnSameLine(Value const& root) { + if (cs_ == CommentStyle::None) return; + if (root.hasComment(commentAfterOnSameLine)) + *sout_ << " " + root.getComment(commentAfterOnSameLine); + + if (root.hasComment(commentAfter)) { + writeIndent(); + *sout_ << root.getComment(commentAfter); + } +} + +// static +bool BuiltStyledStreamWriter::hasCommentForValue(const Value& value) { + return value.hasComment(commentBefore) || + value.hasComment(commentAfterOnSameLine) || + value.hasComment(commentAfter); +} + +/////////////// +// StreamWriter + +StreamWriter::StreamWriter() + : sout_(NULL) +{ +} +StreamWriter::~StreamWriter() +{ +} +StreamWriter::Factory::~Factory() +{} +StreamWriterBuilder::StreamWriterBuilder() +{ + setDefaults(&settings_); +} +StreamWriterBuilder::~StreamWriterBuilder() +{} +StreamWriter* StreamWriterBuilder::newStreamWriter() const +{ + JSONCPP_STRING indentation = settings_["indentation"].asString(); + JSONCPP_STRING cs_str = settings_["commentStyle"].asString(); + bool eyc = settings_["enableYAMLCompatibility"].asBool(); + bool dnp = settings_["dropNullPlaceholders"].asBool(); + bool usf = settings_["useSpecialFloats"].asBool(); + unsigned int pre = settings_["precision"].asUInt(); + CommentStyle::Enum cs = CommentStyle::All; + if (cs_str == "All") { + cs = CommentStyle::All; + } else if (cs_str == "None") { + cs = CommentStyle::None; + } else { + throwRuntimeError("commentStyle must be 'All' or 'None'"); + } + JSONCPP_STRING colonSymbol = " : "; + if (eyc) { + colonSymbol = ": "; + } else if (indentation.empty()) { + colonSymbol = ":"; + } + JSONCPP_STRING nullSymbol = "null"; + if (dnp) { + nullSymbol = ""; + } + if (pre > 17) pre = 17; + JSONCPP_STRING endingLineFeedSymbol = ""; + return new BuiltStyledStreamWriter( + indentation, cs, + colonSymbol, nullSymbol, endingLineFeedSymbol, usf, pre); +} +static void getValidWriterKeys(std::set<JSONCPP_STRING>* valid_keys) +{ + valid_keys->clear(); + valid_keys->insert("indentation"); + valid_keys->insert("commentStyle"); + valid_keys->insert("enableYAMLCompatibility"); + valid_keys->insert("dropNullPlaceholders"); + valid_keys->insert("useSpecialFloats"); + valid_keys->insert("precision"); +} +bool StreamWriterBuilder::validate(Json::Value* invalid) const +{ + Json::Value my_invalid; + if (!invalid) invalid = &my_invalid; // so we do not need to test for NULL + Json::Value& inv = *invalid; + std::set<JSONCPP_STRING> valid_keys; + getValidWriterKeys(&valid_keys); + Value::Members keys = settings_.getMemberNames(); + size_t n = keys.size(); + for (size_t i = 0; i < n; ++i) { + JSONCPP_STRING const& key = keys[i]; + if (valid_keys.find(key) == valid_keys.end()) { + inv[key] = settings_[key]; + } + } + return 0u == inv.size(); +} +Value& StreamWriterBuilder::operator[](JSONCPP_STRING key) +{ + return settings_[key]; +} +// static +void StreamWriterBuilder::setDefaults(Json::Value* settings) +{ + //! [StreamWriterBuilderDefaults] + (*settings)["commentStyle"] = "All"; + (*settings)["indentation"] = "\t"; + (*settings)["enableYAMLCompatibility"] = false; + (*settings)["dropNullPlaceholders"] = false; + (*settings)["useSpecialFloats"] = false; + (*settings)["precision"] = 17; + //! [StreamWriterBuilderDefaults] +} + +JSONCPP_STRING writeString(StreamWriter::Factory const& builder, Value const& root) { + JSONCPP_OSTRINGSTREAM sout; + StreamWriterPtr const writer(builder.newStreamWriter()); + writer->write(root, &sout); + return sout.str(); +} + +JSONCPP_OSTREAM& operator<<(JSONCPP_OSTREAM& sout, Value const& root) { + StreamWriterBuilder builder; + StreamWriterPtr const writer(builder.newStreamWriter()); + writer->write(root, &sout); + return sout; +} + +} // namespace Json + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_writer.cpp +// ////////////////////////////////////////////////////////////////////// + + + + + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/libsvm/libsvm.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/libsvm/libsvm.cpp new file mode 100644 index 0000000..77ea425 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/libsvm/libsvm.cpp @@ -0,0 +1,3184 @@ +#include <math.h> +#include <stdio.h> +#include <stdlib.h> +#include <ctype.h> +#include <float.h> +#include <string.h> +#include <stdarg.h> +#include <limits.h> +#include <locale.h> +#include "libsvm.h" + +namespace LIBSVM { + int libsvm_version = LIBSVM_VERSION; + typedef float Qfloat; + typedef signed char schar; +#ifndef min + template <class T> static inline T min(T x,T y) { return (x<y)?x:y; } +#endif +#ifndef max + template <class T> static inline T max(T x,T y) { return (x>y)?x:y; } +#endif + template <class T> static inline void swap(T& x, T& y) { T t=x; x=y; y=t; } + template <class S, class T> static inline void clone(T*& dst, S* src, int n) + { + dst = new T[n]; + memcpy((void *)dst,(void *)src,sizeof(T)*n); + } + static inline double powi(double base, int times) + { + double tmp = base, ret = 1.0; + + for(int t=times; t>0; t/=2) + { + if(t%2==1) ret*=tmp; + tmp = tmp * tmp; + } + return ret; + } +#define INF HUGE_VAL +#define TAU 1e-12 +#define Malloc(type,n) (type *)malloc((n)*sizeof(type)) + + static void print_string_stdout(const char *s) + { + fputs(s,stdout); + fflush(stdout); + } + static void (*svm_print_string) (const char *) = &print_string_stdout; +#if 1 + static void info(const char *fmt,...) + { + char buf[BUFSIZ]; + va_list ap; + va_start(ap,fmt); + vsprintf(buf,fmt,ap); + va_end(ap); + (*svm_print_string)(buf); + } +#else + static void info(const char *fmt,...) {} +#endif + + // + // Kernel Cache + // + // l is the number of total data items + // size is the cache size limit in bytes + // + class Cache + { + public: + Cache(int l,long int size); + ~Cache(); + + // request data [0,len) + // return some position p where [p,len) need to be filled + // (p >= len if nothing needs to be filled) + int get_data(const int index, Qfloat **data, int len); + void swap_index(int i, int j); + private: + int l; + long int size; + struct head_t + { + head_t *prev, *next; // a circular list + Qfloat *data; + int len; // data[0,len) is cached in this entry + }; + + head_t *head; + head_t lru_head; + void lru_delete(head_t *h); + void lru_insert(head_t *h); + }; + + Cache::Cache(int l_,long int size_):l(l_),size(size_) + { + head = (head_t *)calloc(l,sizeof(head_t)); // initialized to 0 + size /= sizeof(Qfloat); + size -= l * sizeof(head_t) / sizeof(Qfloat); + size = max(size, 2 * (long int) l); // cache must be large enough for two columns + lru_head.next = lru_head.prev = &lru_head; + } + + Cache::~Cache() + { + for(head_t *h = lru_head.next; h != &lru_head; h=h->next) + free(h->data); + free(head); + } + + void Cache::lru_delete(head_t *h) + { + // delete from current location + h->prev->next = h->next; + h->next->prev = h->prev; + } + + void Cache::lru_insert(head_t *h) + { + // insert to last position + h->next = &lru_head; + h->prev = lru_head.prev; + h->prev->next = h; + h->next->prev = h; + } + + int Cache::get_data(const int index, Qfloat **data, int len) + { + head_t *h = &head[index]; + if(h->len) lru_delete(h); + int more = len - h->len; + + if(more > 0) + { + // free old space + while(size < more) + { + head_t *old = lru_head.next; + lru_delete(old); + free(old->data); + size += old->len; + old->data = 0; + old->len = 0; + } + + // allocate new space + h->data = (Qfloat *)realloc(h->data,sizeof(Qfloat)*len); + size -= more; + swap(h->len,len); + } + + lru_insert(h); + *data = h->data; + return len; + } + + void Cache::swap_index(int i, int j) + { + if(i==j) return; + + if(head[i].len) lru_delete(&head[i]); + if(head[j].len) lru_delete(&head[j]); + swap(head[i].data,head[j].data); + swap(head[i].len,head[j].len); + if(head[i].len) lru_insert(&head[i]); + if(head[j].len) lru_insert(&head[j]); + + if(i>j) swap(i,j); + for(head_t *h = lru_head.next; h!=&lru_head; h=h->next) + { + if(h->len > i) + { + if(h->len > j) + swap(h->data[i],h->data[j]); + else + { + // give up + lru_delete(h); + free(h->data); + size += h->len; + h->data = 0; + h->len = 0; + } + } + } + } + + // + // Kernel evaluation + // + // the static method k_function is for doing single kernel evaluation + // the constructor of Kernel prepares to calculate the l*l kernel matrix + // the member function get_Q is for getting one column from the Q Matrix + // + class QMatrix { + public: + virtual Qfloat *get_Q(int column, int len) const = 0; + virtual double *get_QD() const = 0; + virtual void swap_index(int i, int j) const = 0; + virtual ~QMatrix() {} + }; + + class Kernel: public QMatrix { + public: + Kernel(int l, svm_node * const * x, const svm_parameter& param); + virtual ~Kernel(); + + static double k_function(const svm_node *x, const svm_node *y, + const svm_parameter& param); + virtual Qfloat *get_Q(int column, int len) const = 0; + virtual double *get_QD() const = 0; + virtual void swap_index(int i, int j) const // no so const... + { + swap(x[i],x[j]); + if(x_square) swap(x_square[i],x_square[j]); + } + protected: + + double (Kernel::*kernel_function)(int i, int j) const; + + private: + const svm_node **x; + double *x_square; + + // svm_parameter + const int kernel_type; + const int degree; + const double gamma; + const double coef0; + + static double dot(const svm_node *px, const svm_node *py); + double kernel_linear(int i, int j) const + { + return dot(x[i],x[j]); + } + double kernel_poly(int i, int j) const + { + return powi(gamma*dot(x[i],x[j])+coef0,degree); + } + double kernel_rbf(int i, int j) const + { + return exp(-gamma*(x_square[i]+x_square[j]-2*dot(x[i],x[j]))); + } + double kernel_sigmoid(int i, int j) const + { + return tanh(gamma*dot(x[i],x[j])+coef0); + } + double kernel_precomputed(int i, int j) const + { + return x[i][(int)(x[j][0].value)].value; + } + }; + + Kernel::Kernel(int l, svm_node * const * x_, const svm_parameter& param) + :kernel_type(param.kernel_type), degree(param.degree), + gamma(param.gamma), coef0(param.coef0) + { + switch(kernel_type) + { + case LINEAR: + kernel_function = &Kernel::kernel_linear; + break; + case POLY: + kernel_function = &Kernel::kernel_poly; + break; + case RBF: + kernel_function = &Kernel::kernel_rbf; + break; + case SIGMOID: + kernel_function = &Kernel::kernel_sigmoid; + break; + case PRECOMPUTED: + kernel_function = &Kernel::kernel_precomputed; + break; + } + + clone(x,x_,l); + + if(kernel_type == RBF) + { + x_square = new double[l]; + for(int i=0;i<l;i++) + x_square[i] = dot(x[i],x[i]); + } + else + x_square = 0; + } + + Kernel::~Kernel() + { + delete[] x; + delete[] x_square; + } + + double Kernel::dot(const svm_node *px, const svm_node *py) + { + double sum = 0; + while(px->index != -1 && py->index != -1) + { + if(px->index == py->index) + { + sum += px->value * py->value; + ++px; + ++py; + } + else + { + if(px->index > py->index) + ++py; + else + ++px; + } + } + return sum; + } + + double Kernel::k_function(const svm_node *x, const svm_node *y, + const svm_parameter& param) + { + switch(param.kernel_type) + { + case LINEAR: + return dot(x,y); + case POLY: + return powi(param.gamma*dot(x,y)+param.coef0,param.degree); + case RBF: + { + double sum = 0; + while(x->index != -1 && y->index !=-1) + { + if(x->index == y->index) + { + double d = x->value - y->value; + sum += d*d; + ++x; + ++y; + } + else + { + if(x->index > y->index) + { + sum += y->value * y->value; + ++y; + } + else + { + sum += x->value * x->value; + ++x; + } + } + } + + while(x->index != -1) + { + sum += x->value * x->value; + ++x; + } + + while(y->index != -1) + { + sum += y->value * y->value; + ++y; + } + + return exp(-param.gamma*sum); + } + case SIGMOID: + return tanh(param.gamma*dot(x,y)+param.coef0); + case PRECOMPUTED: //x: test (validation), y: SV + return x[(int)(y->value)].value; + default: + return 0; // Unreachable + } + } + + // An SMO algorithm in Fan et al., JMLR 6(2005), p. 1889--1918 + // Solves: + // + // min 0.5(\alpha^T Q \alpha) + p^T \alpha + // + // y^T \alpha = \delta + // y_i = +1 or -1 + // 0 <= alpha_i <= Cp for y_i = 1 + // 0 <= alpha_i <= Cn for y_i = -1 + // + // Given: + // + // Q, p, y, Cp, Cn, and an initial feasible point \alpha + // l is the size of vectors and matrices + // eps is the stopping tolerance + // + // solution will be put in \alpha, objective value will be put in obj + // + class Solver { + public: + Solver() {}; + virtual ~Solver() {}; + + struct SolutionInfo { + double obj; + double rho; + double upper_bound_p; + double upper_bound_n; + double r; // for Solver_NU + }; + + void Solve(int l, const QMatrix& Q, const double *p_, const schar *y_, + double *alpha_, double Cp, double Cn, double eps, + SolutionInfo* si, int shrinking); + protected: + int active_size; + schar *y; + double *G; // gradient of objective function + enum { LOWER_BOUND, UPPER_BOUND, FREE }; + char *alpha_status; // LOWER_BOUND, UPPER_BOUND, FREE + double *alpha; + const QMatrix *Q; + const double *QD; + double eps; + double Cp,Cn; + double *p; + int *active_set; + double *G_bar; // gradient, if we treat free variables as 0 + int l; + bool unshrink; // XXX + + double get_C(int i) + { + return (y[i] > 0)? Cp : Cn; + } + void update_alpha_status(int i) + { + if(alpha[i] >= get_C(i)) + alpha_status[i] = UPPER_BOUND; + else if(alpha[i] <= 0) + alpha_status[i] = LOWER_BOUND; + else alpha_status[i] = FREE; + } + bool is_upper_bound(int i) { return alpha_status[i] == UPPER_BOUND; } + bool is_lower_bound(int i) { return alpha_status[i] == LOWER_BOUND; } + bool is_free(int i) { return alpha_status[i] == FREE; } + void swap_index(int i, int j); + void reconstruct_gradient(); + virtual int select_working_set(int &i, int &j); + virtual double calculate_rho(); + virtual void do_shrinking(); + private: + bool be_shrunk(int i, double Gmax1, double Gmax2); + }; + + void Solver::swap_index(int i, int j) + { + Q->swap_index(i,j); + swap(y[i],y[j]); + swap(G[i],G[j]); + swap(alpha_status[i],alpha_status[j]); + swap(alpha[i],alpha[j]); + swap(p[i],p[j]); + swap(active_set[i],active_set[j]); + swap(G_bar[i],G_bar[j]); + } + + void Solver::reconstruct_gradient() + { + // reconstruct inactive elements of G from G_bar and free variables + + if(active_size == l) return; + + int i,j; + int nr_free = 0; + + for(j=active_size;j<l;j++) + G[j] = G_bar[j] + p[j]; + + for(j=0;j<active_size;j++) + if(is_free(j)) + nr_free++; + + if(2*nr_free < active_size) + info("\nWARNING: using -h 0 may be faster\n"); + + if (nr_free*l > 2*active_size*(l-active_size)) + { + for(i=active_size;i<l;i++) + { + const Qfloat *Q_i = Q->get_Q(i,active_size); + for(j=0;j<active_size;j++) + if(is_free(j)) + G[i] += alpha[j] * Q_i[j]; + } + } + else + { + for(i=0;i<active_size;i++) + if(is_free(i)) + { + const Qfloat *Q_i = Q->get_Q(i,l); + double alpha_i = alpha[i]; + for(j=active_size;j<l;j++) + G[j] += alpha_i * Q_i[j]; + } + } + } + + void Solver::Solve(int l, const QMatrix& Q, const double *p_, const schar *y_, + double *alpha_, double Cp, double Cn, double eps, + SolutionInfo* si, int shrinking) + { + this->l = l; + this->Q = &Q; + QD=Q.get_QD(); + clone(p, p_,l); + clone(y, y_,l); + clone(alpha,alpha_,l); + this->Cp = Cp; + this->Cn = Cn; + this->eps = eps; + unshrink = false; + + // initialize alpha_status + { + alpha_status = new char[l]; + for(int i=0;i<l;i++) + update_alpha_status(i); + } + + // initialize active set (for shrinking) + { + active_set = new int[l]; + for(int i=0;i<l;i++) + active_set[i] = i; + active_size = l; + } + + // initialize gradient + { + G = new double[l]; + G_bar = new double[l]; + int i; + for(i=0;i<l;i++) + { + G[i] = p[i]; + G_bar[i] = 0; + } + for(i=0;i<l;i++) + if(!is_lower_bound(i)) + { + const Qfloat *Q_i = Q.get_Q(i,l); + double alpha_i = alpha[i]; + int j; + for(j=0;j<l;j++) + G[j] += alpha_i*Q_i[j]; + if(is_upper_bound(i)) + for(j=0;j<l;j++) + G_bar[j] += get_C(i) * Q_i[j]; + } + } + + // optimization step + + int iter = 0; + int max_iter = max(10000000, l>INT_MAX/100 ? INT_MAX : 100*l); + int counter = min(l,1000)+1; + + while(iter < max_iter) + { + // show progress and do shrinking + + if(--counter == 0) + { + counter = min(l,1000); + if(shrinking) do_shrinking(); + info("."); + } + + int i,j; + if(select_working_set(i,j)!=0) + { + // reconstruct the whole gradient + reconstruct_gradient(); + // reset active set size and check + active_size = l; + info("*"); + if(select_working_set(i,j)!=0) + break; + else + counter = 1; // do shrinking next iteration + } + + ++iter; + + // update alpha[i] and alpha[j], handle bounds carefully + + const Qfloat *Q_i = Q.get_Q(i,active_size); + const Qfloat *Q_j = Q.get_Q(j,active_size); + + double C_i = get_C(i); + double C_j = get_C(j); + + double old_alpha_i = alpha[i]; + double old_alpha_j = alpha[j]; + + if(y[i]!=y[j]) + { + double quad_coef = QD[i]+QD[j]+2*Q_i[j]; + if (quad_coef <= 0) + quad_coef = TAU; + double delta = (-G[i]-G[j])/quad_coef; + double diff = alpha[i] - alpha[j]; + alpha[i] += delta; + alpha[j] += delta; + + if(diff > 0) + { + if(alpha[j] < 0) + { + alpha[j] = 0; + alpha[i] = diff; + } + } + else + { + if(alpha[i] < 0) + { + alpha[i] = 0; + alpha[j] = -diff; + } + } + if(diff > C_i - C_j) + { + if(alpha[i] > C_i) + { + alpha[i] = C_i; + alpha[j] = C_i - diff; + } + } + else + { + if(alpha[j] > C_j) + { + alpha[j] = C_j; + alpha[i] = C_j + diff; + } + } + } + else + { + double quad_coef = QD[i]+QD[j]-2*Q_i[j]; + if (quad_coef <= 0) + quad_coef = TAU; + double delta = (G[i]-G[j])/quad_coef; + double sum = alpha[i] + alpha[j]; + alpha[i] -= delta; + alpha[j] += delta; + + if(sum > C_i) + { + if(alpha[i] > C_i) + { + alpha[i] = C_i; + alpha[j] = sum - C_i; + } + } + else + { + if(alpha[j] < 0) + { + alpha[j] = 0; + alpha[i] = sum; + } + } + if(sum > C_j) + { + if(alpha[j] > C_j) + { + alpha[j] = C_j; + alpha[i] = sum - C_j; + } + } + else + { + if(alpha[i] < 0) + { + alpha[i] = 0; + alpha[j] = sum; + } + } + } + + // update G + + double delta_alpha_i = alpha[i] - old_alpha_i; + double delta_alpha_j = alpha[j] - old_alpha_j; + + for(int k=0;k<active_size;k++) + { + G[k] += Q_i[k]*delta_alpha_i + Q_j[k]*delta_alpha_j; + } + + // update alpha_status and G_bar + + { + bool ui = is_upper_bound(i); + bool uj = is_upper_bound(j); + update_alpha_status(i); + update_alpha_status(j); + int k; + if(ui != is_upper_bound(i)) + { + Q_i = Q.get_Q(i,l); + if(ui) + for(k=0;k<l;k++) + G_bar[k] -= C_i * Q_i[k]; + else + for(k=0;k<l;k++) + G_bar[k] += C_i * Q_i[k]; + } + + if(uj != is_upper_bound(j)) + { + Q_j = Q.get_Q(j,l); + if(uj) + for(k=0;k<l;k++) + G_bar[k] -= C_j * Q_j[k]; + else + for(k=0;k<l;k++) + G_bar[k] += C_j * Q_j[k]; + } + } + } + + if(iter >= max_iter) + { + if(active_size < l) + { + // reconstruct the whole gradient to calculate objective value + reconstruct_gradient(); + active_size = l; + info("*"); + } + fprintf(stderr,"\nWARNING: reaching max number of iterations\n"); + } + + // calculate rho + + si->rho = calculate_rho(); + + // calculate objective value + { + double v = 0; + int i; + for(i=0;i<l;i++) + v += alpha[i] * (G[i] + p[i]); + + si->obj = v/2; + } + + // put back the solution + { + for(int i=0;i<l;i++) + alpha_[active_set[i]] = alpha[i]; + } + + // juggle everything back + /*{ + for(int i=0;i<l;i++) + while(active_set[i] != i) + swap_index(i,active_set[i]); + // or Q.swap_index(i,active_set[i]); + }*/ + + si->upper_bound_p = Cp; + si->upper_bound_n = Cn; + + info("\noptimization finished, #iter = %d\n",iter); + + delete[] p; + delete[] y; + delete[] alpha; + delete[] alpha_status; + delete[] active_set; + delete[] G; + delete[] G_bar; + } + + // return 1 if already optimal, return 0 otherwise + int Solver::select_working_set(int &out_i, int &out_j) + { + // return i,j such that + // i: maximizes -y_i * grad(f)_i, i in I_up(\alpha) + // j: minimizes the decrease of obj value + // (if quadratic coefficeint <= 0, replace it with tau) + // -y_j*grad(f)_j < -y_i*grad(f)_i, j in I_low(\alpha) + + double Gmax = -INF; + double Gmax2 = -INF; + int Gmax_idx = -1; + int Gmin_idx = -1; + double obj_diff_min = INF; + + for(int t=0;t<active_size;t++) + if(y[t]==+1) + { + if(!is_upper_bound(t)) + if(-G[t] >= Gmax) + { + Gmax = -G[t]; + Gmax_idx = t; + } + } + else + { + if(!is_lower_bound(t)) + if(G[t] >= Gmax) + { + Gmax = G[t]; + Gmax_idx = t; + } + } + + int i = Gmax_idx; + const Qfloat *Q_i = NULL; + if(i != -1) // NULL Q_i not accessed: Gmax=-INF if i=-1 + Q_i = Q->get_Q(i,active_size); + + for(int j=0;j<active_size;j++) + { + if(y[j]==+1) + { + if (!is_lower_bound(j)) + { + double grad_diff=Gmax+G[j]; + if (G[j] >= Gmax2) + Gmax2 = G[j]; + if (grad_diff > 0) + { + double obj_diff; + double quad_coef = QD[i]+QD[j]-2.0*y[i]*Q_i[j]; + if (quad_coef > 0) + obj_diff = -(grad_diff*grad_diff)/quad_coef; + else + obj_diff = -(grad_diff*grad_diff)/TAU; + + if (obj_diff <= obj_diff_min) + { + Gmin_idx=j; + obj_diff_min = obj_diff; + } + } + } + } + else + { + if (!is_upper_bound(j)) + { + double grad_diff= Gmax-G[j]; + if (-G[j] >= Gmax2) + Gmax2 = -G[j]; + if (grad_diff > 0) + { + double obj_diff; + double quad_coef = QD[i]+QD[j]+2.0*y[i]*Q_i[j]; + if (quad_coef > 0) + obj_diff = -(grad_diff*grad_diff)/quad_coef; + else + obj_diff = -(grad_diff*grad_diff)/TAU; + + if (obj_diff <= obj_diff_min) + { + Gmin_idx=j; + obj_diff_min = obj_diff; + } + } + } + } + } + + if(Gmax+Gmax2 < eps || Gmin_idx == -1) + return 1; + + out_i = Gmax_idx; + out_j = Gmin_idx; + return 0; + } + + bool Solver::be_shrunk(int i, double Gmax1, double Gmax2) + { + if(is_upper_bound(i)) + { + if(y[i]==+1) + return(-G[i] > Gmax1); + else + return(-G[i] > Gmax2); + } + else if(is_lower_bound(i)) + { + if(y[i]==+1) + return(G[i] > Gmax2); + else + return(G[i] > Gmax1); + } + else + return(false); + } + + void Solver::do_shrinking() + { + int i; + double Gmax1 = -INF; // max { -y_i * grad(f)_i | i in I_up(\alpha) } + double Gmax2 = -INF; // max { y_i * grad(f)_i | i in I_low(\alpha) } + + // find maximal violating pair first + for(i=0;i<active_size;i++) + { + if(y[i]==+1) + { + if(!is_upper_bound(i)) + { + if(-G[i] >= Gmax1) + Gmax1 = -G[i]; + } + if(!is_lower_bound(i)) + { + if(G[i] >= Gmax2) + Gmax2 = G[i]; + } + } + else + { + if(!is_upper_bound(i)) + { + if(-G[i] >= Gmax2) + Gmax2 = -G[i]; + } + if(!is_lower_bound(i)) + { + if(G[i] >= Gmax1) + Gmax1 = G[i]; + } + } + } + + if(unshrink == false && Gmax1 + Gmax2 <= eps*10) + { + unshrink = true; + reconstruct_gradient(); + active_size = l; + info("*"); + } + + for(i=0;i<active_size;i++) + if (be_shrunk(i, Gmax1, Gmax2)) + { + active_size--; + while (active_size > i) + { + if (!be_shrunk(active_size, Gmax1, Gmax2)) + { + swap_index(i,active_size); + break; + } + active_size--; + } + } + } + + double Solver::calculate_rho() + { + double r; + int nr_free = 0; + double ub = INF, lb = -INF, sum_free = 0; + for(int i=0;i<active_size;i++) + { + double yG = y[i]*G[i]; + + if(is_upper_bound(i)) + { + if(y[i]==-1) + ub = min(ub,yG); + else + lb = max(lb,yG); + } + else if(is_lower_bound(i)) + { + if(y[i]==+1) + ub = min(ub,yG); + else + lb = max(lb,yG); + } + else + { + ++nr_free; + sum_free += yG; + } + } + + if(nr_free>0) + r = sum_free/nr_free; + else + r = (ub+lb)/2; + + return r; + } + + // + // Solver for nu-svm classification and regression + // + // additional constraint: e^T \alpha = constant + // + class Solver_NU: public Solver + { + public: + Solver_NU() {} + void Solve(int l, const QMatrix& Q, const double *p, const schar *y, + double *alpha, double Cp, double Cn, double eps, + SolutionInfo* si, int shrinking) + { + this->si = si; + Solver::Solve(l,Q,p,y,alpha,Cp,Cn,eps,si,shrinking); + } + private: + SolutionInfo *si; + int select_working_set(int &i, int &j); + double calculate_rho(); + bool be_shrunk(int i, double Gmax1, double Gmax2, double Gmax3, double Gmax4); + void do_shrinking(); + }; + + // return 1 if already optimal, return 0 otherwise + int Solver_NU::select_working_set(int &out_i, int &out_j) + { + // return i,j such that y_i = y_j and + // i: maximizes -y_i * grad(f)_i, i in I_up(\alpha) + // j: minimizes the decrease of obj value + // (if quadratic coefficeint <= 0, replace it with tau) + // -y_j*grad(f)_j < -y_i*grad(f)_i, j in I_low(\alpha) + + double Gmaxp = -INF; + double Gmaxp2 = -INF; + int Gmaxp_idx = -1; + + double Gmaxn = -INF; + double Gmaxn2 = -INF; + int Gmaxn_idx = -1; + + int Gmin_idx = -1; + double obj_diff_min = INF; + + for(int t=0;t<active_size;t++) + if(y[t]==+1) + { + if(!is_upper_bound(t)) + if(-G[t] >= Gmaxp) + { + Gmaxp = -G[t]; + Gmaxp_idx = t; + } + } + else + { + if(!is_lower_bound(t)) + if(G[t] >= Gmaxn) + { + Gmaxn = G[t]; + Gmaxn_idx = t; + } + } + + int ip = Gmaxp_idx; + int in = Gmaxn_idx; + const Qfloat *Q_ip = NULL; + const Qfloat *Q_in = NULL; + if(ip != -1) // NULL Q_ip not accessed: Gmaxp=-INF if ip=-1 + Q_ip = Q->get_Q(ip,active_size); + if(in != -1) + Q_in = Q->get_Q(in,active_size); + + for(int j=0;j<active_size;j++) + { + if(y[j]==+1) + { + if (!is_lower_bound(j)) + { + double grad_diff=Gmaxp+G[j]; + if (G[j] >= Gmaxp2) + Gmaxp2 = G[j]; + if (grad_diff > 0) + { + double obj_diff; + double quad_coef = QD[ip]+QD[j]-2*Q_ip[j]; + if (quad_coef > 0) + obj_diff = -(grad_diff*grad_diff)/quad_coef; + else + obj_diff = -(grad_diff*grad_diff)/TAU; + + if (obj_diff <= obj_diff_min) + { + Gmin_idx=j; + obj_diff_min = obj_diff; + } + } + } + } + else + { + if (!is_upper_bound(j)) + { + double grad_diff=Gmaxn-G[j]; + if (-G[j] >= Gmaxn2) + Gmaxn2 = -G[j]; + if (grad_diff > 0) + { + double obj_diff; + double quad_coef = QD[in]+QD[j]-2*Q_in[j]; + if (quad_coef > 0) + obj_diff = -(grad_diff*grad_diff)/quad_coef; + else + obj_diff = -(grad_diff*grad_diff)/TAU; + + if (obj_diff <= obj_diff_min) + { + Gmin_idx=j; + obj_diff_min = obj_diff; + } + } + } + } + } + + if(max(Gmaxp+Gmaxp2,Gmaxn+Gmaxn2) < eps || Gmin_idx == -1) + return 1; + + if (y[Gmin_idx] == +1) + out_i = Gmaxp_idx; + else + out_i = Gmaxn_idx; + out_j = Gmin_idx; + + return 0; + } + + bool Solver_NU::be_shrunk(int i, double Gmax1, double Gmax2, double Gmax3, double Gmax4) + { + if(is_upper_bound(i)) + { + if(y[i]==+1) + return(-G[i] > Gmax1); + else + return(-G[i] > Gmax4); + } + else if(is_lower_bound(i)) + { + if(y[i]==+1) + return(G[i] > Gmax2); + else + return(G[i] > Gmax3); + } + else + return(false); + } + + void Solver_NU::do_shrinking() + { + double Gmax1 = -INF; // max { -y_i * grad(f)_i | y_i = +1, i in I_up(\alpha) } + double Gmax2 = -INF; // max { y_i * grad(f)_i | y_i = +1, i in I_low(\alpha) } + double Gmax3 = -INF; // max { -y_i * grad(f)_i | y_i = -1, i in I_up(\alpha) } + double Gmax4 = -INF; // max { y_i * grad(f)_i | y_i = -1, i in I_low(\alpha) } + + // find maximal violating pair first + int i; + for(i=0;i<active_size;i++) + { + if(!is_upper_bound(i)) + { + if(y[i]==+1) + { + if(-G[i] > Gmax1) Gmax1 = -G[i]; + } + else if(-G[i] > Gmax4) Gmax4 = -G[i]; + } + if(!is_lower_bound(i)) + { + if(y[i]==+1) + { + if(G[i] > Gmax2) Gmax2 = G[i]; + } + else if(G[i] > Gmax3) Gmax3 = G[i]; + } + } + + if(unshrink == false && max(Gmax1+Gmax2,Gmax3+Gmax4) <= eps*10) + { + unshrink = true; + reconstruct_gradient(); + active_size = l; + } + + for(i=0;i<active_size;i++) + if (be_shrunk(i, Gmax1, Gmax2, Gmax3, Gmax4)) + { + active_size--; + while (active_size > i) + { + if (!be_shrunk(active_size, Gmax1, Gmax2, Gmax3, Gmax4)) + { + swap_index(i,active_size); + break; + } + active_size--; + } + } + } + + double Solver_NU::calculate_rho() + { + int nr_free1 = 0,nr_free2 = 0; + double ub1 = INF, ub2 = INF; + double lb1 = -INF, lb2 = -INF; + double sum_free1 = 0, sum_free2 = 0; + + for(int i=0;i<active_size;i++) + { + if(y[i]==+1) + { + if(is_upper_bound(i)) + lb1 = max(lb1,G[i]); + else if(is_lower_bound(i)) + ub1 = min(ub1,G[i]); + else + { + ++nr_free1; + sum_free1 += G[i]; + } + } + else + { + if(is_upper_bound(i)) + lb2 = max(lb2,G[i]); + else if(is_lower_bound(i)) + ub2 = min(ub2,G[i]); + else + { + ++nr_free2; + sum_free2 += G[i]; + } + } + } + + double r1,r2; + if(nr_free1 > 0) + r1 = sum_free1/nr_free1; + else + r1 = (ub1+lb1)/2; + + if(nr_free2 > 0) + r2 = sum_free2/nr_free2; + else + r2 = (ub2+lb2)/2; + + si->r = (r1+r2)/2; + return (r1-r2)/2; + } + + // + // Q matrices for various formulations + // + class SVC_Q: public Kernel + { + public: + SVC_Q(const svm_problem& prob, const svm_parameter& param, const schar *y_) + :Kernel(prob.l, prob.x, param) + { + clone(y,y_,prob.l); + cache = new Cache(prob.l,(long int)(param.cache_size*(1<<20))); + QD = new double[prob.l]; + for(int i=0;i<prob.l;i++) + QD[i] = (this->*kernel_function)(i,i); + } + + Qfloat *get_Q(int i, int len) const + { + Qfloat *data; + int start, j; + if((start = cache->get_data(i,&data,len)) < len) + { + for(j=start;j<len;j++) + data[j] = (Qfloat)(y[i]*y[j]*(this->*kernel_function)(i,j)); + } + return data; + } + + double *get_QD() const + { + return QD; + } + + void swap_index(int i, int j) const + { + cache->swap_index(i,j); + Kernel::swap_index(i,j); + swap(y[i],y[j]); + swap(QD[i],QD[j]); + } + + ~SVC_Q() + { + delete[] y; + delete cache; + delete[] QD; + } + private: + schar *y; + Cache *cache; + double *QD; + }; + + class ONE_CLASS_Q: public Kernel + { + public: + ONE_CLASS_Q(const svm_problem& prob, const svm_parameter& param) + :Kernel(prob.l, prob.x, param) + { + cache = new Cache(prob.l,(long int)(param.cache_size*(1<<20))); + QD = new double[prob.l]; + for(int i=0;i<prob.l;i++) + QD[i] = (this->*kernel_function)(i,i); + } + + Qfloat *get_Q(int i, int len) const + { + Qfloat *data; + int start, j; + if((start = cache->get_data(i,&data,len)) < len) + { + for(j=start;j<len;j++) + data[j] = (Qfloat)(this->*kernel_function)(i,j); + } + return data; + } + + double *get_QD() const + { + return QD; + } + + void swap_index(int i, int j) const + { + cache->swap_index(i,j); + Kernel::swap_index(i,j); + swap(QD[i],QD[j]); + } + + ~ONE_CLASS_Q() + { + delete cache; + delete[] QD; + } + private: + Cache *cache; + double *QD; + }; + + class SVR_Q: public Kernel + { + public: + SVR_Q(const svm_problem& prob, const svm_parameter& param) + :Kernel(prob.l, prob.x, param) + { + l = prob.l; + cache = new Cache(l,(long int)(param.cache_size*(1<<20))); + QD = new double[2*l]; + sign = new schar[2*l]; + index = new int[2*l]; + for(int k=0;k<l;k++) + { + sign[k] = 1; + sign[k+l] = -1; + index[k] = k; + index[k+l] = k; + QD[k] = (this->*kernel_function)(k,k); + QD[k+l] = QD[k]; + } + buffer[0] = new Qfloat[2*l]; + buffer[1] = new Qfloat[2*l]; + next_buffer = 0; + } + + void swap_index(int i, int j) const + { + swap(sign[i],sign[j]); + swap(index[i],index[j]); + swap(QD[i],QD[j]); + } + + Qfloat *get_Q(int i, int len) const + { + Qfloat *data; + int j, real_i = index[i]; + if(cache->get_data(real_i,&data,l) < l) + { + for(j=0;j<l;j++) + data[j] = (Qfloat)(this->*kernel_function)(real_i,j); + } + + // reorder and copy + Qfloat *buf = buffer[next_buffer]; + next_buffer = 1 - next_buffer; + schar si = sign[i]; + for(j=0;j<len;j++) + buf[j] = (Qfloat) si * (Qfloat) sign[j] * data[index[j]]; + return buf; + } + + double *get_QD() const + { + return QD; + } + + ~SVR_Q() + { + delete cache; + delete[] sign; + delete[] index; + delete[] buffer[0]; + delete[] buffer[1]; + delete[] QD; + } + private: + int l; + Cache *cache; + schar *sign; + int *index; + mutable int next_buffer; + Qfloat *buffer[2]; + double *QD; + }; + + // + // construct and solve various formulations + // + static void solve_c_svc( + const svm_problem *prob, const svm_parameter* param, + double *alpha, Solver::SolutionInfo* si, double Cp, double Cn) + { + int l = prob->l; + double *minus_ones = new double[l]; + schar *y = new schar[l]; + + int i; + + for(i=0;i<l;i++) + { + alpha[i] = 0; + minus_ones[i] = -1; + if(prob->y[i] > 0) y[i] = +1; else y[i] = -1; + } + + Solver s; + s.Solve(l, SVC_Q(*prob,*param,y), minus_ones, y, + alpha, Cp, Cn, param->eps, si, param->shrinking); + + double sum_alpha=0; + for(i=0;i<l;i++) + sum_alpha += alpha[i]; + + if (Cp==Cn) + info("nu = %f\n", sum_alpha/(Cp*prob->l)); + + for(i=0;i<l;i++) + alpha[i] *= y[i]; + + delete[] minus_ones; + delete[] y; + } + + static void solve_nu_svc( + const svm_problem *prob, const svm_parameter *param, + double *alpha, Solver::SolutionInfo* si) + { + int i; + int l = prob->l; + double nu = param->nu; + + schar *y = new schar[l]; + + for(i=0;i<l;i++) + if(prob->y[i]>0) + y[i] = +1; + else + y[i] = -1; + + double sum_pos = nu*l/2; + double sum_neg = nu*l/2; + + for(i=0;i<l;i++) + if(y[i] == +1) + { + alpha[i] = min(1.0,sum_pos); + sum_pos -= alpha[i]; + } + else + { + alpha[i] = min(1.0,sum_neg); + sum_neg -= alpha[i]; + } + + double *zeros = new double[l]; + + for(i=0;i<l;i++) + zeros[i] = 0; + + Solver_NU s; + s.Solve(l, SVC_Q(*prob,*param,y), zeros, y, + alpha, 1.0, 1.0, param->eps, si, param->shrinking); + double r = si->r; + + info("C = %f\n",1/r); + + for(i=0;i<l;i++) + alpha[i] *= y[i]/r; + + si->rho /= r; + si->obj /= (r*r); + si->upper_bound_p = 1/r; + si->upper_bound_n = 1/r; + + delete[] y; + delete[] zeros; + } + + static void solve_one_class( + const svm_problem *prob, const svm_parameter *param, + double *alpha, Solver::SolutionInfo* si) + { + int l = prob->l; + double *zeros = new double[l]; + schar *ones = new schar[l]; + int i; + + int n = (int)(param->nu*prob->l); // # of alpha's at upper bound + + for(i=0;i<n;i++) + alpha[i] = 1; + if(n<prob->l) + alpha[n] = param->nu * prob->l - n; + for(i=n+1;i<l;i++) + alpha[i] = 0; + + for(i=0;i<l;i++) + { + zeros[i] = 0; + ones[i] = 1; + } + + Solver s; + s.Solve(l, ONE_CLASS_Q(*prob,*param), zeros, ones, + alpha, 1.0, 1.0, param->eps, si, param->shrinking); + + delete[] zeros; + delete[] ones; + } + + static void solve_epsilon_svr( + const svm_problem *prob, const svm_parameter *param, + double *alpha, Solver::SolutionInfo* si) + { + int l = prob->l; + double *alpha2 = new double[2*l]; + double *linear_term = new double[2*l]; + schar *y = new schar[2*l]; + int i; + + for(i=0;i<l;i++) + { + alpha2[i] = 0; + linear_term[i] = param->p - prob->y[i]; + y[i] = 1; + + alpha2[i+l] = 0; + linear_term[i+l] = param->p + prob->y[i]; + y[i+l] = -1; + } + + Solver s; + s.Solve(2*l, SVR_Q(*prob,*param), linear_term, y, + alpha2, param->C, param->C, param->eps, si, param->shrinking); + + double sum_alpha = 0; + for(i=0;i<l;i++) + { + alpha[i] = alpha2[i] - alpha2[i+l]; + sum_alpha += fabs(alpha[i]); + } + info("nu = %f\n",sum_alpha/(param->C*l)); + + delete[] alpha2; + delete[] linear_term; + delete[] y; + } + + static void solve_nu_svr( + const svm_problem *prob, const svm_parameter *param, + double *alpha, Solver::SolutionInfo* si) + { + int l = prob->l; + double C = param->C; + double *alpha2 = new double[2*l]; + double *linear_term = new double[2*l]; + schar *y = new schar[2*l]; + int i; + + double sum = C * param->nu * l / 2; + for(i=0;i<l;i++) + { + alpha2[i] = alpha2[i+l] = min(sum,C); + sum -= alpha2[i]; + + linear_term[i] = - prob->y[i]; + y[i] = 1; + + linear_term[i+l] = prob->y[i]; + y[i+l] = -1; + } + + Solver_NU s; + s.Solve(2*l, SVR_Q(*prob,*param), linear_term, y, + alpha2, C, C, param->eps, si, param->shrinking); + + info("epsilon = %f\n",-si->r); + + for(i=0;i<l;i++) + alpha[i] = alpha2[i] - alpha2[i+l]; + + delete[] alpha2; + delete[] linear_term; + delete[] y; + } + + // + // decision_function + // + struct decision_function + { + double *alpha; + double rho; + }; + + static decision_function svm_train_one( + const svm_problem *prob, const svm_parameter *param, + double Cp, double Cn) + { + double *alpha = Malloc(double,prob->l); + Solver::SolutionInfo si; + switch(param->svm_type) + { + case C_SVC: + solve_c_svc(prob,param,alpha,&si,Cp,Cn); + break; + case NU_SVC: + solve_nu_svc(prob,param,alpha,&si); + break; + case ONE_CLASS: + solve_one_class(prob,param,alpha,&si); + break; + case EPSILON_SVR: + solve_epsilon_svr(prob,param,alpha,&si); + break; + case NU_SVR: + solve_nu_svr(prob,param,alpha,&si); + break; + } + + info("obj = %f, rho = %f\n",si.obj,si.rho); + + // output SVs + + int nSV = 0; + int nBSV = 0; + for(int i=0;i<prob->l;i++) + { + if(fabs(alpha[i]) > 0) + { + ++nSV; + if(prob->y[i] > 0) + { + if(fabs(alpha[i]) >= si.upper_bound_p) + ++nBSV; + } + else + { + if(fabs(alpha[i]) >= si.upper_bound_n) + ++nBSV; + } + } + } + + info("nSV = %d, nBSV = %d\n",nSV,nBSV); + + decision_function f; + f.alpha = alpha; + f.rho = si.rho; + return f; + } + + // Platt's binary SVM Probablistic Output: an improvement from Lin et al. + static void sigmoid_train( + int l, const double *dec_values, const double *labels, + double& A, double& B) + { + double prior1=0, prior0 = 0; + int i; + + for (i=0;i<l;i++) + if (labels[i] > 0) prior1+=1; + else prior0+=1; + + int max_iter=100; // Maximal number of iterations + double min_step=1e-10; // Minimal step taken in line search + double sigma=1e-12; // For numerically strict PD of Hessian + double eps=1e-5; + double hiTarget=(prior1+1.0)/(prior1+2.0); + double loTarget=1/(prior0+2.0); + double *t=Malloc(double,l); + double fApB,p,q,h11,h22,h21,g1,g2,det,dA,dB,gd,stepsize; + double newA,newB,newf,d1,d2; + int iter; + + // Initial Point and Initial Fun Value + A=0.0; B=log((prior0+1.0)/(prior1+1.0)); + double fval = 0.0; + + for (i=0;i<l;i++) + { + if (labels[i]>0) t[i]=hiTarget; + else t[i]=loTarget; + fApB = dec_values[i]*A+B; + if (fApB>=0) + fval += t[i]*fApB + log(1+exp(-fApB)); + else + fval += (t[i] - 1)*fApB +log(1+exp(fApB)); + } + for (iter=0;iter<max_iter;iter++) + { + // Update Gradient and Hessian (use H' = H + sigma I) + h11=sigma; // numerically ensures strict PD + h22=sigma; + h21=0.0;g1=0.0;g2=0.0; + for (i=0;i<l;i++) + { + fApB = dec_values[i]*A+B; + if (fApB >= 0) + { + p=exp(-fApB)/(1.0+exp(-fApB)); + q=1.0/(1.0+exp(-fApB)); + } + else + { + p=1.0/(1.0+exp(fApB)); + q=exp(fApB)/(1.0+exp(fApB)); + } + d2=p*q; + h11+=dec_values[i]*dec_values[i]*d2; + h22+=d2; + h21+=dec_values[i]*d2; + d1=t[i]-p; + g1+=dec_values[i]*d1; + g2+=d1; + } + + // Stopping Criteria + if (fabs(g1)<eps && fabs(g2)<eps) + break; + + // Finding Newton direction: -inv(H') * g + det=h11*h22-h21*h21; + dA=-(h22*g1 - h21 * g2) / det; + dB=-(-h21*g1+ h11 * g2) / det; + gd=g1*dA+g2*dB; + + + stepsize = 1; // Line Search + while (stepsize >= min_step) + { + newA = A + stepsize * dA; + newB = B + stepsize * dB; + + // New function value + newf = 0.0; + for (i=0;i<l;i++) + { + fApB = dec_values[i]*newA+newB; + if (fApB >= 0) + newf += t[i]*fApB + log(1+exp(-fApB)); + else + newf += (t[i] - 1)*fApB +log(1+exp(fApB)); + } + // Check sufficient decrease + if (newf<fval+0.0001*stepsize*gd) + { + A=newA;B=newB;fval=newf; + break; + } + else + stepsize = stepsize / 2.0; + } + + if (stepsize < min_step) + { + info("Line search fails in two-class probability estimates\n"); + break; + } + } + + if (iter>=max_iter) + info("Reaching maximal iterations in two-class probability estimates\n"); + free(t); + } + + static double sigmoid_predict(double decision_value, double A, double B) + { + double fApB = decision_value*A+B; + // 1-p used later; avoid catastrophic cancellation + if (fApB >= 0) + return exp(-fApB)/(1.0+exp(-fApB)); + else + return 1.0/(1+exp(fApB)) ; + } + + // Method 2 from the multiclass_prob paper by Wu, Lin, and Weng + static void multiclass_probability(int k, double **r, double *p) + { + int t,j; + int iter = 0, max_iter=max(100,k); + double **Q=Malloc(double *,k); + double *Qp=Malloc(double,k); + double pQp, eps=0.005/k; + + for (t=0;t<k;t++) + { + p[t]=1.0/k; // Valid if k = 1 + Q[t]=Malloc(double,k); + Q[t][t]=0; + for (j=0;j<t;j++) + { + Q[t][t]+=r[j][t]*r[j][t]; + Q[t][j]=Q[j][t]; + } + for (j=t+1;j<k;j++) + { + Q[t][t]+=r[j][t]*r[j][t]; + Q[t][j]=-r[j][t]*r[t][j]; + } + } + for (iter=0;iter<max_iter;iter++) + { + // stopping condition, recalculate QP,pQP for numerical accuracy + pQp=0; + for (t=0;t<k;t++) + { + Qp[t]=0; + for (j=0;j<k;j++) + Qp[t]+=Q[t][j]*p[j]; + pQp+=p[t]*Qp[t]; + } + double max_error=0; + for (t=0;t<k;t++) + { + double error=fabs(Qp[t]-pQp); + if (error>max_error) + max_error=error; + } + if (max_error<eps) break; + + for (t=0;t<k;t++) + { + double diff=(-Qp[t]+pQp)/Q[t][t]; + p[t]+=diff; + pQp=(pQp+diff*(diff*Q[t][t]+2*Qp[t]))/(1+diff)/(1+diff); + for (j=0;j<k;j++) + { + Qp[j]=(Qp[j]+diff*Q[t][j])/(1+diff); + p[j]/=(1+diff); + } + } + } + if (iter>=max_iter) + info("Exceeds max_iter in multiclass_prob\n"); + for(t=0;t<k;t++) free(Q[t]); + free(Q); + free(Qp); + } + + // Cross-validation decision values for probability estimates + static void svm_binary_svc_probability( + const svm_problem *prob, const svm_parameter *param, + double Cp, double Cn, double& probA, double& probB) + { + int i; + int nr_fold = 5; + int *perm = Malloc(int,prob->l); + double *dec_values = Malloc(double,prob->l); + + // random shuffle + for(i=0;i<prob->l;i++) perm[i]=i; + for(i=0;i<prob->l;i++) + { + int j = i+rand()%(prob->l-i); + swap(perm[i],perm[j]); + } + for(i=0;i<nr_fold;i++) + { + int begin = i*prob->l/nr_fold; + int end = (i+1)*prob->l/nr_fold; + int j,k; + struct svm_problem subprob; + + subprob.l = prob->l-(end-begin); + subprob.x = Malloc(struct svm_node*,subprob.l); + subprob.y = Malloc(double,subprob.l); + + k=0; + for(j=0;j<begin;j++) + { + subprob.x[k] = prob->x[perm[j]]; + subprob.y[k] = prob->y[perm[j]]; + ++k; + } + for(j=end;j<prob->l;j++) + { + subprob.x[k] = prob->x[perm[j]]; + subprob.y[k] = prob->y[perm[j]]; + ++k; + } + int p_count=0,n_count=0; + for(j=0;j<k;j++) + if(subprob.y[j]>0) + p_count++; + else + n_count++; + + if(p_count==0 && n_count==0) + for(j=begin;j<end;j++) + dec_values[perm[j]] = 0; + else if(p_count > 0 && n_count == 0) + for(j=begin;j<end;j++) + dec_values[perm[j]] = 1; + else if(p_count == 0 && n_count > 0) + for(j=begin;j<end;j++) + dec_values[perm[j]] = -1; + else + { + svm_parameter subparam = *param; + subparam.probability=0; + subparam.C=1.0; + subparam.nr_weight=2; + subparam.weight_label = Malloc(int,2); + subparam.weight = Malloc(double,2); + subparam.weight_label[0]=+1; + subparam.weight_label[1]=-1; + subparam.weight[0]=Cp; + subparam.weight[1]=Cn; + struct svm_model *submodel = svm_train(&subprob,&subparam); + for(j=begin;j<end;j++) + { + svm_predict_values(submodel,prob->x[perm[j]],&(dec_values[perm[j]])); + // ensure +1 -1 order; reason not using CV subroutine + dec_values[perm[j]] *= submodel->label[0]; + } + svm_free_and_destroy_model(&submodel); + svm_destroy_param(&subparam); + } + free(subprob.x); + free(subprob.y); + } + sigmoid_train(prob->l,dec_values,prob->y,probA,probB); + free(dec_values); + free(perm); + } + + // Return parameter of a Laplace distribution + static double svm_svr_probability( + const svm_problem *prob, const svm_parameter *param) + { + int i; + int nr_fold = 5; + double *ymv = Malloc(double,prob->l); + double mae = 0; + + svm_parameter newparam = *param; + newparam.probability = 0; + svm_cross_validation(prob,&newparam,nr_fold,ymv); + for(i=0;i<prob->l;i++) + { + ymv[i]=prob->y[i]-ymv[i]; + mae += fabs(ymv[i]); + } + mae /= prob->l; + double std=sqrt(2*mae*mae); + int count=0; + mae=0; + for(i=0;i<prob->l;i++) + if (fabs(ymv[i]) > 5*std) + count=count+1; + else + mae+=fabs(ymv[i]); + mae /= (prob->l-count); + info("Prob. model for test data: target value = predicted value + z,\nz: Laplace distribution e^(-|z|/sigma)/(2sigma),sigma= %g\n",mae); + free(ymv); + return mae; + } + + + // label: label name, start: begin of each class, count: #data of classes, perm: indices to the original data + // perm, length l, must be allocated before calling this subroutine + static void svm_group_classes(const svm_problem *prob, int *nr_class_ret, int **label_ret, int **start_ret, int **count_ret, int *perm) + { + int l = prob->l; + int max_nr_class = 16; + int nr_class = 0; + int *label = Malloc(int,max_nr_class); + int *count = Malloc(int,max_nr_class); + int *data_label = Malloc(int,l); + int i; + + for(i=0;i<l;i++) + { + int this_label = (int)prob->y[i]; + int j; + for(j=0;j<nr_class;j++) + { + if(this_label == label[j]) + { + ++count[j]; + break; + } + } + data_label[i] = j; + if(j == nr_class) + { + if(nr_class == max_nr_class) + { + max_nr_class *= 2; + label = (int *)realloc(label,max_nr_class*sizeof(int)); + count = (int *)realloc(count,max_nr_class*sizeof(int)); + } + label[nr_class] = this_label; + count[nr_class] = 1; + ++nr_class; + } + } + + // + // Labels are ordered by their first occurrence in the training set. + // However, for two-class sets with -1/+1 labels and -1 appears first, + // we swap labels to ensure that internally the binary SVM has positive data corresponding to the +1 instances. + // + if (nr_class == 2 && label[0] == -1 && label[1] == 1) + { + swap(label[0],label[1]); + swap(count[0],count[1]); + for(i=0;i<l;i++) + { + if(data_label[i] == 0) + data_label[i] = 1; + else + data_label[i] = 0; + } + } + + int *start = Malloc(int,nr_class); + start[0] = 0; + for(i=1;i<nr_class;i++) + start[i] = start[i-1]+count[i-1]; + for(i=0;i<l;i++) + { + perm[start[data_label[i]]] = i; + ++start[data_label[i]]; + } + start[0] = 0; + for(i=1;i<nr_class;i++) + start[i] = start[i-1]+count[i-1]; + + *nr_class_ret = nr_class; + *label_ret = label; + *start_ret = start; + *count_ret = count; + free(data_label); + } + + // + // Interface functions + // + svm_model *svm_train(const svm_problem *prob, const svm_parameter *param) + { + svm_model *model = Malloc(svm_model,1); + model->param = *param; + model->free_sv = 0; // XXX + + if(param->svm_type == ONE_CLASS || + param->svm_type == EPSILON_SVR || + param->svm_type == NU_SVR) + { + // regression or one-class-svm + model->nr_class = 2; + model->label = NULL; + model->nSV = NULL; + model->probA = NULL; model->probB = NULL; + model->sv_coef = Malloc(double *,1); + + if(param->probability && + (param->svm_type == EPSILON_SVR || + param->svm_type == NU_SVR)) + { + model->probA = Malloc(double,1); + model->probA[0] = svm_svr_probability(prob,param); + } + + decision_function f = svm_train_one(prob,param,0,0); + model->rho = Malloc(double,1); + model->rho[0] = f.rho; + + int nSV = 0; + int i; + for(i=0;i<prob->l;i++) + if(fabs(f.alpha[i]) > 0) ++nSV; + model->l = nSV; + model->SV = Malloc(svm_node *,nSV); + model->sv_coef[0] = Malloc(double,nSV); + model->sv_indices = Malloc(int,nSV); + int j = 0; + for(i=0;i<prob->l;i++) + if(fabs(f.alpha[i]) > 0) + { + model->SV[j] = prob->x[i]; + model->sv_coef[0][j] = f.alpha[i]; + model->sv_indices[j] = i+1; + ++j; + } + + free(f.alpha); + } + else + { + // classification + int l = prob->l; + int nr_class; + int *label = NULL; + int *start = NULL; + int *count = NULL; + int *perm = Malloc(int,l); + + // group training data of the same class + svm_group_classes(prob,&nr_class,&label,&start,&count,perm); + if(nr_class == 1) + info("WARNING: training data in only one class. See README for details.\n"); + + svm_node **x = Malloc(svm_node *,l); + int i; + for(i=0;i<l;i++) + x[i] = prob->x[perm[i]]; + + // calculate weighted C + + double *weighted_C = Malloc(double, nr_class); + for(i=0;i<nr_class;i++) + weighted_C[i] = param->C; + for(i=0;i<param->nr_weight;i++) + { + int j; + for(j=0;j<nr_class;j++) + if(param->weight_label[i] == label[j]) + break; + if(j == nr_class) + fprintf(stderr,"WARNING: class label %d specified in weight is not found\n", param->weight_label[i]); + else + weighted_C[j] *= param->weight[i]; + } + + // train k*(k-1)/2 models + + bool *nonzero = Malloc(bool,l); + for(i=0;i<l;i++) + nonzero[i] = false; + decision_function *f = Malloc(decision_function,nr_class*(nr_class-1)/2); + + double *probA=NULL,*probB=NULL; + if (param->probability) + { + probA=Malloc(double,nr_class*(nr_class-1)/2); + probB=Malloc(double,nr_class*(nr_class-1)/2); + } + + int p = 0; + for(i=0;i<nr_class;i++) + for(int j=i+1;j<nr_class;j++) + { + svm_problem sub_prob; + int si = start[i], sj = start[j]; + int ci = count[i], cj = count[j]; + sub_prob.l = ci+cj; + sub_prob.x = Malloc(svm_node *,sub_prob.l); + sub_prob.y = Malloc(double,sub_prob.l); + int k; + for(k=0;k<ci;k++) + { + sub_prob.x[k] = x[si+k]; + sub_prob.y[k] = +1; + } + for(k=0;k<cj;k++) + { + sub_prob.x[ci+k] = x[sj+k]; + sub_prob.y[ci+k] = -1; + } + + if(param->probability) + svm_binary_svc_probability(&sub_prob,param,weighted_C[i],weighted_C[j],probA[p],probB[p]); + + f[p] = svm_train_one(&sub_prob,param,weighted_C[i],weighted_C[j]); + for(k=0;k<ci;k++) + if(!nonzero[si+k] && fabs(f[p].alpha[k]) > 0) + nonzero[si+k] = true; + for(k=0;k<cj;k++) + if(!nonzero[sj+k] && fabs(f[p].alpha[ci+k]) > 0) + nonzero[sj+k] = true; + free(sub_prob.x); + free(sub_prob.y); + ++p; + } + + // build output + + model->nr_class = nr_class; + + model->label = Malloc(int,nr_class); + for(i=0;i<nr_class;i++) + model->label[i] = label[i]; + + model->rho = Malloc(double,nr_class*(nr_class-1)/2); + for(i=0;i<nr_class*(nr_class-1)/2;i++) + model->rho[i] = f[i].rho; + + if(param->probability) + { + model->probA = Malloc(double,nr_class*(nr_class-1)/2); + model->probB = Malloc(double,nr_class*(nr_class-1)/2); + for(i=0;i<nr_class*(nr_class-1)/2;i++) + { + model->probA[i] = probA[i]; + model->probB[i] = probB[i]; + } + } + else + { + model->probA=NULL; + model->probB=NULL; + } + + int total_sv = 0; + int *nz_count = Malloc(int,nr_class); + model->nSV = Malloc(int,nr_class); + for(i=0;i<nr_class;i++) + { + int nSV = 0; + for(int j=0;j<count[i];j++) + if(nonzero[start[i]+j]) + { + ++nSV; + ++total_sv; + } + model->nSV[i] = nSV; + nz_count[i] = nSV; + } + + info("Total nSV = %d\n",total_sv); + + model->l = total_sv; + model->SV = Malloc(svm_node *,total_sv); + model->sv_indices = Malloc(int,total_sv); + p = 0; + for(i=0;i<l;i++) + if(nonzero[i]) + { + model->SV[p] = x[i]; + model->sv_indices[p++] = perm[i] + 1; + } + + int *nz_start = Malloc(int,nr_class); + nz_start[0] = 0; + for(i=1;i<nr_class;i++) + nz_start[i] = nz_start[i-1]+nz_count[i-1]; + + model->sv_coef = Malloc(double *,nr_class-1); + for(i=0;i<nr_class-1;i++) + model->sv_coef[i] = Malloc(double,total_sv); + + p = 0; + for(i=0;i<nr_class;i++) + for(int j=i+1;j<nr_class;j++) + { + // classifier (i,j): coefficients with + // i are in sv_coef[j-1][nz_start[i]...], + // j are in sv_coef[i][nz_start[j]...] + + int si = start[i]; + int sj = start[j]; + int ci = count[i]; + int cj = count[j]; + + int q = nz_start[i]; + int k; + for(k=0;k<ci;k++) + if(nonzero[si+k]) + model->sv_coef[j-1][q++] = f[p].alpha[k]; + q = nz_start[j]; + for(k=0;k<cj;k++) + if(nonzero[sj+k]) + model->sv_coef[i][q++] = f[p].alpha[ci+k]; + ++p; + } + + free(label); + free(probA); + free(probB); + free(count); + free(perm); + free(start); + free(x); + free(weighted_C); + free(nonzero); + for(i=0;i<nr_class*(nr_class-1)/2;i++) + free(f[i].alpha); + free(f); + free(nz_count); + free(nz_start); + } + return model; + } + + // Stratified cross validation + void svm_cross_validation(const svm_problem *prob, const svm_parameter *param, int nr_fold, double *target) + { + int i; + int *fold_start; + int l = prob->l; + int *perm = Malloc(int,l); + int nr_class; + if (nr_fold > l) + { + nr_fold = l; + fprintf(stderr,"WARNING: # folds > # data. Will use # folds = # data instead (i.e., leave-one-out cross validation)\n"); + } + fold_start = Malloc(int,nr_fold+1); + // stratified cv may not give leave-one-out rate + // Each class to l folds -> some folds may have zero elements + if((param->svm_type == C_SVC || + param->svm_type == NU_SVC) && nr_fold < l) + { + int *start = NULL; + int *label = NULL; + int *count = NULL; + svm_group_classes(prob,&nr_class,&label,&start,&count,perm); + + // random shuffle and then data grouped by fold using the array perm + int *fold_count = Malloc(int,nr_fold); + int c; + int *index = Malloc(int,l); + for(i=0;i<l;i++) + index[i]=perm[i]; + for (c=0; c<nr_class; c++) + for(i=0;i<count[c];i++) + { + int j = i+rand()%(count[c]-i); + swap(index[start[c]+j],index[start[c]+i]); + } + for(i=0;i<nr_fold;i++) + { + fold_count[i] = 0; + for (c=0; c<nr_class;c++) + fold_count[i]+=(i+1)*count[c]/nr_fold-i*count[c]/nr_fold; + } + fold_start[0]=0; + for (i=1;i<=nr_fold;i++) + fold_start[i] = fold_start[i-1]+fold_count[i-1]; + for (c=0; c<nr_class;c++) + for(i=0;i<nr_fold;i++) + { + int begin = start[c]+i*count[c]/nr_fold; + int end = start[c]+(i+1)*count[c]/nr_fold; + for(int j=begin;j<end;j++) + { + perm[fold_start[i]] = index[j]; + fold_start[i]++; + } + } + fold_start[0]=0; + for (i=1;i<=nr_fold;i++) + fold_start[i] = fold_start[i-1]+fold_count[i-1]; + free(start); + free(label); + free(count); + free(index); + free(fold_count); + } + else + { + for(i=0;i<l;i++) perm[i]=i; + for(i=0;i<l;i++) + { + int j = i+rand()%(l-i); + swap(perm[i],perm[j]); + } + for(i=0;i<=nr_fold;i++) + fold_start[i]=i*l/nr_fold; + } + + for(i=0;i<nr_fold;i++) + { + int begin = fold_start[i]; + int end = fold_start[i+1]; + int j,k; + struct svm_problem subprob; + + subprob.l = l-(end-begin); + subprob.x = Malloc(struct svm_node*,subprob.l); + subprob.y = Malloc(double,subprob.l); + + k=0; + for(j=0;j<begin;j++) + { + subprob.x[k] = prob->x[perm[j]]; + subprob.y[k] = prob->y[perm[j]]; + ++k; + } + for(j=end;j<l;j++) + { + subprob.x[k] = prob->x[perm[j]]; + subprob.y[k] = prob->y[perm[j]]; + ++k; + } + struct svm_model *submodel = svm_train(&subprob,param); + if(param->probability && + (param->svm_type == C_SVC || param->svm_type == NU_SVC)) + { + double *prob_estimates=Malloc(double,svm_get_nr_class(submodel)); + for(j=begin;j<end;j++) + target[perm[j]] = svm_predict_probability(submodel,prob->x[perm[j]],prob_estimates); + free(prob_estimates); + } + else + for(j=begin;j<end;j++) + target[perm[j]] = svm_predict(submodel,prob->x[perm[j]]); + svm_free_and_destroy_model(&submodel); + free(subprob.x); + free(subprob.y); + } + free(fold_start); + free(perm); + } + + + int svm_get_svm_type(const svm_model *model) + { + return model->param.svm_type; + } + + int svm_get_nr_class(const svm_model *model) + { + return model->nr_class; + } + + void svm_get_labels(const svm_model *model, int* label) + { + if (model->label != NULL) + for(int i=0;i<model->nr_class;i++) + label[i] = model->label[i]; + } + + void svm_get_sv_indices(const svm_model *model, int* indices) + { + if (model->sv_indices != NULL) + for(int i=0;i<model->l;i++) + indices[i] = model->sv_indices[i]; + } + + int svm_get_nr_sv(const svm_model *model) + { + return model->l; + } + + double svm_get_svr_probability(const svm_model *model) + { + if ((model->param.svm_type == EPSILON_SVR || model->param.svm_type == NU_SVR) && + model->probA!=NULL) + return model->probA[0]; + else + { + fprintf(stderr,"Model doesn't contain information for SVR probability inference\n"); + return 0; + } + } + + double svm_predict_values(const svm_model *model, const svm_node *x, double* dec_values) + { + int i; + if(model->param.svm_type == ONE_CLASS || + model->param.svm_type == EPSILON_SVR || + model->param.svm_type == NU_SVR) + { + double *sv_coef = model->sv_coef[0]; + double sum = 0; + for(i=0;i<model->l;i++) + sum += sv_coef[i] * Kernel::k_function(x,model->SV[i],model->param); + sum -= model->rho[0]; + *dec_values = sum; + + if(model->param.svm_type == ONE_CLASS) + return (sum>0)?1:-1; + else + return sum; + } + else + { + int nr_class = model->nr_class; + int l = model->l; + + double *kvalue = Malloc(double,l); + for(i=0;i<l;i++) + kvalue[i] = Kernel::k_function(x,model->SV[i],model->param); + + int *start = Malloc(int,nr_class); + start[0] = 0; + for(i=1;i<nr_class;i++) + start[i] = start[i-1]+model->nSV[i-1]; + + int *vote = Malloc(int,nr_class); + for(i=0;i<nr_class;i++) + vote[i] = 0; + + int p=0; + for(i=0;i<nr_class;i++) + for(int j=i+1;j<nr_class;j++) + { + double sum = 0; + int si = start[i]; + int sj = start[j]; + int ci = model->nSV[i]; + int cj = model->nSV[j]; + + int k; + double *coef1 = model->sv_coef[j-1]; + double *coef2 = model->sv_coef[i]; + for(k=0;k<ci;k++) + sum += coef1[si+k] * kvalue[si+k]; + for(k=0;k<cj;k++) + sum += coef2[sj+k] * kvalue[sj+k]; + sum -= model->rho[p]; + dec_values[p] = sum; + + if(dec_values[p] > 0) + ++vote[i]; + else + ++vote[j]; + p++; + } + + int vote_max_idx = 0; + for(i=1;i<nr_class;i++) + if(vote[i] > vote[vote_max_idx]) + vote_max_idx = i; + + free(kvalue); + free(start); + free(vote); + return model->label[vote_max_idx]; + } + } + + double svm_predict(const svm_model *model, const svm_node *x) + { + int nr_class = model->nr_class; + double *dec_values; + if(model->param.svm_type == ONE_CLASS || + model->param.svm_type == EPSILON_SVR || + model->param.svm_type == NU_SVR) + dec_values = Malloc(double, 1); + else + dec_values = Malloc(double, nr_class*(nr_class-1)/2); + double pred_result = svm_predict_values(model, x, dec_values); + free(dec_values); + return pred_result; + } + + double svm_predict_probability( + const svm_model *model, const svm_node *x, double *prob_estimates) + { + if ((model->param.svm_type == C_SVC || model->param.svm_type == NU_SVC) && + model->probA!=NULL && model->probB!=NULL) + { + int i; + int nr_class = model->nr_class; + double *dec_values = Malloc(double, nr_class*(nr_class-1)/2); + svm_predict_values(model, x, dec_values); + + double min_prob=1e-7; + double **pairwise_prob=Malloc(double *,nr_class); + for(i=0;i<nr_class;i++) + pairwise_prob[i]=Malloc(double,nr_class); + int k=0; + for(i=0;i<nr_class;i++) + for(int j=i+1;j<nr_class;j++) + { + pairwise_prob[i][j]=min(max(sigmoid_predict(dec_values[k],model->probA[k],model->probB[k]),min_prob),1-min_prob); + pairwise_prob[j][i]=1-pairwise_prob[i][j]; + k++; + } + if (nr_class == 2) + { + prob_estimates[0] = pairwise_prob[0][1]; + prob_estimates[1] = pairwise_prob[1][0]; + } + else + multiclass_probability(nr_class,pairwise_prob,prob_estimates); + + int prob_max_idx = 0; + for(i=1;i<nr_class;i++) + if(prob_estimates[i] > prob_estimates[prob_max_idx]) + prob_max_idx = i; + for(i=0;i<nr_class;i++) + free(pairwise_prob[i]); + free(dec_values); + free(pairwise_prob); + return model->label[prob_max_idx]; + } + else + return svm_predict(model, x); + } + + static const char *svm_type_table[] = + { + "c_svc","nu_svc","one_class","epsilon_svr","nu_svr",NULL + }; + + static const char *kernel_type_table[]= + { + "linear","polynomial","rbf","sigmoid","precomputed",NULL + }; + + int svm_save_model(const char *model_file_name, const svm_model *model) + { + FILE *fp = fopen(model_file_name,"w"); + if(fp==NULL) return -1; + + char *old_locale = setlocale(LC_ALL, NULL); + if (old_locale) { + old_locale = strdup(old_locale); + } + setlocale(LC_ALL, "C"); + + const svm_parameter& param = model->param; + + fprintf(fp,"svm_type %s\n", svm_type_table[param.svm_type]); + fprintf(fp,"kernel_type %s\n", kernel_type_table[param.kernel_type]); + + if(param.kernel_type == POLY) + fprintf(fp,"degree %d\n", param.degree); + + if(param.kernel_type == POLY || param.kernel_type == RBF || param.kernel_type == SIGMOID) + fprintf(fp,"gamma %g\n", param.gamma); + + if(param.kernel_type == POLY || param.kernel_type == SIGMOID) + fprintf(fp,"coef0 %g\n", param.coef0); + + int nr_class = model->nr_class; + int l = model->l; + fprintf(fp, "nr_class %d\n", nr_class); + fprintf(fp, "total_sv %d\n",l); + + { + fprintf(fp, "rho"); + for(int i=0;i<nr_class*(nr_class-1)/2;i++) + fprintf(fp," %g",model->rho[i]); + fprintf(fp, "\n"); + } + + if(model->label) + { + fprintf(fp, "label"); + for(int i=0;i<nr_class;i++) + fprintf(fp," %d",model->label[i]); + fprintf(fp, "\n"); + } + + if(model->probA) // regression has probA only + { + fprintf(fp, "probA"); + for(int i=0;i<nr_class*(nr_class-1)/2;i++) + fprintf(fp," %g",model->probA[i]); + fprintf(fp, "\n"); + } + if(model->probB) + { + fprintf(fp, "probB"); + for(int i=0;i<nr_class*(nr_class-1)/2;i++) + fprintf(fp," %g",model->probB[i]); + fprintf(fp, "\n"); + } + + if(model->nSV) + { + fprintf(fp, "nr_sv"); + for(int i=0;i<nr_class;i++) + fprintf(fp," %d",model->nSV[i]); + fprintf(fp, "\n"); + } + + fprintf(fp, "SV\n"); + const double * const *sv_coef = model->sv_coef; + const svm_node * const *SV = model->SV; + + for(int i=0;i<l;i++) + { + for(int j=0;j<nr_class-1;j++) + fprintf(fp, "%.16g ",sv_coef[j][i]); + + const svm_node *p = SV[i]; + + if(param.kernel_type == PRECOMPUTED) + fprintf(fp,"0:%d ",(int)(p->value)); + else + while(p->index != -1) + { + fprintf(fp,"%d:%.8g ",p->index,p->value); + p++; + } + fprintf(fp, "\n"); + } + + setlocale(LC_ALL, old_locale); + free(old_locale); + + if (ferror(fp) != 0 || fclose(fp) != 0) return -1; + else return 0; + } + + static char *line = NULL; + static int max_line_len; + + static char* readline(FILE *input) + { + int len; + + if(fgets(line,max_line_len,input) == NULL) + return NULL; + + while(strrchr(line,'\n') == NULL) + { + max_line_len *= 2; + line = (char *) realloc(line,max_line_len); + len = (int) strlen(line); + if(fgets(line+len,max_line_len-len,input) == NULL) + break; + } + return line; + } + + // + // FSCANF helps to handle fscanf failures. + // Its do-while block avoids the ambiguity when + // if (...) + // FSCANF(); + // is used + // +#define FSCANF(_stream, _format, _var) do{ if (fscanf(_stream, _format, _var) != 1) return false; }while(0) + bool read_model_header(FILE *fp, svm_model* model) + { + svm_parameter& param = model->param; + // parameters for training only won't be assigned, but arrays are assigned as NULL for safety + param.nr_weight = 0; + param.weight_label = NULL; + param.weight = NULL; + + char cmd[81]; + while(1) + { + FSCANF(fp,"%80s",cmd); + + if(strcmp(cmd,"svm_type")==0) + { + FSCANF(fp,"%80s",cmd); + int i; + for(i=0;svm_type_table[i];i++) + { + if(strcmp(svm_type_table[i],cmd)==0) + { + param.svm_type=i; + break; + } + } + if(svm_type_table[i] == NULL) + { + fprintf(stderr,"unknown svm type.\n"); + return false; + } + } + else if(strcmp(cmd,"kernel_type")==0) + { + FSCANF(fp,"%80s",cmd); + int i; + for(i=0;kernel_type_table[i];i++) + { + if(strcmp(kernel_type_table[i],cmd)==0) + { + param.kernel_type=i; + break; + } + } + if(kernel_type_table[i] == NULL) + { + fprintf(stderr,"unknown kernel function.\n"); + return false; + } + } + else if(strcmp(cmd,"degree")==0) + FSCANF(fp,"%d",¶m.degree); + else if(strcmp(cmd,"gamma")==0) + FSCANF(fp,"%lf",¶m.gamma); + else if(strcmp(cmd,"coef0")==0) + FSCANF(fp,"%lf",¶m.coef0); + else if(strcmp(cmd,"nr_class")==0) + FSCANF(fp,"%d",&model->nr_class); + else if(strcmp(cmd,"total_sv")==0) + FSCANF(fp,"%d",&model->l); + else if(strcmp(cmd,"rho")==0) + { + int n = model->nr_class * (model->nr_class-1)/2; + model->rho = Malloc(double,n); + for(int i=0;i<n;i++) + FSCANF(fp,"%lf",&model->rho[i]); + } + else if(strcmp(cmd,"label")==0) + { + int n = model->nr_class; + model->label = Malloc(int,n); + for(int i=0;i<n;i++) + FSCANF(fp,"%d",&model->label[i]); + } + else if(strcmp(cmd,"probA")==0) + { + int n = model->nr_class * (model->nr_class-1)/2; + model->probA = Malloc(double,n); + for(int i=0;i<n;i++) + FSCANF(fp,"%lf",&model->probA[i]); + } + else if(strcmp(cmd,"probB")==0) + { + int n = model->nr_class * (model->nr_class-1)/2; + model->probB = Malloc(double,n); + for(int i=0;i<n;i++) + FSCANF(fp,"%lf",&model->probB[i]); + } + else if(strcmp(cmd,"nr_sv")==0) + { + int n = model->nr_class; + model->nSV = Malloc(int,n); + for(int i=0;i<n;i++) + FSCANF(fp,"%d",&model->nSV[i]); + } + else if(strcmp(cmd,"SV")==0) + { + while(1) + { + int c = getc(fp); + if(c==EOF || c=='\n') break; + } + break; + } + else + { + fprintf(stderr,"unknown text in model file: [%s]\n",cmd); + return false; + } + } + + return true; + + } + + svm_model *svm_load_model(const char *model_file_name) + { + FILE *fp = fopen(model_file_name,"rb"); + if(fp==NULL) return NULL; + + char *old_locale = setlocale(LC_ALL, NULL); + if (old_locale) { + old_locale = strdup(old_locale); + } + setlocale(LC_ALL, "C"); + + // read parameters + + svm_model *model = Malloc(svm_model,1); + model->rho = NULL; + model->probA = NULL; + model->probB = NULL; + model->sv_indices = NULL; + model->label = NULL; + model->nSV = NULL; + + // read header + if (!read_model_header(fp, model)) + { + fprintf(stderr, "ERROR: fscanf failed to read model\n"); + setlocale(LC_ALL, old_locale); + free(old_locale); + free(model->rho); + free(model->label); + free(model->nSV); + free(model); + return NULL; + } + + // read sv_coef and SV + + int elements = 0; + long pos = ftell(fp); + + max_line_len = 1024; + line = Malloc(char,max_line_len); + char *p,*endptr,*idx,*val; + + while(readline(fp)!=NULL) + { + p = strtok(line,":"); + while(1) + { + p = strtok(NULL,":"); + if(p == NULL) + break; + ++elements; + } + } + elements += model->l; + + fseek(fp,pos,SEEK_SET); + + int m = model->nr_class - 1; + int l = model->l; + model->sv_coef = Malloc(double *,m); + int i; + for(i=0;i<m;i++) + model->sv_coef[i] = Malloc(double,l); + model->SV = Malloc(svm_node*,l); + svm_node *x_space = NULL; + if(l>0) x_space = Malloc(svm_node,elements); + + int j=0; + for(i=0;i<l;i++) + { + readline(fp); + model->SV[i] = &x_space[j]; + + p = strtok(line, " \t"); + model->sv_coef[0][i] = strtod(p,&endptr); + for(int k=1;k<m;k++) + { + p = strtok(NULL, " \t"); + model->sv_coef[k][i] = strtod(p,&endptr); + } + + while(1) + { + idx = strtok(NULL, ":"); + val = strtok(NULL, " \t"); + + if(val == NULL) + break; + x_space[j].index = (int) strtol(idx,&endptr,10); + x_space[j].value = strtod(val,&endptr); + + ++j; + } + x_space[j++].index = -1; + } + free(line); + + setlocale(LC_ALL, old_locale); + free(old_locale); + + if (ferror(fp) != 0 || fclose(fp) != 0) + return NULL; + + model->free_sv = 1; // XXX + return model; + } + + void svm_free_model_content(svm_model* model_ptr) + { + if(model_ptr->free_sv && model_ptr->l > 0 && model_ptr->SV != NULL) + free((void *)(model_ptr->SV[0])); + if(model_ptr->sv_coef) + { + for(int i=0;i<model_ptr->nr_class-1;i++) + free(model_ptr->sv_coef[i]); + } + + free(model_ptr->SV); + model_ptr->SV = NULL; + + free(model_ptr->sv_coef); + model_ptr->sv_coef = NULL; + + free(model_ptr->rho); + model_ptr->rho = NULL; + + free(model_ptr->label); + model_ptr->label= NULL; + + free(model_ptr->probA); + model_ptr->probA = NULL; + + free(model_ptr->probB); + model_ptr->probB= NULL; + + free(model_ptr->sv_indices); + model_ptr->sv_indices = NULL; + + free(model_ptr->nSV); + model_ptr->nSV = NULL; + } + + void svm_free_and_destroy_model(svm_model** model_ptr_ptr) + { + if(model_ptr_ptr != NULL && *model_ptr_ptr != NULL) + { + svm_free_model_content(*model_ptr_ptr); + free(*model_ptr_ptr); + *model_ptr_ptr = NULL; + } + } + + void svm_destroy_param(svm_parameter* param) + { + free(param->weight_label); + free(param->weight); + } + + const char *svm_check_parameter(const svm_problem *prob, const svm_parameter *param) + { + // svm_type + + int svm_type = param->svm_type; + if(svm_type != C_SVC && + svm_type != NU_SVC && + svm_type != ONE_CLASS && + svm_type != EPSILON_SVR && + svm_type != NU_SVR) + return "unknown svm type"; + + // kernel_type, degree + + int kernel_type = param->kernel_type; + if(kernel_type != LINEAR && + kernel_type != POLY && + kernel_type != RBF && + kernel_type != SIGMOID && + kernel_type != PRECOMPUTED) + return "unknown kernel type"; + + if(param->gamma < 0) + return "gamma < 0"; + + if(param->degree < 0) + return "degree of polynomial kernel < 0"; + + // cache_size,eps,C,nu,p,shrinking + + if(param->cache_size <= 0) + return "cache_size <= 0"; + + if(param->eps <= 0) + return "eps <= 0"; + + if(svm_type == C_SVC || + svm_type == EPSILON_SVR || + svm_type == NU_SVR) + if(param->C <= 0) + return "C <= 0"; + + if(svm_type == NU_SVC || + svm_type == ONE_CLASS || + svm_type == NU_SVR) + if(param->nu <= 0 || param->nu > 1) + return "nu <= 0 or nu > 1"; + + if(svm_type == EPSILON_SVR) + if(param->p < 0) + return "p < 0"; + + if(param->shrinking != 0 && + param->shrinking != 1) + return "shrinking != 0 and shrinking != 1"; + + if(param->probability != 0 && + param->probability != 1) + return "probability != 0 and probability != 1"; + + if(param->probability == 1 && + svm_type == ONE_CLASS) + return "one-class SVM probability output not supported yet"; + + + // check whether nu-svc is feasible + + if(svm_type == NU_SVC) + { + int l = prob->l; + int max_nr_class = 16; + int nr_class = 0; + int *label = Malloc(int,max_nr_class); + int *count = Malloc(int,max_nr_class); + + int i; + for(i=0;i<l;i++) + { + int this_label = (int)prob->y[i]; + int j; + for(j=0;j<nr_class;j++) + if(this_label == label[j]) + { + ++count[j]; + break; + } + if(j == nr_class) + { + if(nr_class == max_nr_class) + { + max_nr_class *= 2; + label = (int *)realloc(label,max_nr_class*sizeof(int)); + count = (int *)realloc(count,max_nr_class*sizeof(int)); + } + label[nr_class] = this_label; + count[nr_class] = 1; + ++nr_class; + } + } + + for(i=0;i<nr_class;i++) + { + int n1 = count[i]; + for(int j=i+1;j<nr_class;j++) + { + int n2 = count[j]; + if(param->nu*(n1+n2)/2 > min(n1,n2)) + { + free(label); + free(count); + return "specified nu is infeasible"; + } + } + } + free(label); + free(count); + } + + return NULL; + } + + int svm_check_probability_model(const svm_model *model) + { + return ((model->param.svm_type == C_SVC || model->param.svm_type == NU_SVC) && + model->probA!=NULL && model->probB!=NULL) || + ((model->param.svm_type == EPSILON_SVR || model->param.svm_type == NU_SVR) && + model->probA!=NULL); + } + + void svm_set_print_string_function(void (*print_func)(const char *)) + { + if(print_func == NULL) + svm_print_string = &print_string_stdout; + else + svm_print_string = print_func; + } +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/libsvm/libsvm.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/libsvm/libsvm.h new file mode 100644 index 0000000..b1f5832 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/dependencies/libsvm/libsvm.h @@ -0,0 +1,108 @@ +#ifndef _LIBSVM_H +#define _LIBSVM_H + +namespace LIBSVM { + +#define LIBSVM_VERSION 322 + +#ifdef __cplusplus + extern "C" { +#endif + + extern int libsvm_version; + + struct svm_node + { + int index; + double value; + }; + + struct svm_problem + { + int l; + double *y; + struct svm_node **x; + }; + + enum { C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR }; /* svm_type */ + enum { LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED }; /* kernel_type */ + + struct svm_parameter + { + int svm_type; + int kernel_type; + int degree; /* for poly */ + double gamma; /* for poly/rbf/sigmoid */ + double coef0; /* for poly/sigmoid */ + + /* these are for training only */ + double cache_size; /* in MB */ + double eps; /* stopping criteria */ + double C; /* for C_SVC, EPSILON_SVR and NU_SVR */ + int nr_weight; /* for C_SVC */ + int *weight_label; /* for C_SVC */ + double* weight; /* for C_SVC */ + double nu; /* for NU_SVC, ONE_CLASS, and NU_SVR */ + double p; /* for EPSILON_SVR */ + int shrinking; /* use the shrinking heuristics */ + int probability; /* do probability estimates */ + }; + + // + // svm_model + // + struct svm_model + { + struct svm_parameter param; /* parameter */ + int nr_class; /* number of classes, = 2 in regression/one class svm */ + int l; /* total #SV */ + struct svm_node **SV; /* SVs (SV[l]) */ + double **sv_coef; /* coefficients for SVs in decision functions (sv_coef[k-1][l]) */ + double *rho; /* constants in decision functions (rho[k*(k-1)/2]) */ + double *probA; /* pariwise probability information */ + double *probB; + int *sv_indices; /* sv_indices[0,...,nSV-1] are values in [1,...,num_traning_data] to indicate SVs in the training set */ + + /* for classification only */ + + int *label; /* label of each class (label[k]) */ + int *nSV; /* number of SVs for each class (nSV[k]) */ + /* nSV[0] + nSV[1] + ... + nSV[k-1] = l */ + /* XXX */ + int free_sv; /* 1 if svm_model is created by svm_load_model*/ + /* 0 if svm_model is created by svm_train */ + }; + + struct svm_model *svm_train(const struct svm_problem *prob, const struct svm_parameter *param); + void svm_cross_validation(const struct svm_problem *prob, const struct svm_parameter *param, int nr_fold, double *target); + + int svm_save_model(const char *model_file_name, const struct svm_model *model); + struct svm_model *svm_load_model(const char *model_file_name); + + int svm_get_svm_type(const struct svm_model *model); + int svm_get_nr_class(const struct svm_model *model); + void svm_get_labels(const struct svm_model *model, int *label); + void svm_get_sv_indices(const struct svm_model *model, int *sv_indices); + int svm_get_nr_sv(const struct svm_model *model); + double svm_get_svr_probability(const struct svm_model *model); + + double svm_predict_values(const struct svm_model *model, const struct svm_node *x, double* dec_values); + double svm_predict(const struct svm_model *model, const struct svm_node *x); + double svm_predict_probability(const struct svm_model *model, const struct svm_node *x, double* prob_estimates); + + void svm_free_model_content(struct svm_model *model_ptr); + void svm_free_and_destroy_model(struct svm_model **model_ptr_ptr); + void svm_destroy_param(struct svm_parameter *param); + + const char *svm_check_parameter(const struct svm_problem *prob, const struct svm_parameter *param); + int svm_check_probability_model(const struct svm_model *model); + + void svm_set_print_string_function(void (*print_func)(const char *)); + +#ifdef __cplusplus + } +#endif + +} + +#endif /* _LIBSVM_H */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/baseModel.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/baseModel.h new file mode 100644 index 0000000..9ca7461 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/baseModel.h @@ -0,0 +1,47 @@ +/** + * @file baseModel.h + * RapidLib + * + * @author Michael Zbyszynski + * @date 5 Sep 2016 + * @copyright Copyright © 2016 Goldsmiths. All rights reserved. + */ + + +#ifndef baseModel_h +#define baseModel_h + +#include <vector> +#include "trainingExample.h" + +#ifndef EMSCRIPTEN +#include "../dependencies/json/json.h" +#endif + +/** Base class for wekinator models. Implemented by NN and KNN classes */ +template<typename T> +class baseModel { +public: + virtual ~baseModel() {}; + virtual T run(const std::vector<T> &inputVector) = 0; + virtual void train(const std::vector<trainingExampleTemplate<T> > &trainingSet) = 0; + virtual void reset() = 0;; + virtual int getNumInputs() const = 0; + virtual std::vector<int> getWhichInputs() const = 0; + +#ifndef EMSCRIPTEN + virtual void getJSONDescription(Json::Value ¤tModel) = 0; + +protected: + template<typename TT> + Json::Value vector2json(TT vec) { + Json::Value toReturn; + for (int i = 0; i < vec.size(); ++i) { + toReturn.append(vec[i]); + } + return toReturn; + } +#endif + +}; +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/classification.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/classification.cpp new file mode 100644 index 0000000..70855e1 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/classification.cpp @@ -0,0 +1,107 @@ +// +// classification.h +// RapidLib +// +// Created by mzed on 26/09/2016. +// Copyright © 2016 Goldsmiths. All rights reserved. +// + + +#include <vector> +#include "classification.h" +#ifdef EMSCRIPTEN +#include "emscripten/classificationEmbindings.h" +#endif + +template<typename T> +classificationTemplate<T>::classificationTemplate() { + modelSet<T>::numInputs = 0; + modelSet<T>::numOutputs = 0; + modelSet<T>::created = false; + classificationType = knn; //this is the default algorithm +}; + +template<typename T> +classificationTemplate<T>::classificationTemplate(classificationTypes classification_type) { + modelSet<T>::numInputs = 0; + modelSet<T>::numOutputs = 0; + modelSet<T>::created = false; + classificationType = classification_type; +}; + +template<typename T> +classificationTemplate<T>::classificationTemplate(const int &num_inputs, const int &num_outputs) { //TODO: this feature isn't really useful + modelSet<T>::numInputs = num_inputs; + modelSet<T>::numOutputs = num_outputs; + modelSet<T>::created = false; + std::vector<int> whichInputs; + for (int i = 0; i < modelSet<T>::numInputs; ++i) { + whichInputs.push_back(i); + } + std::vector<trainingExampleTemplate<T> > trainingSet; + for (int i = 0; i < modelSet<T>::numOutputs; ++i) { + modelSet<T>::myModelSet.push_back(new knnClassification<T>(modelSet<T>::numInputs, whichInputs, trainingSet, 1)); + } + modelSet<T>::created = true; +}; + +template<typename T> +classificationTemplate<T>::classificationTemplate(const std::vector<trainingExampleTemplate<T> > &trainingSet) { + modelSet<T>::numInputs = 0; + modelSet<T>::numOutputs = 0; + modelSet<T>::created = false; + train(trainingSet); +}; + +template<typename T> +bool classificationTemplate<T>::train(const std::vector<trainingExampleTemplate<T> > &trainingSet) { + //TODO: time this process? + modelSet<T>::myModelSet.clear(); + //create model(s) here + modelSet<T>::numInputs = int(trainingSet[0].input.size()); + for (int i = 0; i < modelSet<T>::numInputs; ++i) { + modelSet<T>::inputNames.push_back("inputs-" + std::to_string(i + 1)); + } + modelSet<T>::numOutputs = int(trainingSet[0].output.size()); + for ( auto example : trainingSet) { + if (example.input.size() != modelSet<T>::numInputs) { + return false; + } + if (example.output.size() != modelSet<T>::numOutputs) { + return false; + } + } + std::vector<int> whichInputs; + for (int j = 0; j < modelSet<T>::numInputs; ++j) { + whichInputs.push_back(j); + } + for (int i = 0; i < modelSet<T>::numOutputs; ++i) { + if (classificationType == svm) { + modelSet<T>::myModelSet.push_back(new svmClassification<T>(modelSet<T>::numInputs)); + } else { + modelSet<T>::myModelSet.push_back(new knnClassification<T>(modelSet<T>::numInputs, whichInputs, trainingSet, 1)); + } + } + modelSet<T>::created = true; + return modelSet<T>::train(trainingSet); +} + +template<typename T> +std::vector<int> classificationTemplate<T>::getK() { + std::vector<int> kVector; + for (baseModel<T>* model : modelSet<T>::myModelSet) { + knnClassification<T>* kNNModel = dynamic_cast<knnClassification<T>*>(model); //FIXME: I really dislike this design + kVector.push_back(kNNModel->getK()); + } + return kVector; +} + +template<typename T> +void classificationTemplate<T>::setK(const int whichModel, const int newK) { + knnClassification<T>* kNNModel = dynamic_cast<knnClassification<T>*>(modelSet<T>::myModelSet[whichModel]); //FIXME: I really dislike this design + kNNModel->setK(newK); +} + +//explicit instantiation +template class classificationTemplate<double>; +template class classificationTemplate<float>; diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/classification.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/classification.h new file mode 100644 index 0000000..21ba5ac --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/classification.h @@ -0,0 +1,57 @@ +// +// classification.h +// RapidLib +// +// Created by mzed on 26/09/2016. +// Copyright © 2016 Goldsmiths. All rights reserved. +// + +#ifndef classification_h +#define classification_h + +#include <vector> +#include "modelSet.h" + +/*! Class for implementing a set of classification models. + * + * This doesn't do anything modelSet can't do. But, it's simpler and more like wekinator. + */ + +template<typename T> +class classificationTemplate : public modelSet<T> { +public: + enum classificationTypes { knn, svm }; + + /** with no arguments, just make an empty vector */ + classificationTemplate(); + + /** speciify classification type */ + classificationTemplate(classificationTypes classificationType); + + /** create based on training set inputs and outputs */ + classificationTemplate(const std::vector<trainingExampleTemplate<T> > &trainingSet); + /** create with proper models, but not trained */ + classificationTemplate(const int &numInputs, const int &numOutputs); + + /** destructor */ + ~classificationTemplate() {} + + /** Train on a specified set, causes creation if not created */ + bool train(const std::vector<trainingExampleTemplate<T> > &trainingSet); + + /** Check the K values for each model. This feature is temporary, and will be replaced by a different design. */ + std::vector<int> getK(); + /** Get the K values for each model. This feature is temporary, and will be replaced by a different design. */ + void setK(const int whichModel, const int newK); + + + +private: + classificationTypes classificationType; +}; + +//This is here so that the old API still works as expected. +using classification = classificationTemplate<double>; +using classificationFloat = classificationTemplate<float>; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/dtw.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/dtw.cpp new file mode 100644 index 0000000..da4b5e0 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/dtw.cpp @@ -0,0 +1,153 @@ +/** + * @file dtw.cpp + * RapidLib + * + * @author Michael Zbyszynski + * @date 07 Jun 2017 + * @copyright Copyright © 2017 Goldsmiths. All rights reserved. + */ + +#include <vector> +#include <cmath> +#include <cassert> +#include "dtw.h" + +template<typename T> +dtw<T>::dtw() {}; + +template<typename T> +dtw<T>::~dtw() {}; + +template<typename T> +inline T dtw<T>::distanceFunction(const std::vector<T> &x, const std::vector<T> &y) { + assert(x.size() == y.size()); + T euclidianDistance = 0; + for(int j = 0; j < x.size() ; ++j){ + euclidianDistance = euclidianDistance + pow((x[j] - y[j]), 2); + } + euclidianDistance = sqrt(euclidianDistance); + return euclidianDistance; +}; + +/* Just returns the cost, doesn't calculate the path */ +template<typename T> +T dtw<T>::getCost(const std::vector<std::vector<T> > &seriesX, const std::vector<std::vector<T> > &seriesY) { + if (seriesX.size() < seriesY.size()) { + return getCost(seriesY, seriesX); + } + + costMatrix.clear(); + for (int i = 0; i < seriesX.size(); ++i) { + std::vector<T> tempVector; + for (int j = 0; j < seriesY.size(); ++j) { + tempVector.push_back(0); + } + costMatrix.push_back(tempVector); + } + int maxX = int(seriesX.size()) - 1; + int maxY = int(seriesY.size()) - 1; + + //Calculate values for the first column + costMatrix[0][0] = distanceFunction(seriesX[0], seriesY[0]); + for (int j = 1; j <= maxY; ++j) { + costMatrix[0][j] = costMatrix[0][j - 1] + distanceFunction(seriesX[0], seriesY[j]); + } + + for (int i = 1; i <= maxX; ++i) { + //Bottom row of current column + costMatrix[i][0] = costMatrix[i - 1][0] + distanceFunction(seriesX[i], seriesY[0]); + for (int j = 1; j <= maxY; ++j) { + T minGlobalCost = fmin(costMatrix[i-1][j-1], costMatrix[i][j-1]); + costMatrix[i][j] = minGlobalCost + distanceFunction(seriesX[i], seriesY[j]); + } + } + return costMatrix[maxX][maxY]; +}; + +template<typename T> +warpPath dtw<T>::calculatePath(int seriesXsize, int seriesYsize) { + warpPath warpPath; + int i = seriesXsize - 1; + int j = seriesYsize - 1; + warpPath.add(i, j); + + while ((i > 0) || (j > 0)) { + T diagonalCost = std::numeric_limits<T>::infinity(); + T leftCost = std::numeric_limits<T>::infinity(); + T downCost = std::numeric_limits<T>::infinity(); + if ((i > 0) && (j > 0)) { + diagonalCost = costMatrix[i - 1][j - 1]; + } + if (i > 0) { + leftCost = costMatrix[i - 1][j]; + } + if (j > 0) { + downCost = costMatrix[i][j - 1]; + } + if ((diagonalCost <= leftCost) && (diagonalCost <= downCost)) { + i--; + j--; + } else if ((leftCost < diagonalCost) && (leftCost < downCost)){ + i--; + } else if ((downCost < diagonalCost) && (downCost < leftCost)) { + j--; + } else if (i <= j) { + j--; + } else { + i--; + } + warpPath.add(i, j); + } + return warpPath; +}; + +/* calculates both the cost and the warp path*/ +template<typename T> +warpInfo dtw<T>::dynamicTimeWarp(const std::vector<std::vector<T> > &seriesX, const std::vector<std::vector<T> > &seriesY) { + warpInfo info; + //calculate cost matrix + info.cost = getCost(seriesX, seriesY); + info.path = calculatePath(int(seriesX.size()), int(seriesY.size())); + return info; +} + +/* calculates warp info based on window */ +template<typename T> +warpInfo dtw<T>::constrainedDTW(const std::vector<std::vector<T> > &seriesX, const std::vector<std::vector<T> > &seriesY, searchWindow<T> window) { + + //initialize cost matrix + costMatrix.clear(); + for (int i = 0; i < seriesX.size(); ++i) { //TODO: this could be smaller, since most cells are unused + std::vector<T> tempVector; + for (int j = 0; j < seriesY.size(); ++j) { + tempVector.push_back(std::numeric_limits<T>::max()); + } + costMatrix.push_back(tempVector); + } + int maxX = int(seriesX.size()) - 1; + int maxY = int(seriesY.size()) - 1; + + //fill cost matrix cells based on window + for (int currentX = 0; currentX < window.minValues.size(); ++currentX) { + for (int currentY = window.minValues[currentX]; currentY <= window.maxValues[currentX]; ++currentY) { //FIXME: should be <= ? + if (currentX == 0 && currentY == 0) { //bottom left cell + costMatrix[0][0] = distanceFunction(seriesX[0], seriesY[0]); + } else if (currentX == 0) { //first column + costMatrix[0][currentY] = distanceFunction(seriesX[0], seriesY[currentY]) + costMatrix[0][currentY - 0]; + } else if (currentY == 0) { //first row + costMatrix[currentX][0] = distanceFunction(seriesX[currentX], seriesY[0]) + costMatrix[currentX - 1][0]; + } else { + T minGlobalCost = fmin(costMatrix[currentX - 1][currentY], fmin(costMatrix[currentX-1][currentY-1], costMatrix[currentX][currentY-1])); + costMatrix[currentX][currentY] = distanceFunction(seriesX[currentX], seriesY[currentY]) + minGlobalCost; + } + } + } + warpInfo info; + info.cost = costMatrix[maxX][maxY]; + info.path = calculatePath(int(seriesX.size()), int(seriesY.size())); + return info; +} + +//explicit instantiation +template class dtw<double>; +template class dtw<float>; diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/dtw.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/dtw.h new file mode 100644 index 0000000..a93e25b --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/dtw.h @@ -0,0 +1,38 @@ +/** + * @file dtw.h + * RapidLib + * + * @author Michael Zbyszynski + * @date 07 Jun 2017 + * @copyright Copyright © 2017 Goldsmiths. All rights reserved. + */ + +#ifndef dtw_h +#define dtw_h + +#include <vector> +#include "warpPath.h" +#include "searchWindow.h" + +template<typename T> +class dtw { +public: + dtw(); + ~dtw(); + + /* Calculates and returns a simple cost value between two input series */ + T getCost(const std::vector<std::vector<T>> &seriesX, const std::vector<std::vector<T > > &seriesY); + + /* Calculates both cost and the warp path */ + warpInfo dynamicTimeWarp(const std::vector<std::vector<T> > &seriesX, const std::vector<std::vector<T> > &seriesY); //This returns everything, including a path + + /* Calculates both the cost and the warp path, with a given window as a constraint */ + warpInfo constrainedDTW(const std::vector<std::vector<T> > &seriesX, const std::vector<std::vector<T> > &seriesY, searchWindow<T> window); //This takes a window object + +private: + inline T distanceFunction(const std::vector<T> &pointX, const std::vector<T> &point); + std::vector<std::vector<T> > costMatrix; + warpPath calculatePath(int seriesXsize, int seriesYsize); +}; + +#endif /* dtw_h */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/classificationEmbindings.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/classificationEmbindings.h new file mode 100644 index 0000000..ba4be9a --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/classificationEmbindings.h @@ -0,0 +1,34 @@ +// +// classificationEmbindings.cpp +// RapidLib +// +// Created by mzed on 27/09/2016. +// Copyright © 2016 Goldsmiths. All rights reserved. +// + + +#ifndef classificationEmbindings_h +#define classificationEmbindings_h + +#include <emscripten/bind.h> + +using namespace emscripten; + +EMSCRIPTEN_BINDINGS(classification_module) { + class_<classificationTemplate<double>, base<modelSet<double> > >("ClassificationCpp") //name change so that I can wrap it in Javascript. -mz + .constructor() + .constructor<classificationTemplate<double>::classificationTypes>() + // .constructor< std::vector<trainingExample> >() + .constructor<int, int>() + .function("train", &classificationTemplate<double>::train) + .function("getK", &classificationTemplate<double>::getK) + .function("setK", &classificationTemplate<double>::setK) + ; + enum_<classificationTemplate<double>::classificationTypes>("ClassificationTypes") + .value("KNN", classificationTemplate<double>::knn) + .value("SVM", classificationTemplate<double>::svm) + ; + +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/knnEmbindings.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/knnEmbindings.h new file mode 100644 index 0000000..7024381 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/knnEmbindings.h @@ -0,0 +1,45 @@ +// +// knnEmbindings.h +// RapidLib +// +// Created by mzed on 05/09/2016. +// Copyright © 2016 Goldsmiths. All rights reserved. +// + +#ifndef knnEmbindings_h +#define knnEmbindings_h + +#include <vector> +#include <emscripten/bind.h> + +using namespace emscripten; + +EMSCRIPTEN_BINDINGS(stl_wrappers) { + register_vector<int>("VectorInt"); + register_vector<double>("VectorDouble"); + register_vector<std::vector<double>>("VectorVectorDouble"); + + register_vector<trainingExampleTemplate<double>>("TrainingSet"); + register_vector<trainingSeriesTemplate<double>>("TrainingSeriesSet"); + + value_object<trainingExampleTemplate<double>>("trainingExample") + .field("input", &trainingExampleTemplate<double>::input) + .field("output", &trainingExampleTemplate<double>::output) + ; + + value_object<trainingSeriesTemplate<double>>("trainingSeries") + .field("input", &trainingSeriesTemplate<double>::input) + .field("label", &trainingSeriesTemplate<double>::label) + ; +} + + +EMSCRIPTEN_BINDINGS(knn_module) { + class_<knnClassification<double>>("KnnClassification") + .constructor<int, std::vector<int>, std::vector<trainingExampleTemplate<double>>, int>() + .function("addNeighbour", &knnClassification<double>::addNeighbour) + .function("run", &knnClassification<double>::run) + ; +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/modelSetEmbindings.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/modelSetEmbindings.h new file mode 100644 index 0000000..97a098e --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/modelSetEmbindings.h @@ -0,0 +1,26 @@ +// +// modelSetEmbindings.h +// RapidLib +// +// Created by mzed on 04/10/2016. +// Copyright © 2016 Goldsmiths. All rights reserved. +// + +#ifndef modelSetEmbindings_h +#define modelSetEmbindings_h + +#include <emscripten/bind.h> + +using namespace emscripten; + +EMSCRIPTEN_BINDINGS(modelSet_module) { + class_<modelSet<double> >("ModelSetCpp") //name change so that I can wrap it in Javascript. -mz + .constructor() + .function("train", &modelSet<double>::train) + .function("reset", &modelSet<double>::reset) + .function("run", &modelSet<double>::run) + ; + +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/nnEmbindings.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/nnEmbindings.h new file mode 100644 index 0000000..eeacc1b --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/nnEmbindings.h @@ -0,0 +1,26 @@ +// +// nnEmbindings.h +// RapidLib +// +// Created by mzed on 22/08/2016. +// Copyright © 2016 Goldsmiths. All rights reserved. +// + +#ifndef nnEmbindings_h +#define nnEmbindings_h + +#include <vector> +#include <emscripten/bind.h> + +using namespace emscripten; + +EMSCRIPTEN_BINDINGS(nn_module) { + class_<neuralNetwork<double>>("NeuralNetwork") + .constructor<int, std::vector<int>, int, int>() + .constructor<int, std::vector<int>, int, int, std::vector<double>, std::vector<double>, std::vector<double>, std::vector<double>, double, double>() + .function("run", &neuralNetwork<double>::run) + .function("train", &neuralNetwork<double>::train) + ; + +}; +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/nodeEnv.js b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/nodeEnv.js new file mode 100644 index 0000000..c33d2f5 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/nodeEnv.js @@ -0,0 +1,7 @@ +//Forces the environment to be Node, to run with babel-tape-runner + +try { + Module.ENVIRONMENT = NODE; +} catch (e) { + // do nothing +} \ No newline at end of file diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/rapidLibPost.js b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/rapidLibPost.js new file mode 100644 index 0000000..fe01d0b --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/rapidLibPost.js @@ -0,0 +1,629 @@ +// +// rapidLibPost.js +// RapidLib +// +// Created by mzed on 05/09/2016. +// Copyright © 2016 Goldsmiths. All rights reserved. +// + +/* globals Module */ + +"use strict"; + +console.log("RapidLib 15.11.2017 14:40"); + +/** + * Utility function to convert js objects into C++ trainingSets + * @param {Object} trainingSet - JS Object representing a training set + * @property {function} Module.TrainingSet - constructor for emscripten version of this struct + * @property {function} Module.VectorDouble - constructor for the emscripten version of std::vector<double> + * @returns {Module.TrainingSet} + */ +Module.prepTrainingSet = function (trainingSet) { + let rmTrainingSet = new Module.TrainingSet(); + for (let i = 0; i < trainingSet.length; ++i) { + let tempInput = new Module.VectorDouble(); + let tempOutput = new Module.VectorDouble(); + for (let j = 0; j < trainingSet[i].input.length; ++j) { + tempInput.push_back(parseFloat(trainingSet[i].input[j])); + } + for (let j = 0; j < trainingSet[i].output.length; ++j) { + tempOutput.push_back(parseFloat(trainingSet[i].output[j])); + } + let tempObj = {'input': tempInput, 'output': tempOutput}; + rmTrainingSet.push_back(tempObj); + } + return rmTrainingSet; +}; + +/** + * Utility function to convert js objects into C++ trainingSeriesSets + * @param {Object} trainingSeriesSet - JS Object representing a training series + * @property {function} Module.TrainingSeriest - constructor for emscripten version of this struct + * @property {function} Module.VectorVectorDouble - constructor for the emscripten version of std::vector<std::vector<double>> + * @returns {Module.TrainingSeriesSet} + */ +Module.prepTrainingSeriesSet = function (trainingSeriesSet) { + let rmTrainingSeriesSet = new Module.TrainingSeriesSet(); + for (let i = 0; i < trainingSeriesSet.length; ++i) { + let input = new Module.VectorVectorDouble(); + for (let j = 0; j < trainingSeriesSet[i].input.length; ++j) { + let tempVector = new Module.VectorDouble(); + for (let k = 0; k < trainingSeriesSet[i].input[j].length; ++k) { + tempVector.push_back(parseFloat(trainingSeriesSet[i].input[j][k])); + } + input.push_back(tempVector); + } + let tempObj = {'input': input, 'label': trainingSeriesSet[i].label}; + rmTrainingSeriesSet.push_back(tempObj); + } + return rmTrainingSeriesSet; +}; + +/** + * Utility function to add an empty output to a "training set" if it is undefined + * @param jsInput + * @returns {*} + */ + +Module.checkOutput = function (jsInput) { + for (let i = 0; i < jsInput.length; ++i) { + if (typeof jsInput[i].output === "undefined") { + jsInput[i].output = []; + } + } + return jsInput; +}; +//////////////////////////////////////////////// Regression + +/** + * Creates a set of regression objects using the constructor from emscripten + * @constructor + * @property {function} Module.RegressionCpp - constructor from emscripten + */ +Module.Regression = function () { + this.modelSet = new Module.RegressionCpp(); //TODO implement optional arguments +}; + +Module.Regression.prototype = { + /** + * Trains the models using the input. Starts training from a randomized state. + * @param {Object} trainingSet - An array of training examples + * @returns {Boolean} true indicates successful training + */ + train: function (trainingSet) { + this.modelSet.reset(); + //change to vectorDoubles and send in + return this.modelSet.train(Module.prepTrainingSet(trainingSet)); + }, + /** + * Returns the number of hidden layers in a MLP. + * @returns {Number} k values + */ + getNumHiddenLayers: function () { + let outputVector = this.modelSet.getNumHiddenLayers(); + //change back to javascript array + let output = []; + for (let i = 0; i < outputVector.size(); ++i) { + output.push(outputVector.get(i)); + } + return output[0]; + }, + /** + * Sets the number of hidden layers for an MLP. + * @param {Number} numHiddenLayers + */ + setNumHiddenLayers: function (numHiddenLayers) { + this.modelSet.setNumHiddenLayers(numHiddenLayers); + }, + /** + * Sets the number of epochs for MLP training. + * @param {Number} numEpochs + */ + setNumEpochs: function (numEpochs) { + this.modelSet.setNumEpochs(numEpochs); + }, + /** + * Returns the model set to its initial configuration. + * @returns {Boolean} true indicates successful initialization + */ + reset: function () { + return this.modelSet.reset(); + }, + /** + * Runs feed-forward regression on input + * @param {Array} input - An array of features to be processed. Non-arrays are converted. + * @returns {Array} output - One number for each model in the set + */ + run: function (input) { + //I'll assume that the args should have been an array + if (arguments.length > 1) { + input = Array.from(arguments); + } + //change input to vectors of doubles + let inputVector = new Module.VectorDouble(); + for (let i = 0; i < input.length; ++i) { + inputVector.push_back(input[i]); + } + //get the output + let outputVector = this.modelSet.run(inputVector); + //change back to javascript array + let output = []; + for (let i = 0; i < outputVector.size(); ++i) { + output.push(outputVector.get(i)); + } + return output; + }, + /** + * Deprecated! Use run() instead + * @param input + * @returns {Array} + */ + process: function (input) { + //return this.run(input); //Why doesn't this work? MZ + //I'll assume that the args should have been an array + if (arguments.length > 1) { + input = Array.from(arguments); + } + //change input to vectors of doubles + let inputVector = new Module.VectorDouble(); + for (let i = 0; i < input.length; ++i) { + inputVector.push_back(input[i]); + } + //get the output + let outputVector = new Module.VectorDouble(); + outputVector = this.modelSet.run(inputVector); + //change back to javascript array + let output = []; + for (let i = 0; i < outputVector.size(); ++i) { + output.push(outputVector.get(i)); + } + return output; + } +}; + +///////////////////////////////////////////////// Classification + +/** + * Creates a set of classification objects using the constructor from emscripten + * @constructor + * @property {function} Module.ClassificationCpp - constructor from emscripten + * @param {string} [type] - which classification algorithm to use + */ + +Module.Classification = function (type) { + if (type) { + this.modelSet = new Module.ClassificationCpp(type); + } else { + this.modelSet = new Module.ClassificationCpp(); + } +}; + +Module.Classification.prototype = { + /** + * Trains the models using the input. Clears previous training set. + * @param {Object} trainingSet - An array of training examples. + * @returns {Boolean} true indicates successful training + */ + train: function (trainingSet) { + this.modelSet.reset(); + return this.modelSet.train(Module.prepTrainingSet(trainingSet)); + }, + /** + * Returns a vector of current k values for each model. + * @returns {Array} k values + */ + getK: function () { + let outputVector = this.modelSet.getK(); + let output = []; + for (let i = 0; i < outputVector.size(); ++i) { + output.push(outputVector.get(i)); + } + return output; + }, + /** + * Sets the k values for a particular model model. + * @param {Number} whichModel - which model + * @param {Number} newK - set K to this value + */ + setK: function (whichModel, newK) { + this.modelSet.setK(whichModel, newK); + }, + /** + * Returns the model set to its initial configuration. + * @returns {Boolean} true indicates successful initialization + */ + reset: function () { + return this.modelSet.reset(); + }, + /** + * Does classifications on an input vector. + * @param {Array} input - An array of features to be processed. Non-arrays are converted. + * @returns {Array} output - One number for each model in the set + */ + run: function (input) { + //I'll assume that the args should have been an array + if (arguments.length > 1) { + input = Array.from(arguments); + } + //change input to vectors of doubles + let inputVector = new Module.VectorDouble(); + for (let i = 0; i < input.length; ++i) { + inputVector.push_back(input[i]); + } + //get the output + let outputVector = new Module.VectorDouble(); + outputVector = this.modelSet.run(inputVector); + //change back to javascript array + let output = []; + for (let i = 0; i < outputVector.size(); ++i) { + output.push(outputVector.get(i)); + } + return output; + }, + /** + * Deprecated! USe run() instead + * @param input + */ + process: function (input) { + //return this.run(input); //why doesn't this work? + //I'll assume that the args should have been an array + if (arguments.length > 1) { + input = Array.from(arguments); + } + //change input to vectors of doubles + let inputVector = new Module.VectorDouble(); + for (let i = 0; i < input.length; ++i) { + inputVector.push_back(input[i]); + } + //get the output + let outputVector = this.modelSet.run(inputVector); + //change back to javascript array + let output = []; + for (let i = 0; i < outputVector.size(); ++i) { + output.push(outputVector.get(i)); + } + return output; + } +}; + +////////////////////////////////////////////////// ModelSet + +/** + * Creates a set of machine learning objects using constructors from emscripten. Could be any mix of regression and classification. + * This is only useful when importing JSON from Wekinator. + * @constructor + */ +Module.ModelSet = function () { + this.myModelSet = []; + this.modelSet = new Module.ModelSetCpp(); +}; + +/** + * Creates a model set populated with models described in a JSON document. + * This only works in documents that are part of a CodeCircle document. + * @param {string} url - JSON loaded from a model set description document. + * @returns {Boolean} true indicates successful training + */ +Module.ModelSet.prototype = { + loadJSON: function (url) { + let that = this; + console.log('url ', url); + let request = new XMLHttpRequest(); + request.open("GET", url, true); + request.responseType = "json"; + request.onload = function () { + let modelSet = this.response; + console.log("loaded: ", modelSet); + let allInputs = modelSet.metadata.inputNames; + modelSet.modelSet.forEach(function (value) { + let numInputs = value.numInputs; + let whichInputs = new Module.VectorInt(); + switch (value.modelType) { + case 'kNN classification': + let neighbours = new Module.TrainingSet(); + let k = value.k; + for (let i = 0; i < allInputs.length; ++i) { + if (value.inputNames.includes(allInputs[i])) { + whichInputs.push_back(i); + } + } + let myKnn = new Module.KnnClassification(numInputs, whichInputs, neighbours, k); + value.examples.forEach(function (value) { + let features = new Module.VectorDouble(); + for (let i = 0; i < numInputs; ++i) { + features.push_back(parseFloat(value.features[i])); + } + myKnn.addNeighbour(parseInt(value.class), features); + }); + that.addkNNModel(myKnn); + break; + case 'Neural Network': + let numLayers = value.numHiddenLayers; + let numNodes = value.numHiddenNodes; + let weights = new Module.VectorDouble(); + let wHiddenOutput = new Module.VectorDouble(); + let inRanges = new Module.VectorDouble(); + let inBases = new Module.VectorDouble(); + + let localWhichInputs = []; + for (let i = 0; i < allInputs.length; ++i) { + if (value.inputNames.includes(allInputs[i])) { + whichInputs.push_back(i); + localWhichInputs.push(i); + } + } + + let currentLayer = 0; + value.nodes.forEach(function (value, i) { + if (value.name === 'Linear Node 0') { //Output Node + for (let j = 1; j <= numNodes; ++j) { + let whichNode = 'Node ' + (j + (numNodes * (numLayers - 1))); + wHiddenOutput.push_back(parseFloat(value[whichNode])); + } + wHiddenOutput.push_back(parseFloat(value.Threshold)); + } else { + currentLayer = Math.floor((i - 1) / numNodes); //FIXME: This will break if node is out or order. + if (currentLayer < 1) { //Nodes connected to input + for (let j = 0; j < numInputs; ++j) { + weights.push_back(parseFloat(value['Attrib ' + allInputs[localWhichInputs[j]]])); + } + } else { //Hidden Layers + for (let j = 1; j <= numNodes; ++j) { + weights.push_back(parseFloat(value['Node ' + (j + (numNodes * (currentLayer - 1)))])); + } + } + weights.push_back(parseFloat(value.Threshold)); + } + }); + + for (let i = 0; i < numInputs; ++i) { + inRanges.push_back(value.inRanges[i]); + inBases.push_back(value.Bases[i]); + } + + let outRange = value.outRange; + let outBase = value.outBase; + + let myNN = new Module.NeuralNetwork(numInputs, whichInputs, numLayers, numNodes, weights, wHiddenOutput, inRanges, inBases, outRange, outBase); + that.addNNModel(myNN); + break; + default: + console.warn('unknown model type ', value.modelType); + break; + } + }); + }; + request.send(null); + return true; //TODO: make sure this is true; + }, + /** + * Add a NN model to a modelSet. //TODO: this doesn't need it's own function + * @param model + */ + addNNModel: function (model) { + console.log('Adding NN model'); + this.myModelSet.push(model); + }, + /** + * Add a kNN model to a modelSet. //TODO: this doesn't need it's own function + * @param model + */ + addkNNModel: function (model) { + console.log('Adding kNN model'); + this.myModelSet.push(model); + }, + /** + * Applies regression and classification algorithms to an input vector. + * @param {Array} input - An array of features to be processed. + * @returns {Array} output - One number for each model in the set + */ + run: function (input) { + let modelSetInput = new Module.VectorDouble(); + for (let i = 0; i < input.length; ++i) { + modelSetInput.push_back(input[i]); + } + let output = []; + for (let i = 0; i < this.myModelSet.length; ++i) { + output.push(this.myModelSet[i].run(modelSetInput)); + } + return output; + }, + /** + * Deprecated! Use run() instead. + * @param {Array} input - An array of features to be processed + * @returns {Array} output - One number for each model in the set + */ + process: function (input) { + return this.run(input); + } +}; + + +//////////////////////////////////////////////// + +/** + * Creates a series classification object using the constructor from emscripten + * @constructor + * @property {function} Module.SeriesClassificationCpp - constructor from emscripten + */ +Module.SeriesClassification = function () { + this.seriesClassification = new Module.SeriesClassificationCpp(); //TODO implement optional arguments +}; + +Module.SeriesClassification.prototype = { + /** + * Resets the model, and adds a set of series to be evaluated + * @param {Object} newSeriesSet - an array of objects, each with input: <array of arrays> and label: <string> + * @return {Boolean} True indicates successful training. + */ + train: function (newSeriesSet) { + this.reset(); + this.seriesClassification.train(Module.prepTrainingSeriesSet(newSeriesSet)); + return true; + }, + /** + * Returns the model set to its initial configuration. + * @returns {Boolean} true indicates successful initialization + */ + reset: function () { + return this.seriesClassification.reset(); + }, + /** + * Evaluates an input series and returns the index of the closet example + * @param {Object} inputSeries - an array of arrays + * @returns {Number} The index of the closest matching series + */ + run: function (inputSeries, label) { + let vecInputSeries = new Module.VectorVectorDouble(); + for (let i = 0; i < inputSeries.length; ++i) { + let tempVector = new Module.VectorDouble(); + for (let j = 0; j < inputSeries[i].length; ++j) { + tempVector.push_back(inputSeries[i][j]); + } + vecInputSeries.push_back(tempVector); + } + if (arguments.length > 1) { + return this.seriesClassification.runLabel(vecInputSeries, label); + } else { + return this.seriesClassification.run(vecInputSeries); + } + }, + /** + * Deprecated! Use run() + * @param inputSeries + * @returns {Number} + */ + process: function (inputSeries) { + return this.run(inputSeries); + }, + /** + * Returns an array of costs to match the input series to each example series. A lower cost is a closer match + * @returns {Array} + */ + getCosts: function () { + let returnArray = []; + let VecDouble = this.seriesClassification.getCosts(); + for (let i = 0; i < VecDouble.size(); ++i) { + returnArray[i] = VecDouble.get(i); + } + return returnArray; + } +}; + +///////////////////////////////////////////////// + +/** + * Creates a circular buffer that can return various statistics + * @constructor + * @param {number} [windowSize=3] - specify the size of the buffer + * @property {function} Module.rapidStreamCpp - constructor from emscripten + */ + +Module.StreamBuffer = function (windowSize) { + if (windowSize) { + this.rapidStream = new Module.RapidStreamCpp(windowSize); + } else { + this.rapidStream = new Module.RapidStreamCpp(); + } +}; + +Module.StreamBuffer.prototype = { + /** + * Add a value to a circular buffer whose size is defined at creation. + * @param {number} input - value to be pushed into circular buffer. + */ + push: function (input) { + this.rapidStream.pushToWindow(parseFloat(input)); + }, + /** + * Resets all the values in the buffer to zero. + */ + reset: function () { + this.rapidStream.clear(); + }, + /** + * Calculate the first-order difference (aka velocity) between the last two inputs. + * @return {number} difference between last two inputs. + */ + velocity: function () { + return this.rapidStream.velocity(); + }, + /** + * Calculate the second-order difference (aka acceleration) over the last three inputs. + * @return {number} acceleration over the last three inputs. + */ + acceleration: function () { + return this.rapidStream.acceleration(); + }, + /** + * Find the minimum value in the buffer. + * @return {number} minimum. + */ + minimum: function () { + return this.rapidStream.minimum(); + }, + /** + * Find the maximum value in the buffer. + * @return {number} maximum. + */ + maximum: function () { + return this.rapidStream.maximum(); + }, + /** + * Calculate the sum of all values in the buffer. + * @return {number} sum. + */ + sum: function () { + return this.rapidStream.sum(); + }, + /** + * Calculate the mean of all values in the buffer. + * @return {number} mean. + */ + mean: function () { + return this.rapidStream.mean(); + }, + /** + * Calculate the standard deviation of all values in the buffer. + * @return {number} standard deviation. + */ + standardDeviation: function () { + return this.rapidStream.standardDeviation(); + }, + /** + * Calculate the root mean square of the values in the buffer + * @return {number} rms + */ + rms: function () { + return this.rapidStream.rms(); + }, + /** + * Calculate the minimum first-order difference over consecutive inputs in the buffer. + * @return {number} minimum velocity. + */ + minVelocity: function () { + return this.rapidStream.minVelocity(); + }, + /** + * Calculate the maximum first-order difference over consecutive inputs in the buffer. + * @return {number} maximum velocity. + */ + maxVelocity: function () { + return this.rapidStream.maxVelocity(); + }, + /** + * Calculate the minimum second-order difference over consecutive inputs in the buffer. + * @return {number} minimum acceleration. + */ + minAcceleration: function () { + return this.rapidStream.minAcceleration(); + }, + /** + * Calculate the maximum second-order difference over consecutive inputs in the buffer. + * @return {number} maximum acceleration. + */ + maxAcceleration: function () { + return this.rapidStream.maxAcceleration(); + } +}; \ No newline at end of file diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/rapidStreamEmbindings.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/rapidStreamEmbindings.h new file mode 100644 index 0000000..55c7509 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/rapidStreamEmbindings.h @@ -0,0 +1,38 @@ +// +// rapidStreamEmbindings.h +// RapidLib +// +// Created by mzed on 01/06/2017. +// Copyright © 2017 Goldsmiths. All rights reserved. +// + +#ifndef rapidStreamEmbindings_h +#define rapidStreamEmbindings_h + +#include <emscripten/bind.h> + +using namespace emscripten; + +EMSCRIPTEN_BINDINGS(rapidStream_module) { + class_<rapidStream<double> >("RapidStreamCpp") //name change so that I can wrap it in Javascript. -mz + .constructor() + .constructor<int>() + .function("clear", &rapidStream<double>::clear) + .function("pushToWindow", &rapidStream<double>::pushToWindow) + .function("velocity", &rapidStream<double>::velocity) + .function("acceleration", &rapidStream<double>::acceleration) + .function("minimum", &rapidStream<double>::minimum) + .function("maximum", &rapidStream<double>::maximum) + .function("sum", &rapidStream<double>::sum) + .function("mean", &rapidStream<double>::mean) + .function("standardDeviation", &rapidStream<double>::standardDeviation) + .function("rms", &rapidStream<double>::rms) + .function("minVelocity", &rapidStream<double>::minVelocity) + .function("maxVelocity", &rapidStream<double>::maxVelocity) + .function("minAcceleration", &rapidStream<double>::minAcceleration) + .function("maxAcceleration", &rapidStream<double>::maxAcceleration) + ; + +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/regressionEmbindings.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/regressionEmbindings.h new file mode 100644 index 0000000..7c40b70 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/regressionEmbindings.h @@ -0,0 +1,29 @@ +// +// regressionEmbindings.cpp +// RapidLib +// +// Created by mzed on 26/09/2016. +// Copyright © 2016 Goldsmiths. All rights reserved. +// + +#ifndef regressionEmbindings_h +#define regressionEmbindings_h + +#include <emscripten/bind.h> + +using namespace emscripten; + +EMSCRIPTEN_BINDINGS(regression_module) { + class_<regressionTemplate<double>, base<modelSet<double> > >("RegressionCpp") //name change so that I can wrap it in Javascript. -mz + .constructor() + .constructor< std::vector<trainingExampleTemplate<double> > >() + .constructor<int, int>() + .function("train", ®ressionTemplate<double>::train) + .function("getNumHiddenLayers", ®ressionTemplate<double>::getNumHiddenLayers) + .function("setNumHiddenLayers", ®ressionTemplate<double>::setNumHiddenLayers) + .function("setNumEpochs", ®ressionTemplate<double>::setNumEpochs) + ; + +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/seriesClassificationEmbindings.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/seriesClassificationEmbindings.h new file mode 100644 index 0000000..c610805 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/seriesClassificationEmbindings.h @@ -0,0 +1,28 @@ +// +// seriesClassification.h +// RapidLib +// +// Created by mzed on 13/06/2017. +// Copyright © 2017 Goldsmiths. All rights reserved. +// + + +#ifndef seriesClassificationEmbindings_h +#define seriesClassificationEmbindings_h + +#include <emscripten/bind.h> + +using namespace emscripten; + +EMSCRIPTEN_BINDINGS(seriesClassification_module) { + class_<seriesClassificationTemplate<double> >("SeriesClassificationCpp") //name change so that I can wrap it in Javascript. -mz + .constructor() + .function("reset", &seriesClassificationTemplate<double>::reset) + .function("train", &seriesClassificationTemplate<double>::train) + .function("run", select_overload<std::string(const std::vector<std::vector<double>>&)>(&seriesClassificationTemplate<double>::run)) + .function("runLabel", select_overload<double(const std::vector<std::vector<double>>&, std::string)>(&seriesClassificationTemplate<double>::run)) + .function("getCosts", &seriesClassificationTemplate<double>::getCosts) + ; +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/svmEmbindings.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/svmEmbindings.h new file mode 100644 index 0000000..f867ce2 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/emscripten/svmEmbindings.h @@ -0,0 +1,26 @@ +// +// svmEmbindings.cpp +// RapidLib +// +// Created by mzed on 25/08/2017. +// Copyright © 2017 Goldsmiths. All rights reserved. +// + + +#ifndef svmEmbindings_h +#define svmEmbindings_h + +#include <vector> +#include <emscripten/bind.h> + +using namespace emscripten; + +EMSCRIPTEN_BINDINGS(svm_module) { + class_<svmClassification<double>>("svmClassificationCPP") + .constructor<int>() + .function("train", &svmClassification<double>::train) + .function("run", &svmClassification<double>::run) + ; +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/fastDTW.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/fastDTW.cpp new file mode 100644 index 0000000..bbc4ed7 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/fastDTW.cpp @@ -0,0 +1,75 @@ +/** + * @file fastDTW.cpp + * RapidLib + * + * @author Michael Zbyszynski + * @date 07 Sep 2017 + * @copyright Copyright © 2017 Goldsmiths. All rights reserved. + */ + +#include "fastDTW.h" +#include "dtw.h" + +template<typename T> +fastDTW<T>::fastDTW() {}; + +template<typename T> +fastDTW<T>::~fastDTW() {}; + +template<typename T> +warpInfo fastDTW<T>::fullFastDTW(const std::vector<std::vector<T>> &seriesX, const std::vector<std::vector<T > > &seriesY, int searchRadius){ + +#ifndef EMSCRIPTEN + if (seriesY.size() > seriesX.size()) { + return fullFastDTW(seriesY, seriesX, searchRadius); //TODO: I'm not sure why I need this. Also, not sure why it fails with Emscripten. + } +#endif + + dtw<T> dtw; + searchRadius = (searchRadius < 0) ? 0 : searchRadius; + int minSeries = searchRadius + 2; + if (seriesX.size() <= minSeries || seriesY.size() <= minSeries) { + return dtw.dynamicTimeWarp(seriesX, seriesY); + } + + T resolution = 2.0;//TODO: Just hardcode this? + std::vector<std::vector<T>> shrunkenX = downsample(seriesX, resolution); + std::vector<std::vector<T>> shrunkenY = downsample(seriesY, resolution); + + //some nice recursion here + searchWindow<T> window(int(seriesX.size()), int(seriesY.size()), getWarpPath(shrunkenX, shrunkenY, searchRadius), searchRadius); + return dtw.constrainedDTW(seriesX, seriesY, window); +}; + +template<typename T> +T fastDTW<T>::getCost(const std::vector<std::vector<T>> &seriesX, const std::vector<std::vector<T > > &seriesY, int searchRadius){ + warpInfo info = fullFastDTW(seriesX, seriesY, searchRadius); + return info.cost; +}; + +template<typename T> +warpPath fastDTW<T>::getWarpPath(const std::vector<std::vector<T>> &seriesX, const std::vector<std::vector<T > > &seriesY, int searchRadius){ + warpInfo info = fullFastDTW(seriesX, seriesY, searchRadius); + return info.path; +}; + +template<typename T> +std::vector<std::vector<T> > fastDTW<T>::downsample(const std::vector<std::vector<T>> &series, T resolution) { + std::vector<std::vector<T> > shrunkenSeries; + for (int i = 0; i < series.size(); ++i) { + if (i % 2 == 0) { + shrunkenSeries.push_back(series[i]); + } else { + int shrunkIndex = int(i/2); + for (int j = 0; j < series[i].size(); ++j) { + shrunkenSeries[shrunkIndex][j] = (shrunkenSeries[shrunkIndex][j] + series[i][j]) / 2; + } + } + } + //TODO: implement downsampling by resolution + return shrunkenSeries; +} + +//explicit instantiation +template class fastDTW<double>; +template class fastDTW<float>; \ No newline at end of file diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/fastDTW.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/fastDTW.h new file mode 100644 index 0000000..654e165 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/fastDTW.h @@ -0,0 +1,61 @@ +/** + * @file fastDTW.h + * RapidLib + * @author Michael Zbyszynski + * @date 07 Sep 2017 + * @copyright Copyright © 2017 Goldsmiths. All rights reserved. + */ + +#ifndef fastDTW_h +#define fastDTW_h + +#include <vector> +#include "warpPath.h" + +/** Class for performing an fast dynamic time warping between two time series*/ +template<typename T> +class fastDTW { +public: + fastDTW(); + ~fastDTW(); + + /** + * Returns just the cost of warping one series into a second. + * @param seriesX time series X + * @param seriesY time series Y + * @param searchRadius search radius (usually 1) + * @return cost to warp between series + */ + static T getCost(const std::vector<std::vector<T>> &seriesX, const std::vector<std::vector<T > > &seriesY, int searchRadius); + +private: + /** + * Returns the cost and the warp path. + * @param seriesX time series X + * @param seriesY time series Y + * @param searchRadius search radius (usually 1) + * @return information about optimal time warp + */ + static warpInfo fullFastDTW(const std::vector<std::vector<T>> &seriesX, const std::vector<std::vector<T > > &seriesY, int searchRadius); + + /** + * Returns just lowest cost path to warping one series into a second. + * @param seriesX time series X + * @param seriesY time series Y + * @param searchRadius search radius (usually 1) + * @return The warp path + */ + static warpPath getWarpPath(const std::vector<std::vector<T>> &seriesX, const std::vector<std::vector<T > > &seriesY, int searchRadius); + + /** + * Downsamples a time series by two. Resolution isn't implemented yet + * @param series + * @param resolution (not used) + * @return downsampled series + `*/ + static std::vector<std::vector<T> > downsample(const std::vector<std::vector<T>> &series, T resolution); + +}; + + +#endif /* fastDTW_h */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/knnClassification.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/knnClassification.cpp new file mode 100644 index 0000000..3f470b4 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/knnClassification.cpp @@ -0,0 +1,171 @@ +// +// knnClassification.cpp +// RapidLib +// +// Created by mzed on 05/09/2016. +// Copyright © 2016 Goldsmiths. All rights reserved. +// + +#include <cmath> +#include <utility> +#include <map> +#include <vector> +#include <algorithm> +#include "knnClassification.h" +#ifdef EMSCRIPTEN +#include "emscripten/knnEmbindings.h" +#endif + +template<typename T> +knnClassification<T>::knnClassification(const int &num_inputs, const std::vector<int> &which_inputs, const std::vector<trainingExampleTemplate<T> > &_neighbours, const int k) +: numInputs(num_inputs), +whichInputs(which_inputs), +neighbours(_neighbours), +desiredK(k), +currentK(k) +{ + nearestNeighbours = new std::pair<int, T>[currentK]; +} + +template<typename T> +knnClassification<T>::~knnClassification() { + delete[] nearestNeighbours; +} + +template<typename T> +void knnClassification<T>::reset() { + //TODO: implement this +} + +template<typename T> +int knnClassification<T>::getNumInputs() const { + return numInputs; +} + +template<typename T> +std::vector<int> knnClassification<T>::getWhichInputs() const { + return whichInputs; +} + +template<typename T> +int knnClassification<T>::getK() const { + return currentK; +} + +template<typename T> +inline void knnClassification<T>::updateK() { + if (currentK != desiredK) { + currentK = std::min(desiredK, (int) neighbours.size()); + } +} + +template<typename T> +void knnClassification<T>::setK(int newK) { + desiredK = newK; + updateK(); +} + +template<typename T> +void knnClassification<T>::addNeighbour(const int &classNum, const std::vector<T> &features) { + std::vector<T> classVec; + classVec.push_back(T(classNum)); + trainingExampleTemplate<T> newNeighbour = {features, classVec}; + neighbours.push_back(newNeighbour); + updateK(); +}; + +template<typename T> +void knnClassification<T>::train(const std::vector<trainingExampleTemplate<T> > &trainingSet) { //FIXME: Does numInputs need to be reset here? -MZ + neighbours.clear(); + neighbours = trainingSet; + updateK(); +}; + +template<typename T> +T knnClassification<T>::run(const std::vector<T> &inputVector) { + for (int i = 0; i < currentK; ++i) { + nearestNeighbours[i] = {0, 0.}; + }; + std::pair<int, T> farthestNN = {0, 0.}; + + std::vector<T> pattern; + for (int h = 0; h < numInputs; h++) { + pattern.push_back(inputVector[whichInputs[h]]); + } + + //Find k nearest neighbours + int index = 0; + for (typename std::vector<trainingExampleTemplate<T> >::iterator it = neighbours.begin(); it != neighbours.end(); ++it) { + //find Euclidian distance for this neighbor + T euclidianDistance = 0; + for(int j = 0; j < numInputs ; ++j){ + euclidianDistance += pow((pattern[j] - it->input[j]), 2); + } + euclidianDistance = sqrt(euclidianDistance); + if (index < currentK) { + //save the first k neighbours + nearestNeighbours[index] = {index, euclidianDistance}; + if (euclidianDistance > farthestNN.second) { + farthestNN = {index, euclidianDistance}; + } + } else if (euclidianDistance < farthestNN.second) { + //replace farthest, if new neighbour is closer + nearestNeighbours[farthestNN.first] = {index, euclidianDistance}; + int currentFarthest = 0; + T currentFarthestDistance = 0.; + for (int n = 0; n < currentK; n++) { + if (nearestNeighbours[n].second > currentFarthestDistance) { + currentFarthest = n; + currentFarthestDistance = nearestNeighbours[n].second; + } + } + farthestNN = {currentFarthest, currentFarthestDistance}; + } + ++index; + } + + //majority vote on nearest neighbours + std::map<int, int> classVoteMap; + typedef std::pair<int, int> classVotePair; + for (int i = 0; i < currentK; ++i){ + int classNum = (int) std::round(neighbours[nearestNeighbours[i].first].output[0]); + if ( classVoteMap.find(classNum) == classVoteMap.end() ) { + classVoteMap.insert(classVotePair(classNum, 1)); + } else { + classVoteMap[classNum]++; + } + } + T foundClass = 0; + int mostVotes = 0; + std::map<int, int>::iterator p; + for(p = classVoteMap.begin(); p != classVoteMap.end(); ++p) + { + if (p->second > mostVotes) { + mostVotes = p->second; + foundClass = p->first; + } + } + return foundClass; +} + +#ifndef EMSCRIPTEN +template<typename T> +void knnClassification<T>::getJSONDescription(Json::Value &jsonModelDescription) { + jsonModelDescription["modelType"] = "kNN Classificiation"; + jsonModelDescription["numInputs"] = numInputs; + jsonModelDescription["whichInputs"] = this->vector2json(whichInputs); + jsonModelDescription["k"] = desiredK; + Json::Value examples; + for (typename std::vector<trainingExampleTemplate<T> >::iterator it = neighbours.begin(); it != neighbours.end(); ++it) { + Json::Value oneExample; + oneExample["class"] = it->output[0]; + oneExample["features"] = this->vector2json(it->input); + examples.append(oneExample); + } + jsonModelDescription["examples"] = examples; +} +#endif + +//explicit instantiation +template class knnClassification<double>; +template class knnClassification<float>; diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/knnClassification.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/knnClassification.h new file mode 100644 index 0000000..8c2b8fb --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/knnClassification.h @@ -0,0 +1,93 @@ +// +// knnClassification.h +// RapidLib +// +// Created by mzed on 05/09/2016. +// Copyright © 2016 Goldsmiths. All rights reserved. +// + +#ifndef knnClassification_h +#define knnClassification_h + +#include <vector> +#include "baseModel.h" + +#ifndef EMSCRIPTEN +#include "../dependencies/json/json.h" +#endif + +/** Class for implementing a knn classifier */ +template<typename T> +class knnClassification : public baseModel<T> { + +public: + /** Constructor that takes training examples in + * @param number of inputs expected in the training and input vectors + * @param vector of input numbers to be fed into the classifer. + * @param vector of training examples + * @param how many near neighbours to evaluate + */ + knnClassification(const int &num_inputs, + const std::vector<int> &which_inputs, + const std::vector<trainingExampleTemplate<T> > &trainingSet, + const int k); + ~knnClassification(); + + /** add another example to the existing training set + * @param class number of example + * @param feature vector of example + */ + void addNeighbour(const int &classNum, const std::vector<T> &features); + + /** Generate an output value from a single input vector. + * @param A standard vector of type T to be evaluated. + * @return A single value of type T: the nearest class as determined by k-nearest neighbor. + */ + T run(const std::vector<T> &inputVector); + + /** Fill the model with a vector of examples. + * + * @param The training set is a vector of training examples that contain both a vector of input values and a value specifying desired output class. + * + */ + void train(const std::vector<trainingExampleTemplate<T> > &trainingSet); + + /** Reset the model to its empty state. */ + void reset(); + + /** Find out how many inputs the model expects + * @return Integer number of intpus + */ + int getNumInputs() const; + + /** Find out which inputs in a vector will be used + * @return Vector of ints, specifying input indices. + */ + std::vector<int> getWhichInputs() const; + + /** Get the number of nearest neighbours used by the kNN algorithm. */ + int getK() const; + /** Change the number of nearest neighbours used by the kNN algorithm. + * @param new value for k + */ + void setK(int newK); + +#ifndef EMSCRIPTEN + /** Populate a JSON value with a description of the current model + * @param A JSON value to be populated + */ + void getJSONDescription(Json::Value ¤tModel); +#endif + +private: + int numInputs; + std::vector<int> whichInputs; + std::vector<trainingExampleTemplate<T>> neighbours; + int desiredK; //K that user asked for might be limited but number of examples + int currentK; //K minimum of desiredK or neighbours.size() + inline void updateK(); + std::pair<int, T>* nearestNeighbours; +}; + +#endif + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/modelSet.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/modelSet.cpp new file mode 100644 index 0000000..20c1a94 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/modelSet.cpp @@ -0,0 +1,242 @@ +// +// modelSet.cpp +// RapidLib +// +// Created by mzed on 26/09/2016. +// Copyright © 2016 Goldsmiths. All rights reserved. +// + + +#include <fstream> +#include <vector> +#include <cmath> +#include <algorithm> +#include "modelSet.h" + +#ifndef EMSCRIPTEN +#include "../dependencies/json/json.h" +#else +#include "emscripten/modelSetEmbindings.h" +#endif + +/** No arguments, don't create any models yet */ +template<typename T> +modelSet<T>::modelSet() : +numInputs(0), +numOutputs(0), +created(false) +{ +}; + +template<typename T> +modelSet<T>::~modelSet() { + for (typename std::vector<baseModel<T>*>::iterator i = myModelSet.begin(); i != myModelSet.end(); ++i) { + delete *i; + } +}; + +template<typename T> +bool modelSet<T>::train(const std::vector<trainingExampleTemplate<T> > &training_set) { + for (trainingExampleTemplate<T> example : training_set) { + if (example.input.size() != numInputs) { + return false; + } + if (example.output.size() != numOutputs) { + return false; + } + } + for (int i = 0; i < myModelSet.size(); ++i) { + std::vector<trainingExampleTemplate<T> > modelTrainingSet; //just one output + for (trainingExampleTemplate<T> example : training_set) { + std::vector<T> tempT; + for (int j = 0; j < numInputs; ++j) { + tempT.push_back(example.input[j]); + } + trainingExampleTemplate<T> tempObj = {tempT, std::vector<T> {example.output[i]}}; + modelTrainingSet.push_back(tempObj); + } + myModelSet[i]->train(modelTrainingSet); + } + created = true; + return true; +} + +template<typename T> +bool modelSet<T>::reset() { + for (typename std::vector<baseModel<T>*>::iterator i = myModelSet.begin(); i != myModelSet.end(); ++i) { + delete *i; + } + myModelSet.clear(); + numInputs = 0; + numOutputs = 0; + created = false; + return true; +} + +template<typename T> +std::vector<T> modelSet<T>::run(const std::vector<T> &inputVector) { + std::vector<T> returnVector; + if (created && inputVector.size() == numInputs) { + for (auto model : myModelSet) { + returnVector.push_back(model->run(inputVector)); + } + } else { + returnVector.push_back(0); + } + return returnVector; +} + + + +#ifndef EMSCRIPTEN +//In emscripten, we do the JSON parsing with native JavaScript +template<typename T> +std::vector<T> json2vector(Json::Value json) { + std::vector<T> returnVec; + for (unsigned int i = 0; i < json.size(); ++i) { + returnVec.push_back(json[i].asDouble()); + } + return returnVec; +} + +template<typename T> +Json::Value modelSet<T>::parse2json() { + Json::Value root; + Json::Value metadata; + Json::Value modelSet; + + metadata["creator"] = "Rapid API C++"; + metadata["version"] = "v0.1.1"; //TODO: This should be a macro someplace + metadata["numInputs"] = numInputs; + Json::Value inputNamesJSON; + for (int i = 0; i < inputNames.size(); ++i) { + inputNamesJSON.append(inputNames[i]); + } + metadata["inputNames"] = inputNamesJSON; + metadata["numOutputs"] = numOutputs; + root["metadata"] = metadata; + for (auto model : myModelSet) { + Json::Value currentModel; + currentModel["inputNames"] = inputNamesJSON; //TODO: implment this feature + model->getJSONDescription(currentModel); + modelSet.append(currentModel); + } + root["modelSet"] = modelSet; + return root; +} + +template<typename T> +std::string modelSet<T>::getJSON() { + Json::Value root = parse2json(); + return root.toStyledString(); +} + +template<typename T> +void modelSet<T>::writeJSON(const std::string &filepath) { + Json::Value root = parse2json(); + std::ofstream jsonOut; + jsonOut.open (filepath); + Json::StyledStreamWriter writer; + writer.write(jsonOut, root); + jsonOut.close(); + +} + +template<typename T> +bool modelSet<T>::putJSON(const std::string &jsonMessage) { + Json::Value parsedFromString; + Json::Reader reader; + bool parsingSuccessful = reader.parse(jsonMessage, parsedFromString); + if (parsingSuccessful) + { + json2modelSet(parsedFromString); + } + return parsingSuccessful; +} + +template<typename T> +void modelSet<T>::json2modelSet(const Json::Value &root) { + numInputs = root["metadata"]["numInputs"].asInt(); + for (unsigned int i = 0; i < root["metadata"]["inputNames"].size(); ++i) { + inputNames.push_back(root["metadata"]["inputNames"][i].asString()); + } + numOutputs = root["metadata"]["numOutputs"].asInt(); + + for (const Json::Value& model : root["modelSet"]) { + int modelNumInputs = model["numInputs"].asInt(); + std::vector<int> whichInputs; + std::vector<std::string> modelInputNames; + for (unsigned int i = 0; i < model["inputNames"].size(); ++i) { + modelInputNames.push_back(model["inputNames"][i].asString()); + } + for (int i = 0; i < inputNames.size(); ++i) { + if (std::find(modelInputNames.begin(), modelInputNames.end(), inputNames[i]) != modelInputNames.end()) + { + whichInputs.push_back(i); + } + } + if (model["modelType"].asString() == "Neural Network") { + int numHiddenLayers = model["numHiddenLayers"].asInt(); + int numHiddenNodes = model["numHiddenNodes"].asInt(); + std::vector<T> weights; + std::vector<T> wHiddenOutput; + int nodeIndex = 0; + for (const Json::Value& node : model["nodes"]) { + if (node["name"].asString() == "Linear Node 0") { + for (int i = 1; i <= numHiddenNodes; ++i) { + std::string whichNode = "Node " + std::to_string(i + (numHiddenNodes * (numHiddenLayers - 1))); + wHiddenOutput.push_back(node[whichNode].asDouble()); + } + wHiddenOutput.push_back(node["Threshold"].asDouble()); + } else { //FIXME: this will break if nodes are out of order + int currentLayer = (int) floor((nodeIndex - 1.0)/ (double)numHiddenNodes); + if (currentLayer < 1) { //Nodes connected to input + for (int i = 0; i < numInputs; ++i) { + std::string whichNode = "Attrib " + model["inputNames"][i].asString(); + weights.push_back(node[whichNode].asDouble()); + } + } else { //Hidden Layers + for (int i = 0; i < numHiddenNodes; ++i) { + std::string whichNode = "Node " + std::to_string(i + (numHiddenNodes * (currentLayer - 1))); + weights.push_back(node[whichNode].asDouble()); + } } + weights.push_back(node["Threshold"].asDouble()); + } + nodeIndex++; + } + std::vector<T> inBases = json2vector<T>(model["inBases"]); + std::vector<T> inRanges = json2vector<T>(model["inRanges"]); + T outRange = model["outRange"].asDouble(); + T outBase = model["outBase"].asDouble(); + + myModelSet.push_back(new neuralNetwork<T>(modelNumInputs, whichInputs, numHiddenLayers, numHiddenNodes, weights, wHiddenOutput, inRanges, inBases, outRange, outBase)); + } else if (model["modelType"].asString() == "kNN Classificiation") { + std::vector<trainingExampleTemplate<T> > trainingSet; + const Json::Value examples = model["examples"]; + for (unsigned int i = 0; i < examples.size(); ++i) { + trainingExampleTemplate<T> tempExample; + tempExample.input = json2vector<T>(examples[i]["features"]); + tempExample.output.push_back(examples[i]["class"].asDouble()); + trainingSet.push_back(tempExample); + } + int k = model["k"].asInt(); + myModelSet.push_back(new knnClassification<T>(modelNumInputs, whichInputs, trainingSet, k)); + } + } + created = true; +} + +template<typename T> +bool modelSet<T>::readJSON(const std::string &filepath) { + Json::Value root; + std::ifstream file(filepath); + file >> root; + json2modelSet(root); + return created; //TODO: check something first +} +#endif + +//explicit instantiation +template class modelSet<double>; +template class modelSet<float>; + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/modelSet.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/modelSet.h new file mode 100644 index 0000000..53be912 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/modelSet.h @@ -0,0 +1,60 @@ +// +// modelSet.h +// RapidLib +// +// Created by mzed on 26/09/2016. +// Copyright © 2016 Goldsmiths. All rights reserved. +// + +#ifndef modelSet_h +#define modelSet_h + +#include <vector> +#include "trainingExample.h" +#include "baseModel.h" +#include "neuralNetwork.h" +#include "knnClassification.h" +#include "svmClassification.h" +#ifndef EMSCRIPTEN +#include "../dependencies/json/json.h" +#endif + +/** This class holds a set of models with the same or different algorithms. */ +template<typename T> +class modelSet { +public: + modelSet(); + virtual ~modelSet(); + /** Train on a specified set, causes creation if not created */ + virtual bool train(const std::vector<trainingExampleTemplate<T> > &trainingSet); + /** reset to pre-training state */ + bool reset(); + /** run regression or classification for each model */ + std::vector<T> run(const std::vector<T> &inputVector); + +protected: + std::vector<baseModel<T>*> myModelSet; + int numInputs; + std::vector<std::string> inputNames; + int numOutputs; + bool created; + +#ifndef EMSCRIPTEN //The javascript code will do its own JSON parsing +public: + /** Get a JSON representation of the model in the form of a styled string */ + std::string getJSON(); + /** Write a JSON model description to specified file path */ + void writeJSON(const std::string &filepath); + /** configure empty model with string. See getJSON() */ + bool putJSON(const std::string &jsonMessage); + /** read a JSON file at file path and build a modelSet from it */ + bool readJSON(const std::string &filepath); + +private: + Json::Value parse2json(); + void json2modelSet(const Json::Value &root); + +#endif +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/neuralNetwork.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/neuralNetwork.cpp new file mode 100644 index 0000000..b3b2f88 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/neuralNetwork.cpp @@ -0,0 +1,448 @@ +/** + * @file neuralNetwork.cpp + * RapidLib + * + * @date 05 Sep 2016 + * @copyright Copyright © 2016 Goldsmiths. All rights reserved. + */ + +#include <math.h> +#include <random> +#include <algorithm> +#include <vector> + +#include "neuralNetwork.h" +#ifdef EMSCRIPTEN +#include "emscripten/nnEmbindings.h" +#endif + +template<typename T> +void neuralNetwork<T>::initTrainer() { + //initialize deltas + deltaWeights = std::vector<std::vector<std::vector<T> > >(numHiddenLayers, std::vector<std::vector<T> >(numHiddenNodes, std::vector<T>((numInputs + 1), 0))); + deltaHiddenOutput = std::vector<T>((numHiddenNodes + 1), 0); +} + +/*! + * This is the constructor for a model imported from JSON. + */ +template<typename T> +neuralNetwork<T>::neuralNetwork(const int &num_inputs, + const std::vector<int> &which_inputs, + const int &num_hidden_layers, + const int &num_hidden_nodes, + const std::vector<T> &_weights, + const std::vector<T> &w_hidden_output, + const std::vector<T> &in_ranges, + const std::vector<T> &in_bases, + const T &out_range, + const T &out_base + ) +: +numInputs(num_inputs), +whichInputs(which_inputs), +numHiddenLayers(num_hidden_layers), +numHiddenNodes(num_hidden_nodes), +wHiddenOutput(w_hidden_output), +inRanges(in_ranges), +inBases(in_bases), +outRange(out_range), +outBase(out_base), +learningRate(LEARNING_RATE), +momentum(MOMENTUM), +numEpochs(NUM_EPOCHS), +outputErrorGradient(0) +{ + bool randomize = _weights.size() ? false : true; + std::default_random_engine generator; + std::uniform_real_distribution<T> distribution(-0.5,0.5); + //winding up a long vector from javascript + int count = 0; + for (int i = 0; i < numHiddenLayers; ++i) { + std::vector<std::vector<T>> layer; + for (int j = 0; j < numHiddenNodes; ++j){ + std::vector<T> node; + int numConnections = (i == 0) ? numInputs : numHiddenNodes; + for(int k = 0; k <= numConnections; ++k){ + if (randomize) { + node.push_back(distribution(generator)); + } else { + node.push_back( _weights[count]); + } + count++; + } + layer.push_back(node); + } + weights.push_back(layer); + } + + if (randomize) { + for (int i = 0; i <= numHiddenNodes; ++i) { + wHiddenOutput.push_back(distribution(generator)); + } + } + + for (int i = 0; i < inRanges.size(); ++i) { + if (inRanges[i] == 0.) { + inRanges[i] = 1.0; //Prevent divide by zero later. + } + } + + //trainer -- do we really need this? + initTrainer(); +} + + + +/*! + * This is the constructor for a model that needs to be trained. + */ +template<typename T> +neuralNetwork<T>::neuralNetwork(const int &num_inputs, + const std::vector<int> &which_inputs, + const int &num_hidden_layers, + const int &num_hidden_nodes + ) +: +numInputs(num_inputs), +whichInputs(which_inputs), +numHiddenLayers(num_hidden_layers), +numHiddenNodes(num_hidden_nodes), +learningRate(LEARNING_RATE), +momentum(MOMENTUM), +numEpochs(NUM_EPOCHS), +outputErrorGradient(0) +{ + //randomize weights + reset(); + + //trainer + initTrainer(); +} + +/*! + * This destructor is not needed. + */ +template<typename T> +neuralNetwork<T>::~neuralNetwork() { +} + +template<typename T> +void neuralNetwork<T>::reset() { + std::default_random_engine generator; + std::uniform_real_distribution<T> distribution(-0.5,0.5); + + weights.clear(); + for (int i = 0; i < numHiddenLayers; ++i) { + std::vector<std::vector<T>> layer; + for (int j = 0; j < numHiddenNodes; ++j){ + std::vector<T> node; + int numConnections = (i == 0) ? numInputs : numHiddenNodes; + for(int k = 0; k <= numConnections; ++k){ + node.push_back(distribution(generator)); + } + layer.push_back(node); + } + weights.push_back(layer); + } + + wHiddenOutput.clear(); + for (int i = 0; i <= numHiddenNodes; ++i) { + wHiddenOutput.push_back(distribution(generator)); + } +} + +template<typename T> +inline T neuralNetwork<T>::getHiddenErrorGradient(int layer, int neuron) { + T weightedSum = 0; + if (numHiddenLayers == 1 || layer == 0) { + T wGradient = wHiddenOutput[neuron] * outputErrorGradient; + return hiddenNeurons[layer][neuron] * (1 - hiddenNeurons[layer][neuron]) * wGradient; + } + if (layer == numHiddenLayers - 1) { + for (int i = 0; i < numHiddenNodes; ++i) { + weightedSum += wHiddenOutput[i] * outputErrorGradient; + } + } else { + for (int i = 0; i < numHiddenNodes; ++i) { + weightedSum += deltaWeights[layer +1][neuron][i] * outputErrorGradient; + } + } + return hiddenNeurons[layer][neuron] * (1 - hiddenNeurons[layer][neuron]) * weightedSum; +} + +template<typename T> +inline T neuralNetwork<T>::activationFunction(T x) { + //sigmoid + if (x < -45) { //from weka, to combat overflow + x = 0; + } else if (x > 45) { + x = 1; + } else { + x = 1/(1 + exp(-x)); + } + return x; +} + +template<typename T> +int neuralNetwork<T>::getNumInputs() const { + return numInputs; +} + +template<typename T> +std::vector<int> neuralNetwork<T>::getWhichInputs() const { + return whichInputs; +} +template<typename T> +int neuralNetwork<T>::getNumHiddenLayers() const { + return numHiddenLayers; +} + +template<typename T> +void neuralNetwork<T>::setNumHiddenLayers(int num_hidden_layers) { + numHiddenLayers = num_hidden_layers; + reset(); + initTrainer(); +} + +template<typename T> +int neuralNetwork<T>::getNumHiddenNodes() const { + return numHiddenNodes; +} + +template<typename T> +void neuralNetwork<T>::setEpochs(const int &epochs) { + numEpochs = epochs; +} + +template<typename T> +std::vector<T> neuralNetwork<T>::getWeights() const{ + std::vector<T> flatWeights; + for (int i = 0; i < weights.size(); ++i) { + for (int j = 0; j < weights[i].size(); ++j) { + for (int k = 0; k < weights[i][j].size(); ++k) { + flatWeights.push_back(weights[i][j][k]); + } + } + } + return flatWeights; +} + +template<typename T> +std::vector<T> neuralNetwork<T>::getWHiddenOutput() const { + return wHiddenOutput; +} + +template<typename T> +std::vector<T> neuralNetwork<T>::getInRanges() const { + return inRanges; +} + +template<typename T> +std::vector<T> neuralNetwork<T>::getInBases() const { + return inBases; +} + +template<typename T> +T neuralNetwork<T>::getOutRange() const { + return outRange; +} + +template<typename T> +T neuralNetwork<T>::getOutBase() const { + return outBase; +} + +#ifndef EMSCRIPTEN +template<typename T> +void neuralNetwork<T>::getJSONDescription(Json::Value &jsonModelDescription) { + jsonModelDescription["modelType"] = "Neural Network"; + jsonModelDescription["numInputs"] = numInputs; + jsonModelDescription["whichInputs"] = this->vector2json(whichInputs); + jsonModelDescription["numHiddenLayers"] = numHiddenLayers; + jsonModelDescription["numHiddenNodes"] = numHiddenNodes; + jsonModelDescription["numHiddenOutputs"] = 1; + jsonModelDescription["inRanges"] = this->vector2json(inRanges); + jsonModelDescription["inBases"] = this->vector2json(inBases); + jsonModelDescription["outRange"] = outRange; + jsonModelDescription["outBase"] = outBase; + + //Create Nodes + Json::Value nodes; + + //Output Node + Json::Value outNode; + outNode["name"] = "Linear Node 0"; + for (int i = 0; i < numHiddenNodes; ++i) { + std::string nodeName = "Node " + std::to_string(i + 1); + outNode[nodeName] = wHiddenOutput[i]; + } + outNode["Threshold"] = wHiddenOutput[numHiddenNodes]; + nodes.append(outNode); + + //Input nodes + for (int i = 0; i < weights.size(); ++i) { //layers + for (int j = 0; j < weights[i].size(); ++j) { //hidden nodes + Json::Value tempNode; + tempNode["name"] = "Sigmoid Node " + std::to_string((i * numHiddenNodes) + j + 1); + for (int k = 0; k < weights[i][j].size() - 1; ++ k) { //inputs + threshold aka bias + std::string connectNode = "Attrib inputs-" + std::to_string(k + 1); + tempNode[connectNode] = weights[i][j][k]; + } + tempNode["Threshold"] = weights[i][j][weights[i][j].size() - 1]; + nodes.append(tempNode); + } + } + + jsonModelDescription["nodes"] = nodes; +} +#endif + +template<typename T> +T neuralNetwork<T>::run(const std::vector<T> &inputVector) { + std::vector<T> pattern; + for (int h = 0; h < numInputs; h++) { + pattern.push_back(inputVector[whichInputs[h]]); + } + //set input layer + inputNeurons.clear(); + for (int i = 0; i < numInputs; ++i) { + inputNeurons.push_back((pattern[i] - (inBases[i])) / inRanges[i]); + } + inputNeurons.push_back(1); + + //calculate hidden layers + hiddenNeurons.clear(); + for (int i = 0; i < numHiddenLayers; ++i) { + std::vector<T> layer; + for (int j=0; j < numHiddenNodes; ++j) { + layer.push_back(0); + if (i == 0) { //first hidden layer + for (int k = 0; k <= numInputs; ++k) { + layer[j] += inputNeurons[k] * weights[0][j][k]; + } + } else { + for (int k = 0; k <= numHiddenNodes; ++k) { + layer[j] += hiddenNeurons[i - 1][k] * weights [i][j][k]; + } + } + layer[j] = activationFunction(layer[j]); + } + layer.push_back(1); //for bias weight + hiddenNeurons.push_back(layer); + } + + //calculate output + outputNeuron = 0; + for (int k=0; k <= numHiddenNodes; ++k){ + outputNeuron += hiddenNeurons[numHiddenLayers - 1][k] * wHiddenOutput[k]; + } + //if classifier, outputNeuron = activationFunction(outputNeuron), else... + outputNeuron = (outputNeuron * outRange) + outBase; + return outputNeuron; +} + +template<typename T> +void neuralNetwork<T>::train(const std::vector<trainingExampleTemplate<T > > &trainingSet) { + initTrainer(); + //setup maxes and mins + std::vector<T> inMax = trainingSet[0].input; + std::vector<T> inMin = trainingSet[0].input; + T outMin = trainingSet[0].output[0]; + T outMax = trainingSet[0].output[0]; + for (int ti = 1; ti < (int) trainingSet.size(); ++ti) { + for (int i = 0; i < numInputs; ++i) { + if (trainingSet[ti].input[i] > inMax[i]) { + inMax[i] = trainingSet[ti].input[i]; + } + if (trainingSet[ti].input[i] < inMin[i]) { + inMin[i] = trainingSet[ti].input[i]; + } + if (trainingSet[ti].output[0] > outMax) { + outMax = trainingSet[ti].output[0]; + } + if (trainingSet[ti].output[0] < outMin) { + outMin = trainingSet[ti].output[0]; + } + } + } + inRanges.clear(); + inBases.clear(); + for (int i = 0; i < numInputs; ++i) { + inRanges.push_back((inMax[i] - inMin[i]) * 0.5); + inBases.push_back((inMax[i] + inMin[i]) * 0.5); + } + for (int i = 0; i < inRanges.size(); ++i) { + if (inRanges[i] == 0.) { + inRanges[i] = 1.0; //Prevent divide by zero later. + } + } + outRange = (outMax - outMin) * 0.5; + outBase = (outMax + outMin) * 0.5; + + //train + if (outRange) { //Don't need to do any training if output never changes + for (int epoch = 0; epoch < numEpochs; ++epoch) { + //run through every training instance + for (int ti = 0; ti < (int) trainingSet.size(); ++ti) { + run(trainingSet[ti].input); + backpropagate(trainingSet[ti].output[0]); + } + } + } +} + +template<typename T> +void neuralNetwork<T>::backpropagate(const T &desiredOutput) { + outputErrorGradient = ((desiredOutput - outBase) / outRange) - ((outputNeuron - outBase)/ outRange); //FIXME: could be tighter -MZ + + //correction based on size of last layer. Is this right? -MZ + T length = 0; + for (int i = 0; i < numHiddenNodes; ++i) { + length += hiddenNeurons[numHiddenLayers - 1][i] * hiddenNeurons[numHiddenLayers - 1][i]; + } + length = (length <= 2.0) ? 1.0 : length; + + //deltas between hidden and output + for (int i = 0; i <= numHiddenNodes; ++i) { + deltaHiddenOutput[i] = (learningRate * (hiddenNeurons[numHiddenLayers - 1][i]/length) * outputErrorGradient) + (momentum * deltaHiddenOutput[i]); + } + + //deltas between hidden + for (int i = numHiddenLayers - 1; i >= 0; --i) { + for (int j = 0; j < numHiddenNodes; ++j) { + T hiddenErrorGradient = getHiddenErrorGradient(i, j); + if (i > 0) { + for (int k = 0; k <= numHiddenNodes; ++k) { + deltaWeights[i][j][k] = (learningRate * hiddenNeurons[i][j] * hiddenErrorGradient) + (momentum * deltaWeights[i][j][k]); + } + } else { //hidden to input layer + for (int k = 0; k <= numInputs; ++k) { + deltaWeights[0][j][k] = (learningRate * inputNeurons[k] * hiddenErrorGradient) + (momentum * deltaWeights[0][j][k]); + } + } + } + } + updateWeights(); +} + +template<typename T> +void neuralNetwork<T>::updateWeights() { + //hidden to hidden weights + for (int i = 0; i < numHiddenLayers; ++i) { + int numDeltas = (i == 0) ? numInputs : numHiddenNodes; + for (int j = 0; j < numHiddenNodes; ++j) { + for (int k = 0; k <= numDeltas; ++k) { + weights[i][j][k] += deltaWeights[i][j][k]; + } + } + } + //hidden to output weights + for (int i = 0; i <= numHiddenNodes; ++i) { + wHiddenOutput[i] += deltaHiddenOutput[i]; + } +} + +//explicit instantiation +template class neuralNetwork<double>; +template class neuralNetwork<float>; \ No newline at end of file diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/neuralNetwork.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/neuralNetwork.h new file mode 100644 index 0000000..124864d --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/neuralNetwork.h @@ -0,0 +1,151 @@ +/** + * @file neuralNetwork.h + * RapidLib + * + * @date 05 Sep 2016 + * @copyright Copyright © 2016 Goldsmiths. All rights reserved. + */ + +#ifndef neuralNetwork_h +#define neuralNetwork_h +#include <vector> +#include "baseModel.h" + +#ifndef EMSCRIPTEN +#include "../dependencies/json/json.h" +#endif + +#define LEARNING_RATE 0.3 +#define MOMENTUM 0.2 +#define NUM_EPOCHS 500 + +/*! Class for implementing a Neural Network. + * + * This class includes both running and training, and constructors for reading trained models from JSON. + */ +template<typename T> +class neuralNetwork : public baseModel<T> { + +public: + /** This is the constructor for building a trained model from JSON. */ + neuralNetwork(const int &num_inputs, + const std::vector<int> &which_inputs, + const int &num_hidden_layers, + const int &num_hidden_nodes, + const std::vector<T> &weights, + const std::vector<T> &wHiddenOutput, + const std::vector<T> &inRanges, + const std::vector<T> &inBases, + const T &outRange, + const T &outBase); + + /** This constructor creates a neural network that needs to be trained. + * + * @param num_inputs is the number of inputs the network will process + * @param which_inputs is an vector of which values in the input vector are being fed to the network. ex: {0,2,4} + * @param num_hidden_layer is the number of hidden layers in the network. Must be at least 1. + * @param num_hidden_nodes is the number of hidden nodes in each hidden layer. Often, this is the same as num_inputs + * + * @return A neuralNetwork instance with randomized weights and no normalization values. These will be set or adjusted during training. + */ + neuralNetwork(const int &num_inputs, + const std::vector<int> &which_inputs, + const int &num_hidden_layer, + const int &num_hidden_nodes); + + /** destructor */ + ~neuralNetwork(); + + /** Generate an output value from a single input vector. + * @param A standard vector of type T that feed-forward regression will run on. + * @return A single value, which is the result of the feed-forward operation + */ + T run(const std::vector<T> &inputVector); + + void reset(); + + int getNumInputs() const; + std::vector<int> getWhichInputs() const; + + int getNumHiddenLayers() const; + void setNumHiddenLayers(int num_hidden_layers); + + int getNumHiddenNodes() const; + + void setEpochs(const int &epochs); + + std::vector<T> getWeights() const; + std::vector<T> getWHiddenOutput() const; + + std::vector<T> getInRanges() const; + std::vector<T> getInBases() const; + T getOutRange() const; + T getOutBase() const; + +#ifndef EMSCRIPTEN + void getJSONDescription(Json::Value ¤tModel); +#endif + + +private: + /** Parameters that describe the topography of the model */ + int numInputs; + std::vector<int> whichInputs; + int numHiddenLayers; + int numHiddenNodes; + + /** Neurons: state is updated on each process(). */ + std::vector<T> inputNeurons; + std::vector<std::vector<T> > hiddenNeurons; + T outputNeuron; + + /** Weights between layers and nodes are kept here. */ + std::vector<std::vector<std::vector<T> > > weights; + std::vector<T> wHiddenOutput; + + /** Normalization parameters */ + std::vector<T> inRanges; + std::vector<T> inBases; + T outRange; + T outBase; + + /** Sigmoid function for activating hidden nodes. */ + inline T activationFunction(T); + + //////////////////////////////////////////////////////////////////////////// + /// These pertain to the training, and aren't need to run a trained model // + +public: + /** Train a model using backpropagation. + * + * @param The training set is a vector of training examples that contain both a vector of input values and a value specifying desired output. + * + */ + void train(const std::vector<trainingExampleTemplate<T> > &trainingSet); + +private: + /** Parameters that influence learning */ + T learningRate; + T momentum; + int numEpochs; + + /** These deltas are applied to the weights in the network */ + std::vector<std::vector< std::vector<T> > > deltaWeights; + std::vector<T> deltaHiddenOutput; + + /** Parameters and functions for calculating amount of change for each weight */ + T outputErrorGradient; + inline T getHiddenErrorGradient(int layer, int neuron); + + void initTrainer(); + + /** Propagate output error back through the network. + * @param The desired output of the network is fed into the function, and compared with the actual output + */ + void backpropagate(const T &desiredOutput); + + /** Apply corrections to network weights, based on output error */ + void updateWeights(); +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/rapidStream.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/rapidStream.cpp new file mode 100644 index 0000000..2f61afe --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/rapidStream.cpp @@ -0,0 +1,186 @@ +/** + * @file rapidStream.cpp + * @author Michael Zbyszynski + * @date 6 Feb 2017 + * @copyright Copyright © 2017 Goldsmiths. All rights reserved. + */ + +#include "rapidStream.h" +#include <iostream> +#include <cmath> +#include <limits> + +#ifdef EMSCRIPTEN +#include "emscripten/rapidStreamEmbindings.h" +#endif + +template<typename T> +rapidStream<T>::rapidStream(int window_size) { + windowSize = window_size; + windowIndex = 0; + circularWindow = new T[window_size]; + for (int i = 0; i < windowSize; ++i) { + circularWindow[i] = 0; + } +} + +template<typename T> +rapidStream<T>::rapidStream() { + windowSize = 3; + windowIndex = 0; + circularWindow = new T[windowSize]; + for (int i = 0; i < windowSize; ++i) { + circularWindow[i] = 0; + } +} + +template<typename T> +rapidStream<T>::~rapidStream() { + delete []circularWindow; +} + +template<typename T> +void rapidStream<T>::clear() { + windowIndex = 0; + circularWindow = new T[windowSize]; + for (int i = 0; i < windowSize; ++i) { + circularWindow[i] = 0; + } +} + +template<typename T> +void rapidStream<T>::pushToWindow(T input) { + circularWindow[windowIndex] = input; + windowIndex = (windowIndex + 1) % windowSize; +} + +template<typename T> +inline T rapidStream<T>::calcCurrentVel(int i) { + return circularWindow[(i + windowIndex) % windowSize] - circularWindow[(i + windowIndex - 1) % windowSize]; +} + +template<typename T> +T rapidStream<T>::velocity() { + return calcCurrentVel(-1); +}; + +template<typename T> +T rapidStream<T>::acceleration() { + return calcCurrentVel(-2) - calcCurrentVel(-3); +}; + +template<typename T> +T rapidStream<T>::minimum() { + T minimum = std::numeric_limits<T>::infinity(); + for (int i = 0; i < windowSize; ++i) { + if (circularWindow[i] < minimum) { + minimum = circularWindow[i]; + } + } + return minimum; +} + +template<typename T> +T rapidStream<T>::maximum() { + T maximum = std::numeric_limits<T>::min(); + for (int i = 0; i < windowSize; ++i) { + if (circularWindow[i] > maximum) { + maximum = circularWindow[i]; + } + } + return maximum; +} + +template<typename T> +T rapidStream<T>::sum() { + T newSum = 0; + for(int i = 0; i < windowSize; ++i) + { + newSum += circularWindow[i]; + } + return newSum; +} + +template<typename T> +T rapidStream<T>::mean() { + return sum()/windowSize; +} + +template<typename T> +T rapidStream<T>::standardDeviation() { + T newMean = mean(); + T standardDeviation = 0.; + for(int i = 0; i < windowSize; ++i) { + standardDeviation += pow(circularWindow[i] - newMean, 2); + } + return sqrt(standardDeviation / windowSize); +} + +template<typename T> +T rapidStream<T>::rms() { + T rms; + for (int i = 0; i < windowSize; ++i) { + rms += (circularWindow[i] * circularWindow[i]); + } + rms = rms/windowSize; + return sqrt(rms); +} + +template<typename T> +T rapidStream<T>::minVelocity() { + T minVel = std::numeric_limits<T>::infinity(); + for (int i = 0; i < windowSize; ++i) { + T currentVel = calcCurrentVel(i); + if ( currentVel < minVel) { + minVel = currentVel; + } + } + return minVel; +} + +template<typename T> +T rapidStream<T>::maxVelocity() { + T maxVel = std::numeric_limits<T>::lowest(); + for (int i = 0; i < windowSize; ++i) { + T currentVel = calcCurrentVel(i); + if (currentVel > maxVel) { + maxVel = currentVel; + } + } + return maxVel; +} + +template<typename T> +T rapidStream<T>::minAcceleration() { + T minAccel = std::numeric_limits<T>::infinity(); + T lastVel = calcCurrentVel(1); + for (int i = 2; i < windowSize; ++i) { + T currentVel = calcCurrentVel(i); + T currentAccel = currentVel - lastVel; + lastVel = currentVel; + if (currentAccel < minAccel) { + minAccel = currentAccel; + } + } + return minAccel; +} + +template<typename T> +T rapidStream<T>::maxAcceleration() { + T maxAccel = std::numeric_limits<T>::lowest(); + T lastVel = calcCurrentVel(1); + for (int i = 2; i < windowSize; ++i) { + T currentVel = calcCurrentVel(i); + T currentAccel = currentVel - lastVel; + lastVel = currentVel; + if (currentAccel > maxAccel) { + maxAccel = currentAccel; + } + } + return maxAccel; +} + +//explicit instantiation +template class rapidStream<double>; +template class rapidStream<float>; + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/rapidStream.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/rapidStream.h new file mode 100644 index 0000000..7e4357e --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/rapidStream.h @@ -0,0 +1,108 @@ +/** + * @file rapidStream.h + * @author Michael Zbyszynski + * @date 6 Feb 2017 + * @copyright Copyright © 2017 Goldsmiths. All rights reserved. + */ + +#ifndef rapidStream_h +#define rapidStream_h + +#include <stdint.h> + +template<typename T> +class rapidStream { +public: + + /** + * Create a circular buffer with 3 elements. + */ + rapidStream(); + /** + * Create a circular buffer with an arbitrary number of elements. + * @param int: number of elements to hold in the buffer + */ + rapidStream(int windowSize); + + ~rapidStream(); + + /** + * Resets all the values in the buffer to zero. + */ + void clear(); + + /** Add a value to a circular buffer whose size is defined at creation. + * @param double: value to be pushed into circular buffer. + */ + void pushToWindow(T input); + + /** Calculate the first-order difference (aka velocity) between the last two inputs. + * @return double: difference between last two inputs. + */ + T velocity(); + + /** Calculate the second-order difference (aka acceleration) over the last three inputs. + * @return double: acceleration over the last three inputs. + */ + T acceleration(); + + /** Find the minimum value in the buffer. + * @return double: minimum. + */ + T minimum(); + + /** Find the maximum value in the buffer. + * @return double: maximum. + */ + T maximum(); + + /** Calculate the sum of all values in the buffer. + * @return double: sum. + */ + T sum(); + + /** Calculate the mean of all values in the buffer. + * @return double: mean. + */ + T mean(); + + /** Calculate the standard deviation of all values in the buffer. + * @return double: standard deviation. + */ + T standardDeviation(); + + /** Calculate the root mean square of the values in the buffer + * @return double: rms + */ + T rms(); + + /** Calculate the minimum first-order difference over consecutive inputs in the buffer. + * @return double: minimum velocity. + */ + T minVelocity(); + + /** Calculate the maximum first-order difference over consecutive inputs in the buffer. + * @return double: maximum velocity. + */ + T maxVelocity(); + + /** Calculate the minimum second-order difference over consecutive inputs in the buffer. + * @return double: minimum acceleration. + */ + T minAcceleration(); + + /** Calculate the maximum second-order difference over consecutive inputs in the buffer. + * @return double: maximum acceleration. + */ + T maxAcceleration(); + +private: + uint32_t windowSize; + uint32_t windowIndex; + T *circularWindow; + + T calcCurrentVel(int i); +}; + + +#endif \ No newline at end of file diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/regression.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/regression.cpp new file mode 100644 index 0000000..45be22e --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/regression.cpp @@ -0,0 +1,133 @@ +/** + * @file regression.cpp + * RapidLib + * + * @author Michael Zbsyzynski + * @date 26 Sep 2016 + * @copyright Copyright © 2016 Goldsmiths. All rights reserved. + */ + +#include <vector> +#include "regression.h" + + +#ifdef EMSCRIPTEN +#include "emscripten/regressionEmbindings.h" +#endif + +template<typename T> +regressionTemplate<T>::regressionTemplate() { + modelSet<T>::numInputs = 0; + modelSet<T>::numOutputs = 0; + numHiddenLayers = 1; + numEpochs = 500; + modelSet<T>::created = false; +}; + +template<typename T> +regressionTemplate<T>::regressionTemplate(const int &num_inputs, const int &num_outputs) { + modelSet<T>::numInputs = num_inputs; + modelSet<T>::numOutputs = num_outputs; + numHiddenLayers = 1; + numEpochs = 500; + modelSet<T>::created = false; + std::vector<int> whichInputs; + for (int i = 0; i < modelSet<T>::numInputs; ++i) { + whichInputs.push_back(i); + } + for (int i = 0; i < modelSet<T>::numOutputs; ++i) { + modelSet<T>::myModelSet.push_back(new neuralNetwork<T>(modelSet<T>::numInputs, whichInputs, numHiddenLayers, modelSet<T>::numInputs)); + } + modelSet<T>::created = true; +}; + +template<typename T> +regressionTemplate<T>::regressionTemplate(const std::vector<trainingExampleTemplate<T> > &training_set) { + modelSet<T>::numInputs = 0; + modelSet<T>::numOutputs = 0; + modelSet<T>::created = false; + train(training_set); +}; + +template<typename T> +std::vector<int> regressionTemplate<T>::getNumHiddenLayers() { + std::vector<int> vecNumHiddenLayers; + if (std::begin(modelSet<T>::myModelSet) != std::end(modelSet<T>::myModelSet)) { + for (baseModel<T>* model : modelSet<T>::myModelSet) { + neuralNetwork<T>* nnModel = dynamic_cast<neuralNetwork<T>*>(model); //FIXME: I really dislike this design + vecNumHiddenLayers.push_back(nnModel->getNumHiddenLayers()); + } + } else { + vecNumHiddenLayers = { numHiddenLayers }; + } + return vecNumHiddenLayers; +} + +template<typename T> +void regressionTemplate<T>::setNumHiddenLayers(const int &num_hidden_layers){ + numHiddenLayers = num_hidden_layers; + //Set any existing models + if (std::begin(modelSet<T>::myModelSet) != std::end(modelSet<T>::myModelSet)) { + for (baseModel<T>* model : modelSet<T>::myModelSet) { + neuralNetwork<T>* nnModel = dynamic_cast<neuralNetwork<T>*>(model); //FIXME: I really dislike this design + nnModel->setNumHiddenLayers(num_hidden_layers); + } + } +} + +template<typename T> +void regressionTemplate<T>::setNumEpochs(const int &epochs) { + numEpochs = epochs; + //set any existing models + if (std::begin(modelSet<T>::myModelSet) != std::end(modelSet<T>::myModelSet)) { + for (baseModel<T>* model : modelSet<T>::myModelSet) { + neuralNetwork<T>* nnModel = dynamic_cast<neuralNetwork<T>*>(model); //FIXME: I really dislike this design + nnModel->setEpochs(epochs); + } + } +} + +template<typename T> +bool regressionTemplate<T>::train(const std::vector<trainingExampleTemplate<T> > &training_set) { + //TODO: time this process? + if (training_set.size() > 0) { + if (modelSet<T>::created) { + return modelSet<T>::train(training_set); + } else { + //create model(s) here + modelSet<T>::numInputs = int(training_set[0].input.size()); + for (int i = 0; i < modelSet<T>::numInputs; ++i) { + modelSet<T>::inputNames.push_back("inputs-" + std::to_string(i + 1)); + } + modelSet<T>::numOutputs = int(training_set[0].output.size()); + for ( auto example : training_set) { + if (example.input.size() != modelSet<T>::numInputs) { + return false; + } + if (example.output.size() != modelSet<T>::numOutputs) { + return false; + } + } + std::vector<int> whichInputs; + for (int j = 0; j < modelSet<T>::numInputs; ++j) { + whichInputs.push_back(j); + } + for (int i = 0; i < modelSet<T>::numOutputs; ++i) { + modelSet<T>::myModelSet.push_back(new neuralNetwork<T>(modelSet<T>::numInputs, whichInputs, numHiddenLayers, modelSet<T>::numInputs)); + } + if (numEpochs != 500) { + for (baseModel<T>* model : modelSet<T>::myModelSet) { + neuralNetwork<T>* nnModel = dynamic_cast<neuralNetwork<T>*>(model); //FIXME: I really dislike this design + nnModel->setEpochs(numEpochs); + } + } + modelSet<T>::created = true; + return modelSet<T>::train(training_set); + } + } + return false; +} + +//explicit instantiation +template class regressionTemplate<double>; +template class regressionTemplate<float>; diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/regression.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/regression.h new file mode 100644 index 0000000..194e1e9 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/regression.h @@ -0,0 +1,55 @@ +/** + * @file regression.h + * RapidLib + * + * @author Michael Zbsyzynski + * @date 26 Sep 2016 + * @copyright Copyright © 2016 Goldsmiths. All rights reserved. + */ + +#ifndef regression_h +#define regression_h + +#include <vector> +#include "modelSet.h" + +/*! Class for implementing a set of regression models. + * + * This doesn't do anything modelSet can't do. But, it's simpler and more like wekinator. + */ + +template<typename T> +class regressionTemplate : public modelSet<T> { +public: + /** with no arguments, just make an empty vector */ + regressionTemplate(); + /** create based on training set inputs and outputs */ + regressionTemplate(const std::vector<trainingExampleTemplate<T> > &trainingSet); + /** create with proper models, but not trained */ + regressionTemplate(const int &numInputs, const int &numOutputs); + + /** destructor */ + ~regressionTemplate() {}; + + /** Train on a specified set, causes creation if not created */ + bool train(const std::vector<trainingExampleTemplate<T> > &trainingSet); + + /** Call before train, to set the number of training epochs */ + void setNumEpochs(const int &epochs); + + /** Check how many hidden layers are in each model. This feature is temporary, and will be replaced by a different design. */ + std::vector<int> getNumHiddenLayers(); + + /** Set how many hidden layers are in all models. This feature is temporary, and will be replaced by a different design. */ + void setNumHiddenLayers(const int &num_hidden_layers); + +private: + int numHiddenLayers; //Temporary -- this should be part of the nn class. -mz + int numEpochs; //Temporary -- also should be part of nn only. -mz +}; + +//This is here so the old API still works +using regression = regressionTemplate<double>; +using regressionFloat = regressionTemplate<float>; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/searchWindow.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/searchWindow.cpp new file mode 100644 index 0000000..9a08a5f --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/searchWindow.cpp @@ -0,0 +1,190 @@ +/** + * @file searchWindow.cpp + * RapidLib + * @author Michael Zbyszynski + * @date 14 Sep 2017 + * @copyright Copyright © 2017 Goldsmiths. All rights reserved. + */ + +#include "searchWindow.h" + +template<typename T> +searchWindow<T>::searchWindow(const int seriesXSize, const int seriesYSize, const warpPath &shrunkenWarpPath, const int searchRadius) : +minValues(seriesXSize, -1), maxValues(seriesXSize, 0), maxY(seriesYSize - 1) { + + //Current location of higher resolution path + int currentX = shrunkenWarpPath.xIndices[0]; + int currentY = shrunkenWarpPath.yIndices[0]; + + //Last evaluated part of low resolution path + int lastWarpedX = std::numeric_limits<int>::max(); + int lastWarpedY = std::numeric_limits<int>::max(); + + int blockSize = 2; //TODO: something other than 2? Different for x and y? + + //project each part of the low-res path to high res cells + for (int i = 0; i < shrunkenWarpPath.xIndices.size(); ++i) { + + int warpedX = shrunkenWarpPath.xIndices[i]; + int warpedY = shrunkenWarpPath.yIndices[i]; + + if (warpedX > lastWarpedX) { + currentX += blockSize; + } + if (warpedY > lastWarpedY) { + currentY += blockSize; + } + + if ((warpedX > lastWarpedX) && (warpedY > lastWarpedY)) + { + markVisited(currentX-1, currentY); + markVisited(currentX, currentY-1); + } + + for (int j = 0; j < blockSize; ++j) { + markVisited(currentX + j, currentY); + markVisited(currentX + j, currentY + blockSize - 1); //TODO: These are redundant? + } + + lastWarpedX = warpedX; + lastWarpedY = warpedY; + } + + if (searchRadius > 0) { + expandWindow(1); + expandWindow(searchRadius-1); + } +} + +template<typename T> +void searchWindow<T>::markVisited(int col, int row) { + if (row <= maxY && col < minValues.size()) { //Don't mark beyond the edge of the window + if (minValues[col] == -1) { + minValues[col] = row; + maxValues[col] = row; + //size++; + } else if (minValues[col] > row) { + //size += minValues[col] - row; + minValues[col] = row; + } else if (maxValues[col] < row) { + //size += row - maxValues[col]; + maxValues[col] = row; + } + } +} + +template<typename T> +void searchWindow<T>::expandWindow(int radius) { + if (radius > 0) { + + //Add all cells in the current window to a vector. + std::vector<std::pair<int, int>> windowCells; + for (int currentX = 0; currentX < minValues.size(); ++currentX) { + for (int currentY = minValues[currentX]; currentY <= maxValues[currentX]; ++currentY) { + std::pair<int, int> currentCell = std::make_pair(currentX, currentY); + windowCells.push_back(currentCell); + } + } + + int maxX = int(minValues.size() - 1); + + for (int cell = 0; cell < windowCells.size(); ++cell) { + std::pair<int, int> currentCell = windowCells[cell]; //TODO: is pair necessary? easier to make currentX and currentY? + + if (currentCell.first != 0 && currentCell.second != maxY) { //move to upper left if possible + //expand until edges are met + int targetX = currentCell.first - radius; + int targetY = currentCell.second + radius; + + if (targetX >= 0 && targetY <= maxY) { + markVisited(targetX, targetY); + } else { + int cellsPastEdge = std::max(0 - targetX, targetY - maxY); + markVisited(targetX + cellsPastEdge, targetY + cellsPastEdge); + } + } + + if (currentCell.second != maxY) { //move up if possible + int targetX = currentCell.first; + int targetY = currentCell.second + radius; + if (targetY <= maxY) { + markVisited(targetX, targetY); + } else { + int cellsPastEdge = targetY - maxY; + markVisited(targetX, targetY - cellsPastEdge); + } + } + + if (currentCell.first != maxX && currentCell.second != maxY) { //move upper right if possible + int targetX = currentCell.first + radius; + int targetY = currentCell.second + radius; + if (targetX <= maxX && targetY <= maxY) { + markVisited(targetX, targetY); + } else { + int cellsPastEdge = std::max(targetX - maxX, targetY - maxY); + markVisited(targetX - cellsPastEdge, targetY - cellsPastEdge); + } + } + + if (currentCell.first != 0) { //move left if possible + int targetX = currentCell.first - radius; + int targetY = currentCell.second; + if (targetX != 0) { + markVisited(targetX, targetY); + } else { + int cellsPastEdge = (0 - targetX); + markVisited(targetX + cellsPastEdge, targetY); + } + } + + if (currentCell.first != maxX) { //move right if possible + int targetX = currentCell.first + radius; + int targetY = currentCell.second; + if (targetX <= maxX) { + markVisited(targetX, targetY); + } else { + int cellsPastEdge = (targetX - maxX); + markVisited(targetX - cellsPastEdge, targetY); + } + } + + if (currentCell.first != 0 && currentCell.second != 0) { //move to lower left if possible + int targetX = currentCell.first - radius; + int targetY = currentCell.second - radius; + + if (targetX >= 0 && targetY >= 0) { + markVisited(targetX, targetY); + } else { + int cellsPastEdge = std::max(0 - targetX, 0 - targetY); + markVisited(targetX + cellsPastEdge, targetY + cellsPastEdge); + } + } + + if (currentCell.second != 0) { //move down if possible + int targetX = currentCell.first; + int targetY = currentCell.second - radius; + if (targetY >= 0) { + markVisited(targetX, targetY); + } else { + int cellsPastEdge = 0 - targetY; + markVisited(targetX, targetY + cellsPastEdge); + } + } + + if (currentCell.first != maxX && currentCell.second != 0) { //move lower right if possible + int targetX = currentCell.first + radius; + int targetY = currentCell.second - radius; + if (targetX <= maxX && targetY >= 0) { + markVisited(targetX, targetY); + } else { + int cellsPastEdge = std::max(targetX - maxX, 0 - targetY); + markVisited(targetX - cellsPastEdge, targetY + cellsPastEdge); + } + } + } + } +} + +//explicit instantiation +template class searchWindow<double>; +template class searchWindow<float>; \ No newline at end of file diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/searchWindow.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/searchWindow.h new file mode 100644 index 0000000..b3684eb --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/searchWindow.h @@ -0,0 +1,36 @@ +/** + * @file searchWindow.h + * RapidLib + * @author Michael Zbyszynski + * @date 14 Sep 2017 + * @copyright Copyright © 2017 Goldsmiths. All rights reserved. + */ + +#ifndef searchWindow_h +#define searchWindow_h + +#include <vector> +#include "warpPath.h" + +/** For fastDTW, a window of cells to calculate costs for. + * These are cells within a specified search radius of a lower resolution path. + */ +template<typename T> +class searchWindow { +public: + searchWindow(const int seriesXSize, + const int seriesYSize, + const warpPath &shrunkenWarpPath, + const int searchRadius); + + std::vector<int> minValues; + std::vector<int> maxValues; + +private: + int maxY; + //int size; + void markVisited(int col, int row); + void expandWindow(int searchRadius); +}; + +#endif /* searchWindow_h */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/seriesClassification.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/seriesClassification.cpp new file mode 100644 index 0000000..cf8728c --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/seriesClassification.cpp @@ -0,0 +1,201 @@ +/** + * @file seriesClassification.cpp + * RapidLib + * + * @author Michael Zbyszynski + * @date 08 Jun 2017 + * @copyright Copyright © 2017 Goldsmiths. All rights reserved. + */ + +#include <vector> +#include <cassert> +#include "seriesClassification.h" +#ifdef EMSCRIPTEN +#include "emscripten/seriesClassificationEmbindings.h" +#endif + +#define SEARCH_RADIUS 1 + +template<typename T> +seriesClassificationTemplate<T>::seriesClassificationTemplate() {}; + +template<typename T> +seriesClassificationTemplate<T>::~seriesClassificationTemplate() {}; + +template<typename T> +bool seriesClassificationTemplate<T>::train(const std::vector<trainingSeriesTemplate<T> > &seriesSet) { + assert(seriesSet.size() > 0); + reset(); + bool trained = true; + allTrainingSeries = seriesSet; + minLength = maxLength = int(allTrainingSeries[0].input.size()); + for (int i = 0; i < allTrainingSeries.size(); ++i) { + //Global + int newLength = int(allTrainingSeries[i].input.size()); + if (newLength < minLength) { + minLength = newLength; + } + if (newLength > maxLength) { + maxLength = newLength; + } + //Per Label + typename std::map<std::string, minMax<int> >::iterator it = lengthsPerLabel.find(allTrainingSeries[i].label); + if (it != lengthsPerLabel.end()) { + int newLength = int(allTrainingSeries[i].input.size()); + if (newLength < it->second.min) { + it->second.min = newLength; + } + if (newLength > it->second.max) { + it->second.max = newLength; + } + } else { + minMax<int> tempLengths; + tempLengths.min = tempLengths.max = int(allTrainingSeries[i].input.size()); + lengthsPerLabel[allTrainingSeries[i].label] = tempLengths; + } + } + return trained; +}; + +template<typename T> +void seriesClassificationTemplate<T>::reset() { + allCosts.clear(); + allTrainingSeries.clear(); + lengthsPerLabel.clear(); + minLength = -1; + maxLength = -1; +} + +template<typename T> +std::string seriesClassificationTemplate<T>::run(const std::vector<std::vector<T>> &inputSeries) { + //TODO: Check to see if trained + int closestSeries = 0; + allCosts.clear(); + T lowestCost = fastDTW<T>::getCost(inputSeries, allTrainingSeries[0].input, SEARCH_RADIUS); + allCosts.push_back(lowestCost); + + for (int i = 1; i < allTrainingSeries.size(); ++i) { + T currentCost = fastDTW<T>::getCost(inputSeries, allTrainingSeries[i].input, SEARCH_RADIUS); + allCosts.push_back(currentCost); + if (currentCost < lowestCost) { + lowestCost = currentCost; + closestSeries = i; + } + } + return allTrainingSeries[closestSeries].label; +}; + +template<typename T> +T seriesClassificationTemplate<T>::run(const std::vector<std::vector<T>> &inputSeries, std::string label) { + //TODO: Check to see if trained + int closestSeries = 0; + allCosts.clear(); + T lowestCost = std::numeric_limits<T>::max(); + for (int i = 0; i < allTrainingSeries.size(); ++i) { + if (allTrainingSeries[i].label == label) { + T currentCost = fastDTW<T>::getCost(inputSeries, allTrainingSeries[i].input, SEARCH_RADIUS); + allCosts.push_back(currentCost); + if (currentCost < lowestCost) { + lowestCost = currentCost; + closestSeries = i; + } + } + } + return lowestCost; +}; + +template<typename T> +std::vector<T> seriesClassificationTemplate<T>::getCosts() const{ + return allCosts; +} + +template<typename T> +int seriesClassificationTemplate<T>::getMinLength() const{ + return minLength; +} + +template<typename T> +int seriesClassificationTemplate<T>::getMinLength(std::string label) const { + int labelMinLength = -1; + typename std::map<std::string, minMax<int> >::const_iterator it = lengthsPerLabel.find(label); + if (it != lengthsPerLabel.end()) { + labelMinLength = it->second.min; + } + return labelMinLength; +} + +template<typename T> +int seriesClassificationTemplate<T>::getMaxLength() const { + return maxLength; +} + +template<typename T> +int seriesClassificationTemplate<T>::getMaxLength(std::string label) const { + int labelMaxLength = -1; + typename std::map<std::string, minMax<int> >::const_iterator it = lengthsPerLabel.find(label); + if (it != lengthsPerLabel.end()) { + labelMaxLength = it->second.max; + } + return labelMaxLength; +} + +template<typename T> +seriesClassificationTemplate<T>::minMax<T> seriesClassificationTemplate<T>::calculateCosts(std::string label) const { + minMax<T> calculatedMinMax; + bool foundSeries = false; + std::vector<T> labelCosts; + for (int i = 0; i < (allTrainingSeries.size() - 1); ++i) { //these loops are a little different than the two-label case + if (allTrainingSeries[i].label == label) { + foundSeries = true; + for (int j = (i + 1); j < allTrainingSeries.size(); ++j) { + if (allTrainingSeries[j].label == label) { + labelCosts.push_back(fastDTW<T>::getCost(allTrainingSeries[i].input, allTrainingSeries[j].input, SEARCH_RADIUS)); + } + } + } + } + if (foundSeries) { + auto minmax_result = std::minmax_element(std::begin(labelCosts), std::end(labelCosts)); + calculatedMinMax.min = *minmax_result.first; + calculatedMinMax.max = *minmax_result.second; + } else { + calculatedMinMax.min = calculatedMinMax.max = 0; + } + return calculatedMinMax; +} + +template<typename T> +seriesClassificationTemplate<T>::minMax<T> seriesClassificationTemplate<T>::calculateCosts(std::string label1, std::string label2) const { + minMax<T> calculatedMinMax; + bool foundSeries = false; + std::vector<T> labelCosts; + for (int i = 0; i < (allTrainingSeries.size()); ++i) { + if (allTrainingSeries[i].label == label1) { + for (int j = 0; j < allTrainingSeries.size(); ++j) { + if (allTrainingSeries[j].label == label2) { + foundSeries = true; + labelCosts.push_back(fastDTW<T>::getCost(allTrainingSeries[i].input, allTrainingSeries[j].input, SEARCH_RADIUS)); + } + } + } + } + if (foundSeries) { + auto minmax_result = std::minmax_element(std::begin(labelCosts), std::end(labelCosts)); + calculatedMinMax.min = *minmax_result.first; + calculatedMinMax.max = *minmax_result.second; + } else { + calculatedMinMax.min = calculatedMinMax.max = 0; + } + return calculatedMinMax; +} + +//explicit instantiation +template class seriesClassificationTemplate<double>; +template class seriesClassificationTemplate<float>; + + +// +//std::vector<T> seriesClassification::getCosts(const std::vector<trainingExample> &trainingSet) { +// run(trainingSet); +// return allCosts; +//} \ No newline at end of file diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/seriesClassification.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/seriesClassification.h new file mode 100644 index 0000000..d76a20a --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/seriesClassification.h @@ -0,0 +1,112 @@ +/** + * @file seriesClassification.h + * RapidLib + * + * @author Michael Zbyszynski + * @date 08 Jun 2017 + * @copyright Copyright © 2017 Goldsmiths. All rights reserved. + */ + +#ifndef seriesClassification_hpp +#define seriesClassification_hpp + +#include <vector> +#include <string> +#include <map> +#include "fastDTW.h" +#include "trainingExample.h" + +/** Class for containing time series classifiers. + * + * Currently only (fast)DTW. + */ + +template<typename T> +class seriesClassificationTemplate { +public: + + /** Constructor, no params */ + seriesClassificationTemplate(); + ~seriesClassificationTemplate(); + + /** Train on a specified set of trainingSeries + * @param std::vector<trainingSeries> A vector of training series + */ + bool train(const std::vector<trainingSeriesTemplate<T> > &seriesSet); + + /** Reset model to its initial state, forget all costs and training data*/ + void reset(); + + /** Compare an input series to the stored training series + * @param std::vector<std::vector> vector of vectors, either float or double input data + * @return The label of the closest training series. + */ + std::string run(const std::vector<std::vector<T> > &inputSeries); + + /** Compare an input series to all of the stored series with a specified label + * @param std::vector<std::vector> either float or double input data + * @param String label to compare with + * @return The lowest cost match, float or double + */ + T run(const std::vector<std::vector<T> > &inputSeries, std::string label); + + /** Get the costs that were calculated by the run method + * @return A vector of floats or doubles, the cost of matching to each training series + */ + std::vector<T> getCosts() const; + + /** Get minimum training series length + * @return The minimum length training series + */ + int getMinLength() const; + + /** Get minimum training series length from a specified label + * @param string The label to check + * @return The minimum length training series of that label + */ + int getMinLength(std::string label) const; + + /** Get maximum training series length + * @return The maximum length training series + */ + int getMaxLength() const; + + /** Get maximum training series length from a specified label + * @param string The label to check + * @return The maximum length training series of that label + */ + int getMaxLength(std::string label) const; + + /** Return struct for calculate costs */ + template<typename TT> + struct minMax { + TT min; + TT max; + }; + + /** Calculate minimum and maximum cost between examples in a label. + * @param string Label to calculate + * @return minMax struct containing min and max + */ + minMax<T> calculateCosts(std::string label) const; + + /** Calculate minimum and maximum cost between examples in one label and examples in a second. + * @param string first label to compare + * @param string second label to compare + * @return minMax struct containing min and max + */ + minMax<T> calculateCosts(std::string label1, std::string label2) const; + +private: + std::vector<trainingSeriesTemplate<T> > allTrainingSeries; + std::vector<T> allCosts; + int maxLength; + int minLength; + std::map<std::string, minMax<int> > lengthsPerLabel; +}; + +//This is here to keep the old API working +using seriesClassification = seriesClassificationTemplate<double>; +using seriesClassificationFloat = seriesClassificationTemplate<float>; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/svmClassification.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/svmClassification.cpp new file mode 100644 index 0000000..5195316 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/svmClassification.cpp @@ -0,0 +1,269 @@ +/** + * @file svmClassification.cpp + * RapidLib + * + * @author Michael Zbyszynski + * @date 23 Feb 2017 + * @copyright Copyright © 2017 Goldsmiths. All rights reserved. + */ + +#include <iostream> +#include "svmClassification.h" +#ifdef EMSCRIPTEN +#include "emscripten/svmEmbindings.h" +#endif + +template<typename T> +svmClassification<T>::svmClassification( + KernelType kernelType, + SVMType svmType, + bool useScaling, + bool useNullRejection, + bool useAutoGamma, + float gamma, + unsigned int degree, + float coef0, + float nu, + float C, + bool useCrossValidation, + unsigned int kFoldValue + ) +{ + + //Setup the default SVM parameters + model = NULL; + problem.l = 0; + problem.x = NULL; + problem.y = NULL; + trained = false; + problemSet = false; + param.svm_type = C_SVC; + param.kernel_type = POLY_KERNEL; //LINEAR_KERNEL; + param.degree = 3; + param.gamma = 0; + param.coef0 = 0; + param.nu = 0.5; + param.cache_size = 100; + param.C = 1; + param.eps = 1e-3; + param.p = 0.1; + param.shrinking = 1; + param.probability = 1; + param.nr_weight = 0; + param.weight_label = NULL; + param.weight = NULL; + + //These are from GTK? + /* + this->useScaling = false; + this->useCrossValidation = false; + this->useNullRejection = false; + this->useAutoGamma = true; + classificationThreshold = 0.5; + crossValidationResult = 0; + + classifierMode = STANDARD_CLASSIFIER_MODE; + */ + init(kernelType,svmType,useScaling,useNullRejection,useAutoGamma,gamma,degree,coef0,nu,C,useCrossValidation,kFoldValue); +} + +template<typename T> +svmClassification<T>::svmClassification(int num_inputs) { + + numInputs = num_inputs; + + //Setup the default SVM parameters + model = NULL; + param.weight_label = NULL; + param.weight = NULL; + problem.l = 0; + problem.x = NULL; + problem.y = NULL; + trained = false; + problemSet = false; + param.svm_type = C_SVC; + param.kernel_type = POLY_KERNEL; //LINEAR_KERNEL; + param.degree = 3; + param.gamma = 0; + param.coef0 = 0; + param.nu = 0.5; + param.cache_size = 100; + param.C = 1; + param.eps = 1e-3; + param.p = 0.1; + param.shrinking = 1; + param.probability = 1; + param.nr_weight = 0; + param.weight_label = NULL; + param.weight = NULL; + +} + +template<typename T> +svmClassification<T>::~svmClassification() { + +} + +template<typename T> +void svmClassification<T>::reset() { + //TODO: implement me +} + +template<typename T> +bool svmClassification<T>::init( + KernelType kernelType, + SVMType svmType, + bool useScaling, + bool useNullRejection, + bool useAutoGamma, + float gamma, + unsigned int degree, + float coef0, + float nu, + float C, + bool useCrossValidation, + unsigned int kFoldValue + ){ + + /* + //Clear any previous models or problems + clear(); + + //Validate the kernerlType + if( !validateKernelType(kernelType) ){ + errorLog << __GRT_LOG__ << " Unknown kernelType!\n"; + return false; + } + + if( !validateSVMType(svmType) ){ + errorLog << __GRT_LOG__ << " Unknown kernelType!\n"; + return false; + } + */ + + param.svm_type = (int)svmType; + param.kernel_type = (int)kernelType; + param.degree = (int)degree; + param.gamma = gamma; + param.coef0 = coef0; + param.nu = nu; + param.cache_size = 100; + param.C = C; + param.eps = 1e-3; + param.p = 0.1; + param.shrinking = 1; + param.probability = 1; + param.nr_weight = 0; + param.weight_label = NULL; + param.weight = NULL; + /* + this->useScaling = useScaling; + this->useCrossValidation = useCrossValidation; + this->useNullRejection = useNullRejection; + this->useAutoGamma = useAutoGamma; + classificationThreshold = 0.5; + crossValidationResult = 0; + */ + + return true; +} + +template<typename T> +void svmClassification<T>::train(const std::vector<trainingExampleTemplate<T> > &trainingSet) { + //TODO: should be scaling data -1 to 1 + //Get normalization parameters + std::vector<T> inMax = trainingSet[0].input; + std::vector<T> inMin = trainingSet[0].input; + for (int ti = 1; ti < (int) trainingSet.size(); ++ti) { + for (int i = 0; i < numInputs; ++i) { + if (trainingSet[ti].input[i] > inMax[i]) { + inMax[i] = trainingSet[ti].input[i]; + } + if (trainingSet[ti].input[i] < inMin[i]) { + inMin[i] = trainingSet[ti].input[i]; + } + } + } + inRanges.clear(); + inBases.clear(); + for (int i = 0; i < numInputs; ++i) { + inRanges.push_back((inMax[i] - inMin[i]) * 0.5); + inBases.push_back((inMax[i] + inMin[i]) * 0.5); + } + for (int i = 0; i < inRanges.size(); ++i) { + if (inRanges[i] == 0.) { + inRanges[i] = 1.0; //Prevent divide by zero later. + } + } + + //initialize problem + problem.l = 0; + problem.x = NULL; + problem.y = NULL; + + //SVM problem has: + int numberOfExamples = int(trainingSet.size()); + int numberOfFeatures = int(trainingSet[0].input.size()); + problem.l = numberOfExamples; + problem.x = new LIBSVM::svm_node*[numberOfExamples]; + problem.y = new double[numberOfExamples]; + for (int i = 0; i < numberOfExamples; i++) { + problem.y[i] = trainingSet[i].output[0]; //model set makes this a one item list + problem.x[i] = new LIBSVM::svm_node[numberOfFeatures + 1]; //dummy node at the end of array + for (int j = 0; j < numberOfFeatures; j++) { + // x = svn_nodes[] == index and value pairs + problem.x[i][j].index = j + 1; + problem.x[i][j].value = ((trainingSet[i].input[j] - inBases[j]) / inRanges[j]); //TODO: make normalization optional + } + problem.x[i][numberOfFeatures].index = -1; //Assign the final node value + problem.x[i][numberOfFeatures].value = 0; + } + + model = LIBSVM::svm_train(&problem, ¶m); + trained = true; +}; + +template<typename T> +T svmClassification<T>::run(const std::vector<T> &inputVector) { + if (trained) { + double predictedClass = 0.; + + //Change to LIBSVM format + LIBSVM::svm_node *inputNodes = NULL; + inputNodes = new LIBSVM::svm_node[numInputs + 1]; + for (int i = 0; i < numInputs; i++) { + inputNodes[i].index = i + 1; + inputNodes[i].value = ((inputVector[i] - inBases[i]) / inRanges[i]); //TODO: make normalization optional + } + inputNodes[numInputs].index = -1; + inputNodes[numInputs].value = 0; + + predictedClass = LIBSVM::svm_predict(model, inputNodes); + delete[] inputNodes; + return predictedClass; + } else { + return 0; + } +} + +template<typename T> +int svmClassification<T>::getNumInputs() const { + return 0; +}; + +template<typename T> +std::vector<int> svmClassification<T>::getWhichInputs() const { + std::vector<int> returnVec; + return returnVec; +}; + +#ifndef EMSCRIPTEN +template<typename T> +void svmClassification<T>::getJSONDescription(Json::Value ¤tModel){ + +}; +#endif + +//explicit instantiation +template class svmClassification<double>; +template class svmClassification<float>; diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/svmClassification.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/svmClassification.h new file mode 100644 index 0000000..a1885ed --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/svmClassification.h @@ -0,0 +1,133 @@ +/** + * @file svmClassification.h + * RapidLib + * + * @author Michael Zbyszynski + * @date 23 Feb 2017 + * @copyright Copyright © 2017 Goldsmiths. All rights reserved. + */ + +#ifndef svm_h +#define svm_h + +#include <vector> +#include "baseModel.h" +#include "../dependencies/libsvm/libsvm.h" + +template<typename T> +class svmClassification : public baseModel<T> { + +public: + enum SVMType{ C_SVC = 0, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR }; + enum KernelType{ LINEAR_KERNEL = 0, POLY_KERNEL, RBF_KERNEL, SIGMOID_KERNEL, PRECOMPUTED_KERNEL }; + + /** + Default constructor. + + Set the initial SVM settings, although these can be changed at any time using either init(...) function of the set... functions. + + @param kernelType: this sets the SVM kernelType. Options are LINEAR_KERNEL, POLY_KERNEL, RBF_KERNEL, SIGMOID_KERNEL, PRECOMPUTED_KERNEL. The default kernelType is kernelType=LINEAR_KERNEL + @param svmType: this sets the SVM type. Options are C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR. The default svmType is svmType=C_SVC + @param useScaling: sets if the training/prediction data will be scaled to the default range of [-1. 1.]. The SVM algorithm commonly achieves a better classification result if scaling is turned on. The default useScaling value is useScaling=true + @param useNullRejection: sets if a predicted class will be rejected if the classes' probability is below the classificationThreshold. The default value is useNullRejection=false + @param useAutoGamma: sets if the SVM gamma parameter will automatically be computed, if set to true then gamma will be set to (1.0/numFeatures), where numFeatures is the number of features in the training data. The default value is useAutoGamma=true + @param gamma: sets the SVM gamma parameter. The default value is gamma=0.1 + @param degree: sets the SVM degree parameter. The default value is degree=3 + @param coef0: sets the SVM coef0 parameter. The default value is coef0=0 + @param nu: sets the SVM nu parameter. The default value is nu=0.5 + @param C: sets the SVM C parameter. The default value is C=1 + @param useCrossValidation: sets if the SVM model will be trained using cross validation. The default value is useCrossValidation=false + @param kFoldValue: sets the number of folds that will be used for cross validation. The default value is kFoldValue=10 + */ + + svmClassification( + KernelType kernelType = LINEAR_KERNEL, + SVMType svmType = C_SVC, + bool useScaling = true, + bool useNullRejection = false, + bool useAutoGamma = true, + float gamma = 0.1, + unsigned int degree = 3, + float coef0 = 0, + float nu = 0.5, + float C = 1, + bool useCrossValidation = false, + unsigned int kFoldValue = 10 + ); + + svmClassification(int numInputs); + + /** Destructor */ + ~svmClassification(); + + /** Fill the model with a vector of examples. + * + * @param The training set is a vector of training examples that contain both a vector of input values and a double specifying desired output class. + * + */ + void train(const std::vector<trainingExampleTemplate<T> > &trainingSet); + + /** Generate an output value from a single input vector. + * @param A standard vector of doubles to be evaluated. + * @return A single double: the nearest class as determined by k-nearest neighbor. + */ + T run(const std::vector<T> &inputVector); + + void reset(); + + /** + This initializes the SVM settings and parameters. Any previous model, settings, or problems will be cleared. + + @param kernelType: this sets the SVM kernelType. Options are LINEAR_KERNEL, POLY_KERNEL, RBF_KERNEL, SIGMOID_KERNEL, PRECOMPUTED_KERNEL + @param UINT svmType: this sets the SVM type. Options are C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR + @param useScaling: sets if the training/prediction data will be scaled to the default range of [-1. 1.]. The SVM algorithm commonly achieves a better classification result if scaling is turned on + @param useNullRejection: sets if a predicted class will be rejected if the classes' probability is below the classificationThreshold + @param useAutoGamma: sets if the SVM gamma parameter will automatically be computed, if set to true then gamma will be set to (1.0/numFeatures), where numFeatures is the number of features in the training data + @param gamma: sets the SVM gamma parameter + @param degree: sets the SVM degree parameter + @param coef0: sets the SVM coef0 parameter + @param nu: sets the SVM nu parameter + @param C: sets the SVM C parameter + @param useCrossValidation: sets if the SVM model will be trained using cross validation + @param kFoldValue: sets the number of folds that will be used for cross validation + @return returns true if the SVM was initialized, false otherwise + */ + bool init(KernelType kernelType,SVMType svmType,bool useScaling,bool useNullRejection,bool useAutoGamma, + float gamma, + unsigned int degree, + float coef0, + float nu, + float C, + bool useCrossValidation, + unsigned int kFoldValue + ); + + int getNumInputs() const; + std::vector<int> getWhichInputs() const; + + +#ifndef EMSCRIPTEN + void getJSONDescription(Json::Value ¤tModel); +#endif + +private: + bool problemSet; + struct LIBSVM::svm_model *model; + struct LIBSVM::svm_parameter param; + struct LIBSVM::svm_problem problem; + + int numInputs; + + /** Normalization parameters */ + std::vector<double> inRanges; + std::vector<double> inBases; + + bool trained; +}; + +#endif + + + + + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/trainingExample.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/trainingExample.h new file mode 100644 index 0000000..ac9c3f1 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/trainingExample.h @@ -0,0 +1,38 @@ +/** + * @file trainingExample.h + * RapidLib + * + * @author Michael Zbyszynski + * @date 22 Nov 2017 + * @copyright Copyright © 2016 Goldsmiths. All rights reserved. + */ + +#ifndef trainingExample_h +#define trainingExample_h + +#include <vector> +#include <string> + +/** This is used by both NN and KNN models for training */ +template<typename T> +struct trainingExampleTemplate { + std::vector<T> input; + std::vector<T> output; +}; + +//This is here to keep the old API working +using trainingExample = trainingExampleTemplate<double>; +using trainingExampleFloat = trainingExampleTemplate<float>; + +/** This is used by DTW models for training */ +template<typename T> +struct trainingSeriesTemplate { + std::vector<std::vector<T> > input; + std::string label; +}; + +//This is here to keep the old API working +using trainingSeries = trainingSeriesTemplate<double> ; +using trainingSeriesFloat = trainingSeriesTemplate<float>; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/warpPath.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/warpPath.cpp new file mode 100644 index 0000000..c1768dc --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/warpPath.cpp @@ -0,0 +1,18 @@ +/** + * @file warpPath.cpp + * RapidLib + * @author Michael Zbyszysnski + * @date 13 Sep 2017 + * + * @copyright Copyright © 2017 Goldsmiths. All rights reserved. + */ + +#include "warpPath.h" + +warpPath::warpPath() {}; +warpPath::~warpPath() {}; + +void warpPath::add(int x, int y) { + xIndices.insert(xIndices.begin(), x); + yIndices.insert(yIndices.begin(), y); +}; diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/warpPath.h b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/warpPath.h new file mode 100644 index 0000000..906123a --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/RapidLib/src/warpPath.h @@ -0,0 +1,37 @@ +/** + * @file warpPath.h + * RapidLib + * @author Michael Zbyszynski + * @date 13 Sep 2017 + * @copyright Copyright © 2017 Goldsmiths. All rights reserved. + */ + +#ifndef warpPath_h +#define warpPath_h + +#include <vector> + +/** Class to hold warp paths through a cost matrix */ +class warpPath { +public: + warpPath(); + ~warpPath(); + /** + * Add a point to the beginning of the warp path. + * (Paths are calculated starting from the end) + */ + void add(int x, int y); + + std::vector<int> xIndices; + std::vector<int> yIndices; +}; + +/** return struct holding a warp path and the cost of that path */ +struct warpInfo { +public: + warpPath path; + double cost; + +}; + +#endif /* warpPath_h */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/.gitignore b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/.gitignore new file mode 100644 index 0000000..62d8ccb --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/.gitignore @@ -0,0 +1,14 @@ +**/.DS_Store +**/xcuserdata/** + +**/CMakeLists.txt + +src/host/PiPoHost.cpp + +build/doxygen/pipo-long.doxygen +build/doxygen/pipo-original.doxygen +build/doxygen/pipo-sdk.doxygen + +doc/pipo-sdk.doxygen +doc/pipo_long.doxygen +doc/html/** diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/README.md b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/README.md new file mode 100644 index 0000000..db55481 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/README.md @@ -0,0 +1,103 @@ + +# PiPo — Plugin Interface for Processing Objects # + +PiPo is an extremely simple plugin API for modules processing streams of multi-dimensional data such as audio, audio descriptors, or gesture and motion data. The current version of the interface is limited to unary operations. Each PiPo module receives and produces a single stream. The elements of a stream are time-tagged or regularly sampled scalars, vectors, or two-dimensional matrices. + + +### More Information + +http://ismm.ircam.fr/pipo/ + +### Authors + +This code has been initially authored by Norbert Schnell in the <a href="http://ismm.ircam.fr">Sound Music Movement Interaction</a> team of the <a href="http://www.ircam.fr/stms.html?&L=1">STMS Lab</a> - IRCAM - CNRS - UPMC. + +### Copyright + +Copyright (c) 2012–2017 by IRCAM – Centre Pompidou, Paris, France. +All rights reserved. + +### Licence: BSD 3-clause + +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 copyright holder 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 HOLDER 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. + +### Features + +PiPo has been developed to make things simple for users and developers. + +#### User Level Features + +- Easy integration and customization of stream processing modules +- Suited for filtering, transformation, extraction, and segmentation algorithms +- Real-time and offline processing +- Applying to audio and control streams (for whom this distinction still makes sense) + +#### Developer Level Features + +- Fast and easy implementation of modules and reuse of code for different contexts +- C/C++ API defined by a single header file without additional dependencies +- Core API as single abstract class defining a small set of virtual methods + +#### PiPo Stream Attributes + +PiPo streams are a sequences of frames characterized by a set of attributes. A PiPo module defines the attributes of its output stream when receiving the attributes of the input stream. + +Each module can configure its internal state depending on the attributes of the input stream (e.g. memory allocation and pre-calculated state variables) before propagating its output stream attributes to the next module. + +This way, the attributes of the input stream are propagated through a series of PiPo modules before starting the actual stream processing. + +In summary, a PiPo stream is described by the following attributes: + +- a boolean representing whether the elements of the stream are time-tagged +- frame rate (highest average rate for time-tagged streams) +- lag of the output stream relative to the input +- frame width (also number of channels or matrix columns) +- frame height (or number of matrix rows) +- labels (for the frame channels or columns) +- a boolean representing whether the frames have a variable size (respecting the given frame size as maximum) +- extent of a frame in the given domain (e.g. duration or frequency range) +- maximum number of frames in a block exchanged between two modules + +#### PiPo Module Parameters + +The PiPo SDK comes with a template class [PiPo::Attr](http://recherche.ircam.fr/equipes/temps-reel/mubu/pipo/sdk-doc-v0.1/class_pi_po_1_1_attr.html) permits to define scalar, enum, or variable or fixed size vector attributes of a pipo module that are exposed to the host environment. + +Since certain parameter changes may also change the attributes of a module’s output stream, PiPo provides a mechanism for signaling these changes through the following modules to the processing environment (i.e. the PiPo host). + +For MAX/MSP PiPo includes a binding to extend a PiPo class to a Max/MSP external that then declares the module's parameters as Max/MSP attributes and implement the required setters and getters. + +## PiPo API + +### Module API + +The PiPo Module API consists of the abstract class [PiPo](http://recherche.ircam.fr/equipes/temps-reel/mubu/pipo/sdk-doc-v0.1/class_pi_po.html) in [PiPo.h](src/include/PiPo.h) of a few virtual methods for propagating stream attributes (see above), frames, and additional processing control through a series of modules: + +- Propagating stream attributes +- Propagating frames +- Reset stream processing +- Finalize stream processing +- Propagate the change of a parameter requiring redefining the output stream attributes + +See the doc extraced from [PiPo.h](include/PiPo.h) at: http://recherche.ircam.fr/equipes/temps-reel/mubu/pipo/sdk-doc-v0.1/ + +### Host API + +Classes supporting implementation of PiPo hosts are found in directory [host](src/host). + +PiPo comes with a collection of native modules that can be combined into graphs to form more complex modules. +Their source code is located into directory [modules](src/modules). + +The host-level `PiPoCollection` class is a module factory, able to instantiate complex PiPo modules from a simple graph syntax. +It provides all the native PiPo modules and can be extended with third-party PiPo modules, thus allowing to create a wide number +of combinations. + + + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/bin/osx/libpipo.a b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/bin/osx/libpipo.a new file mode 100644 index 0000000000000000000000000000000000000000..d69bcde24506e11955ddf3b4da27858fe95094db GIT binary patch literal 5204528 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�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%0A(?Ri$|IAY)r&<IV>8@^h6YO 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πk@Sha9)EWuc<B!mk4LI zI`SGFc@2)ddRJa;xQ*u4`Vgy{9C;0nyq0j)7DrxVa~Q6vF`U;B&Z?^m=d~und5y^9 z-(bO;Z+i;(5xP43PFNw`j|YBV41cHmGf=6z5PMo$!+G^B;k@SNa9&emIIp20oYz_x z&TDk!CBk40wdd5|M5w=wt>L`pmT+E6b2zWrk=M`^hO2kv)j9GS8^d)QTzO%z)`oCi zbA33kwJx03;>fFW<h3Nib?Y5@iP{8YGPPsRp40$-*Dg;#hE&*_+Fg4tl3E)YxkPI? zueCXx*X+n^bmX-(h3hsr^6DLVt&QQjtqtM4CP!XNT^O#}kyq!)OE{|5*2eI;Cb7J( zc1iF_G$s;>7C5ghOO`a&CQu-X6ScKX4Gl|{)VDTB_<Jv)-+LO`-LouDh~(!R|My2f zpB{@<R3Tk~{~rDiRO8PQ{Kw}K{C}M?BR-Fhi-Mz62OpIN&KUilPnq~&)d(XezKish zWapM3t-igzNqi%G)9`iau~@8wvZlozpojWkP0VY)-UgAAN}2c+o<*|4;X7inN>v$8 z>aYIs@g<r#+s0S(K>@u)RyqNEM4$T1RbS-O$JZh<Y<#sAzEi-b)1>1j3@Ka(-8H;} zep`<brc!I}She|ffgFD~NqjfUPQC_w)<^HYkB@%Mi#|5Kea!R#!<;*V@A8`yU%IPn zFta-v-%n-ba`DkgSgK;vHz;N2kqZRE%Dcq#)MK&Odu5h*h`)+|gLIa8D2#7fN{5cc zj%Ca=QqKPNrMsC#n?8k)bc#Nu@!=P?dNZm1bRUry>aQp1JIdH%u}4eNC-CLFcJTn) z^gSx^T`Tcjmz7_Fht*$=zJYYNjqi^veE8{9`{Tq%$JAW?{jS9K4-!jXnfPF27^O|$ zpWZ7Fss4UohfSV6zWlN<Zh#*azXF<Czeca|y2ST@%-jQfq`yx;?%M^cznPtQ?--*i zD%kd5XIkVxEAhQ8@yTRtRxGwteW$0A=UzCEB5m4(C0zn~&rRa_w5<Iy=#w&O&_{f! zA<!8@p>CAvR{>A?1iT3UUq^Z-o_jupc>+(+72AaW`ezyv^xxAn%ly8zZS)5nZ6j~A zjU^YY8QWU3>W`PA=9<xOw~g+5b9DHPw$ZJxwT*6gb^U1a<@KW*POll=`od`P)Qib4 zQLoxY|NeDqsBLV+n{A^NK=NkWNJ}h!Xf`qdLuC`!<Ih+UEdXY0=4i!O@&)yMRn1uP zl%H5QvhPc=_(Qt@KeF$Qiugl>1pq6OFT_7~D}R3>{`uso(Nm*eY5U6eD%(cC5wt!w zvu$+M45nZ#);6+d2B@G3QBe`ccUAi0tuv5{P0%0F=4yN!+xNoQ@F{_@`?R}(MGD2p zo<&vzlSj5BK(-_b8FNy=wJ>R8$uG5yywG;nhrSwLye1Z-@x$=dV7T6H8`<|Z_?H7E zsDUIg;USVHPLAC=qiys>$uTZQ7xdyqRxyaui<cP13e(67H6QwFc3FJ!L&N|<&x3E& zLOPhF(P0S2*4H6IuR(-f#aQEiJ6hWCto#nN8=j``W2<ULlPATug`>%*#*$C1NS=&; z`~jdv2VNa%sfZuiCKGMko8-%58&1YQzu~FT4aZ(gLRCm!9$%3>79U?qfZfT*f$y~+ z$7`lNC=)OLI6iOMgMb=2RWX`;eB!0EXU|T|5LjPpgOoF`Mw6%U1lh?`6Hkgl&`k_X zzN|NNGCo3z|6&qu6SaM8Me?cm$V&eHIAryys^l>i*Rick#lrwW_Q|T`<1(A+p=_q- z*u=9$k3gnKd<0p<fU&lPqZ_~=`c^Z#;VDTWQTjGfI=1iR*zi+4z@y2}jU`Wxyk3C} zIZ~s^6X58`>y=}}CuLUR?C94d_!BQCkBU~0j_o@!HvGisp=oHAOUIs}udQE;k0+r~ zW67f{k|*NhdoaZDJ5GVEN5SJa1zWcs9o_mk4*@s>@uVS;#TbIIt>DSlr>X$;SEFF` z26Vn=_JiC=0B8))(`eaf<<8j;X5-6F#}APuj6X~^Z{mN@*E>#uGQskr0dMb|{V>44 z693pzo0x2T|ML&Nh1>_S@&4zn=8r-&R5w=GH6yz5<M=(N!G+nHaQzXee=A<&{pC95 zn~S=);+?18ir@Ja;@`so72sBJ0)@CJiQ9<5Py<tA4~&atKNKuOtH}pYQS0vQC_&dl zwAM_6lv*;4@!LM_;UC94lMhHtN@jl#J;&fC!QB0)8YP#VBXkcTa8kkb{Wi5hMVo%M zQZJCw$(XoIDmPIfl}U<*296H3b#FM<Hn#OyW`3Z9zx8t{+{nJuuz$b7+z=A~tN5-f z|50IOSn@1>ks#=Vkd-mnY}g2`Z#tV*wvA1*5uoge`1o(Y6$-S3y8~rAI`VvlQb$;& z_kesUV1NiLA|*^Eln8tq`5dS>(7Pn+i$E`w5X^7G1j>AM>7QubDc-8(qhbIt%4|>* zMM-xk-d8~}Dc;sL)(eXwm(G<Yiut)>D-7GO85)L~E`ID1Dyek@HLny*!Z6Up^fXC{ zW-eY4Qo>b^Db?;p6^M?BN19d$?*>7*Z<CG%rgghN>7k*{X%AYhk!h96p(dZhE&`qq z%n#Z!M^4CDTle#VmV3CJLmwqfh6JMb?*k?X8y5yF0GTf8!vsGQCb&~&L0wNlU5}uJ zKt;zk93A;eMeFHkJw0XV>5Ccz!~_7vsS^yK5wn=B<}pU24dnBREatDWKs<y;CqDHy zShMdbnxEl<s0sMUSn>qR`n6~c--Z1>5zJ)5T%CYgy(x)4xgvQaK5`-8S?`Wux)*w< z0G>bt1T%gk<9vc}j%_$HGEq@+8i+As!!MI1c&x2^>k~+zck`w_W+CIuhow2Z8ioeM zjV6V7el9+~6Q~1@lfyPbQ!OL0W((Vlkx@kR-X2IZq+Rq_8E6HpMDqxb%n9^y6w0vg zXe@r@C>BX*Czv!{YWQ<a4Sk|#2?a)X5A6{nu1$dJnOR|ju3Kh}N-+U4o&cYk2A>jL z<kI3ZA^Iz3LI*|dposKF&>E)9H6H?Bcs~4HkTU^f#BP?xV-pjY>&%&nTJxt@Z3;sF ztuBNqF(y4~jg0Wiw-G|iHv@f`8(@jQ0`KRPs~ETf!6H?jD5}azU=-^~l_w~Q79ep- zr`AJ*dL^CTTIHr5z><})&1WH$6WRZe+?B@Y?^*QVat9*&qL4<Ov^#_l22-+2e3yv| zVz78hfX*!xHA&nG=%qP3z+gEg7&gi!!N`^pOsE2sij7Kwsni;Nnv+a75y+$vJLyt# zED9~@5rp`Hr!)-NWy$etkYgSXeYn93+Zd_g243fI{}7W@NE#Ke8tLV#v9Tms-O=RX z7n2W>UXAQK5{v)py$c|9hX%kg%6supul&Z)m7`oT@?|PN8$a?bswNYMcsX+#Ib;_* zK}uUUL(8dW_Ji@I7j8#(e9NEHs%C_o0|HIBL6-^8010M>nuS1e#X>Im>#;|P3iyd) z{-)x~QGDG`5z~!t`3`vh*N~6rsjY()j$(7GQ3Us8g0?J#CWwwf8TiY@B|tsKUwP80 z#6*0E!Z3m%)2Q0Nv3N5N5A9@d`n!TF#gE)irJOHw1b^-gvN5?mbQ2Jvhg8v@q2o*E z)NvQEuDbKoTTqm@X~-xRf-d-JBxA5pTqqhE8)t@)*FaEjqE`H&T7ZdSe~M*C;9)fL z7q<|n{AOOan&Gr+h7#cLoCBzXW*;T&uz)Ya0zOZg*F#<KdqRUTjRt%tH-SMo9UrL& zF64W+BF_Y6*|>#4{~Tk+$gFXbECOO{+^B$z7&CF=evoCdJs362|FH=Q_)B)NH(?Ge zMkh9L5&npArbwm$mSTalE-z<KiTp8Ele4EszcTWARomz|DfH-}@8ECz;}>Ay+Qz*F z^cdrkw(f<8+bW(v`w#4BK!7U!B}dI{T2PMPi#`d3^GjIa30C?qQq0~4#jwKU;0m6D z!Cd`yB9#W_ZXOr|;vUYVLh?aT;}A6n`{(Cxk@;q2a`?9%Tfur4e~5Nbs4l@;*7cY! zYiy$D$tG&JNt(iy!v|?(AHc{#Z{<WZ4IQ-1;v2GIBHm?lxxt!oqDvN!4Idf#=ZcCq zrAK-SO%kI!DRLqE?Cgg$^O`-ExV5GuaYwd|&Jo{;w=VJx(>?=0Y@mddBG(7=^|6V6 zqxt&tbJ!#ZJEb#JiqR%&fdxe`B>bGIJYhK5XIx@L)qOEqkAx*?_Z*^3VqqIUYYtHj z5+jwrM&_H9Ax6}HDumpafh@UF!@7#_3Vbz;UpCI-LIF_;31rg0pJPc1ym{I|q^5|z z5Ub&I$<ZWA)M!03fP^kA1QrO3=$TKv9v-rUB|xvWK2`*MF$$!}Q0uOK7$S2PX2%j4 z%<{)3YAFAs2tC5=#P9es81W1LsTuZ--2i{_RdYFJhU>n70?eVh4I=Y$Ey`|wl*@h) zU;4uz$DjXEReb4B<6D06<9O=(@vU#fxBatThh`eamlpWqOMiemXHe%S@hv|_o$toC zem}nLAKSWl>JsZiu5t5nuJPUY(l>%usK$5VTYrdFf*O7s|Ix%WN3{WYdh%B0A5GbM ze<87-p%OrRW~G9VHko>TIn*_PXt5wf`#MAeAOiZr7;263aQ%0q9L;`)T7r>cnvi}{ zr0;%`XoOJ0!>M_a+QN7F>_pz3-+n88&$low!~2={=u&~}QCa6v0be6=ZvTv|&#>1r z?7Z<M{Je9V>WX+ZZG*)hUP6EGfbqO@oIpdN?1QSjhO2@s`RrtP)PvA{5dZJ|GmvIC zgE;pUK!8piA_9yV1>l@Xg@Q`eM5jb^51Vp9dCei>FgSNe^txtTr0*V=TmWpR#5eEI z<qWIpY(FHpKkv{Y<m+})1Rp3M^9<ZSqD0mlCrIB;E|lm*;XQ{$dfuTLnNPrEB31ru zq-kv==JSUxl`NoQYnGHYfDi?Sm<?skIAIBF;`Z6Fo?>!Sz0+zz;KH>arCjUouLNkM zon{KR9@8CdX`V%2YPfH33@ivMM;Pi;2y_*h(uvHFfrG?JLoJxahIVZD*vQwSrgSw3 z1aAmZ5!_nSk+_wK4z(@EMvR&@5rBNdKF<JAY@g4o3=uMFJ`fE#e32t>jgLcUB>SRg z=$dinnl<!7`YiMj!lZ;z=o@vy#wZ|kY{(J9M4KEJV%CSEU@uj~SVnB=f*YV5Ms0|L zz0F{rj+QRd2Pj{<0^C~DmUIQU-O`2fV$vmwQI*3ik5Bm06*!DM`@iSk$?gcFWlhm6 zoey#ShbHb)+c9jA#IiyJcd(597h&OzHMuJM*m4vaC82#lwVr*MJP~a@%W2f+^(-YQ ztY)AJj0euT80&$<@n8D@vXo*A$CeIRjBSPDMaBIrFhf6|RQjnoQ4GH#c{o0P6V`+V zY3QXLiHI-5+V>#GLw?4NwZ=<;(`-h=WLG0{;n`}yQfb`40Z-_xikPa#HasQO;3<nw z2qzs4_~eHQ{9rmW>oK1+xm&9EMB#P;p@dY$8gv8*z>|nExo!l22t>6<F<LtCdN-6d z+ueXR7wrbr0eb?)x*;GUyTSTYv>O7#(G9uO!o~=*ZQ^TKqsiDBX&f!wj!ZoE25j_$ zFVG<qoIN@EAOCXp?5elUo-O?3?Ab?uhS@3`I*&3yA~cp<f+J3g){lLNkIRe>|AdaF zjBYqXCsWppZusW<(GT$fCmg1D7SQ;AD^98;ACTX1QiVhCl%x|F;{}>4II(b)$5M#I z3NDC${L7FPD&~VL56Xl*Me_8E$&;WdHYQ*{&(%lA?*_&fd6|zg$m6|8ui#Z~e4O@g zMGk_lF9_$G2jXEk$^-~?eVPrOfFfhW2qwOW!U;Mt3u;cILr;%wctM;bp>rcA#y0$9 zbOZK(a6AWL?6D2s9Nlnaf=)&d@fN*d;)n_H5jvLqA`^-)Ad@;G{jrfw&LIlppXX7n z5<NmMWH3Q=L(~Ecp{!!kWx47WVdZYomx;&dk7$mN2mMVWMYPj_8Eud-VgsUtI*M+i zqttC;0=f+*92xsEwJlbd?2e9dRBDV#!jeans1r3ZWJyTrT+K67H*~ay192~M$VSlG zNiBSNC$~fDJ9_9Pm}_or>>2t>CvE28Sl}2}TEVTv#}~tBQm~6NApvKE1iUUsoUn@F zR#GDdCdbUDQlk!S1u%#GA(0>_1C}EKBB+XJ(q#G}YQjmMI0IlF*;xeP*Px|XglX{4 z541-1!*os~XpLge9g%3uVGkA|WXWbrUIr5Q>tF_Lef{7DHH=00EcU^IQ$UU(4$Z+u zy6G#3sfGUpj++v7)Eom%qFf`^C7@|qXhZJ=Dwo93o<wQph2)P^8X~I6A1_!sWnfIT zY6{&!RHEsUD00d{q+rQ?s^VQC<x%KMb_wKKFySuwTUo4ofxM9NNK+<sz_gPZQy>X2 z_k<bd{sF1{l=O#vVj64++<_DD>`8ykL4O4~VI$6sj?+muR!YNGOQn258io_HO>-dr z02D-v#NAAW3#-{Pi+^RcOs69?)~yg5ALIWW0S5F1t{`E756--Tn@LGJ81*QTBN|i_ zRXfNuDhOYa00n~JoRo#t8cuS5?Z#cZyRRySGg0c;6e#u0-ZBSC5OiZXY11N+nYu}n zRD1;6LnV8tjM{^OIf0OV0Vv3*)m)>53T0vz5+qyasx-R5$P!emaar-Gn76JF)15IK zE*AdOH)}qjYET8DcL^Q?kr>DEJ?I9>aHxMTpg_p5uS=#0eGI5H09}AYTO{XbNN6WX z9Qr-Rf)@Wg@Ay<bN@enh7Q7k+fo#J3b5E8`X>x9=I}Nu+6&0Fff89ZqIU2rJh;3jH zE{}1oA!KT3OqCHmCf|-MBmvqzLFXKu#|hw*0Ry6XtNC_jZ?8f_tnRRII0W?2pMwC~ zo{f#O3W%d$MUC1KY1EE7jT#*v)i|q<w@{}x!CB2fgt|<Wpvy;Om${*k<o%ZF6!%QC zW-N$=V&a9Lf)+j|Af3_R>=^GJ8XLBJ)>Gv8eg`?6=KRV&pv<<sNgCW0j5j`VIXcO+ z!WLx02R8gjTJ^KV1*NjWxNz0TwUv#J@jfCSJChX9S{UNbN6#K5NTeZk^7I)u>~An| zK5b>vgmyp7y4p?FCB2tg8~=5OFsxwTJwD==1Hu8CN>6Se*84Vs>;58zB*0(D*!4}B zy#t_vXmo0n&Em+HX;g8D?KefNNQjxiT9*^{x3G$uM20!AJMhwO<yNT~b0!dq8||fO zeF?7;!u*n68nuQ2JS18rjqvU9g!0m;tPC$rBS3m-0%=rNau{{8K|#~L&{Gw2cq6?u zt<^HTG;@IWz~d6b;$k(?SJJZyd-%k|A{}APBbb2C<VDg1oxe;;Ns;<u)geybu}Bty zMOzUzR-DOm>sFZg4x0Ih{>Y^Dwk+J_l#<?FgB>BIVCI5A8+6cS7+z=%H8QdJXXb?S z>#Txe&2KC7ZeKl>8~SyjkC++>neZZAZp@RW8xvOS1A$_%1SZW0kPIl7M@&o6x~<K3 zk-DwHNZqCeNw-DArpzhbrZR_aLpW`@((p_5F4-Za;Q;|fkVa~_*6^e?JP!?L@v!wk ztsRQ0fY!1@1(cY6^x`Nnwd<2C@p&zl(0%IM>6n^0NBPvpi+qLzs)h4~G<V}<;y>YB z){BQ)D8VY%Ait@aIGjj@BVVS!IGlKfD~p6UeD_z#A)R^=m>|_u<gblzR_!HZtHX)A zCFlt^=x++pu}299TqL+4a0@mdpe2qdKFH-bqDbXfv6&!zOz|EDi8`hj&<1B;Kc>hC z>9`wxnTX@h7=KlMigr?w7zCFiHnEUZo7l*6cr90=zbm+E{Kyg3U@b@RYgo&s+WvV( zf|Q)2Q+{(E!9jlQAmJ$zIBkE2(;$TRcPKH&JM?4Y+!=LV@mUn8^NQ4f?nFW1(acR| zGf!L1a9TA(35>>^Z!Z+*6$!h3Uh&;%L6BiMF5J+C&!bX&i#WAN9w7<MW5{z=m<`G< z`~+9{b1aJZ`~aU_l<&(p>X5nCPM&gSX-MhIL>CAZb>!&CbEh<#@V8<UtMEqvs4=Ir z<r)-5O&wySN*H_zFNFqab%>D$fDSRzbL<d72ZtD+0wJS^K8L^YkLPeI7>5`K=`l7= zCB`8}sk`#b44hth0BtFwCDHK@Iiirwh|C=21*cl`5gG9#2U%S2rtf;F7()ZZe58a! zyJXd`<p$iK_sF9n!O;;Sht6J5EvkJvKgE#}<r`~}M5dE)%Yk^P2aE#=T+f;>2uv4P zo_*#W5-o}oEusYrD4dB_<?=9%fs8WQx1x+lS%P*g|4ed2v%5@8%{X<}fE{~=M}ba8 zg4241;J};Um9x(@nfh~CWUC<xOSM`aiC`1;UkE@6N_Zd%CU7@@4<gKSqV$`1{747s z%S12DO2e>Vymn+OrH+gR!o7&uX%})^lxa#fF*-h;E-KlC(3k9mj9qdySmCk~1gD2; z07Yz|swCM|izJ(lGEja57Rfw<GUV8Z&Pov$sKvPqyWB_vsa)u~1-F3K;v-6MiE?A4 zUF%UPxJ0J`JN685m``b1E2Kbh1uJTp6-FlwOhsA^QCO-~192p<<h>Xfm*ARyy+B$@ zaN*3e;Et2ven}h)mS;RK!se-Rk<9pqIGXtiLF1^Wvf-x9<rANOz#!2lK2=peo+>bZ zRA7!r9QqV~i`g6<7QJ~5*DH4PlSW@`A&8dd7jFp~@#GAap)DjfRv1X0?<4>KerB2m zSZPxS9s7&|jOl=S*L9$u!OpllszcEW9?&JDTYC9VP!4te3^hq7LWxGCpA_l4pA>0v zB9vN$AM&JlhEIgPDR4b1>pUvpY9!9>pON+XMCcm~J8xXP{Bh?v)r~k2N}$C~go<Xj zGYWKJT%a~jgj&sLCqk*jP+~H20=(vsKvm<T7Wv{tsDdF5)2UC%xp9%cdt7pXPlO8C zd56w0ta!7AJUYSsd57q&4l$OxZP%T!@$cf$57}Lbf?xOWP5O5vUQu`tzaK*Vcva>T zevG=G|4nX>^jbL}>VPa^a(WKbHlcHPGt!n4Qp0R(huc-h34;kET(5v2LoXNu9UL{c z_K23C1}~;H=St2lqR%?f4nWyeT8?WN#C$_>boYES0LBILjo^yQ-s*mj-cJp7>=_yb zK5q&V^a{azqehpyY>28cE%@_|jzqK?qOeq}2I5FyIo}A8(fZ_~1hA3w&3P4TLKX<I zJ*-NK4T;j^*DVhYK@N?D3uB-!A<+|~>uyf+)sS$17APj&I*^ar&lFO90#Z$v)QEC% z&`KWca|^raT!lo*A8gIJFc_){hAByUg((ZWj-)JM*DI(&D2K$7!mc4MChW$lKsi^l z|1ZzFY}|c!Nguc|4qCCVwjTCkq8`x~e+6L(x!NN?cnt=*ILOBuc>PYkfq?=m0mICw z!?lmY{^-FMPScVf(e*==pu@EemqZ92nbU^>9A0;BA_9Ib$HZtuQ6)l1hE=plGYplh zf@3KBQziN;jhL{4<Ad?>FY{W;#TL;yQ<-rj_hES?_o2v&G#S4P4!ID(CXsOrwI?Mm zx>~^3|Cf13807I=-hdeSdndca?DZ!$yZxA1#c4Sc(RL(uX630@K}Xd11hB@CL?V?3 zddoseM|-Vp|5|jFhfl5xbq0{Zk`~R)0AbNeFo4vVI(4E92AHsJ2H-xnC;Su5Kw6Rk z8q#76@Fhxy;1YB+*bi|_V?yBvTA)nKoPhuJ;0tu{m(B<uf8*@gU%@%y2AmWAGLG@% z+AoMj40hpx_vznJ^+2)zR0*G3`ETq^)aB2u;_>GDR?)4ZOV+R7wqeO`T-uz=_b+K# zmRMH1WNCLVu0p-JrM7Na?Xrft8)M6sEyus1!S3ZfnF0JROs2m(ml;})OM{p9<%YWH z3*R2x9b3M22&k6tqN_@muNlk_bmjLfA50JAdirvEcH|2F_nRqkTl*GV6y2X+ep{{} zz8Lrias&D0UBkKFp5=SG^F5iEY=?gYHJ?ol^x{XZ{mfjyl`)hl3=gCVJ^-g<xaBxS z*MR!jh1jZCwl|+H#QI{x{q%E1nVu!N{z9xjmWkb;AH2_p6bSn>_ggtVnchsnM;H_q z26G^qP*J0z`K`FJcw1~RQ;6Z0T=8q$sjceEHb7Fws#yPUtiK!W4;Es%*sj=pxJ`3l zAVzl@#|p9g(nFcpeM7Nqta~Un)E^t7A4`u74d7p2B9@^)L-)lp_r<zm-Lavaxojb} z15MEFz(mcE`jX$RzU44@qR{{1gZn@g^D3^JyTGfOTT^}6+<6uAA*+?sDrU`k&#V=A z#k6W^tZMG%Sd~wU$J!Az_AbJsYOW}(UQkgrS3ypn1IYFTRMLWT!!xc$^1ZWW0mn>w zbN_;6XlQ=Ltrv*OH_UEd@V?o&O4N&0$}B=ZyTM4#u`5xPxw9A(rduD_qq;Q)uy@03 z0-opNXPEidb1!1Q3JNiM;4=gLMZ2+g(F30?;=zCaag#`ZAGKA#kM9*#FXC@yY}y(; zJbGP)4$oDzRMXOMX=P$M8OD?NUs+#yO>Fv1;QsHFYOcIy#`JkeeU(xzmDkivU!qd2 zmDensezk&JS$WN(>DQ{%EtS_SiFtJV4z?mz(J+nPte7zi#nYzESb)d$X*1Ci@%dw< z=~J=oMtrMWRnd#0idmJP7`TtqLr5akOEgxl+9Oi;($-MrZA2x?I_a_tKecJEo@%4s zRIZkgYp6GstM>^kw^DCJYIfBpzI5PMD4C@8V{=a7JAG~!{04a|sPusfB5e<oM%E9I zn<T{Z*HV%?vWX!7tAM1v=gR*on;&38Rchy9z3kpkQ0ghwC2rxVgP>)0<tH|ACw_;@ zkZR-3|E^5k%H2K5sj5#rdw|BI^7mx&=>s$<m7kZ%lLxr}U!d_skDofg4ETMS{M><0 z5%3p@0Vq9j;0a1TBa=@YI6=ujl*z{re2$XO%H**FzojRS9(YPm9y#zkl>8$JeE0yp zzu_kzI`DZvIrl8RwuI0Bt`^UD)h8Y}@I@-0Q9)u9n|lL|4?fSxCm?>dpCL9%i2r~F z(dS=b0O$jVw*|yu3GpS;ZG8Teb_wwT#7_jo7bL{?d7|Wta#R8F=6>$fU$BHC{l@-3 zB)VSW^xTp8qQW4y;^+f_*Y}ffSN=#<I3t?)XW7IH5;AtNU*om?e?m1DR8m*x&Y=6r z@OkSZ@dV262ox7H0Mf7SCqb=Tq|)Eq|5Zv~!f8Swao5v+A3mt^vS_1LwDAE6a9sfK zl4zqr;XEzcXjJJJL>o=2joW3_Em!$%oZA02B4eGZ@}>PRQF^0FKfC`Ml>UH9e{uge zDZNRhpWgq!DE&c|KDqxpl-{h;Pwl4*qAEL7`g8lgN9ippePaLjDZN#tpAdcCrqYk^ zpP=$PI6e2HbW9JQYpxPcFzJ}!!A@1-sNg|PrH=?6?BX=|y!UER^|OJv92O{kOM=8| zUXx|YK38n(BqCm_tf-g=o5GgjrAks&Bnv+jWk(?8NbY3I@pV<&^HVDQdZjGwWJ~gw zs&oro+*bLQs<e$Q%QsZ%ni()ymERDhWHH#(yj)4P20efJ02`aXVsNBS9+*$?e_ct+ zi}Z;DY<|9}%AYuJ8I}KyDnELF4bm&B{K$c8sr+wM`2)g2eM^<Uy`N3gw^jNl``Jc) zx00+9+Iw?98>zoj={NSXm3mF#dwoBfsqd-unf+|1{z0W*+s}sTj7ooJKU*q4{i@Jv zKmE=9Y^#2t;9uU)#>!8>w4be&NY72YON{%`o5T|YpBCf3qDq*n*O!Zu->mf^UJwuu zN{GL$7bQ)NKEx>j@y8P4>1I)~sMUw~l7KiPA$}}NUX^n{=y+Ci?B`W-;Jzr#)mcu@ zy_pW(;L}XU+VMe!r-iw?YMQKYQZ#WjPv5b*qZ0C-Te$+&cuJ_%`x#>HcO<~t0N`^1 z#X1H+g%d)J)~oarLX9?vCSr55vg*aF{WcyKZDd3ne<%T}0syJ1IfYZI>MoU*s(PPl z<6W}qiS>RPhlRO%P*r(In5$8hen6P3hgJG#``BEKsr1|X*jyb^>7VRlb2YBgZ|-Ar z^{XoV#y&Pzzoyc!?_+ayRHe`C<7wa%D*f6%Hdl{udhV~&HN*Ja8+711`*;HUe^iB6 z_wlswIhFqAKAsky<TT7x<wk+xxj<ZA7AU?iL1Hs@z=(L$rje5~pPa+_q>$4-4l6K! z4JAoRa2%s!RT}_f)8v0S^~NZ#A|@tr`VJcq!{YGl+kLOx`@!EC|Kxjqym#%vmGizw z1l)`N1Ni>{{*&)S@W<#6J~ztrUx;Lkyf7-FD`M$GCX~K@S^5o%9$5?*S$rr>^bie` zfuSDIe>GQENjz2f$$)A2Nddx#EWdx0CSH8{dmoN}x;y(??E{Brz5dZp-u(4XuKfMq zef7pSsh=bG{}}%NHvW^5_y+#ZlKr6cwfK(@JL!0?!GGxi(3nt9i1!kTe0a(tw;sz0 z`jCrFSu|i0iXCwzX&@!8VqBOmIR)t8L(WV^tb#BbpHnjDV<I<Ht{mjSs~I3vuI9z+ zce~3K>nlF8IaaZ!rlMx{^cnR29d+$;{NHn&n11#w(Z`=vb89|Uxq41@a)d^U;fRMd zCj^|NGZs^DTuH$7;`<&6C+T&<9Ru8JbX6@rlI{>(0dqoS?2iChQSt9{=io2%4pdf@ z2w=PeVT;IMNle8DmhB{=2|_2NvC}GJGwI2ns;|Z>yy+KIHZSn59rmVGAN1y~^`=+9 z*PB<p*2BM<)jPeaVeiVjkhzjFE??<gT)kYSE~L~gTIz!8_j%O-n}>Qg;`#2Zw``?1 zW2JX9GL{3y&1=2-wcgdhe9)V**1LG6H@kYBHw&PbuJkVG^yUE0+wIM~%bS5b6jxP0 z<XvzlBdw{<dGmo|`bzJ@gWmPk?P&NQ5d|_Xs9q0Z*LsW4S|{*<?A`8q?+WT&64blQ zQSUNfxfD1(0=o;8tn^~lf9lm-@W&vhlX-J7iqRf*_X>QSP8>S~p15)el?gi+uta|q zp0TP0Z+QzZnDK3IF>-3qcktzE@pU0O$GI!Lg<!Y*T3uZ=6I9c<&|{}}IW@2nozHm} z;p@z`___}KT}fZ(pyK@Mg13PAR|D{w)u+9=2fanr+rY=8Amnau)?LKJ>J7-Co~+|% z6`nKiM$6p4S)io`c;>AnzRU(5nZl@CiPT~=hvB^lbe#5Puk_+T1hNl;q@bOPsy@<* z29KhRlt2s`K_It5U*Bg?Fb@<hpiZKzo#@3aoI(@8JiP$U--4!BdRL(x<Q=8F3#xDR z;vf_9x@0AFdfrK|>L4)h1XD!C>PJETL6E=Qn~N;KK#tIhO968gcyski@4B_#;+0;_ zX>VpHvFb9}g;~`fL$%Z1thH!k#(VJ{)xqMG-lEgqoVB2CC#XdED_+e(e7ln&NLje$ zOHe$Am=CHjMk~FG4x$g=1aU_}+)F%SKHJd1)u8XRH~kfFHq;Zy;%E+>6$HycpdO%s zOOAS1GF=O+XS~mwzujzjJ{l%IUIYPK>0NQ!yAn)W>p}J}J?PEp1QAa#5py95bBNQY zsSyE<osL<=dkZD?<qCjWn9QyTtkZ$D=5FW;hG{KzemVq%m|E2*gke^7)rFlPu+zIZ z>p?d$y0an6fqc!Xe#B&slBpVqkuipgK-MK_=yI1Ns$nFFpSj&74@4sf6eA`@Vll?R zmxL>dNCL!Q;d5>=Am)Sf5ChRY5|mkl_aOAf6aaL-ra<DQjXsz^M_|y0dVckc3wc;| z%*3h%knY7Gl;mnY`f9hn5UpPbeDj$cNC8BV7)L#Y(p<CFy8;|!$$-7R3c@jqRrYRg zG3l>Bn+l;7W)u4Jigyib-{OLIQ73eJB-9##UI8l6NW7CcBelqGZLer;diA~D92zia zBhLi|Qh4wJQaW=Pc=HHLfv;4T`kfC`NgcJ7P%(=n)!Xh>ZTD`ddgwqW?DJ7bVb$3f zDFC+yneYm*QMa)4AVmgMsul#tW67QlU7ZQ|=_^4P*=Y{~O||ZXd0I*4LaTTQ&w#LL zbC=2L9%jC3z*S-TDF6}8!PN1ctOLIGQ^o>VI<NugLMoz!eI^VGw+btcAqUT^l@Xo` zwvxodra&@1nl>ImhuDrlxE6*+_#%`q9ARDvQHJ0sVOq47<Y}=fK^WY{)o%hX@$qg* z^+9jpX`)y_&tn-Q0U`GKC`mdN15}qqOH3APLb;@>poFpt#*B<IS^zev5}~>r8H?AF z=8=`Q&96|CE5Ri>gJI^l^fVbiSb2ROqxs@O@EdsGvJiTQ<mr-Ba~H!4LP9c1mc(iJ zJ&4JbRUZ<jv8uZ2T68WD0XYYtgBUNGh3yHT*udFJUux{Gvc~R0@P%y#%qs>v7(N?u z86&8h6@LV$SJMd2-9A;p-sN*`QKvV9oEqsQ-QvyO4Rt2xX6I+Uxm9zItJ(CzENL{k zpR+Ky<R>inb9{ZvyX3fcBXqv{Z#mU++^c=dTYKDFm-X6Kdbd93z4tgdwNT$#)hoQ2 zpTt0%MD^{Scc*s+Nu*bO25Ih3b=Hfsm4(RAn0cS|=6#4|9@!UR&dYk!vrIz`K<8wE z5(9fDlru}y(UPpU=q+#VD_(8ob@RQZtk<0N>Q{QT%e>oP@!GQ9nw8$l=e*iiyqha; zp6|_hjwJU&DAgSF;_~C(yP*&01*K|_vt0+lvpxyzC(+P$Z~C3yRaHZsurg<mu9{1> z1|*<qP%-_pUd?v+a9NUg*q)kYDtqo--ki^(LKepAr{0|Zg$`%oLsd3h46TE%@oYE? zWUwR3vl@93=46!hu0<m^!sfse!DMk6;At9yXGC8whZVrr`S>~uUol<Afr4ySJd50& z_<GR0_%t;JjaZ0zvlFzApf2njOX?!d!wf^SGrU)Jqi9khKcPS_5DI8IUW6)8ZQ(dz z+PkLHTY8WrVEJ0Fb|o?K`eojAn4sYGuf?P|;w?dq>rZ<(tn}Ws*1Hz-=0Pvf=`|hn znpb+ato7cz(tFQJuVI;2f6!abm7p@PduRl-#+P|lk}am*po7SRPs#q+Rn=QCR^$=h zLte^~s$Mk-R)Im6ejJ^HJZRj_lA(joAbhlJVEiV>T988adBH0*Nk9vU=@%jcE<7AS zuznsxOqzGusqiiv!8`6<*}S`=D(~}dL8sR^qtR=E>_B&Jdd|E3xcB~*Qg^O_E?3VO z_LiaaCXD2BVDe|YTaeQTtyzHY>+yXJzR$w<g)@e{%MS6pg27z;9I@yMaEsO=5U8u% z8J7U!3Sa=R_VrTa(p-1_LGPx6-n9p5mD~(L!uo72NfG|SX{HJ!(-1KdK@7@T<jkej z2m@YzhNKBAkVUjCxdfT;tQKJ~u_7m(8DS~I+TtQeIt}WA({M5_qRKqLkm$L{AW=ld zWvp~qAj|?z)FrXN*ZEkjl6`{o>T@7T+4X=36j*Alroe&%)>@)~5c(<^hf2;z1_-^R zljuhC7b75mDF$sz3A`MR#6jxgrC8)+6(bD6LR14aG!?;w3s;jmFXrcqI1ly{Udnt@ zeG>3Vi|;Q=^)K1ZBaY=4`!r$%u@<e7gNd(}Sqzv6K4JL^19(|MvXZ6);?|;9yo*uT zNs@LQ7VMB#tfQIRKBLIQPMWiqfU{R*X(<kzXdF8F%VT2~S8ew_$fXoTI!K-$TUGFa zoEtEQqGNLogXwRHHQpmoHrNKt1zB$izRXzS&8PX9#Pei?v@M44F9AAQVr9L{PkZxD zE8CB`6Z#FOP}u&vVf*jGV8afxeUD?^a|znJlqX`E=_s@VRk{-o7!_6(%!!cp=cxUK zAbbw`F&8trFaBzfvQdL{AuwJ9`Y;QEK4|%ZWkllDz<v#~uU|{Ph@hEfvS@3}z0qf~ zdD}t05RqR%>$A6eGpl;e!124X)4O2UtE&3g{-afAD>@N=n^}271p;t*wpPFthhuQN zMJ{IC>K*DU#o)47+rjyvhbsnGgYem`VR%0nKXNd4Ky;3K3)s~YVTvq;`({4p%{>WG zq9EBB_)vGtU>u;=Vf-P6GAKs)$l0fO8HMRox(ewaOgEQW-HpQI-aL4=S@t(&3O=R~ zz^r#o!Mh>LiyW+2;hn<s%?80bL5B?1kr%54>vn(*yp)^?iPY(^>6!<+7Z7*ABl0G8 zaEgL=U;zd1c3{F}i?I+KlEJ%OFwyW)p;1|4l^(nUP!^%P3s48))(Z>hBL(mn4o*Be zcOAyzdSpPm8lLkSvtCQVTbcC|kW{Q`JE@}xh+Yh@PjY(>;(6@r0)oBf8k#=I>xP0Y zf+xP#yM_aMBESiaMbHc(9;_juR;WZy7X|sC2+&KS5CrV>Za~Jhm{Ol(Hx*G3hQ_ol zqJ3vDC@(=GF#ZT+Fj1J?E~StU`*xu5IdA4^?*i3R5&XkgLLs>+Ij%%I8oul(aSSVw z8@Ll91UO=nMK10_fK%^T?ruEoy({b8T<{X0c`dmWm}joQf^R0oPy_<WO(6RGIw}@u z;TC@8K^q?y66B>D-G747Q=Dbq-QXR_$ATIw4M-FO@g({$f`Ysf(Sm}^S`idv!NzFM zMlizWp@<8fLDwlRsEG!VcpWm97HDe%uFY(WtI2;Q6n=D&+nmnP;*-Ego;okb#886* z3K%bj@vV7_<HRSyKB2`TP7G(!j}t?d*kgx8i6Aiw5hOmz@<UnzcZh<Y+@^>Q0`Ezn zr|2MYgTlioWlvv52jAk@@JY7xi~*EUAebAL(Loclhz`C2v=n?egVyh6t<+l=K>?mh zKn{cjD?t$*e2cUamV>4)7MBZOk<mf25qGQTAfctWo7psl1TF=$u10ha>J2ABiw>Ht zkqRxv+;syugoTr?jVeH>8sq@s8Q38!KzN+w7VN-^6>ILf5S2LS(PdG@2;H<^0|MrP zR!e*p*TP{!k~kSAWT8W(jl+aHFmP;|NK~%C*Chq-dMFf&JJcI794LT@7c$%oP&yNE z&~%hR@kG#&#Rn2c`%R?9m$DXPMZOrF!$uYBj))s(opD2@3NRcZZg`xy6QM;)6E1+z z5&d&v=GYWn5kwEkMo{#SNrmKc428n5!Z5NSlA$P54*VD*8%#(T#7npx5MGw8`D?wK zPLrB0FL?D(S=coW6N^Y9vHEU|COm(H3A8#vG>YtsP$u9eVY&&>7QV1xiIAcYEE$j@ z=@21B7A9ffZveujXyK-Ux17!VHJA=g+p;3UduP0NfrmE%dRf7%%X&A!(4J=V1Mdxd z(agUHFCHfoAbh+Cxz&Y`BaFwXub6mTLawNA%{N+{@eD#^p*SOtEQACjE8>jI1Kqw* zfY>>>7a|*;sBb>X8($G^4954O)6_Gp<*q1@j}5U1hS+YQ>`@kBM{AU|u;V%C1qUCQ zl`8lM&xdwscX+c;fWsVJ^n;HYdrJl%FRK15wuNB_F>fKzcbw+z2HsP@?m3TR7wzz_ zWhC+#BteTrBCsbTkutCcqlOiM6^Y~kWvNIcdu5Z3L|%-=!zCad0WO3luRHEFVyZ(t zGRSK^&hAI`ichkY#;ghZHkrsI+xaphlhLs=TbMOZuI@P*-Vk9POp9y1rO#PWN{V-= zB^UdKB3233LU>^`RIC!L;8>&{tArgxa8Sf5g|A@8Dv#4t44XmD0mnG9QZKMmfpF!r zPOsr0`MfLG=WRiVdKr1XwXl35_^9GLr%5j_FVI|$Awe|i=1vMxHX!6y@KzwWywZE$ zGOu>6w;UlUa@^Zl&0(8im*Bo%xs2AHH)490fg8A_2(_RP*%Y0s?f@IeWl4$n<$bia zra8I_VV!c~mu$UFS9)p#KsJ?QnpkC@G-8^Fd?Ti5FVlZnd3;4xzt7`^onGyXCNBYv z6DH!O>Ob<DPI%48Ks*}ZMZ`X@!S>nBGww&c6Z4picYfNtZpI$9e!?neLG^EVm(AFV zC;Z9kPjS@q@`r^N1KYmVdl$z!uY}Yu1{#EYpcL=cVxQ0w6$}-jKnVF-?|O##C69oj zC)zYki;MCipll2L2&htYihy#!O-ynH@9Iucq-#%lOUyXvNe^*QEF-VRLVm4xC6rD? zLr+4=DNcpBEgKS=DmnPM7=v>ivaiq5P6m$WAlfIFWe5}@$YX~^e<?Mfj8Li5HgmxA zBt@OE{HCQ12fqB6=@OP~1mzF_JL$a(dWE>W(yDhCJVXlNdy{cjy!0cdoM*+PVb!qN zCt}h(1<RPU78b*>YLU}l%CW$X)#9o<gf)Wm46boBRjyoFN_i1I9Xb;~3|}5fAc86o zXe@rnlpx9i+k(HC&YG~*xz>aEzkJ4g?=p(70^E<jm@$3Du$zGU-M|y9A7KA+q{*D8 zM68wOsk@C>E3LBVydlqL*a^B8Zaem1Sy^Pzbsp_la5+30(*PpFr*1L2I~UrgiwIF% za>U6(kiQ4@yplcOtC#Us&S@Cz5gez?dUXZj%uU!M;eLfCXS5<M3Y-cAhp@qeMU)80 zQkU=X%z&(0@}@`!P7lE;!4ANU2TRjohGsvD(Cp9lov9kF?5w;Dr)&?j<KTKMcJouW zi{}M6{ELIY7rwe$JWt4HPCjp!&+GA=2DrbuRn+@;yw5;*##V}Y{dnRq?1gvA^mQ`* zfAA_r74jdJ&p*Mh4N>~j^7$+B*@Gw5-z3wmGJOQ^ZczRYn#A*O@E!=!aWmcvq5MBh z;O$A!(SSE9DZlP!L09TVkzTS?q#wo)rc4Lihvah$o>Z?zJ};Ng|B0I+sbAxli)Z{& zLGO1j5zpV1&->-`F8RC-PijAdSH`IRm3Tdkp5MT+bL#K2coMyzlj&iZUM17t!W(h~ zcd>lFjaTd_{de;DBA!(L4`liYnVu(~SL3BUD(}IKVnoM7INML@5xlHR{rr3Uq5KQ* zB)YQrL+L~KL+K@WPRFxSKK~7kQ@wwb&%c(>l|TxRn``BBo_xNA<I$A=-{=H4p8fcP zR|9TN;YoO}l4*Juned*%sc9;|O+G(}L;D2ME}wJdvsykk%oOEG`Mf|rE9G+nNU8q! z<ny=W^SFE-lFxne*&(0n<nwCzyi`7kNW%9vh^Ob@$>%Hb`6c=MqI~{_d_E$dUjtLA z-k-?lf057Mkk6ES-XWjI!90S0Og`_D&kp%~k9^k2=f7e+2>xH>^A-90OZohqd_Ezc zL-Ki_e11?q+vRh)eBL0RbL7*L&mUr(slD&Z=Vy?h^rP}QB%k!Y9OZu#<4Vt$<nwy@ zq>EQ6|6cjLRX&%<CmvjWT0UR67VjoNvR=o#F!a0|`Eejn?@iRo^eN=g2jb4<oWP&; zGOgaDfY~Gb{%5I`&RA)J)!`-me*IXAUJA(drT2(${^bEFx_Uqs=K5o)oqGrJg{%!E zZzD)$2QwM1OuXUGwSh2}>Pz?b=DVrUYZA-rYL^6`L}Mb6XlZC{ZCSFUu{MDMQJko) zZE9#(vII{FfA0lEX-{`ySw5gX_KpAhqo0$=Vwky~5U<!N$Yg8@{^J9)7Hgw)#3w@x z!RIvzqtd`hdXF&^pH!-l*;9}SJW{DG$<8f7T76p!yG0+uN3^tI{ArAkcz_=2lS=i{ z9SiB+7LjA)+a&SaD=X9ryQ-=)Za;x9sZ>v<Yj_7;uE5!;)S5e1Z6;|EpQk0h|0#vx zDDYVyXh!f+_~ftwzlrZb*lGQfUZ|(|yAxl!t7|Z`o9K1p`wNMtTzt9yEQ^DUZ$0J{ z`dmwcfX}<->(+;_!y9rU%SqoLE+fedh3Ol>Jg0v)kzko0C%(RPH<M`7r|>D=ER8Qs zH>jlg>9P~FYvcQ{q>t<leLh%{K7lXawTt!A#@8yx6XMICOW;RXAFIC_eFN!k8{da4 ze7BT|k8V$K_4h%E?{ku<beZ^|#EjCW?>Z?Ts=wZ4R&UuI3Gz~@?tCBmSx61{-=FL6 zNu}1W2})t#CB9QKvljTsM!gOBgWo_Oi+`D&u%Z}UQE1zP8u?=13@I>gN_+yE=Z&4} zJ3W2<&Gj=zyT6Oz=h0^a89993hQCOkrI_es69#?67q*2n;LzYhg^TdN7Vw1P1fBzU z()_gv|Md^`m;NhR*UL(M-`Y0%gSL@3HnolJdmBGYI=c1E(G73Bn0$?JjqH1)GX4<J zgKt&wL$%0!G5I>79812wBKc-~<ZJl;V)Bg0I<q4AlmCysZvl+Es`8#mGU@a=DKCS( z0#r;(o2KPeERPgBFvSFmHZ?6RP3eO~N*mh-qEbm420Dy`ktHA96)~&0*0rnECHqw* znm{F?RETWFxLY-{RTJ%MK$L(;zu)hibLW+rH09-f-{);7=YQ_w+;iWrbI%PlwF2Q| zAjhFcd@(SsqCXlubfg1cJy7BPEL=|OM<Ve3?=J?H?286pigdmh3QYT9pcoI|SN-RU zf$N{5r>Dfz5`0t7=;UB;pcrq4Os?#a_~E0X7k?^2^!k1JD*d&1nSMzpID>MnmvV!L z?1`lzYJ$2OOi;I5@X&y0X;Oy!#j1ax1Q!t{vEdLL($Z6E>A4yV;eqZ$(47yGcuNB@ z$KOuenxMZI#0E%zU;-*6$mRvYPYusG-qlTu=`$8nFR~nIo7k=J#N7g?E$>Grt~msk z84rq0)i05Q2je;T3uNE(VCo=je}XJQ)=ds}Bikg$RK;9D1z28!jD#Awqh-_@Bm|N9 zW+5{3oXApr#U-A8<ZpjdpSNiUD(KF)WW0i@H?2kW=S$Gsn-+RmBJ{va3-kS>gsDmj zgCIsf66_y%2)f@Al`~oat>_gmLAQR>)kb<7NHbS&kSJWOL!SK*Ir3O&RYgCv5=+V6 zom{e#GS(bK!IGVgazmkd1L0GL7i!+{Lj607{<nVNHd=8g@D1euv~HH$W32hoCJw+k zP>kZM`Y*)3AB>*%B&@(%yajYv3)quVo_pZ6vg5_TGPHv0hZigrtVs*N+s&>8@R?c` z>_TOU%_Xg9mN1*qocO}%2qh@qpng}{mupOeD2M@eS?ERZS6?d_;8!%*7i!wO5NgrV z-bqgHf94~%yMj~$fUNG1_d)&WgWi{x!-oS+`{2#uLJZO^Jp?PJ@VnrHeb6B|r1nAg ziHqxl1~d0Tw~D7k3G`SAbV~^!f(mp$1(nFG^galM930FI_NC^n<Wrw?I(-Aw$!OW) z3T7ItB*EcphNlS|9FnFN(bXe4q^$ZYGuBxb%XeKY10~WM^`kfX#qd0=7OOr)LE4gs zuHt?I@gbEHKdSJ=4+)&M939cLHGOcIQ6@I7H?q9U*c-75r_|n#L~k^TEOQn286Vk{ z0I3-~yjMEpdL^y{z^w1@G_3YYgQ`zFz4|BjOy^m+>qZf7c<<y&_CD#I+&CGnIE>zD zki8Sfa<X*-$TOE;%45=8eRRE(CU&Iqb`d?u^1ckEiF$-Ss(5%&7Yr}z`;7^C<Suw9 zT7lYSebiu5A5{(B()y@MSS9ySd#r`*PATQxNLeL1s^mT@t+<o>DOY!wBQ4CEUew&| z#hubuF&o(QGM8&gf8}zFinFc1I*5Eo>8}oE?yoRc3PtJ%?G<<QR(<HL7&aO_I2TQ` zX$!uo88&z@(y5~gntoT1N-5x{cP{E~)0OHU+#bpe_F4zbM~FCC>6LJUn9vZ5Q;9zx z73`H>q<27`F;lV!#p>X|t;n|Jj|a|Zq_xcNhVzR)J9sdeAuzoS-i2w6Tt*EreSl=5 z!2`nd2jsg~nLd!l^noO%!Fdo<lQ^ja=Ldw%0|Q@mJrjIcVm1orYhg+PXWYSfh5u-< zaDKG1z^15{>*bMP@BB!`f%%cjo=9+iSFoGj@y`6*;Ql}pJ1<EKHLWH!Zz+bo>T~bh zU{9cFv4(=Tp4{MG0GFy>D+=1Vxg?553M7qcB5`{qC3^>?8EQ1$V%0ss&TIMOERWHo zhXvH#6-=;-MD1{iB1`Fs>d@FaBvID^iArjasE!PYqFrjDSYViwq>)aftV5E~G4S_^ zVsnY5e)Z*#Gk$0KM7y6SuBUYHdxbORFZ%PDW6R7(*$?L4zV^Y^KbgPL`+sZooN~A8 zozQcNc%aX;P85XjdlPiBuK9Qzt=X)4N$Iq9%}OW%T@`n`bxrM!HJdl3<4((`?b*eh zMT6+-1gblQ=F0-DFi%uwYUHtl2%in6J5_a;ZmRvnnp7pK<Zr{q)lgl^FIC2>UsP>M zJ*c-jzF=)CP;XhYYV(GTrrH#mQ<bAy_c2;sq$!#{$2(o3zPPT>@ze*JA6E}5=$Q0C zR1fM;u{52bW8-v0XXv;%9YMz@6q`;^ov0I4spzC+)u^5#42HU>*Ik6n8b;j?W=@{> zJkv1xU9^gv+#ld?ZthR;HxK{J)Z3SLG3SaoGrYgVVCeNh<sBE0IWrCe1-5w&v63Oh z>b4M@Y1q2Eh?VAnQa+U7-A`;b$pBj|`rsT^{W-dwM>kJiqs9Clte0rKi(kRtoLCwM zF~`9d7&dkSLV=$;;pZO5f$;Mg!)k<|X5(kI@N=*6Q!V^BY?<)$cf!w@Qsd(%aeg?H z$-x6y%#EG$ZM@Wp*16xEti04nPW|4n)xz1J@lq|Ey+91Pu}paR!(SAu5?%!J`1>r@ zzr$jf#=E$XF;XqjSQow5%lLt6{9Z4k1gZ?=I8-^v^)gbpDhqiIUG{C#^?6@_>o}-q z6_&<$$rI2;!jqyNf2%Q5hph=^>b(qnQZiE~Ii@y$Pu*BTWJ>brU2&$m>H03OxmHP@ z6*|{NQn-cAb)n?p$&Tf6$;5XH3LZnk@~MvH`NFcI9=~JNwF2+r3mNhBWR|C=vOL{I zt1QoOOsy7{XE;}7xx~3D%O%cLS)Q57a;ZZ@lIgQtrq7oYoaa(dCMi(VGrk=B`tl~Q ze8%(iGB0l;3uk;CzQ^QE9E<FoRD#lo0ry@!k(GDC>9Cy05DA@cSTo6{ot+!V=AF~| zhVk?WLW_Ph21000^FMv~@v`EA%bqy*x$1o_OP>1kAFBTGV;v_wRs**N{I=uA3BpeN z_Ta~wKpJ)0BgwRuIA?G)Y&^u5^A8LgH$T}6(Xd#EpDkQtGt%(?q$SKq8qnT|t~jQV zKihYf&0NxPy5bloqh{WaCF+KwUbt8075tw1;;LYG6Mmn<@3Z)^nCPGRKLrqmB}6M0 zmsv?6!HT73JHRYc`eJdJuaVN4QQMoxWBoP>r5M+%ei;$M40CtA+*dW!Fn8Av{c9F? z*Cq61ad++SKeD*H?9Zkzt_SMvY23J!Ne|q7&@TR+`m=Nn)9=QdU5DRp=*6e8^k(#T zAN<YvgZi^{XY}_d{PmbWOMgaxhv2W_C8cNiFwEZqZ2kP-qJIu^t%UwLBCBK?lB$2M zl<MdF<-Q5GLVyawNf4F48h876?*>xPxcx#MP{}&RCg=YI5{^*s0NLph3X(!T>^R7i zL-oRgyjBB&<;l1;2Z`o<|CtcadXC>0<uC9RQa1h)-p9k`DX4Vd1q#)BcD?V^+y>Pc zGATb70>M;0m#TScY<@59q%n~HbPKhN`hg}>O$N2sjm)zDDX>%J!$mf*3h`J-zk~Cs zU=`dzI2$r;xcOKJE;F)tQvNfL1H;v0Byt;~Lc*xT3>Sw^24C;SCq%7qKL!b#z76cb z{p6>H+5330@KlNjQ}f!m{9K3#GnaAc3qt1*Y4erfQnG(3?y5ZKI~`Y(AiPfLZlst2 zav>i#`MOag_9qY(##Lin#uxdoBHY0`#BA4MnFAGg=SrcBGP&<!atc8aQpD%Tjnipz z{pc24v{t@yCqT~dI^Q^`!BQQ4{*zg$?sx|()yWGan^F6UahC$R4Ue&26{7rD<On)t z^V?gyPDbrwRmsGwt6-1}Mybz8tz++&x(|W>OITx}00qoKHHB2OcRz(@G0bT+HEk+u z+IgsHxC;d-LCC}+=Cg1e`E9Fj$CLq3pn*n&q(OTEIGiTzU2xQj_imqmoWB;G2jqK2 zbC(aYtP`ZUQ3lj?X+`ML&IIx4Xcd?EW_SBaaqk(eu^D3Z55!yByK`}^5xU24#~c^b zcaZcq-Vo_4pw#Cm)N{uk0{xug6O$qs3*M<R3^x#Qvt*n|vAPsYLkiA?+l5#AE{3`q zcDGNWUzTi|pT8B|1nyZ220asrL@oEdn_aCWY8-Ffk1JucGv2Cbi=Z9uBS^y0V$R8d zP$|aShx{B*Jtr;!#MF1j<%Ul;IMHCUjJuu_w;P;l@C5{7_%?%^07+-Q;j;}+GkBK4 zZ((1Z;VuG%)r`{&AHw{L_CGWD8fJS!ACUe&XZUu5wFX~=C;I!1!Os}H&fwVwe~Cns zj=XXJ|Ds17Q1q<>QbjYoo;b}Q=QZ^I_kgtDY;dW;>4={srx^S=JQ4qx!9zfZ^U#cN zt-<RJJ_kCqf7;+8gXIR#F=+B@`K^XG8mu;0X0XU0fY9wWh&V*P&dp;N81Ck+XBzJ2 zsY?uZ^HQ#8DZl5;EW_Qr8DbfXFJVLoj=N3nV};u>g9OPY6R3l`+iyzuHq72O$Kw8U z!^-WM9kYDhd9!9i%nnB7>o%_0wDM*M8aW}mbon||Pfrmlf~QE6crw5aT4phGrl~_2 z!@x{89L+}LMj-wxX0-BkFIxc8L(}lAgZP8I1age>b(Bx0DU!dKzZa@}j-f)^eG`hj z&&?awJ3GkJ%v&_iVOZ{2y3kF;4VpsSq|^!6I{BPz@_L0PpI3wSLsJF*(u}#Nt)rJs zUa!$DoQz1vQRSsno-mudo}>3)$4D=myxuC4m-?L5r7y7|!5l#O+Gob}W|P-@JuQ8g zovHMa{$`|?O<vE@bLDt+dP(wdh%{aP>WJ~jeu?Jtqw+Vhyk3`O(iA1<8FQ9>BtTkv zllaRZulL(DdgqRkUN(8XfXSE1U<;l;I7)ii<n;<p(}cP7E<8JtQ2R<t@5u6cbBtcA z1#SR6w%=Xo;H^rg(HmJ_uh;1H8NEU<N_x&<N3_O$6UN(bZDx7BJtn8T*|t)LEa3;h zpVi3}{^(pl!X~db)$oJxPkVZ1mvR{RSisw6dpr*VlKevak`23V{*w7mb|2|G`FuB0 zc{ozhA9*tJG{uUZpg6&gCi8qgE~kdG{ovtfMgOd4Uw#4Sr;zPA(j9rCsecTPv%4cW z{JZPddDz;E`C3pW5OnJftvX?Q$otrl=aU6&dIL@DjUg!F4t(XzS}{E~hMSxh_6_XA zKFh!rAZHZfC*_bb0ih3q5Dr?&n4WUu%)5Y6M{=6o;UcKwL$Va^%NPmLk&EELg9Be? zYzL5r%(2}t>ez&V96R6!PorhvUNXQ-8JQWVe=`gSPr1j=)9vKxd#GKRdD{LK^CWEM z9Xp%r$Yx<yHb3|FvnibWj-B%*<otRx`OF#o^}h<|l9>EsPt27}3}3y<oS4r4DT$Hv zjXC!8oyYWj6RF6YzI)*U(yrqf*0Vt%hU0+<#PkQ6&R6fbaj_BhUzFL2cT@=x3Mcu} z0S>Isi~G_?$0eY4oQXc|1~QCj<UQF2ykq?ce#Ll8_N(|^`r45rhwyt4kJ8=*NhUWQ zK$bg6JPCp_2j^p8*vEn4F%ArSF%TsW3>XXgq7?@@Fhna}g7_C?YLE>ot{S0a$UzJh zT{2W`*%Jvq9JuRrju9~*Z?a*i*poC=93Zz{!5#w1sQrN$#zBft_rR+NIc)`UKxL^X z=RtfL659tN!2=NB$qhoFr)S`CCVPzx9GU2G;mS<xO(HsBYqYW_xAIVE6~xIHP1S_0 z95#*?)lNqBs&v|!qFOb|s1SLy{!r(yyxtd&m4nZcgNCdeG`u+uz}QXohjNddt=q`f zFQiM(lra=oA59r#$(W36Ilno_&MgJj2hPjN?L+Szx0*8Fu_r-<f_Y?Xa(8Ks=-Yqg zBxt(wk3C&;Su{IjP{~x0xGVJzRiunXlQCUtIp)|Cdkz!(H6$r>A$}SzNu5?+T2EMc zC{no>f_QUrcO!;X1A0(OCaSEr%7@~z0=iCKR!9sk5F*`+8T<g>)pA*B{p*rE^n#f? z*&4EnIAm<O3ggQC_~l?+xdXpbFs?j_-={IQtj5?9IHN2@o>bQxSW#fqsPD)0+wQa2 zzzUJwxxs^hrt>5XI?}n(@sNzKZmnRVxH9DRL7H};6Kqk0H4)$N@eBhN<2@*{kii}d zP$JVvQP5tdC@#4Qaoe8w_`@uTk3YSs<4><FiT3M2B;$|DYlgNSZU#XPn=R;~A%_al zUnCeMRnaGRli(EWT^lIr420*xXW;G&@HYfGZpId^JQVmwWnbjk$aA62U*&`%U7<)@ z9a0#IJROR*@T(u*Jp+`zL7@H+<?rwKBRVo<p^S;hl%A$72XX`V@cy>MMsCI+fDYo5 zD=<PIID(r9(>f?pF9cr<Oz$|-fl9#u?#{w=SaiT|Q^)J-*{%e|Lqvj)N(4z3J1xd( zpuY@);m8MJ0~d)xf$7~5EFE`s1zVYjXs}hX`%LMEchjmX_^`P|f)7RUzXH;y6+MuC zk9`LYAm_VM(z-hmd>|TpSnp!s(pO^Hx&vgRl@A~rd%Qi;66&Q8@1dCNeaViPJfyof zvpL*{KNa{|R)Mc26+6&$FfFKf2-jm!Cnx9K6AkXlMcl!Mqrsig%7^Dx?kWr1+f~;1 zYj0WL-+t^x69jv^r7b>$bPUKeQqzSLJ?c_)0s1&;P_sHhQQ0^Jv8~U;<B`ta6oyv4 zh$@g5^1cv?RBS&t&TDAZmex?`uX94)*AWBi@$S&7A+rGEdH0|mZ3o|8)~C>_dU!@f z^1cxF%yu>5o91glo}~_xt$KJLk@f^fdx4*!K(VvWYgstzpc5oQT)F~p4>3ExnUb9q z56`XG6}b1Y#^=3(f7|E93@<e=zfBSRcwRyTS!>5Ws~yG2(<p=7k-2s>N(HzhW9<lY z3X|+Uyn=)q;05_7UIAl@FN-lKD@)^>t}IhP$r9Kq)BDzee@DkUFaas-3ckjq4{$>( z#e$9!2tIVl@mgr>UiL(BVe7$kIctZ{du!#S<EIwygs}9g`WtFjt=PQshIMO1j#=?l z8`iAd1exQyn`fDna$TvXZkDHRHsp*qdsc6#cm7vzxOKfAvaEp1iksK0T(9!b!|mPS zkH|--I&WNa^M+fLfi!~Zk{r}!&kAAHv!Q--UA>7vdm!jMOpbaj?lnUsS^=26#Y6e& zS_ok`K!$CDBORBK-T*tg)xz(pjh@<CMzP|SmFwzpce{3d{A<Oknw9I<uUWUrbF*hX z9BvVRH_P9eH7i%I(9g{)YuDX88%XWyHESXC&D86s$#k1Nu3fKzNchH;t3V6!Zdktw zBHruPtcBz^h0;Cv$Rxgfz9)Cmg5xir@V@bL$LEa0zNX4d=OqhE`;PaHA5Rb1`kW~K ziOhlTF$rPoR8egReN%orA*wAh-U(4{LC22=M^qv+AyuM#VyZ;<q;w&0@{566#kvcQ z_vTJ=?0N3T8Wb~f7(bgKUd83^Ck+oTopA?e@)Y-c*m}L!j?Hz)R=EpcleY+ey6E&l zUx9Z){!j4vS)w1vIUAZ&99Eulc3%Fk99EHYwm+ZUfcU&7=j;idF+T;GmpA4xfG=;% zAThrmf5rR`?9zA_zl^_>tcA31!);(aXL=BB!0MWa&A3{zbrE7EixjK*Jh7R?Aj`X2 z&aG#CP_b%xy?gc&#g=`OJ{?x|uf)z{xbc<vL(^lBg3BUddkcdi9}BqM4U>=p=9zC! zIEmLgjn~b5nKtLnY6PUzvT%NvalU#l-R?5CYDvd-OUE)vN5s-mCFzJ-Iu`wa;Xb_s z9Ducjk}8LlKSQ?|X;PN?N5t+SHvWHe?;d74J7yR-&*yP_&Os7Fs_M+)ph55A5<34j zDOJBsDS^W&CGg+Ixt751jPupP-Js=pwdA?OmPww!K%bCMw^*xX*1_@*G4{VC#r}Fq zp1z)vr$<uq^a$N1Ksa6U)Z=9oKs8gnf=+~Ry5wW7m+1$(NLY=d3neG>yd(wJa>+`c zpq@#NOV@0?i)+d4WUmnOBCfihs|9%mTJsyC$9c&n(AC1&@s6?Tm*{$eL#w3lPxP*V z=kY(Y4EguTEG6ai2)&=?7+>f``_4IC(D5&s_s0_6L%DQ6+xrC#J%0?*DK2!`M56Ce zH21TQ-d;%j9Eb0|{XN9r>-{M60q?%w{z2l!4u9x&$+oG^f9vg1#)^;MH%WN*YzQa> zfd_71L;~l#06T8Kn)n4?_7HHt@Ajp{FLZeG?JJ01B)Dh%=Zw;hf;h$Px38g(GB5ir z&-i|Gp$;(`(7Z$Ayw=6psBwPC#qrvwB+d^zeCSgW=OT?0G;+yYF56##Ujf$VG0iB2 zF?j)2p8)eVuO7D3!Afp<!Nman+)(~}Kzhi%nw=z5%AmREGO_rHOQE|XG;0HLWap&m zv9=JYam>NQAh_q8*ZY?C{`r%yp4vG5FV8&ikB`;XKk}E4Z^|#Nfm;K9+wo(pJMr6t zADa^Xd;SUW)BJDzh?fw7VM8ZgZ0_uO#XlWkSh<NWA~P@n!#_kzn2{vR--tB56aP3t z$;;7VvNSz2f=-N{EW12n-cXwU{-6G(j1u-Ae)21^qU$bwg_8D%uG)X_Hn?-w?~C}g z;n$7df8zH${5UF+9?N$MelRRcTCwVzc>Q6Zv|{d>FBuYna*Q-z9MkBFwZeR{ve1gf zZ&s`$v|_b69uQ`vjLameZ=)rtq!>3sy-!D~VeYQ4U#Fplxx3!DF^jwF|L)Hd55vN{ zg3Bg{?|)t^vm5QR$>9(FTK!o%hRL}zCz%E(uW#we=<h!Gt24R&MtqCO@D4oX@Vm{Q zrEeHL%6sK_u0gv0N5AhrvvSj#jhkkElv<%?&fmD9?uHEwGdHfRt6hC_ZNrVVo8#Xz zh+MH?(aLqT>o?52qIR=>tX@;M2D9k(t7;LxuC{K&%p2-!*R7t}uxi8VH8V$e$sW=a zA`Qj4xvVM@68>(rp<@2@P`|l$9o*T7Q-%I#dVS}NgM9522*#cXJ<wG7x)hSX5Kb16 z@o{)!i;~<E@+pv-c>kI22aJV8|MAU`WESat$fQrW4vJdw{4Jglfz&78xU7L*Yp6kg zjvD4mL?j;ilOeQ>U=;d42eIOr#xZM08F*fm?}|%&b1(5-4DG;g6`^aYd>_1oFNj|G zHW8(QS-z$V9seJOJZ=$kBvTeFA65P(XF)ROX_1@`rN4+0k5b~X&Z7K}ps+IJ`r8*J z)YL;f9d!urBmR}6pHoG-=-GIk^%z;Hbv1mF6yRogx&{*VsMVIY<MDE`3X1dH;FC~` z$D(kha_2TYn5f=pLb>CrmQu(XvqHAG&!WXWXf5s}v^WyP%@IiTL$fjD)lb3`VrB<y z93Jj+t?;DbZEP%_XFZ;}gcnPg5_#Wq<VMx)TI6QekVYLI>VZ!~gt&u%n*wO-cwrT- z8=CEr#pgo9FetkEmVsvGDtC06d`gu<?Red9LW%G4{7t?htJE1Hxjti4dLxk(FM-}_ zd4ZJL+HosqGcsA)(mNcj@3Jc2JiG&OwQo*|??UGB{|r7-%cY#<lAW;?Z)3TnXV7rQ zP?o$Wfi|WES(&vUGx5pZK$@98VIfbB<3<WDdL?%VkMMrRRNNfl5Q+yg;(Y?E3;P5% zYS%y$-NIO`_I#(0!>zFQz#WeY`}wpb#!_gk$MvmT+~7j5<HLX(XvQ_4#d!a*nJ;$b zuFYT0UIh`2^WTehi7PVlKmq#?Vo=SVg%sXL;&qV4a%%|h&f(USqgH}DTRG<(k6SXh zt-||vkK)!B9^RA7H~4!IE~s4%=KXj{nlDkqi#~nH$Gs==@k7Az=(E^R_|8@#2;u3y zsc6G20X&g~yMefNhZlfBYkUbhLw0vnRQ!)O5K4i~hQD(#&?B}gs(ROV6~^Sx^G(V* zpU)g&o*|Qr9MB*C6NwT}f+Dlfjp7l<oDz(=y>e;hIFQ3ly&`$rnQwi9E-uv_SK=E7 zCHCMcVK)t-(A{Dplz$zZs`%~$6y}4iJOtS0%Y*Ot=H806J6OKNm$NosZoI)GdTG3i z1m+QOUVcsf=6r0d9PgWwb9O-P7t!lv4E*X9kD#g7QS!*AtsUP<Jo3e3ygh+;{^X_J z1dpdFkGy1-gLlH@D&;A;ALfhV&8SAXCHPwE%l!_YM$h%1;Pck!Ou#(*5Z3irF`f9J z?f{(j1ojq)-)itWKr9?*Ty5}NKrDY|6dL{)?2OQV7oZ>Z8w{TVPqaS+^H0K8u%^Mp zKK})SKQ{P`!LY$C2Gey_cVi;U@Er!18>}?=4MalsuNa(VaH_!qgMNe8ag_o8A2vuG za>S|1kMJAdoA4_JF9AeU`R5q!?!+`2UTv_<V39!pp~EZnq&J9VX%TKZluuB2HQWOr z>^6nD&BBcUXRb5ctvzQN?$(;0G~BH%KX15OOHKuzL{8+6lW~40<Io$u=H^v(ANQ<S zyKV!{BlOBk>M@9%o~&54rgmLMXFDa4kjdvZ*+{vgjZE&T=PKgEEp_Z*1^j2Ze{&&K zTW8X5eclBZTqxIX?EVc-gxu8|Q1fKeZ(WCS^Ayol^;`3<ST=JlcUoYY83xATwB}En z8s*PNr{B5{VQ5G%CE8*4Z${Qf-6vGA@nx`1_c06;fYy;ParyWStHd(>J_R>plg$Q8 zcamL3dfD!`IC?x1p&2c`Z1-Evv)C6HpN|`VhtT$Ls6>;IzijtgZbLgwHWS7sWAdGm zUbg!!j-JcLqti>eKZ5Ae%VUf2*KBM}JSu-9-*1^{m2HaA`}`>BiN5R%_giMA(d!%~ zy=?beDvjP+<L{TFq?he}%XiZF`+!vvBTtZ4z9Zjn=`(tbMxYM#SVZSzj5Mb-dL!R& z;h_l)H=k(+jh<rIq(8>{Err(pFSZJ}(+;y1fj_fK;cp5e;`rq5x6rW=zh#!52LMZf zlgvW=k`2>qX->8t)i>prBU@hU3J%eGbjxd<zxPJAywtSiC1@6Y7p;OrB0(_(k>SoE z=;eKB;OE%lgf#`mL_Q7SBlSbk`q$>x4+ZWahtc3`^vFDbM|>i1LcT1;e{59#!5?!3 z{5AdFo5bQh#v){BBEd{7z9n)Qx;Z#g&h0Uty%Rziwd*$AI9nwJD2X6Z-;8%Fln1o3 zx(&C^PSqAiv5fT|30Dh&1o4nbTp;BrKCam<H-3IE=lXf^^Ls&k2_XSb5cOB<Zu<HB zVib`xefANr<(Ha;ck#pc@}BFJX<=^8XK(wx;6(Fqa{dCb8HR2C6S0zcY%)1z_(S9N z%)N`h3(PymOJ^@Bu@Zad5CzsCbOrO|)G;8;0}60j+l4RhrD<U=O$jTQC#TiI^cnOn z?!lM${b?z9ze~ZZbPcAY;7Un>?`Losljr*_fDbL!9iF%bjImP;Q|nICc$~mIWal;% zeejbt_iy<9t9L*6$?tq^{1fa5s_|pu8u61P0WyPWB%=XK1oL<#yYSs$xFiGLgN8eP z7(Y!qKjh_D{E%<{P9QNDrXl%MjCPF6>6R+P_lNOg{?MM8HU$udIY%qzs#%T1$*`j* zt9>MqV#*Agu5g$;vz8{Cd#kv5JY@=pg?CBMcCOS2`Cl5>I<lQB?J$4F$FTDq=E*wz zT1VmUKKR>d{>tzzChc5_a+Nurd*C$eyy&ezquI1^)y$NW8}xEBlTT#0idZG(51|xe z*pqv%*H<vE-Z%DE*_ZIk#?ILMR^RdWU^j(|fR@WPuLm2+<HvmgTPfI!fO4g^{96dU zAM%p8C;y`(y51yljK5WMZ$NJoqQP-Yt|~@4B_$@Od*c=68rGxIlL59H&I4T9Z#DRF zgBKa(`jhVG7(CrzwZSrjMFs)H|K|*{4kWK{K}+y5KpKv;ba!?7M8jJF#mE{k@pe)z z2OPCq??xO&WsvcVgE`jq;rZuZSXv}T^)uX1xAv&(!;ZA|;YjZveaYsPeKwzSIF~2< z6=+IFy*~U0t8S#1hp=~m0J||DjRejd?fs)xql0}MF^%{TI);;WvT^IfZ2A;-8of#u zGR$^ISW*6sHxwd{UN(IS)X|r0etOjT{>b_i9KA0Z(b3Y&w%+`LWze@Qy|-IAKY;SE z&y4BKw%)wf=I1WWvnIH&ILt^d+j`T{Gxj`3r#JF?lUo02suXx;AC<q6*PH)r^rjfS zyGKbc+j{fqG<shjCB1CxO}?@~^SlDjv!kS!ZM}JbjUC3N_hGD`(o9<Uj=bLFyMr`k z^4H_(1wA&I!>E5oD2?98>&-dVUTcgV_k5F^Ao^<OBtGKpH;X=nR-;GBIhsb$qj?Sd zS)EMbkNE<pVe8Gj$(o)ifTeKen6Z%lU`WUPQizG`=>Euk*`~v#ywt<1Ja`0V%V6}X z33xz&S1@>`;ie;nq1=mcO=S!{^zkkXe8C|)7T;rW?Wa4ijdDwR;fEJm%KY>?G;lv` z#XmgZU4U&f%vUrt0XK4S-?nK0(eQ}?MALz2a*_fs70+Y~5%vS|;C>RWWboEf5?5Ct zt^(c)sel7+Cf)QT=mc<4XY4SmB?}7hq69ARfHzVd!t(~De2yhm-#!)X(+^U(We9l@ z2_Dw30=&zD`$>4d0(|5C&ZpTa<NjAue-2zoaS+Z}p6g|`A?0Np67LOcyIlO*D=|m$ z%gUmZ`0ma#n2!!{!Y!e2b&lB&;><8F?EF#$cV6ZK9dXQL^%|#7uLC`#&&dyH`J#Zs z!-WbY4tbX)aCgYX#AksRhzrf^fjH+5+#QdTfd-ynoUl)MZbH%(nOA_MyDJ{>2J`#d z-|Bq>&U4<0eFMa^;>I<bc@tyJ#<~sbR&HLS+Uaj__Pk?Yw>P+BuxZV@wX&<gkfzlO zpV&TttE$1Li=cL0A&z@C*W!IQxfkKtv~EM)8jrq<DK{|mHpA-rjVm|TLeCUwzGb@+ z?$Sa2@VyL7^AdX%e!U4XHu)yRxa7+Q<5TZKc)pJQO}n;{_BPz4Fy0B~Sr==28`pS6 z-V}Qfb*yvVYfghZu$prKz1PqYI~~;`<hqcUZzHQF4COCr;JoZodR}}I{(5}Qo=XcF zxK~|4_v^&nlV3n@Fpf3v;vWF>PW95An<3ZI_f%t~P8gYLjI5KG&ZSS#tr5D@h3**k z0(t&1zXb5*`Okunu`}@JcffP58prLH!kl^Iy|7x3U(Wj>Gd%txd@*#+d|ag%PuhY7 zag|~`X$y8`&e;VXKVPXG`zickZs*J$N2S+=ITwy6dt@$W4hf#?u!~7>mc!mh5{XR| z76yNA;s9?Lt#n$!?_GcX^>trecTV{ne6vG&SlknvBa&aR+k+p?NZSjf%YNcm{E!p= z+>QW8`}EBa(j>2R<Aj%Z&JQmNbAx2@pI-dkiswJ;+x3a<TPY%32lpoY{uh2<#g9^; z&)~;GAq|$33F)%<XvLhj2@y+>RxDDEr7$c5TCq^f$|)gd5g9Gk2>N327_E_VA$=pp zS_&zo7*~JqR+nM!F4wZ{qwIW{d3EH7Yl+$RQJRO;pT#q5A4M)Icx1)y{qv-W*!^JT zW{SP<?7qh+WmVCw>dpu^hKbZ@|CO{&@-*JBz&qo|Q)*)uL>89%0uY;+fKLje+z0`N zM*zP7nHbnsK`NE9sGDJRDV+Qeh{*q<uNa~yl(&EnSeN8u7vzE}-+708i?8-AI^=_V zB1BlcAdRa8{<XfqxF-=2RI0-B2?#po5(wZFVE+X|CJ^lyQ-aNy8=VyA7>KqAM<5E8 zsBn71y$Dw2n+zM!6(&F9%Uw$OnB&F1gfcSb)7hl@d=lE85nQ}I>YD(m48g?{1T}<Q z!LMY4Xc9?@V6N`qT#0T3|4-yw>V#}vFf%&w2Nfaz+Xh<=?l9PBu)*Nb_H~NPAAr!^ zXOI<c68^Y0!IsD77B{j9lQN*IO{TFQfkxb?nVtC@f7a~tF4lv5-KXK3up4eoY}KUe z(PVFREc-Og)_1sl8i&8peVVacsKB^=n!0J$JssmdO@YyA6>8WT#}JdeE@L{Aja!#x z+o#!W^yV6oW~{5y460bdIC|OkX@1LTZIXG)b&LtSjP$a}1vq;DY~e>sFWWv%OF#)x zzc5WbHyL4?&&61ypBeefwomg#9`GfZZKow6`k9elwtX5$&o!r`(;Io8=1az3pAl?2 zDt{yI(=?r|iL&P5S#`$I(woFz2DyN*q|v);l=QOg(>!JL!p7FuMoBN*KFvbY8|u<q zT6DDZj=WFPVDxkp#QquRvFWu=kMI4a)t8a?X&O#des)->s<Tr212pfNWRBzQH_JXv zf#p{t_LFG_E#XDjs<0}Q!XKSE%T1RHD2D&zU>z#q^~}_L8hWQ;IQ~)y(qR<F_GyZ^ z+U6#ZJqFknJWMX5c)9vz>Na}@T0^kEv9yDVLGXs`AW1_Hi@Z#|2;U6Pca{HuS7D(v zV@U<p@7UByf0wimN>sYxm)kwmc(Swu%X?~b5tTJiS2id@2!jKyn7&~L1RE(unclT6 zWqj3$&-lgr+IXZ`SjJ1+KOV;NAtXpyhMLa!6UL75GmP=WWE}6W>Z{oO4B(!3?sbgg zBhEOsZ{mzY&)Q*Z=nVXWFy3!FK+Vbd+c7r5@1HW{>*2I~U2gf>jBxRMJv@qhP2{OO zr=577Gbw}b2cIr?)Ay;G4oiI~O5zu}`fP@LMODa<ua5CwV{jnjlCPtw5MbQ$bU5QK zgQ?O@8IS8RYC2qo`Y@4aEr2H)JdM!m2dizohPX=Ig-VU$T>3a&522)k*b`jVgObM6 z)k`0vZC@gNQq@0ZMRJ;?Y$>by(#k%haXHh-w|k}TJPybw)S*78Kdlz=4cvktBSG~S z9YOlKZ6fKSQR=X?gTn(&@#<6-m&3uk@{-=2m_#wX22UeQv<I?}8g(e8QKTdpd@l{6 zKBXoZ+NOkO*^rDk6_@Z!5C?*>NS9U~WWu2^Xvy+ECLGT=OTv-D$rT+b2}gQ0;c(N0 zcVNd9$kI+ET=wU{ujwm<%B%i?Et2p<C}|`-Z6DRr-+^T|({J!J!sPOf_g*Qf2EQ2! zI;n$@g8qaR^lH##dZnOIN35XxnciMY@8}CUQOHa4wrWmDm&$~@690tOZz*om(`D)H z$5_Jj8a$0Kt-P_}t*taA$x^q66*TI0hJtnpZvydnL8GQvLBGKoo+#wu2}i@065kw8 zczS<?eRI=O2K7#0`yksC6q89wU4U<pKZw2<MO%=!)e!Iu1#O17;YG9`L!a^Y5LdiC zMS}&2Y(xzGczO6xd87h*%MO^Lz^>qa#u<MNw<l>7xk?$>pUglvkY2|C)I}u^6FpEm z1_flf!Tq8O^gwP9dcL{`z9KBic#%l2X?_!xZ!ZO!Fd1N44<$!M1j$P%qdO#B$Dx5P zA&5f=n3Q*ahbOix*ayl;p5-i5md0EDg&Jo{{`RHEi86#PwLVFfD2(2tk-PDa=RnD2 zh#ZFE)F&b@`~j1TPBv8edh!pLX0YQzzW0(NdDIyR=SYo&^N2<Z85L48xZ(i4^8tD5 zZ>B>}8MTz6_|eU}B49vQ2i&X3oMPB8ot8gnZ>etyV|tNXFYq=pbgK4HN3QbEhsF67 z=O0fDONEIB_sgU2#($!YkpKPQuA-a#?;XxRYEMCMuj8Kq9sm2KeD})~$-2j3{3qvk zq~Z`&)RMo)po3Pw_PLx!ci*Qu4aMQe>C1tDxgeWQ@Sw|7Ow&-MD<$vm#`za20M#T8 z)2=(vmdMn=8T0j>X^dBnpQMb0?%cllk$sULY8Im7lCO9cq6$cDjMoI5>%}W&$hbr< zEeRgT#wF@(Dwn9HtesL#sg-cxpW^H?4`B2?<&(<<@$_AOthfuOaBx`oH*5cvoLAjk zyJ?k3x!P{e+kIe#YcMORw@Y6()<{=SrB?h+8SZLkuy@y5(w(^${y5IQ@c8q}RjN!Z zIdrOXMj|&u=IO@F(Wf|#5I8j!Ia`Y}p)^u`WFRFTl0#|;eHv%DeWnB-HI9uN>Y*uN z^@?F}r8s0@F4a9#+?jniQtk<Cd#Ku>!_~Ic$`jX{Hm|8mymPHjWn0jsceCTV+o-qB z9=}$-a4XESVG>PT<=Y0&tr<@x6Gw=-!;cuLxhyYLT-ui^E<NmAl0nAAgUBP-{&)~U z$EL(%&t#9&^ULw7Ce1U}?-uhstKm`CH0?J$A2CSawnB3#Z<v>t^Bn+RUVIbt%k%@| zUHm=%o#Ev~$%})(hOc3xz&qnGX7a!`KSHeJ1z>z%`T(&~dIh%bIbyR6tN9ONv;P90 zp4{E|L&JBlXuOMm%)ghU#d4{O<>w50X$}&GIO`<N%Ph`y5@(r<MdF-i*lLOM3W+nn z+TwDuFW$v}Vw~k(NmV~%D0lJwkyu4asy^saB{UZ*P2OpwdDNhH@rj7VyCjL`Qb&^; zOx~p~4HCn3DQQ^l(jYNhuQ}CWl>fy_#=CefW2jBbsah9{<jqG(mpL_-ao$8qEDy=4 zn_VoDQ|nW5YJ>T#p2To<%E4}n`JeJMt=`3p$-yVmIQXRFK+5WqE}g>9ZN|?!;b)7* zQX~A_?l=&B8V#$KJlJYJmkB@HgrEG~#>WF#V$gUOH;|uCC*}F49WRp0v6S4n$7pJ9 zG`rl8_&#fHt0lgBHNIAhr-jF|65l^Cz6X-x`@D-!%J}mx?GpQgDQW+L#h_{bN0)Yq z{fp+Nx&I}L-D3SqJod*K``0!06If1Pcd?&E>>CzejnwGfW3<gwORN1RG1P=*lJoz{ z*gg3o@QM$<@kirb%%>E*?MX3w*Tqo67{2S$C-HqRCB6=eZ?)t^hxx3M*gMT_k<^e* zx`CI47m?=UmJ{W|nZrUC$K5>nj=x{T`Q#>}_vxf^c-rwPIsc5~Ok(e`w6B&Jp4GGu z8m;TWi>5uFE&pH=&7V4&lA@owv`Y*>ONrs<F71-OpIiE>CB9!+`j$zG1oPxqTdY3p zlxghmW$e&Q$bMGJ_OOdx^7^ogPs;YcEj}&V-x;<{THNpG6S-R@u@748i=>{tpf#(& zV*P$R_A<u)=cL$QbFoXgzvj{|y!<7Fm)Bj|C6`_|pIYum%uUPv2;Ih@+=Wk%mt_3V zLnw^qNT&icB%J1Yh1Ib=#^O@!v}#6GlhuhhbqA#e$&E=~G7EIG6wM?d475f{Kj0-3 zKvzq&0T->7&SV$uGKuy$i<UdYG;XN$F5bpyPfd>Yw0N|V^3%MQygK3H^i(d+h;t!T z<P7JzT9_(wOlk8x%Q00YbtaB#A)c)~j>E>jXZ)X#@|-U4HYRVpSg^duN#4Z;RNOW{ zrWj(-c5sxSy$Zh(S_Db3q!9y>9@bB0y|d#fCByUd&e@gjtbDYy@2TJ1yW#qE+kW}+ zC!cSu`|0d~OAlSq_20i-+xhAKuYBl<ef~dG^zCW>??0aVchCQ5`a_@Dy8piKKY81| z`<`w8@Zv3fpe5%4V1h^4MfjECSBBq0{HpP*!><v)X8c<5+l^lbem(fffD0NQ#W#&i zR{$>&3{UC7o=zn;Y)Gd8{5ivA@BscZW&n)TEWjUHhg-%X2Y!y>GHC!#DH$3W3<0mP z@X|d4-;b_~Mw&F>P8&vKq67SkbcB(?1n?U3FC7r@Y35(59Pkhe1V)B`!2K5gNMbc_ zL;#6w@OJ`!H2h8$Kw`Pmp3ze$p}Un;4txcElu>KLkM69CQ}Bb~^paMrnP$ZbODoo1 zvl=Ne=`unH>G?AMC>8y(zixi{b;TJ=im5i6FRAS?cQ>!wmBqco3j4paxVt$MD+|mp z`fd($IE%ZRbNn%zyH!RWmB0+6A0N}RxVy3R+AQvFTwI^U-Hlw?^52autOzi}_;Vfl z-C5jS&->LZ?yhoXlk=+iFYTU;zhUxQtZwu18#I4bPcr&j2Y(HRl%Ca>jQ;K;ufJ4( zR&O%;dlcTbn?I{R8T}oCzlFb2dRC7z`kR2<EjE3UR-ZEZJ0Jd>-bt%h8T~DTzwUmG z*XmbBe|NA{2h?9PKE<Tn4`e>?g1;K`XZ0;3J$BTs=FjR~Mt{`0-*5g#D&Hw+qjkSg z{;VEmq*o4q{@<!UtB)D|Z6-bQXZ3QJzuSBqNI!#A|F!Nza&r!yaC}27!-dEaFH}wW zYkcpmhvKUTeW&2@aw@EX+#F=_Aa@7FS2Li+sRSZ)@2T>g?LW?UTC?wDs4&7a^{Txp z_1>hvko4}&Ob_azprQ#Hv2sgBqFM}{Sm!|UFBjJ?;}<gT^1YXQz6ZB79g|Cvn4AtK zXMo8m&=>_KPX&j~)C6`)zW;Py?WC42|M{eGZw4A*42l|+v22viAtmaZQYBsggmmUi zKOr@tXNfMWDqr!{zEd;g<jG)?$|o;`)~zZZR6tGlLq}n=@AMI~^nS)PbF?uf=kaLb z%b3|i$S5W*Q6-L&vO=Vc>cb%6iNwvQ@|}y6y$6~ZGnK=aNgW9q1@+{DIcgkfCFFm% z&p*yTE2)wcLQZrVbjTHN^ZBZ%m-AHAG^-rd^!#g4`F0%Cr*3A2I2#%krLqnSI12%1 zqApyv)_2Jzz7MSREpYYX0?_$&TAV(_DRuDy7n}cNMt7a~D-aEH&}26`9+w4}1~qoY zh~=WSRPd<v?pog|<NU3@i_lmvcyM@QC8r@ox1fsZ_%81DO}pAxyxHe_FfF;cW6?@Z zkwU%*P3p~%LX!teOTkiRIv0Yai%>VFS5Y-yAyn6ij=ocnILrITNMK)vG^J%t7D~gj zDJLI&?h{zCO@<6^k-;cdFT|h1N``Pg=1o`#%{Unl-T8@+N`LJ+@nM6z41NHR{)!CW zpQrx!8hq5?b%69&YB(qTq`TMPqXusPq(AO;(ET9(5OUE=xZfbh82Vdo_^Af@+5+t# z0)*9x>kOW1_CCWox1jqfK>9B?e1gGiG1Z3G`~?R81NlJwS%WhTzSrP4k$$>=)!=ys z&o%gSq?_(em)u2$&ouZWq?hhLF!&LJA2j%DFiUq?4g-F~aO&cx{g3cR!W-nJ1L8Ls zJj39-41Nvir2Cf)1`S?n@En7u8|<@i9R^zsHX5upSZ1)upvPdJ(djVQYOv8@wZSrj zMFs&#BL4w{_!imiR^&Sk?;TK<+s)HCPbBW<<#mR;dH(m!zgt&aXt-NPTxtG0kgqiR z@FP99PWiI=uLh){8-H#cM9Bf-&iu3CyUoJMp1XAcW$EbO&GSi@xSQ8UEWBGM+yETT zaZ{6qt9}7HAJd~Kk!3fVl#`?szbVIr$w6vXrX19HR;=2vX)S{CxQj48fzp#NcPf?a zkP>Sq56O{dc2D6Ulb6irbIDvtB%|>*(xGB9!PI2AgS(?Mmy&52xJq-+#7>Hr%zV7D zdkPm`T$-X!0@oSWtm1`3yQ=VJ?<thpwWmJxi!=`Bo(+HKi^Ysq-(U>`!H^!hQcnTo zsb$T3jQ12A9T$ISVyav+X(t;emz?dMLWA+ehcjrZKrhW$52Ln@UbcG*zu*pIlIfh3 zgy?5RdfDzNIC?Q7Gg^At?kTLt{DI~ljf-pS-okE_hvjKT{<7Uu2yh@yGQY>9B+X=` zm+hW{qv!h0qtjzgv1WznYe2;5`U?w;zs<(f;8FQgdK+%|=qd(Dr+0_Zn_~1<Qy4wf zq@_2BzYO;jcBawWK1zDo?kVgydST;f*C^>_yQgriwFj5pS=KKkB{?m<N4ck9^s0?O z73g8=<SE7d1wxoKdL!RcpgszkW(A%-M$b@+@N?*mn|S-pa!;Yg+H1FUBq7_F3xPkY zlPUZ$U!>jmF+qo+V<CRL-@&f46|fAD2Mr7Hqahvs=$C0uAqadl#^mVBOpcI3bCBmg z#GsHKJo0p;9>U1blh98ay7oe>Z2C~-^+-J=1mg~BcW(WGNIhgQ`3!qgCp9kISq7$5 zda<(~iUc6Z7=J=uo}EAB9@Z_Ga5oiG+<7kIfntgwNE$}=g*u<dv!RgltOR}t&(F#; zqA$vmw9g4kh%8Pa<r#ZNuQ5*VU>d!?jPwvKCGsGISCF@jkveR`wl~7x0HV*5o`ad= z$0NPCOK}k5vJy5fz)Yz~$JpJ;$+nDREg5(kyLA>UHD92|g1RG;h@=ODT>9ML;lN!& zr!>y>;j~=q&&2h>wTM?sEj^bHXYvn?9CIrU1n%Ob9tnh4F#bj>4&=&1s@vk$2M4}^ zx15tJ)LoSlBsFm(RHAftGFBqVv8F9Oo<Nvw4zCR-Wi>1P{(<XY4;gXa`Do9m8kAdK zMnPHJL?GIo6lTeUyCL8WdCR4h5X4{hm^@zWP2~L26YhqH`eRN`U+A+b?RP?_ndFM` zfHSW1@a^A%e1^bvj(XP7e0vZWmIcmoay~_{?*PYfIZ@ZXAtx%Kop5U9VAF5Bc!>6; zNF@>j3h{Q1);+!QfI30kH{mqBhnDA7_CzZ8LyQ>hG`Hd<H1&ICOH=R54fg*1%Uh`H z6z>AR1gTJnwL)N2xW&W3BI7E^gnOhxO$C>%I^wPK7ijMk@&;Pjr_KL|(%hdG&P-NW zT4$0BdclOPLhBO=TD_qZS_d=IqVRQ`7G!S)F<QsOm(-xlsQ@GF#FA4nAH5(Xwfg~k zDHAWDq2g5q_L0W^WWG$s+R}K}fkYF33H{U5PRJprXN$?MyCBaZh={uP2R<XsyCjiM z{i*qMXgIe6%dK&vgwk>qfitA7e?Fho{*1O_TtPsm-yf~$$*tH=9XxUC-hp;$+=(jm znQO_HildLBSkjouP+cTro3`vn!{$9xkhVJmxX!?K&^@pO)@;|S0a43&|7MxUzE?m- zyr2Tl*t;N0CLoA5YdlbnW?k8nTlta-#e><UC-CA)N~>ni5bV}g4e~IF_mAgswpmnO zzPO_37QEPn1y|9Wl369CMa8Sutz3WOj5(#VOG-=5pFPzxf+B;sym4aH_I8UL*RS7H zd*k{wtBWXg>?Dul(aZ75rdwCm>4#fOx+SucSC-d?^_}63YgVpXkqEyIv#fO+ZuQ(; zyV_HOH+!jGN7tjK^FNMzHm$&1a}C&ma-5BL=U4RPcvgCD@NB-hj?Wlx-iUXB-xldq zr#@#)ip(ig0pq+ZO)6CdP{)}7>gUl#>MSi?0ClNW5c%uYra60nj>*gUK0uNH>b*9< z^)7xA4p6}x21yZ&`m^Al21)@`D&Fv3`dP*57@_yl{{@T!kFqUT#%=&u&B=6g*y>Y= zz2DrbWg~IEVav{@ThOqoVq#Y@dQe$3hZyhE5?d%*aLS40k28iH<8UsQm-N2Gp!w&U z^IZnv9O65Z-hZYu%$Qbl={0CVv9l%7RrEUB5?!}6j)BZNp4fWN7c#kh7TD#kcX1zR zd%u;Iecy7~SIw~B`W#rGyr^X6w=6T)NoIb_GP6c9v+V*<L!7H6GaXhfnYqW@mPuxQ z+psFh%ts7cB$@fBW#&T3%yx4tm(1)Wmj7SuKVe)lC=w=_d9oxVe}Zj9EH?=E`I4JO z;*O9xf5e}>ys?Z*q@>2l7pbF*{P4UG5-#frW|%DlZLOhNd+3iPGxwzHueoy8L!bO% z+izc(4}1}R>__|XBaKh;4~!G+;od8aR9iqNh~(ll=ZtY4iy!jMpDnrM`&b2am`CJ? zSu+I?hRu*x%qX*B1Em$Kxmk_GXa+$YYZET%prfYMYU><Dhq?Ee`*wxH++EtU$$|J^ z#Gnr2+GI9;KaGD>f5ykKbA6_I9ez8^pYb!ypPmoh3!i`e^Z)o5l0gLEQtCwZ&-1<O z7CfYdr<+P}MtYf?Q%|ar*O~a}<c0ZVa=w0gmG8>Uz5+b0W$JlOxWtD;S{&$4z%d{7 z_2AqTPjdP5ufS_@c%Je(sz0WJAih#{+9Q0!YRn^W-tBuAoKHw`KK&8j6mcGB&L=)c z#mmPbG@rjZ;}PF`uJ(<6#OKTZx^L2Tq9*8+M|@|>iQ-rU8H4D@LNyQ|*rk%6iFh5e z+gJD;)d_tQhr3n2GoSOFg5&mXK94yLb`uZ=ag0SA$1Rg+lu3yucl|Ekq}+E^NmQpk z;yX*C^5=g8K}E0gL<AepPsB%M(Rh###QY_AxeF?ZV1aiBAG!S!JoxmK2QP5J0<T-) z8Or<;1gS-yWX*zHr16Ah@TCuXjfYPkqzm5t6dv)a@*Rhy0Xq?&c<gW@gbA+Z`Rb)t z`>w)qF*Gf8`_4f?JncnYNY^1~mCuu(8@?Tdar(IL;Mp<AZy+xr=)oB9ZWaFe^FM%> zv#R)+n_mvSOs{$#q%_A(zQ8SD^%CDHqHQUucAN+vD0KlHOy?j6PQxcMYtGfa_fvt> z@H)a=;X|A!U&4Z(1|N)-H3bj5b*I#nT~bqa!I?Fs+jl~W^Xa>!rtCsFsPl>4DK%x6 z)RbK*HD#C7lwIJ8HHC?<Ak4qUH)*L9A`7z+QJsX!kw3RKVSNY0NV=uY<j?hutIbqr zgx#@>Fn1m63?3|_7OPWtNu6ObSZ9!0SDdUfmuIar-<CSFKXaYQni<3DOn0_Avn^Ad zd1P3fk#lrEhE)s+C-Qt4W=4g<GYo!=>nqs5-{8x6ihs@EbU<|3GbRJ#|BO-~r03Os ze8xr&tgyer;HR}`pTU_7?J3hn$n$K%EAWT(rUH`QO$Y}s`Kt_mz~K80QZ|k5w;8<L z;6(<h;1K`wO?Wu}b<ibl!oB%H!?T?mmzjH!K>!K=1%sd^y1Cr=#{JCX^HZjSxEtTj z(s1~z2HT*dmoRcbCrb|fa_a?qBn&5(d<@JEF5^AFTODM7pX<ELdc9_!H+z;U_NpFt z#mbMb*;Ko7{gt)rpe$4m%rc#q$@^$U$})~eJUg^*B+`)d_38|*2&Fd7b2w*n{JCR? z(VmyB-l)V$5B0+{9kXqoQ3GitaAw7d8&|EuifYxGy3H##ue@Q!ibcUHPUy@yI+vgx z(cIUdb3nz0|2?Wc_strn(1P}0>qb+q7UVVAxc&BQ=WlzA-qSzQQ2pErN;Ss0S~_~! z&fo65I;EC*{%v6@4k{VxWjlX!^!8iXkCtAx^S2KfKiAJxzP3@?9_BV&iP)@lCnJB^ z&fj+5uHNe`R39h4FsI&}>p5S(GN(7&`CAdC^I=@BE!=K|l@|Y|Sga6fg6!vSXBxdC zn}}XJN_yGO-{$dR3CtAv>+yW7BZVE>rdXu#m*M<vjnT7e=xG@xy=>=iKQVfrV21%S zwljqtTBTSx{<59FeV77OFfP4K|B(`$PAL{EAog)H(z$s>{d&rhtXNS#pPrm)FnV$e z29`TPkL~x-^|`VJ#Ah14k<Z^6eyZO4I3U36{4b?<@MF1BhhSZ!F8Vj#ezTmvRShV; zFB;d|f3Nr<qX#M}{4rlLoxdH1{~O>op&{4Phci&J=g!|I;hVn@ev9#QYh`?n+Q|9a z*2C3cCKPEO#D-`nG8Bru0%S;#cF*gyYxgTCAn4*q;0bkI<rf%vHPrN2K`7EvB#z-i z0C9+_O{Aq%9f}hUViRklO(@bfhahTLOGqut#L}>qg~VcQVi{?x(g2Fh4haW^;GkN9 zw$v!7Q_w)rb(M7WfJMsm>!GG6iV^pAaSb;DDAQ^aY1^R=%?StEl*hufDUXC(38I35 z%x<;Z34oLkgXJDt#=^8jfDVGFVfkHGm99pFq3<$QkEa$#B)859efJ;!p61(^1EWm{ z3`<uVijd(d5bajlJqmgi^bvGjRYg*O)r1QoLkpTZY7q0FxQ6=y=l~{Y0|#Cf3w4Eu z5)QN}kHu(H9*OyhMGXrV5{twN#L}>Ekp>XUNUT@`5UYszm4iA&R7(3uc#eWH1t9=1 zTSuM%8weLfURlsI(1>WN#5KGSfDT}THgKp>hw6j_ZOUUUv?-6Y)Dc7ts{pB%2C?C1 z#di1;G*a0NPyDQiOlGWGJGV2MNW~8PTJhV7-|kS?U9_gbXS05R%U2g{eQXD?@<?Sz zs4KXK4&~9x4&Xh&yAAItk1g*mk1X#kj}lh)<GT<304oRK)(3nDZhaMzcZZ_4FI?~l z19GPxZ1<xDf?Wc%z#aiVE{}d*zuLO#9QhfleTRHKi@ez*p2E8Y#CD2(xD}wER0sGc z6m6$-lEv1&Z2!w2kKm9f+y}Qv>>&QaBgu(Je8;Kan^8M^M((~Dq5CEw`Cgl@r)cY8 zPQQ_)?$?;IwhjR;dkCT}Vi|RoJ!07|AkyBen1D!opI~7DO&#cg!u@I^0M%YG1xWYh zp{YZm&Y|4U#ZMs9cEUAq*A;o-Bo^)kv!PgQH$%i)grR5~eSkeC3Tc+ij9%pjodr{e z7Jv>av;>G=W@Qkv0*J<#DM*VJM@$Q>g}D}r#uT)uWq6R5kyyWg7G_!~8Wt=HmSbWu z*Ne<*CBIFSTY(3m5ee^r-GGb%(Xi2@6+9>)g*{@?!r)-jkA{tm@(73xX>?*4jhSTu z-J&rCZQ>;oF4h1=0@?}*n%aqZ0(V}nJkb(oS!9pCp-RnthMGG3h*W4q!$Je{0I=cb zz`vpmB8+7ET*=YEoeyH-=IqY3Ty`nZVrl6|Sdi!w5bGsC#tGJm43$1Fs-US8l|y<l zq>Eh}FptElAQI~l%WyL@Dc0T%Y!9c75vZJMqor1AbwRm`cXbIxuR+?Rrv!1o^fY1N zCel*OI3lqkT1KS9gcq^I(5OBO)lK@xsC1JE5Rz~$W$HGESX3>eY8iDsDSJnB=L85> zBfxsTaFvFu7SJM?c8*8@`$&`(-cOnAl@v5}A{9spY8<nosgv~hsVQ%2=eH+t*Utb3 zc>aLQmV$^Pj5e6g=X2$pIk+84wHk4ROxO&W5&Sm7*Kwh#&xJZ)&qb4J5JvamSiUh7 zsceOG!4CKXjBVFy+DH%$!Zs$KbLaU3cgT1d4U0u2xDzq#1fwWgbkkA%A{Bc8@muJ} zj0DpdKz7gQmf_ZmZyvw)0`CFd54;a}Kkz=_@LxGNaF^tkG8k<qH<AGZoSd<L?25#0 zi(A6ZGr%hZ>>ivgzNIQ#{zSqHnW2&P5J9xvu)4VSNVrT~!s21BV1YX+&xkChH$<w1 z;Lvcj1c(VhsVgQR5~~xeMSxDr8q`KWq@__Y1;^o0p3qdtIlYQfX_=#h6tt8P>->#3 zbny=Z+pOCWyGXbSP6Hj}P$xH`SWK9Y=}a%G6S~e{q1$RJC7DP|vw+xkf@n;zXp3Nx zSgU&3p>BdjTLjZd6RO1?^|D*MgawoCQ7q<q<NczAszJ87eo?81X@v|`;6cYxCA4fR znOuB2^kDGQ5G+`DFO&|ttw2D#Upme<wR{<+TO<|=nz~RY+l$pkK%~7?F#(Zw53xvF zHA%<XhX4}Y4J}=FLl-nJ@g7z0+TF|%axnrlf8i$5QYBPl3uze%ht!K$Mq9)(Dwc4o z)^G&K+y((Hb+n9xYlubF5*-CCk!|YMs2Bml?GVt?tZv(hp=brP2o`B+Rg54@cT+$g z+THNebvOKW-3=<5C$x1hCk^uY((w62H9MqO%OHxB(iBhJ2ox(ADPaXz)imJ&r0A^+ z(dFrc81oN$aIGuWau{gfBj_)};t;J{2qBFyZR4KIsi~t5#iG78E*$P!HG->eJCid! zbXR<SuEQ8*z%+`vS1$}Sy^j->MD)>EKlp-hTqNw5&a}lNJ(psrGQ@6r7EeAESg2^I z6tZxUAG^LpxNqvHN>GB_k93KY|3R0SJ@mJ^)CMtQM^cnTMtV|_Mv{lRlnINN#q-{^ z6ndE~Lw8sBAkx7Sj>;Em5E+|0uQbragKheMd5u6Fnc`Vcm=vS+?NlVm5GPO%FGd$B zN2YrpHAg=Sy}<iW3zAdZjTEE6Atr<FBzD4wLb1G_XpAf|YlC~>jIjlfbSF;$-2!0) z@Wg6it7;z{l39z#2Z!rB5no*rqdP&c6$CMO0cs9gd}L(@;%tWV4mblcPVgfcL+z0A zG4Su;j@i<W@epugFQBCr=)yVpQ&olx_)pgOq`0>uf<_SEu9-BYCq09H1BQQzD8J0% zxhqV?t=yylJ+XN)FzsJx2OqMQ4HQEVX|i<9f#M(FvxU7e;OBP&N;N~!m|BW@a9R5@ zS4g5qli^^jLvZ9+=2{g_n%uyPV7kb26%`#ID}7gd$p~*^gWiu0mYv{91`r5QN!%76 z(6Ue{tty8@3>c9~7yJpPQ?Nv&b2QRY08Sa<O>Ckqv`LOs6P!JP#Tr+U1PcqM)5Jtv zg>>r*7XYwi5SQ3QTWI6r((Xg*3;T$HfB7@qu*L&-)_o4sD~j=I%Mc%}v+j3q0Yy0H z$K^NQF?a4hX$Of11{3`%bjh>JbzL>|$+I1&;e`o&iwcZG_6-Rcw*G87e6;iwNq(rz zD+Z1&gBVWg`vZ5LAeoNXIc<#0TNsKw<8rJhu6NkwWhi>p!Yt!e59vhOYglTS1_;pF z8*NcbnW1CxQ6~laDSs$>VQA{hq0S?isI@N?%QgXXUGNYr15G@@LbVW*=jys3YLwgQ zBNTZ;I375YL#C}9=8FHooi?u*e=@HZGH=PezD(k7(WW8udihMA*NeqFGp{E%nhi<w z`t#$K$V1yJ*}9iSl_t;pSKhzKd5iWhaxmH3EfdVY?O#Y&ip~-uv-~WU&*c4!JWRA` z3&$dYzwKY3wP0bu@dx#&R51c9478(pyZ0|pRymlUyZsB4(3{=AP&xUd>|f-(L;Dx6 z{cZo^81^qvDu3I*;JAf3gKj_lZT|wD^;@`qk)^wNOZG1~$=FkfKM`zQr%Vf@Z8g%T z+C;Fuj#%^~m=EGK<JC~4C-nEBmvLNcD;)(opF=;z8DgO6EU6Z5PFN)rbPnkzgR^xq zC{AuNNI`PPlUqT}4&BtwIbmVQ`#M&WSW#jFH(F1K<?0rksJZiz@<@l{tbq|mIA?Ce z^0pOQtyta?w&^$#mbsyB_R6PB3U5}X#p39bLd?dGeX|!F>pEfJQ<5ic*OzP!n;l*f zw*+Hpv%|FY)Yiip=J%NkQnJe(OTEcLv>AO$A=-?d^&s>X&*+l|dEK#yB?=Ea5}Zbj zvhar9Na3aJ)E|49CDylF50^or0S&K!E9FR=pCH;MShQWRNPD4J8b~U(oY34Wu?}o2 zdKFFWj@g=U4HGVsFa|<sv!2k@&QRwoIXDNP|4_uP6?TO^@XCsXT;nIU!NkMddD!~< z1QsdSChkWF-6nnld!2p2u$AHa&4;){gUvMHx)#Nz0ckfqR)<6gF-TyLW~8lHNGk?; z3t~6@344SPp=c{)AWY~8a8fTm!7`ea9T4F3OWgG4vz;Y}H7@Rl#x$;QNaBi>2?fQX zirw@i;__pHSU^ItaGiKjED~ENSc?L1)KVja+N#xFKqTBKmMslpsThv&#WLKiZrjyO zFdQ<7WdV{_r@pGxSpZf*n(Ra}T0H7)H#eqnOiU2f6ZNQKwlRvsR7nO_voV}R#ag6A z#OixdR?I0#el%dI0Ko<NqeO#XEd&+OrGAPk&?fTv8g&p532zrmIjF$|Td=5NIPg`s zW(lBJRL)i^A_ed)@nL&kodra~JIQ5a3-&O#>?x0q!Dml7UM2$C&0P)Pedxpcf%gGN zW5mu2?#lun3`H)(XD_Tf06S1iT1gB7E&|#~8qta+#CX`t;HU!tOM+tQbIh`>NHGDf z<F{=&12~InV^CH_^(-J#zY`<IZj2uIjfEef8)++0KLU7s$dQGk3fdS%I}l_$tQujp z9YLEzQ@iElKN4<WxTbaj99_RhnjHP{q*BB|aHkY|EM4)oiNkUxHfF;VPc{?&c&}Cm zRufpUtrrzmfm<D;vy)lWKw;X>Y0<c>hYSzB0$))DC}hc8?Eq9N1yO3P)N|&DZT8!# zbJAx2WYpL}C6=hsu3-+LT7Z{90z@W2v3SGmXV_R<zofXO8(^MvIrF{^&Jn6ziO1+q zhe&o>UE%xSlV4H!vffKJ@gLQx#c*!=m76~0Mld^kj&sw8Sd=2>MbQ?bNMEl8<aR0| z5-i##Sm&>DL%Fk1fqLmP8YVy==`nurxgdnIrou#ab_=bR4y7d+PP2)z7UWKrjcTDX zIo7SwcPP=Ypb%RS^m^`+$9m+u3QbE3uc@;x5!D`zYPUuuSX6e*b$gdl#r9|vy8)8Y zO_V*65YW@oXiTtZTdVNu(!G;DaqtWPe!?UNvQ{dxBg}#tSd2hC%no+|i^LwKT^<yF zq}v@DD+3bCj;9(=hhpsw_)Zi&PRp1>b+GITuft!h1N=&^1MiU|ayL{|!O8mAg_@)g z0rnyV=uvXK4zwZ-QK2n$fGF~!Oaso*5Q4=|ovjY+pic<GNFK!N0E!>+yVg`HWLk=q zj9^j4q>q>4Z`K&M10?Z56nqpZAB9Rlu&7GM#Oq?CG7uIzkX{gUiHzCRiF^WINp+<_ z`SL4S!J;a<qkJLehE#rt!q%hw49TFS0zFX`;feE8N1y15gb&FVzYK^jPX=||>sJzj zMO6lkm+iGl)M#wgN{WCRXKMqW>fHJQszBq~z<M@VCETWkt+GvMn?l$mofM;5mE74p zY+WXV+ZHNCMNu&XU4k3(OHtph4>R9%u7e>K-)wti35Q-#d2xM=?$H=)VT1>yJ({9! ziC8h5tP+z(Uci<Yl89T%2$U#lDKWMqI>M7T+9EWcW6KemZF`iaU{S>+qf5~V%^@wE z1}PB~c$G91*I=|VNuwmyf$wuGR-^6;FM|!+5@M1g^sX=u+r<XMtwgHF@14Iub@!uJ zFV)xxz_L`Yg&@)uE;mw9`ATk<XR&M67^5+IliX^Sl<5IJ#9JjU#Wc52%ZfEF0>-sA zP!eWbfjg_n@-T{xO0hvmg$2V9N-R#XNGTE|b8l?Lm>ou!<-z_YiQ_t@U!(K|!!b&N zK6AW~5ky)FG#&ztryxcbJCj65$!w4^;m1I?G{6iUSG7bLtI{Y1!;nub-f{UsH!1}w z9T!nBuuubrB%p|DU`iucyn%Y?6UzYME4kxJ8n?=XOv@Z4BUn_i#JDvyBry&GFw+Eu z<gcI{ukc8-b;Pz}z%oI(D^{|CVZudBn&>Q%hY+%DeFU+v2+71^Y=xKsdnBN^p+g8C zh93mUNA>KJg9Z`VlsTvfy<nC&sP+O-JQBZ2*C>Vsm{_(Hsav5$p;)wCu*mz^qpPoe zq1Pe+!vxui#CC|Kfos`X<lIALK#>V1;?qrUk(h3ug$08or&xx2)vZS;DHe?h7U4Wj zvH@*XodsYG#n^FPKp+w$ZrE#9V%ycXU{RHPi`SlB&E6t<iN#6<wDho}j+q=#yLgGT zm%$BlaDs{`78T(tT3|V)_5|pR>crB-pA<7;s7PC*x;4;eR52_i#1i^_G&;=L)mZ?< zx+HCF%wR;$lwzGDmXPNKo8V)QfY@#sUBnW6>{LuZq)ifp8J$=f;5vXo;ki{k3qX`) zAQGD+d>G(@Kq7#=zIqmb<+ykb7mH^D=uKM+l}Ld)`_);nXiVJV3k46|n%W7lP&k)8 z8zikHfciw8BgO`ovRvrVqU#oZVj3dhRaOlBlD=4<cnJ%JxvyA;htzFQ-2{Uet5~w8 z3E4=vTOyI^7%hom$%SIDaZy&F?wiwj{kGi&^l<R*0nvfz?-5iNti!wyVE#wRD{hZ0 zf1HAij!>F@ry?vGv2cWrD2TXY;W&iV;vi&L`jw=-_MX^pap&)HzOH_qKRvEb+fQ@; zv&koHJ<K~gSa}xe8bttJJmroKYyx*Q>Ka7XigIIt!=QM^f+<$YFO$|qB^Jz<R<?>& zO!g%|Zxum&nW#r>4l$K7mOU>_9h8b}2{_qZY^5|k)~}mgDQn*p$z8Bk!@wro0`WW{ zWdZ?;sQ|Aoaw*fZrBO0)-~;fQ*t6C2QjiF{vrSJFpn!JZ8*AnIRzUpThw{R8gdnaV z1pCV&)UW`Fz_o`#d=CQRYC^?OMRaUM)Kf9Fvpmvmd%E>|P~f|<z}^`W;V7=nxlRxE zfTwQVF2D{0o?-=Wy;`_i_p+2!Afm+8pM~lc$(te{?p<N9I)XgPQOlcJxX~)!lJdUq zO_n#B1<D-*zm}<hH(A~Ti-eY?k2^WYa}|W{!8gkQ`OY8mG1!Nq=|hpQUG|4WHkBJZ z+}zPT=21eDbV)@kDh2Au7StPjNAb=2L*Z%)!*M@Gg{?b4q$9O#{~s(rJBIzgr2KFU z`sT}T>tS9wL+{xu(_aPJpZ35eaK~j3K12H=f?=dze2F|NI@3YHL=<<J*ngh{z>=(G zNPQ{bUawy|xi*is62(Lk6mA{jSud+$LPkuw;(ySlDHaiJ4Y;;K3fdLxa1axqw=m+} zzI4T|X%=gw0wUIPo1~Irm|6>aF>SrN(Hm7Ps#qjeEnY;{YTz27*e2=4Z7Fap?IigY z!K2QS!#9%z$!iH^cTr+>iV4v4$Up$eY>7y2STtgkkWz>u4{;n9-LhR9E*fuS%MSGH zI~L$(6nghoe76Gb1l)=4JaLOjdJE`H)jeVM8ujQ!xHnvZF2d~(Q{D|%B;rG`EB)YZ zi~zeay)8gjvqwgQNDw^(eqAV@L_O&$^9yRWTlcb#WtK<Wdbp7RkpRSxUWlWXBnXLv ztbM%>cCg<LNvOb`y!VO-8x!Jx{0_FluGJVrmxZA!V$5={mrTli5i-lJ4MSA~U8h~$ zga4jTXCG#E>_4~kN%75kHu4-igZMmuC<3_?{0Cp1zs9{6)Fs{|!B0ElL3|_om}R_K zLZ8O=*1b$!s(fV;5({6WoIk-YGA=QnN(!4r-msZj6k+8^J+Ecg&uorLR%?!N16{^- zWEi&oIga2-cfdYPA|`kumr;o%;uonz68THMOTsxZ^yWtDyAck*u?X6OPy8@l5m#(K zVipmt#P2u|K`G!Dso#zIxw|47^6QjiLFX&E3$Vvg?nSR5oA#^%Q9Y@(+f0$iumWK- zkwU_Bm8nh6-=zFuQc%%*Q}U1R*vC-LF>S*!6~XL!0wj+t*u%dtXCQuUk_wEQs4}I) zY9mWo@>v@qGIUETa8y71Fk`~1NE&(P?|3yvdyL9%FoonZpO^*AZ@H+%%)&QRlS)hE z#F~<)9(e5!@y-j51%YtRCCB~);}u7k6lnn5Kmz~hW)yfJ6<eB;{;h|1OZ^yy-~p<O zCfL#~^@+zP9x%Ec%&>~}f<rLz)>RsruT~-_E0L4<VIIP2VqF^!wSs$4s2zYE(zPA8 zU}_I9Xf8ktF84yDg1ty3eynLb@QI#LPHoh~V@OmLvq-9ze(88GRg2l?sunW}c^99* z+WmPx$HDp`{dilA0KJTknYv)uGi+<%7wRs7Ovl?A)kc6_MUU$Jb4<vhpTN=U>vCgm zuA^Cq0D*1y>-<*YiRv}5XbYV%Snd`elJ*#lTP1?9S|TI#A{8!$(q2cE4)LPHYD9-z zy@LVYJCs-fL9D$QAaPHLmYOZ<f}u#f<KUd$^`26Xe9Dl9EEjHYKt)Sjc?Cd&=u<CZ ziH&AjM#U0tLy8d~K!KEzOcmg!Qw6oeRx{iXj+SsMREz-ON(IPmOt=*hOSy)LT$>}7 z0<c$>>00DY@}T#W_^ByxYUj7Rr&O-fqC(-;jtdp&?c|U|Vs{Es8YLPm1L5>t!%7{r zGsGx1tP;2Ma!t7bhd4cklmY1(B-4+u%9b5FViSik&XvwFex;D!5<_KJQQkV?s7TQq z{5Xl^1r_b+<Bbk>yHh)Q9MWrcD$qr$yELf%lO2Huw-3bF%fv9yV!x1~^u|6~gap>> zg4QQ?fCY>U>=!XYaPWwrpVR>a{U!QA4!7~!O6UgB+a&dg@FRDeU7yH4(xX|d0L_*C z6{Zj_)6vgH{mJqU$bW{2wU<hci9!s`UvMn6tcfRF29QD|Q7=7WcM`rNgxL!vwI~vg zVj-t)#qb)5O^F8>OZTmN*|EsZ3*99oZZo9ce``8igu!J9-5jz7!-Vv_T-yQ19t`tF z`Idc{OyTFC^O8bvgOW^R(W2GT_8wFQt?7wE_GMD+HV(_A0)xOUez?de6R|n6)pEPM zd~E^v17G~LNgd}*BYpvxvkp``-Jw85tKW@6LP^TRU=IeDZn&dHaQA_8RQw`#XH5nj zPSrSK>deI2u_qLrSAc0CSOc`<d6nLly4EBDZD_(DWQv;h&fyd)y?-y&^-w<w0V&iT zt4%RXNZWc{;mqoYJb`U8;>c0$(iG^O&>=cR?M7ldJ1bxc>>zt`d32s1Td9l#n=#;8 z<SEeDi{ab4FYN9XN?5r?4ia>uIH2C+m44FQ36f1QZn^XF^{;Xlc(JcD2K$=y<O$sK zUe+@e<Cdv~yPhsI(zZ5D1R{pcA;uYsq#LnIel&G~S8g<H=|#x^)}!L_ccB#)3Z@?A z&L74$%9>o{ic0zvOdBF6p~^|-H9h7BeI?9|E4T4L$SI?nHn!q(C#+aA@WULGmF6Tg zfe!6Gut7`@<Iv-4sZ?x-!*-jcH{-h*o_7G^*CG+7T#`o@SQzhVwZoNLbeP6si=El- zs=8sSx5V|`nE2Wf(uCq|Z_fa@vx&wybWl<st%hPkW!r{aJJ=vuhD_0`hGMA+O4)-< z9W1ylt<qW`VZQz3dFx)*=;e<e(|!%k^$@l^rjtuoFHIgtYoe={Hss>AC2|i3;z{|` zB_kqgod*qP4jpU-9c?QUtX(Xj%SQrPH(^(v#1f4_x+NPoSes0m)vaV$IMy}UoSil{ zKSj<)Ab{tFB~$?nevvEuXcKHkaFsbl;EoO2G^8a&(9h`N4z&RbyX3`PbODM*nx|Ad zsh<_7ell>OQlqKFSCtsZcw(zPwDrn*gID$j(0_1}#xl|&11AoWDK_`fHK*paTVtVD z<9d{fQDwq8#K&;3oR~O+FSL*xRDr~H?6CgM)&p80rGs<>gu8i(Y|<Qb8EMM`+n?rw zuMxR~Y-fKUy>cI5A6P+7qF>PcXyhaZt)z}2t|fx!q23n|z8m52<J`RmpFOZb?$%?v ze<hNA;ex4yiMc+e^4OPVCm{XK9(?YB)pjfmwquFV4A=~a`F{m=Mr5xWJ0qs<2l^!9 zd)<kJC+<vJC8X9EZSuHVEX^G=&MK6Tj;>qx+Uj8V_)(<ehn8i#06m*PJ(T)|1urtR zh-K~CkejG#<8i7%ilsUjrbCBLlR-({RKdyIc?E$xsGtb;Loytt^b-_<iuX*??(Ei% zJF8%wUWjp1)M%iFX~JD^rQMgc(PKWZ7?4cV$$F@1jwf&jwH|>{kE9>Xk-f68m^>e4 zeI{GrX4s}SQZwSFwr)#8rIL=!($A|FED%F2vE56aW7r_T7K6GI#iCvIj_O(Oy1C4R zeK)Ess&(RMg9VI<gZ8Iy%l;{Lc6B_YkjDRv{ZqF!uJz7(!2jR&Pr2jX%P9`3MmH)h zss*ab-}X;s{}h=sn*CGUyBk6__9Oc+Fm$4Urwy_Hf9;><V22c0f({2AO~(CGy{O3U z36l&N8PO|c*+0#}{%Ou%fB*Dy%pmGy@cP^SDJQ+Qna!p1Te5#TQl)u=`=_WmeW*Dj z@1Md0CS7lG|CDDzPHq9Zlw=y<ZUHDp9ZNdSDA4tEsa7Zf5nVV$4O||IF2?@pkEu~Y zuE@<*T^SHM!W<y5jkoRG(j?kWJKdO}24csG9j-b3AF2jK_QY&^!_NLvCr74?Ll5Rm zDT!@&MB|Da99Oxf!NX4dIAPXZJ3Y_>*6mnJ%(xqv?6hq?dUM-)3I5fVTi@6MPZ9sX z!Gs=KV4kCg6P)WLWC0w5Zn5P~C#4N{4nQqfcVOFJd55n9X-?kZBaUgL0<2KtJA5o& zphIapeBb`sKdT7^zVSm$0t=Y0v38pz?m-}(+1m;hD#4tU+vpRo$<+t73LAhzLhDme z!a_FsIQ4{n%{U?3=+o0s+f0#=iSxa!hX+X{b;a#2%dla{irFf@HVm24N81HJ^_(^n z0rBQ#iRJPlX;UAVra7k4R52{sVjPB4i=i%8cs@r7LwLqk6#*6#b;R6F7sYI4fTbWD zq|#zVh!FA#-GGoV+KvHkJI4DRfI9$N0b2o4D=T&`h&-t}SkXNo1G?t<1?mhTu67kZ zu@=O3F}8`}9lT<dE%S5E(Xsu+onq`radJToSh7oss=!@HEGj22;NlCbjRg@vI~dT7 zes(yT8@4wPxN9E@4r^x?NPNEk=J#J~vJ|dukZ1unbrr%}_L7a>?uWZ}m)d#CUOTrU zY@g7&)K6i8WuiZ}e;?5`zU}u$ZN+cfT{dhh7PZkE!UhqXb@Diu*R6QEW=Cs)C`6vt zq3=b{(uEF{g?EJ&-eZUzvzD$PSIZvw+#?+i_wZz4Ply7Py?$&XaLa&`Y92ph<%8V= z?*7|JDCdP&a(5Rw187TN-QAVZB3^E?7u&SAhP%7N*XOM~xxxHIWQf~pM8vpFF|@C? zYFKDJfHbW7X;41`>?}`h8r6NfVhY+N5cXiBA4CmP(RA)`LT$A84(}8YYZcJ4L&B<< z|6Fkk+)>OcG%;Pu$5b3KrmNYQ+lD1AY)CM4Mbv}C(SGcd?NLhw5&^b7;2@s>%q6r) z0eVsftW;WbdoRQ4^$Gaw28RAgELGbqe9{tbeG-c*t5wb62sfy1{Tgmayr?CX+v?^) zYXTJlWPc$s2=WM!<1EA{7`DOGt?2)d_a^Xh6vw}K@1gaMy^=2uheMWa47Twh$v2XG z00Il2*oJUsSxGBdc%>Dqm27jL0b|U4LpTyhLK46UXSgBZ4iE?l0TLh~Bsly6yyTaQ zkmUcZ>h77I)o6EirTpIezvqv&)!kKHU0r=uSNF^iP_JOYd?*vA0DzKX^4%>oP9$!D z#8C`yqefYj0Ew3ofU|?r*$=dRjZ9&npVgF)Y~pT@#4&(QDTX`boXD}2TX8v(k5HTB z{gx(m-36^Mic|<vytnH)0P6Ip0i}@s2*@)~F!(tqN@wrZ`#wbs7K#Lz#&{5eSa9py z_cun%XaDrss4^xLK$j**C)Jn_=+XaF1dimb^bE6%%Ew9(yOt>BS>-L9NuAir(_}nX zra3)&CWp2&;OSVu+4BNIY*jD#lz@HJECg%`$(DgEs9UBmfaxP+4Ae~_C8WMTq@$!q z%pTm`X<0|FUbZ#5^M|;St<9h9(qP-(i}MOR^9s*8_rdKO0O)K5J9b<KS^0A~c<53H zF2FW^h>?RJh#P+nhz`?;`>$xQm3TvU0236Z9{O8M1Wj8Ppxg1-#_0$6OU85+imrOl zaTZ;Yl~3Nvt2US!+1Ppx5P!sG2eHu)*z(cHH|c0Z&op#Gi9hKsz0_sLZF`goq<M>a zgqoS<Dj^qJwa1`&n(n3CCs%4^4yc&)ZEE`z-AuXR?^`Cj*#_n<k7x~7`+W4r6Bwlc zUE7yg=n#hm+qO1}L@6UBvZnM|yIR`%8N^DV>dh2rV3|ukh=iAb@_{HWKb^}RKz%=) zG>+AL!1vcxF<zgK7P_AfURWj^`^z|6mCHwtzdZl_A!TCXfXCHN?t3)S6j$wpds_cL zyFWxn30R$|*RA+}=6s00JBa={ipR;&oDXeW`D0izba6^uImDhX3jY2Nhc@ymf%mig zn9sY_$<Ri2&dOAO$3i2=pGgBu-EaCaf_hffwxau3NZkX0J*_SaNT7SUJdNWs8FX?u zJ#Z{UQz&N1_W;%O>*M(YwV&o4{YIF50UXNEOiI32tatD_@`bq5up^+$VEP^*^hlGR z{R9KDV!o!Nroa>6umjofM;u^|;*Zaa@U;lqrQkFI@LGJf0cS=}VLd<M7KCpB{3amI zjK<Kh(NtKce79$Xekl*hr_NL0L{TpzRrBlCXR!K{Ex&@ST7H0J1&j!+Zb*~1rhfOJ zhrRlQt37y%RyQ})p(q~s0w295&@IpY*Y;q#v+EGE4O#QOL((9q!BJYPv~A33mtJVj zIc<Yhak_E@F7mNfA4C`z`S1}9_%cnc%BEAVI+9wYq-EMQMJGnobl0N1YgcUKYn<a& z1fD~!<&s2KMk%yn>r+izpU~<hEqd(-jQO4hBl@WOzUW#1^}p#n?^Xzme)KoCu}VD8 zgO!AHy&*l%BkO{7y7N%(bkaiQgT1GXj*92y2+i9?c%%3p5nb)ZpZ!1*ZV>T9Nf=nT zs*VfW=q~6UPmV)ZLHEEPZgv2od-QuKNm|NVmHS3rnNY9#rU#Mq86Tzyea43l%IA1w z@1eJlXW%q!j`(;HilSp_ZBv}}Lv_aIxqmdO>F1g??U3m_`<obg-yFoyV>3_Bg&2Ai z=LxOf&|9%_<(YCw^s*kIKdnlX&!dpuNkgM<>Q9uXamCi3OV=reToa8obw`Xw6U{jo zP0%V$G%L40rw7$7P({D@rIL3G*{ity2k+R$x&PE>`CYhm(o0pysoO~Vd;Q2lkvB6( zk<fNtn%q!n2@XeZwZESbx@sI(&*Nt1a~QBvKlY^wYN>oKT$D(;FsWf~Gwvw;UvV?@ z3Dj(-x~&d7MLBH!`)&UZ^VIhDCtZp`fT@HgHZ&hiaBw5R<4%tQczNA<&X6|J_S4RE z+_BV4WXC}=f0_U*wR-x2FIdCt$(~QTV8c!`%yV=@hFqQSoRQ1Z___(=pVE6Q++Td* zyB6qaD=(EropaiyxDMGv9aKL{;ofh#Du&IqtkpQw5c8RNmOu_k`Opc=PVRWR6?8b( zA9B9pkDnNY$B&FQy5&Pt?^aX>CL!Xe6y5Zt8$*pBLU7@}%ZZ`Eu0Db+^VN`<7xdiw zn@i;Wq?+oqT|E#c?`3XP*Er>huua`f{~5NyyvpL`DLe|%eDbo*v;1+(WzQZGMHAyu z3c8#q-$nH-Tk4#OEAUhjUR^){52G_sk0+~`x@f5Y9G!AQtZu8rPsMrY@)22y%Cy9+ zzy=LjI{{o+`w+q*$e)QA`Q`JdmfK{7%%{$zO!_&!_oza6{|VPiS?Tg{M?J%)Z*<X3 zG@hoE!(O`G(SCGDr5*QjCX_>1_uK9I1?4o(xlgI%5|yr=PLYos(2YgyL59zR>k3nx z)<(7p$Smi(IJY2<-i|-rY1nC^Iu5^`jMj4e=}yB=f7+Ol4_S6N<5DnOMtmta3Z>F& zCi@Zx)i~hg4ntudV7Uf6Cqb2bit}^SZ0q*dS(R#{mLKWasm^n#$MMB&qGW!KKS4d; z#*ZA~xPm4Ic{B$|^TaphD8k!4aaAwpV~cY3FwQ>cLNq)~bT>|3l>=mdIdnnp^A8by z4{ZiW?(<Kfoxfo?;ZJZMI_+A(-ZMvj`5@}g@>x4&&B=a4CYrYIC}rm!_#q`UUb=PV zMPPNNK6cb~KNAF0_tWHr^6wjN6rnwCg#-IbK$M5^^KV4(^$hv%-#6TSrU=nRWbqwB z(mx8&bA68j1|G!Eg~-AGpjZ6+_YGe?6PZX9LEn_-e-xlhR{;hz-Qaj%u6a{{cz@00 z?a0ul=_o*S=bLmtfT&AJ#QilH1x6y_Gn!5gK;$i5zg^0N*cawX#W2F)=U>#L=-<C@ z*fmtX7PQ2_1<<bJRH?lX^u+%tun$5Fl&~LumdkV>JiddX`5y&{$8Ra&$M`XLsPg(W zEd_{n2PItZrlq$38<H=<-#WsRX2SU6f3k0U4dFfU_Z+3s2QlYS!1?#-VijH@;irq2 zc6X<eRV!8;xw5J+nd#|BcU3KzSu?Y`YD!Bg(bYa<L3QoS>X~zDr;3>~XW@TOre#)Z zvOC$;n(S)nNcPNXrjKX0@t3n_<$OrHrMp|qI-&<`XPubn1nt3@ba!)l^Q=swyQ8(U zV{>~))(+30$bn7k6RD1_^sECrvNGT*tGlB+J*&C5Bh@-<b4$84DSEQ4A|9_1ZK-r3 z8;3~gOea1Gz9p3uDuPemCh<}4&W^4`)=o?`_awWrnxs3E<fvqlN%!I_xsrzryIIJz zY<g27(;7cHnMn(s67NbTz$$AeFbO{V+|kvM-QrH|O18&sOl!Kg84}0ieaV(=IumbB z^d#$1wF3@7-3~ZFrq)ZU=~WIQk-}H66Ud=(i>elRqn#|p@Tvkow@~yg;m&kdeKymZ z^hSyJF{_rZ%g%=2wbiZ)sk}`qnrj*x376fFNpFg$l3nfD4e?|qlg>2up}79ZMe|Je zX5;C$IDaDB;Atj{=5#uR(wdX)9bIwJo$lyDFA=sz<JnB2Bim!Nf{ilLir3~btE6&j z=GpvIQBAAX#TVL%6q_g6H?^)>R}*h)ZIu5OD4JyB+I4f|omyn-KB^XR`WAJGQVx0l zDMm%^&gQSf>-uBZ<Y_WFcDO(LZUIubsq9)PJ4eU9hNOtE?{=irL)A$!y0_8(t&Q^& zt*w|&dK%ZZ3KbNYWLq+Wi5IPHkFx<XEpHVq>8_rv?iDKL;voB?i-A+)&Na*XL{G=b zN$yW7BvR?F_Nv~lo{sjeWNQ^hjZ=~OzH~<`rUk8G7vGxd)}-BY*R*zG^3~CS>aw6S zu{llxU<~Wv0Nm%dV&2W9w=}M41!E41_`%(RMnX=b#XCB?bCUe@wCPoH(z8dX)JmKM z%pGwyk#6njRirn~BfgX-ZmCMrVEo{Ywzl;ws@7e>`N5-iQhUiJr-rcGoxT81{lH9A za#c<99`9<nOs{H7q<UzkUz5$~IZ_WZNmDh=Xz-dj_6)?cXVaS2#+qt7EloYyiIJ?W z9a&f$iBvroWC~-`$$8i=jn+gg<<qN_j3Ry@H7Alpyr~UiZ9}pP!=xFDc0Jd-DyLWa z(yXhuu3c9frygr}Y+o##-n(`=7!;X%_WYh?3f4e8-9^opO>}f6GYEBWk*%5OZ6VDy zO5VO`i<H2b2&n!v8DL4OnNRCvdnS>RVkEk<P0hTbHwqdba!~Z6si)Oe_x`>_s@I&q z2Ikq)*NmZ`?oMXN$f@Ebn{(^22YX?V17_elRb%=W+%5B0N)HixJ|3Vx;3w--oX9n> zl=S4+IIy&^sZ?KZ$ct2t&yq+l|H&ThtBysry5F%haLGoU<JkFNFf(XLbW;#UF>N7w zl9+Q79oiT#Ft@U4o$6@D9x0artx$d^=vp$v+d49s-w_y?A11~cNS8@q8e3nhLt2fs z3-aZ~G!E6cR`bRcC)PGL&gFtJL>Y1sj(L$ucBcE1aXZ1T5ib~ek1)uBsaA4zv&(UM zeTlW2*OR1`3DuGTR+x+Z;DmShQ%elB^mBSPCAzUSm=hNiqDG+#2$#v$ug^M4tC`;q z>DB&D+haOY`Y0u<+70<E)KFc~rMmJKSFE8^XY$4tSMF_iyH1<5oFUSPO0gk`o}@yg zX05E^^6QaWQ#ji~dvfA}X}-clRb0_IJdBEp(_Qs8I!<B9=C-8ZA%Rp3i<4*p>X2xG zABD23U{Qrr@8qokET=e}MbHcF7WyR?#}tZUqb$)wJ0jKISRQA~g#qT8i7A>lPoX9U zjBIAz4^cGh0mL475hN4iKVJ%)UB!&D8Z<#aZLpe#xGKdKB5T51Ju+W~97KYgfgSK| z!gYxCx+kl*i0FyD+3rU`I>)3@GcPwMTtaiy_Lx9Ey1DG<!q8!uk8(DRi#~y05pU#K zL(Y|kGb(qUOROV<5ZzK+>J3ge$)9aCcV<1e<)<A$1HOuyCx=jD=URA0WVon&dCFGP zc^=toX16CX<7i(kl<SK762xx54tOcKH^t+d;6;y9+_bFX9YT}nO_EJVCF#|t#>h|G z^j31R==Pgt@W|PIW0OsO(mb5Hvj(RbrgtE>%<gW3a{v7uMbvmuqF&@F(S4;KNoS|Q zY{rcIlpT31kZMfXs@Pw&!Z#y*Zc?G$*$gGc^9j?v!eqh2VIakKb{M32#cnbQ^YZN2 zY>*y%e7?%gp|b{Pj(|azr#stSQChCLw_*CSJDPI5*ghMlG4k+L6OYrge9;!1oaSZp z)F%V*4beGQl1C1Yq}&9<b8gnjt_|(n?17X=NT+0N<Cj)2=T`16xZ7m$1?xQrZep6q z3HXy&=kQm#7Ohqp@L5EQ6pDbq9P?Z3_ERB$`R2B$`ZM&GM=z$n6kyt;zB0^Bc6PJ% z%Fv%gjt|lBbmi%C^XVir)0b@QM7wi{$|=}aYG(Ir$aHjVjAzsECD8osiu>Y$Ifp%@ zh1Ww(Sx~InL>4^BvFm5JNoqgUo!gdyM-{bX=#RUd$4>#6R9iOkq}sC4AA6m{7x&gg zHUaJgd~#Pg{BU2`-P^MPTUu0rj3qlpB^7KjBlBt=;01Fm=uUUb()w^TAcMY&f;Ef| zo@JM)+gw<VqY*k9g~31+L%_{vUGj_6$ujxTVtzh(Y|(<+o(tm<%ROz3`s++E(wDmO z@>w?@dtV=&#r6jHA)bf%j7|c1VpE%)g4MM%QBU?$igxtS7TeF9Q&StqEsnlKrUM5d zJs6W_)K`hM^JJD(2gYcUb_up&;_&lA`r_`K;qcsCP+_iPFJ5vAPv_K=GVqvocGB98 za-5hi8EfDIW)p{ww6tS}*yJV-f}7v=hbW0|y4%F{kU?L?8X5hTMSAN@Y?Owm^hDWF zD$}3l?JSLJsE;dmvN}9f8$*3oTHr)NpU?RjDAaAqy&R`IH7y;PmflnX_m+BTtJJub z=9f7j=uUNHRbo>sog$J0X~2AhGIH3$JC~R2J+$_jRP9U0A7(Bnz`UVktFac^_Mj_t z8>!g*<`pBJ4oW*4;%W_im}77F%>#1}<xH=tX8rJahA}A@JQ$%C%suacJIg-rak}SF zu#(eKshk|Ye!ml^LOsW6-9pDu11Q8P+a5HfRzoj6uv=_i-UllEW$|j5lJd%y@SW9F zeeK}zJj(Hq*_FA-f=y+)hP9!){u5BYPTeRympCeORPHBR|AU=)#^n<$mWj5OJZ8=Q zLc7mq>^@w4UYz8ZQ(}=yfbLe)DPwV}v%N>irhAMZZJGI0XYrG*pHs<~mYiHg6lI#T z#ni07*TI*JwmYFnMSA-!d=*J&kGy3@x4}hcUf+y3^@L(7PR29sGYxJ|wAgN?xAaBI z(0^O+OB2R+y_gys*^1~`hEoT%D<Wfmw@#7yt9kb?Rcku~I9g=$7=8hldF)HsxIsuR z2`PrT75A0fD7u8a@JQ&MMc#>0>TY^Ciq!uAJEP({fhUs^S^>+Bd3-M2zx@u-?eoQA z`so0yX&d2v-!SKp*w0Ep$HZRp4_rvjdAF}Z2DoETT#I=!8CcFzlu=|6C8$E1XwpI` zW|r*lR4Gn<XlSpa`Z@7|Raip(2D)~TuNZer<?-W}yuGIJsI`@cKdG2?Bp;Dk(+We5 zZ8;;=A0wCqhO&KKyD&5S2MY16<bf^(*;Y&*1<r;$A<@;9&XUs(j;d@&dvCh8hl6}o z8}67s_@L!~_$cxclNQtn$x|jRcQ%`@<R<B((n27?CmY(m=v=M1WS*6lTuz!#W*BUC z#*Qu=wvm6Cym$RleKItqlc!K_b~4R)=)~FN7xSo*>k!v)bzqJ#nxI-gcI7;aqi(FI z<|-zqycDKKXW^WN^Om0Mu*Y@boGv%+8c59EU*95oo;nsT)p-Vob)=s^;ad~NnR+p; z<n7-owZ&}*XMtySO6Tu-$Vazy!KX#seQw}K{kRt>53lQCo)QHf;NhPVx#7`M^(aKn zqdO(?%l}}JTW2}WN?cTQKXycG8)j+WPaBmivi)>Yi5$%9QYAkj>KguZ>bM5==P5uL z<t1}=W(HjNb9pLDX6g6gj3Fz~nO6Dv*}~5?*%R+j4&;GtQMdh4dYL{S=ONQ~$aL$o zOse9LmFc$w4Xp7YRl(rJF|<RcS*}NmN}N`Pc&0D(?9%@kQcka;hokf=T<Bb;z=E<0 zr<YBbMjLaUe9Cj?RE(jc9-~zz+J8va|Bx<R2RZ+d8n{Z3YuM1LNINUcn=78DV7_~a z?<2X=II4vlo28r?qG^qPhAy?Lh8tw9T`Y%0NYAFpdDO^%m1%cL7xC%r!rpV|K2udH zJ5}G3g~MJNS5N3+tsxRGm*HRq^g7}yxwbh6QG=Du)0@LSExiJi-pu6d^L$)to_YLP zvL*&{B@P|;0fa|KAHcz$;}9KG)ru}W#{wQy;f8ZkKb*I2o_|m9|7h8=-sV%K_54aI zZ!ZX==xG4^;*Wkahhu)(D9On6>_EYtMH{SibF<{}{u@8yF^wanlEj#P4bM`W@zNW- z%fp_b2OwF_G;-!}kvL-WOKfbz$3^7YCa-B5z(>~B=xlnuop2CZy>g~;4Fq!gy$Wi` zuTx4kcg}lc?5VBL_S>T^2lOU!Ndw&#)M9wMdQ?`!?C$?cn6@0>Oj}W&8C`<yXpsUr zcD}D}?P_{{y^CyqwFvprru|Y5>|~32y$iL4-(6xUyq(VP^TjRp@bIO(V%X=*<bL$( z(}ke+>_scyCwsLAFPgpIcFn)?meT5jFWIPb?yf>k+WF^%LQVlSa`P=_#qHSJphVY% zUTABs=MH0GDYT6&RE9ltN@V2PFZtX%4<M6^m7K^*6iRQoT$lU2wwnDV@xARWkX22@ zJ_~hKJ>N#wqf}Sk;)?auQ;x;xQKGLsXu*6+)WXH(ZUVJ_iqGl0NFVz|kNWxA5PIbE z-1!-nVeY=qi^V`2JozAy?}`t!lPiIZ=dNjX$vc<gDn0P>l(V82?nDEtWZ**b?>+~p ziq}prpT4*z%16s9L%x*>i(Bs7H;j#p>>v8xfQNkYp1Iiz@)LW%7sH#e=ktJV#+zF5 z6lJ^@!x%6=GUO>#%`bVF^nW3Sy^Q9`<=g-_UNqpbq!-JAA2X{m85L|!=YDwM$~v?K z**Y%_@cBvtEi{>4_Fg$p{fjQZts7ZP!D<Zr9s!RITomy<`=tZEsyj!$ZNL|?@uC4= z^!5t|d{Otm<e#URau&kEeaz!ofPC!jovY!`$V2aS|2z+Qo?GX6a_N@>6t1kMEZ7h2 z7XlRKX_FRYYCbSfn6F7)khSr2Kw-`Xabd>J<NrPwJH!PU8+Ys1n!dO^?QCRO?QhBP zyg#3(ggj5r!}H?(5WdI6l%I`H+4D0Q;Ee!93zKItF4%+vKgkbeIbO9q`p(P2^IZTQ z6*PAY1!cA$>-Qy}P3^af>TR9pO8`7%ANam{9<3F6?q7R$^RRFnamL-QJoGN7r+NOF zFHi2n{XXOx=z;!{v-)i~;~{)sJ;R{)TSU%7`#ggco>Oyj(NqZ!oAGXbxtG8NO8SgR zem9$aUf@HW#Xm;S<~*fuK8nwB<=r3A6YKv;iRfg-2mjm$8`^LJ>^cO_*VnO`H8zpH zo@MYOQc-N(`|Ett!i{7;&qOb+kV-1tAB%l@!Oz~p>*)kv`N$pC|8WFgS>d&@vziYd z_{waSYd>h9`~l7hYB86%yaz~Wy!hKY{ag;E^6Ec!R;{CF8{8gr`lJNj4TKBmxWJE~ z^jetLe06{HnR~VCj&PBgJ*^rNthCA)t`2@YA$R2ZsgmZASG1hr=ZCKkhln3Go*t4C zyNtYjUqW3xg^+%PL5bqF3jL_V@w}8!4JUK)1sCmRDOoX|jvqg|DO$uqwxE~m$d8-@ zyNCYsx$}9Oe3d?+`^iu4y#6RZ4DvXr{A3^4W927zeixP>4tac9ezJRB+9_rQ%IEd+ zBY+P#m>)LU+f~98rn445f!Xe`5=yo67GJFCEi0j9Gkfuc8xFM+$~JPBP_*N6E2U^B zckx9V?l@dJ@j9UL(@703-X~XnnB?{I`C*X9*~a$lT2E)xP;f52(uHJ(i_m-~p_mD* z5bL}~Z1Fv5U^gHuzci!00Mm5~jr-Td=w@Jdqp$8@zl*e=OQNXkgBWqzM=3XFCCnOy zotA#8Qmhx#56`@AO+O3@`Z;|uDdhO{#l-X7JEaW;Z?Ebgx{%@hEKMSV!63xQ@r|lA zsFWU!7Bk<5%A9iCtfg(VOutSs{-A*zxur=#-*#5tT`t9UQM@l03Z&17$#=Gz-r&;Y zH?`<Imrxonc*pn^sW}h7mH3v4p>8KBTb|dqmRRYbeu{Tr`F>d4n+n|)g|kqvv0jct zyyDY&L>6xB5?&TNh!Uj1GQ?GI?uO=h%y)?TvhB0}kJZ68R))9)ZHp{0jImN4BQ-jZ zSLYc@ma?}DmZQ@>pjx$J4Jpr|5!17Ma^Gg>f9R=W0drf@??sG7aPz(mJqYpK43!E8 z!Ed1Z(?iH|@Ivy-c!#P<92dURtp`zClilEJ>Nw{0h#Q1x4zs}vX6`A6K(zk;*TIZ3 z4{z#V*m=8m2gA|h-NHlC`DmZ(yj55}S3d-8tzQajO#FlBhW$O4gHfg7iyVr6$e#i- zZi)^@G%u(6VEE;6vJZ-_`Nm=FZCwvS4WgY5Kj{#1b-y3^KOt;^_q-Re+Ap-<qC8YX z(bH`_sKzhgv>AHdL)jN#t(doh)LWW|tW(g_Jl_1#2?ltVg!@X<pww4F={e654Px|? zX>Zn@Z(I$XW(VN@Kcd&7%N{zd>fMPnUWZ`88rZWv*sf<>4z%ATGT;9bd4uVC==jB! z?jCm9bK}QtJqTAJy==BLZ*uO<O)$cXTJXO_cKvQ$&h_0=#psIcR-<M3`2xQ~wy1JE zhp6Wjbw5q)?*{1nI8Gnc0i+t4MahgFZ{N>UFRZqW`l1-2@-`#qmDQ#3!cek#<-IiO zM~}27*xc+}r1S~Ap59bee}TI@lkQC8Md2Nt-S$__@HOk{RrD5L+pE8{M#Pua;%_#t zhb!-KS8r!B)6s%xXGgZDzPGEVqrEHHT4layxT6POP)WAPZ_2j{iZT(tT-}aL3e;2! zdhSc6A%bq((M7+B&6EY=B-`;}Zv>N@6D?VhNwjus7N9}AJKdGU$G6RhV&~w%TStJ~ zkRX<Abb)mXM^5VPz(>$mC022a1Wcqly4vlO)?`;Y)5%B~jHl8)JuF$WW$xUC6lzZQ zcC{wChMnow-c(v-@d@-Ek?rW((v|E1L9#8KNs0{7#e1?_Qb}j>sKr3_RBBV_ie@Zl zvr#+Pq^uO%BVI61Vl(A|3LWQafjsk4=}pNV`ueO4_|G{%+1=BDhDTNv@}IY+Mk*zl z$)q!2V8r}0S)f}K40O<c?uB+2Kz2LqKR@<*X0HJgSG)*D)vAZd7Iz{%K+rAQyYO*$ z8e!_A+oChs+0wm*08RCxC!3*Y%Z5aT!d(=hG<>O;qkxp7vzt>T=+e=2Dn-eg+tAyI zY6J7opr^Zwu-(m>jRZ3)T_q!hQnTrel(i>`Z`&fuZA$5OAeHPw17#PW8geSAVp)+? zGmp|Xr14o?#Aeqb1~_kyt}xdcDWVrYl;56lm;<FU3p-izqI70PfgEl&DNs~cJcVxr zFmF4;EbW+<N)j?RV(a8{Vp0|xX^UWFC1jgXAcgJnC}I~!5vMerhYPba*)gXmI~z*s z&Ss!9Y!echO_(|D6v`%X2+%Yv6)Z!CG_Am$_IQtk-6D=p$>CcLZK*_i4?qXaV$Jl( zP!GPZi6FkPfOh9^;HH|}WS}LT-q?ZU7R;Ie_zVL+1k#gCZWL|Z=^j(2bXyxoAqZC% z57T#Kk)^j;U;@X4szo^pX^^Cs3Z+7_Te?Bk#WJKo+??7d%LYg4ifyv&wzd?$)+CU^ z8I##Qf^FUSzIYa}rzOz^eqAcwqoGXi({%B8Ujoy050=nGyJ*LEMpYqp2m>*L$C5V1 z6Pb4WB@-f(Y>)RO`tT85iuI|Y`g#;=yUadaXj^+S+al<<2LkpY948<nJ%X{E+}kB7 zrCQsh#xwv5Dn`v%+o(6kvPq2dOcK4IRkWbT)8G_s$uv|ThiSJ2@wPO+H!I{XzAu%O zQ3d6(BlvVBI+G&X+0DHH5OJ1|rXZGISCZAMluEJ_0oSQdCB~1L-_esu!LaDSn#uu8 zot)OaAtBQckZH}SMAt@2<A6+S>B?qOl*R#>##RNTaX_ZEV{P6*X&jJgwB%(djRP`` z<)SnWsI=a$mMo`HK&IiFb1g|q<A6--#m9P?9|w@OprdEAEsP8iWj3u!Rsor&a%a;r zH`)r_%^AHazNrO+qRTagoFs%WEL^#q6dLtBPq18@Y^BSPlony7b{SHsw&FKw&7)?U zY}Lz<qP6S0No${IZS~8LqO}`flWqZ`wVObO6m7R|giRb$sdh7L((OPT?1qpb&@M!( z(-bPGc(95(PDEQu{Rsu2r)*kE)**C=@*r$CmMQ^BvSBDQHIV3R?%~hz7)@v<d4v~; zxJq4t!G-^rGFu3c6$r2)jTw-lt%)rR)115o!<nL+RPq)D(fxa}glO-~V!oo#$*`P7 zn^bEXB*kz<XKCA{ra_J9vq}0?YhaF4M8N66tpYS-ZITn$COKJA45OT4n>t#PG$kO3 zQd+Qr%h;xto@}}mG60Y$04Wtssi=azHsk=AHy~#-2awDhj!H;&4W*J@!^twv_6?<z z=>kY534n@`1+z)nNDQe6#M!)}0NXa8Z_9RI;<E$I)ar<4)6LY}w7me#5OV;91nguq zC-hKmPU0Dzn?Up_O)9{OqM5Q!H;9H<)9`^xqetlklFLljamHiDM>cG{+NAvP&W&6T z1vs4O!3>AG$zSvsiXdAe#UV26WM(_i+R=v+PwGu$bC&EBDH%^Gn4nh0PY3;^_$S5Y zAvHR95Fn;RW&-p9j<QvXoC=~3aB?p#V+kx`J^TytAfv!Km4vm-VJwOa6U}5*;(J(| z(J1^AZ=@i4U$P75M?G75vJhK=<{k{9mJQ;h9?sR=BT@<a;a}8@tA{8BJDX(#+l?=q zm!jOd)ZXa%^z1Yg)SB)EJpzdqEX(u*y`Zb`52+}DAbw=9mczAp32Cw;#Xs~u(jNNb zzy=C!XhVg%=?}{{iAg^QrqXFF>hy~Uwxs-nV1}sqw+;262>&9IZl^yEV3&+wO?8_< zPWjU&y3?EJk1Q^11hC1XA6QfPLGUCfn0_#|pb}gM{A{2Q&{Wk8@>kXv5t)&yi-;s^ z!9Wr8L-p(4LK_4-fO?`T_~V}z3bk<EYpL?k5`H^t<S**k+R@2BRQm+~P+&9vP!x5b zpEj{!OE-Eg|F#M2VcVPKFBH+9=<G}=fM|;BL<KlXdwGfzlzM|Up*J)IKrR1pu$h9e zlNASPZ_0c~li9nVHvF}TF7&?UEmV{pqQuSFL|YbK5IZCj(bE!{R!)_{HX4EW&RZ*J z?GPtocv1=gqQqay!R5<cH`)=Ss5yo9l~5(9IE2eeok)Oa1`DzLm5q$ijdrCmo>0HF zvg_hE-NQc{Qq)K(?x^^sE((B-hF|KPDcK_d((U|HQ=Q^|n4<27u}}P|^WYa9E=668 ze~`faOv*qp>QyKc9g0ep9SWtxIOp!ef<Qj*IVc@{h9pVw&u03iqPT0MWT${UtN=i6 zONP{bQc#i|4bQ*L_$37skQ8X$l+&gZRBbAQviZm|SIx&kv=$)qQEXJxp!U>8RCOg1 zHwGqF?IO}{Opo`198?1zMRr36HgSHaYe8)j`gmvILGBE2MCROvZCc|k6dv$~k(-6L zQH$kyY0WEhZ6jya`3hYm?9XDwiM5T5kle*a>(Jv?DeKUdGasQ_8*swOo7%ix_Il9W zhx)wbaf$A!Ij?*<RW78t{w(rp&X23wTa~_Y=G84uJMy#(-Y1}M1yj45UEHh37Qw8h z(e-u#&z2~H9U91d(?OvI^3B<9H*h~Nu_f8lk?1<4BSouBx;G2UQ*`#Vh*YvKnd%We ziO%j+G6N%ujmO@e4(vEi?CtE1a~ie}U0qB^8y$gd8|;sEae5A4jF*}@?lk))NHpk| z=VFb!X8llPW24#F)b?WB+l}WBllYvM`ZBrh3mE&=Ij?8NlLV5Qgvc$(-8sk`-_%K8 z30ohhlRzAFA;o?Efj7>?$y)_q6#RWX{Z2=0$0Ip4U2jN~^i7?ejV&n@(Mjy#cY%)6 znJH66{2+XF3mzM1f|TM=n>$(Yf((|9Kk~Z1+CxC|i3dL-(nIn*i38w7A-+Y#S92F> zLT@42M0_2){q+1h5AL8;ysK$VYbV~_0ZrA$Aqb?x3@=gYxQU){aH(Uua&1$IZ5<hG zTjOy$4eCpzdXvVHYb_qC!K451wZXJb%TuCEBE_F%^+=Z-9KGQxO&$?7(vOhpkd1T@ zU%RxaDc+<$HoH{5JBARpTIAI4HS5>nNYXnyTDBFNb(*0#;IM<YnChNMY|@{0Xo9xa zu)0C)Mya}xUg61InjsgimaE|F_2~sH3;9h8nckLcQ|n>)OgobL)}moi-of3gsh`;d z_E{pQs1}tEpTH?<6g(ftVr0QKF~8O8<G5-cufd$aC)b%IT$0JImL$LSWez#C8sU)S z9QFNK^X?PgS2&qfzWzi-)tH_Dv+Lwknnaurn=A=WR!R~iy0T5pd|HQdc2gw=gMpQD z1R6vOX1q7P)l=n;x-l@4o8l=P4xmlpGEuH~&B<4z>JNla$I-1R_%2a;i_>F@VyUk} zrMECsU)rLsjkCv$St!>|I`ZS4=ri>BDMwGUv7O7EhZCFo&BI!9NnU84%w<r@JZYDR z?MhQ?2feolJsPuY;^Zy(idKSL03B^jM<o(HnVQ)+JWk-4V?$>$+tJdr9?!JR<(bX{ zS8XGSCA6##@0-x!uuk-0Jjx*=<Fs9}yBvBe4Scr@_4Lr5yNZgXnNQvY;1BfZ5<Sqw zyrsLFR|gJk5vR+^&S^5e0Q<4*4yG-NJt%a}{>EpcH(`JK-X`p~ysMIO(+^fQVZU^@ zWO@~8>%?m*Jr_E5|9Gr(oQ_t}9mZIaJeb)_l3#XOXCA8Xwbp2{JQf+$bf85hw^9Ws zA@DM%xi+jUl%(gPek%(XFuh97{!$m_8~%(11#C)KP;8dDYmiz?Y`ooWzN+Y6O6*$t znjDo5%%!A&7K}xt%~QL^BI2~O{k)+1TvroKGj?JVHH*DmAflVdUM^TDqeJ^rjImk} zPhSc#R*U{+=Gr|}3q2M*<_}bg`ZC?-%Qcuvd>FPE4Y*}9KCo^pdL2FI3{~S>+3VxB zs{eP2X0(_Tu27pv(VZ232!w}Wwh5=Waa<6{V3W}Z7lPaS(T_m6Ihwk#v2}JWy7SK= z{~+}g8mBJKjaXVSu~)~@NwA^f&$V}NF`nl(=+(N2Pv*K;Rhywhz&k2sy2&ef&O$&g zw%#r~6IoG^Y@uO0^kiyrwuxcd(TB@*sVy)<ySKy>J$&y728LlsG_HX;pbUe4_2ass z;~S+Z5f=%&IAtct(+l-EVELdDtQyu^YkvvJy1~&su03=nS+BKfKIMs<<de1v6ziBg z1uBI>s%cRxL?jEk*}HD3yba3o*yf28*%*&`<^lAePHaM)RwzK*pU{_C<90OR5wKQy zNJXBCHN3;K<7gM$%yG)e^}M1r^T=qrx3npvT5aG>sGBgiK#$qeok5G^VRE<$b2%5z zPz{d?9p;gq@KR|zf}q?Y=#i{t@DO%jvj>gOFADK^U3GDMYWwl&ceTHjwz$T!O8aQ) zeC+G-Z&XmWT4=@IpYp?myqESGjp?*89x)^E%T#H*p+{6#7F&+F@i^U&wRzIkf<~G# z@_I6}Yg|(g@6_!a9W?tG<c)o5l+w0%-2(c*7Jq0qJBuy&fKv}$M#d<{E!y^uE}Ra~ z$A}fE74cQZu8^PEpamg!#-#bEmIU_@*R|`Sd6j95*_5YAxi2&7!;b;rGDJdOop#NQ zbBIaPS`uY7&Aa`58ulE>53v!sy*$98?Pq@K`PZ~|eRVGP4$0FSJwTttl1d963?ryn z4>11>c*$i3I<IY=vswoB_Sh?y?d{REHzsqNna6<2XZg?33y00zF-UA{SNBDBT50hM zx!yh0xZ*@S?IMqrT$=FJa>$oEE#y9`<56Uzd#=?JqQ@Lt(u7zXACC#K(6=_->zZK` z8xBb5@-R$Y+Ai+5OLSUPE_Sv_;2`=p^&+El72LZFD5ZO+rv;@cAfL~WZDfy)o+EFG z6){#Cx5)ICZJPeg{UIhgR_hwurRxm)+@9y=mb;=gn(s`J%bWSYRO#v+V9i?tMXUY* zLwzY0nWY0PGNozMHMiHy;}xQ#E#8$*Zf;3-XA5sKsRPtt&1>z*;^-`qA_pL?xwW{C z2sYUb8Qd6Vw)VovYpJ<7@dC!CzMIBeZ(+yGi?5~>X&tXc5cenG6*t5+wlBqWD{NYf z8r1WbmbELUM782gPo?HG7eck#7U+|HmSQ~Z$xCsmQhBW0rL%HI-%w4OJWPgq-YmHd zjS1IY%?r2Tz;?r2-RnJ;_98oaKl`i1Ry3+u`lQ!?O;PPgv&#S6vN9CyT=aUx#&=_% z$C9Ki8;>m-RvhnF-+Iy3=FmEmi6Jbnm4z*N+@;8wKKk1k=ERk|6ZV!5le+7J-(D9~ zymGQv3<@k{y`vlDR8^U*X4Zn%Z$B>f4HN7mOipT-R&b;fL)#4{Ps~c+!_9Y`N6wxU z4-vyo;5}T4<6C}?LV8y8p08lV3il&yk#qV{QS;X{uN`EmHFWjYL70K=ji?^Ie%xjQ zZ&ZxS5qg(4G>oN7Xl~rYB{VpRF|sh6U5q`q)CD?Gj(ttOY1doUyrzg^Sn{ni7fXAE zUQ>Wi-g7tGFdgg?Z4NwJv>aD}TTo*wna@9fi9(vr9uhi}d5MEbz8+S0)k0IMTmIZR z+T3H=eumtBFo^Lg-4Cv9+aS2Py%Gg&AzE*Z4S%cJ?wfaO>`jn%))>oNA$ytFyR9l& z0yLi2pfbxhe3<<uaIL5PDpI6113!@OvkB0`W7ms6yre+jGKs*GCwSh65>Cbso=i#O z8JA37f;OTeA#ihO4d2(q<DocCqnn#Oy`8vGremAqwW7Nl4~=!Nr1uGs8y3It!Qz*$ z9d&k4i0&fEP)lzHx3;p%F^@-k5_qm7Fgh@~Vr*HcVpL?$iqU~1B0>Zg20|4FjHoLU zA{0h�W%22oatlLKS<J3sDx-sUV5$C7Q-A7+wp4VdWrb8cSJaLUcFaG%ssr;QS>O zGS)P<KDIbUd4`vPWKK+o5i?b(8WSUo5amWTjjG5=6Jq2nE=h<{)d=i0Qi#!G4I#%E z8D!Z)j6MJC0OS>77X&~n#ID3dh}~q3gxK9JQVXOUXC?{p1&Y?k=BUc-F^d`QIToNE z)O*=7pr(71WKbYvtF-lk^zn|?7RTyigs*av77Q0+LQwIWXs3^$^hrvX5n3<%IMp2C zsCaU}R3Y{?vkI}F8KrtoG4c?1A*SY}P~%OrI|3s6&kP7L-IlP7DpNaxsx!k*9N{F+ z?3ak1HEX8OeZ;6hbyQFf9EY~4;b0jBYaM~gn#L}URY8W?WzZD$KWfK0bBxGbhZ;f< z?L0+`f`piFpf$4vyUF~ZUAPZ|i$;t<@Bmau)Q#kxQok>QhEWU_?F-D}13A1zD^&Nk zrMm{GoC5<44w?X}`QUaiF&;5u5rT~>3uKoXKV%&E9V)w!5X+>#sNI`p+7*+OhwUEF zgLJvVDfJ1lqMu5ISUJ|FU#01Z)A<23^y*zv>>4e<oqYHKb|b81WgR-UYD6olw2t&B z$ME`@fx0p@phg|xw6UBJj+}}4W=vqo@K%~7Mlh)mUn~>B;hM)$dk1R9646m3j)qo_ zCR`1QImSrGv~%ptfG*`YDpg00AAw%@C5aRw?vzI)LYyFr(p@Amg5?pSc@B%9(_1J? zrM8aXDKY8rA-RcDo1KF@P`islDnW=1c5zJ9;Sec332|Z>>6JU|MhC4llcM|@-RYo7 zfG#I0B@)NX3Wy*YPlza#fC*bnBY=M=@UQ$?0+Qfk2nVhR1fL>!WgzqnU^sYQ_)Wkw z!XM*Tgg?g*W=K+KICyG!Z@@FcHN-i55Pk#U_4o~jPsDFXlx+hT7itPbo+kd2L~z(Y z5x5D|p`!y7k1h;hwZLC!ePGxu40gsH16(vXY#!nlPXX>̂KZyy2;k4F4Uf$T<< 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
s? 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�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 rgTVDD$u|h}dsmz0Yms~<(eYC=-_A$C6-m%_ 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Íg$tQV^os* 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⪼<sXu{|pp>x!0jJt-&k{T4$% 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
v6ObOIW=M>cCv5Im&}0+E>icQ$94*$< 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�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�^9ORH|&(rf- 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%0DC>}a)*!Hwaw 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 JIBV9c{|D?F+@t^i literal 0 HcmV?d00001 diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/bayesfilter/BayesianFilter.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/bayesfilter/BayesianFilter.cpp new file mode 100644 index 0000000..408de51 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/bayesfilter/BayesianFilter.cpp @@ -0,0 +1,155 @@ +/** + * @file BayesianFilter.cpp + * @author Jules Francoise + * @date 24.12.2013 + * + * Non-linear Baysian filtering for EMG Enveloppe Extraction. + * Based on Matlab code by Terence Sanger : kidsmove.org/bayesemgdemo.html + * + * Reference: + * - Sanger, T. (2007). Bayesian filtering of myoelectric signals. Journal of neurophysiology, 1839–1845. + * + * @copyright + * Copyright (C) 2013-2014 by IRCAM - Centre Pompidou. + * All Rights Reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "BayesianFilter.h" +#include "filter_utilities.h" + + +#pragma mark - +#pragma mark Constructors +BayesianFilter::BayesianFilter() +{ + mvc.assign(channels, 1.); + init(); +} + +BayesianFilter::~BayesianFilter() +{ + +} + +void BayesianFilter::resize(std::size_t size) +{ + if (size > 0) { + channels = size; + init(); + } +} + +std::size_t BayesianFilter::size() const +{ + return channels; +} + +#pragma mark - +#pragma mark Main Algorithm +void BayesianFilter::init() +{ + mvc.resize(channels, 1.); + output.assign(channels, 0.); + prior.resize(channels); + state.resize(channels); + g.resize(channels); + for (unsigned int i=0; i<channels; i++) { + prior[i].resize(levels); + state[i].resize(levels); + g[i].resize(3); + + double val(1.); + for (unsigned int t=0; t<levels; t++) { + state[i][t] = val * mvc[i] / double(levels); + val += 1; + prior[i][t] = 1. / levels; + } + + double diff = diffusion * diffusion / (samplerate * std::pow(mvc[i] / levels, 2)); + g[i][0] = diff / 2.; + g[i][1] = 1. - diff - this->jump_rate; + g[i][2] = diff / 2.; + } +} + +void BayesianFilter::update(vector<float> const& observation) +{ + if (observation.size() != this->channels) { + resize(observation.size()); + } + + for (std::size_t i=0; i<channels; i++) + { + // -- 1. Propagate + // ----------------------------------------- + + vector<double> a(1, 1.); + vector<double> oldPrior(prior[i].size()); + // oldPrior.swap(prior[i]); + copy(prior[i].begin(), prior[i].end(), oldPrior.begin()); + + filtfilt(g[i], a, oldPrior, prior[i]); + + // set probability of a sudden jump + for (unsigned int t=0; t<levels; t++) { + prior[i][t] = prior[i][t] + jump_rate / mvc[i]; + } + + // -- 4. Calculate the posterior likelihood function + // ----------------------------------------- + // calculate posterior density using Bayes rule + vector<double> posterior(levels); + double sum_posterior(0.); + for (unsigned int t=0; t<levels; t++) { + double x_2 = state[i][t] * state[i][t]; + posterior[t] = this->prior[i][t] * exp(- observation[i] * observation[i] / x_2) / x_2; + sum_posterior += posterior[t]; + } + + // -- 5. Output the signal estimate output(x(t)) = argmax P(x,t); + // ----------------------------------------- + // find the maximum of the posterior density + unsigned int pp(0); + double tmpMax(posterior[0]); + for (unsigned int t=0; t<levels; t++) { + if (posterior[t] > tmpMax) { + tmpMax = posterior[t]; + pp = t; + } + posterior[t] /= sum_posterior; + } + + // convert index of peak value to scaled EMG value + output[i] = state[i][pp] / mvc[i]; + + // -- 7. Repeat from step 2 > prior for next iteration is posterior from this iteration + // ----------------------------------------- + copy(posterior.begin(), posterior.end(), prior[i].begin()); + } +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/bayesfilter/BayesianFilter.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/bayesfilter/BayesianFilter.h new file mode 100644 index 0000000..3f97d3f --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/bayesfilter/BayesianFilter.h @@ -0,0 +1,183 @@ +/** + * @file BayesianFilter.h + * @author Jules Francoise + * @date 24.12.2013 + * + * Non-linear Baysian filtering for EMG Enveloppe Extraction. + * Based on Matlab code by Terence Sanger : kidsmove.org/bayesemgdemo.html + * + * Reference: + * - Sanger, T. (2007). Bayesian filtering of myoelectric signals. Journal of neurophysiology, 1839–1845. + * + * @copyright + * Copyright (C) 2013-2014 by IRCAM - Centre Pompidou. + * All Rights Reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef __emg_bayesfilter__BayesianFilter__ +#define __emg_bayesfilter__BayesianFilter__ + +#include <algorithm> +#include <iostream> +#include <cmath> +#include <vector> + +using namespace std; + +/*! + @mainpage + # Bayesian Filtering for EMG envelope extraction + + Non-linear baysian filter. + Code is based on Matlab example code from Terence Sanger, available at [kidsmove.org/bayesemgdemo.html](kidsmove.org/bayesemgdemo.html) + + ## Reference: + * Sanger, T. (2007). __Bayesian filtering of myoelectric signals.__ _Journal of neurophysiology_, 1839–1845. + + ## Contact + @copyright Copyright (C) 2012-2014 by IRCAM. All Rights Reserved. + @author Jules Francoise - Ircam - jules.francoise@ircam.fr + @date 2013-12-26 + + */ + +/*! + @class BayesianFilter + @brief Main class for non-linear Bayesian fitering + + @copyright Copyright 2013 Ircam - Jules Francoise. All Rights Reserved. + @author Jules Francoise - Ircam - jules.francoise@ircam.fr + @date 2013-12-26 + */ +class BayesianFilter { +public: +#pragma mark - +#pragma mark Public attributes + vector<float> output; //<! bayes estimates + +#pragma mark - +#pragma mark Constructors + /*! + Constructor + @param _samplerate Sampling frequency of input stream + @param _clipping Signal Clipping + @param _alpha Diffusion rate + @param _beta Probability of sudden jumps + @param _levels number of output levels + @param _rectification signal rectification + */ + BayesianFilter(); + + ~BayesianFilter(); + + void resize(std::size_t size); + std::size_t size() const; + +#pragma mark - +#pragma mark Main Algorithm + /*! + @brief Initialize filter + Resets Prior to uniform distribution + */ + void init(); + + /*! + @brief Update filter state and compute prediction. + + The output of the system (envelope estimated by Maximum A Posteriori) is stored in the public member output + @param observation observation (input) vector + */ + void update(vector<float> const& observation); + +#pragma mark - +#pragma mark Python +#ifdef SWIGPYTHON + void update(int _inchannels, double *observation, int _outchannels, double *_output) + { + vector<float> observation_vec(_inchannels); + for (unsigned int t=0; t<_inchannels; t++) + observation_vec[t] = float(observation[t]); + + this->update(observation_vec); + + for (unsigned int t=0; t<_inchannels; t++) + _output[t] = double(this->output[t]); + } +#endif + + /** + @brief Maximum Value contraction (estimated using Standard deviation on isometric max contraction) + */ + std::vector<double> mvc; + + /** + @brief Number of output levels + */ + unsigned int levels = 100; + + /** + @brief Sampling frequency + */ + double samplerate = 200.; + + /** + @brief Diffusion rate (typically 1e-9 <> 1e-1) + */ + double diffusion = 0.1; + + /** + @brief Probability of sudden jumps (typically 1e-24 <> 1e-1) + */ + double jump_rate = 0.1; + +protected: + /** + @brief Number of input channels + */ + std::size_t channels = 1; + + /** + @brief Latent variable (the driving rate) + */ + vector< vector<double> > state; + + /** + @brief Prior + */ + vector< vector<double> > prior; + + /** + @brief Approximate spatial second derivative operator + */ + vector< vector<double> > g; +}; + + +#endif + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/bayesfilter/filter_utilities.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/bayesfilter/filter_utilities.cpp new file mode 100644 index 0000000..2fb0700 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/bayesfilter/filter_utilities.cpp @@ -0,0 +1,200 @@ +/** + * @file filter_utilities.cpp + * @author Jules Francoise + * @date 24.12.2013 + * contact: jules.francoise@ircam.fr + * + * @brief Filtering utilities + * + * c++ implementations of scipy.signal standard filtering functions + * + * @copyright + * Copyright (C) 2013-2014 by IRCAM - Centre Pompidou. + * All Rights Reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "filter_utilities.h" + +void filtfilt(vector<double> const& b, vector<double> const& a, vector<double> & x, vector<double> & y, PADTYPE padtype, int padlen) +{ + int ntaps = max(a.size(), b.size()); + + if (padtype == NONE) + padlen=0; + unsigned int edge; + if (padlen < 0) + edge = ntaps * 3; + else + edge = padlen; + + if (x.size() <= edge) + throw runtime_error("The length of the input vector x must be at least padlen."); + + vector<double> ext; + if (padtype != NONE && edge > 0) { + // Make an extension of length 'edge' at each + // end of the input array. + switch (padtype) { + case EVEN: + even_ext<double>(x, ext, edge); + break; + case ODD: + odd_ext<double>(x, ext, edge); + break; + default: + const_ext<double>(x, ext, edge); + } + } else { + ext = x; + } + + // Get the steady state of the filter's step response. + vector<double> zi; + lfilter_zi(b, a, zi); + + // Forward filter. + y.resize(ext.size()); + vector<double> zip = zi; + for (unsigned int i=0 ; i<zi.size(); i++) { + zip[i] = zi[i] * x[0]; + } + + vector<double> y_reverse(ext.size()); + lfilter(b, a, ext, y_reverse, zip); + + reverse_copy(y_reverse.begin(), y_reverse.end(), y.begin()); + + // Backward filter. + // Create y0 so zi*y0 broadcasts appropriately. + for (unsigned int i=0 ; i<zip.size(); i++) { + zip[i] = zi[i] * x[x.size()-1]; + } + lfilter(b, a, y, y_reverse, zip); + + // Reverse y. + y.resize(x.size()); + reverse_copy(y_reverse.begin()+edge, y_reverse.end()-edge, y.begin()); +} + + +void lfilter(vector<double> const& b, vector<double> const& a, vector<double> const& x, vector<double> & y, vector<double> const& zi) +{ + vector<double> _b = b; + vector<double> _a = a; + + // Pad a or b with zeros so they are the same length. + unsigned int k = max(a.size(), b.size()); + + if (_a.size() < k) + _a.resize(k, 0.); + else if (_b.size() < k) + _b.resize(k, 0.); + + if (_a[0] != 1.0) { + // Normalize the coefficients so a[0] == 1. + for (unsigned int i=0; i<k; i++) { + _a[i] /= _a[0]; + _b[i] /= _a[0]; + } + } + + vector<double> z = zi; + unsigned int n = x.size(); + y.resize(n); + for (unsigned int m=0; m<n; m++) { + y[m] = _b[0] * x[m] + z[0]; + for (unsigned int i=0; i<k-2; i++) { + z[i] = _b[i+1] * x[m] + z[i+1] - _a[i+1] * y[m]; + } + z[k-2] = _b[k-1] * x[m] - _a[k-1] * y[m]; + } +} + + +void lfilter_zi(vector<double> const& b, vector<double> const& a, vector<double> & zi) { + vector<double> _b = b; + vector<double> _a = a; + + if (_a[0] != 1.0) { + // Normalize the coefficients so a[0] == 1. + for (unsigned int i=0; i<_a.size(); i++) { + _a[i] /= _a[0]; + _b[i] /= _a[0]; + } + } + + unsigned int n = max(_a.size(), _b.size()); + + // Pad a or b with zeros so they are the same length. + if (_a.size() < n) + _a.resize(n, 0.); + else if (_b.size() < n) + _b.resize(n, 0.); + + vector<double> IminusA((n-1)*(n-1), 0.); + for (unsigned int i=0; i<n-1; i++) { + IminusA[i*(n-1)+i] = 1.; + } + + vector<double> companion((n-1)*(n-1), 0.); + for (unsigned int i=0; i<n-1; i++) { + companion[i] = -_a[i+1] / (1.0 * _a[0]); + } + for (unsigned int i=1; i<n-1; i++) { + companion[i*(n-1)+i-1] = 1.; + } + + for (unsigned int i=0; i<n-1; i++) { + for (unsigned int j=0; j<n-1; j++) { + IminusA[i*(n-1)+j] -= companion[j*(n-1)+i]; + } + } + + zi.clear(); + zi.resize(n - 1, 0.); + + double tmpSum(0.); + for (unsigned int i=0; i<n-1; i++) { + zi[0] += _b[i+1] - _a[i+1] * _b[0]; + tmpSum += IminusA[i*(n-1)]; + } + zi[0] /= tmpSum; + + // TODO: remove B + + // Solve zi = A*zi + B + double asum = 1.0; + double csum = 0.0; + for (unsigned int k=1; k<n-1; k++) { + asum += _a[k]; + csum += _b[k] - _a[k]*_b[0]; + zi[k] = asum*zi[0] - csum; + } +} + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/bayesfilter/filter_utilities.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/bayesfilter/filter_utilities.h new file mode 100644 index 0000000..f72e99e --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/bayesfilter/filter_utilities.h @@ -0,0 +1,138 @@ +/** + * @file filter_utilities.h + * @author Jules Francoise + * @date 24.12.2013 + * contact: jules.francoise@ircam.fr + * + * @brief Filtering utilities + * + * c++ implementations of scipy.signal standard filtering functions + * + * @copyright + * Copyright (C) 2013-2014 by IRCAM - Centre Pompidou. + * All Rights Reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef __emg_bayesfilter__filter_utilities__ +#define __emg_bayesfilter__filter_utilities__ + +#include <algorithm> +#include <iostream> +#include <exception> +#include <stdexcept> +#include <vector> + +using namespace std; + +typedef enum _padtype { + EVEN, + ODD, + CONSTANT, + NONE +} PADTYPE; + +void filtfilt(vector<double> const& b, vector<double> const& a, vector<double> & x, vector<double> & y, PADTYPE padtype = ODD, int padlen=-1); +void lfilter_zi(vector<double> const& b, vector<double> const& a, vector<double> & zi); +void lfilter(vector<double> const& b, vector<double> const& a, vector<double> const& x, vector<double> & y, vector<double> const& zi); + +/*! + 1D python-like even_ext function. + + */ +template <typename datatype> +void even_ext(vector<datatype> const& src, vector<datatype> & dst, unsigned int n) +{ + if (n<1) + dst = src; + if (n > src.size() - 1) + throw runtime_error("The extension length n is too big. It must not exceed src.size()-1."); + + dst.resize(2 * n + src.size()); + + int t(0); + for (int i=n; i>0; i--) { + dst[t++] = src[i]; + } + copy(src.begin(), src.end(), dst.begin()+n); + + t += src.size(); + for (unsigned int i=src.size()-2; i>src.size()-n-2; i--) { + dst[t++] = src[i]; + } +} + +// 1D python-like odd_ext +template <typename datatype> +void odd_ext(vector<datatype> const& src, vector<datatype> & dst, unsigned int n) +{ + if (n<1) + dst = src; + if (n > src.size() - 1) + throw runtime_error("The extension length n is too big. It must not exceed src.size()-1."); + + dst.resize(2 * n + src.size()); + + int t(0); + for (int i=n; i>0; i--) { + dst[t++] = 2 * src[0] - src[i]; + } + copy(src.begin(), src.end(), dst.begin()+n); + + t += src.size(); + for (unsigned int i=src.size()-2; i>src.size()-n-2; i--) { + dst[t++] = 2 * src[src.size()-1] - src[i]; + } +} + +// 1D python-like const_ext +template <typename datatype> +void const_ext(vector<datatype> const& src, vector<datatype> & dst, unsigned int n) +{ + if (n<1) + dst = src; + if (n > src.size() - 1) + throw runtime_error("The extension length n is too big. It must not exceed src.size()-1."); + + dst.resize(2 * n + src.size()); + + int t(0); + for (int i=n; i>0; i--) { + dst[t++] = src[0]; + } + copy(src.begin(), src.end(), dst.begin()+n); + + t += src.size(); + for (unsigned int i=src.size()-2; i>src.size()-n-2; i--) { + dst[t++] = src[src.size()-1]; + } +} + + +#endif + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/finitedifferences/finitedifferences.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/finitedifferences/finitedifferences.c new file mode 100644 index 0000000..e80f70d --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/finitedifferences/finitedifferences.c @@ -0,0 +1,265 @@ +/** + * @file finitedifferences.c + * @author gael.dubus@ircam.fr + * + * Largely inspired by rta_delta.c + * + * @copyright + * Copyright (C) 2016 by ISMM IRCAM - Centre Pompidou, Paris, France + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "finitedifferences.h" +//#include "rta_math.h" + + +int finitedifferences_weights_by_filtersize(float * weights_vector, const int derivative_order, const unsigned int filter_size, const enum FDMethod method){ + unsigned int i; + float factor; + switch (method){ + case Backward: + factor = 1./FDBackward[derivative_order-1][filter_size-derivative_order-1][2]; + for (i=0; i<filter_size; i++){ + weights_vector[i] = FDBackward[derivative_order-1][filter_size-derivative_order-1][i+3]*factor; + } + break; + case Centered: + factor = 1./FDCentered[derivative_order-1][(filter_size-derivative_order+1)/2-1][2]; + for (i=0; i<filter_size; i++){ + weights_vector[i] = FDCentered[derivative_order-1][(filter_size-derivative_order+1)/2-1][i+3]*factor; + } + break; + case Forward: + factor = 1./FDForward[derivative_order-1][filter_size-derivative_order-1][2]; + for (i=0; i<filter_size; i++){ + weights_vector[i] = FDForward[derivative_order-1][filter_size-derivative_order-1][i+3]*factor; + } + default: + break; + } + return 1; +} + +int finitedifferences_weights_by_accuracy(float * weights_vector, const int derivative_order, const int accuracy_order, const enum FDMethod method){ + int i; + float factor; + switch (method){ + case Backward: + factor = 1./FDBackward[derivative_order-1][accuracy_order-1][2]; + for (i=0; i<accuracy_order+derivative_order; i++){ + weights_vector[i] = FDBackward[derivative_order-1][accuracy_order-1][i+3]*factor; + } + break; + case Centered: + factor = 1./FDCentered[derivative_order-1][accuracy_order/2-1][2]; + //This stands for a centered FD: stencil_size = accuracy_order+2*(derivative_order-derivative_order/2)-1 + //one could also use: stencil_size = FDCentered[derivative_order-1][accuracy_order/2-1][0] + for (i=0; i<accuracy_order+2*(derivative_order-derivative_order/2)-1; i++){ + weights_vector[i] = FDCentered[derivative_order-1][accuracy_order/2-1][i+3]*factor; + } + break; + case Forward: + factor = 1./FDForward[derivative_order-1][accuracy_order-1][2]; + for (i=0; i<accuracy_order+derivative_order; i++){ + weights_vector[i] = FDForward[derivative_order-1][accuracy_order-1][i+3]*factor; + } + default: + break; + } + return 1; +} + +/* +int finitedifferences_weights_by_size_stride(float * weights_vector, const int w_stride, const unsigned int filter_size, const enum FDMethod method, const int accuracy_order){ + int i; + float filter_value; + + + + //const rta_real_t half_filter_size = rta_floor(filter_size * 0.5); + + / *for(i=0, filter_value=-half_filter_size; + i<filter_size*w_stride; + i+=w_stride, filter_value+=1.) + { + weights_vector[i] = filter_value; + }* / + + return 1; +} +*/ + +/* +float finitedifferences_normalization_factor(const unsigned int filter_size, const enum FDMethod method, const int accuracy_order) +{ + float normalization = 0.; + if (filter_size > 0){ + int i; + const int half_filter_size = filter_size / 2; + + for(i=1; i<=half_filter_size; i++) + { + normalization += (float) (i*i); + } + + normalization = 0.5 / normalization; + } + return normalization; + } + +*/ + +void finitedifferences(float * output, const float * input_vector, const float * weights_vector, const unsigned int filter_size){ + unsigned int i; + *output = 0.; + + for(i=0; i<filter_size; i++){ + if(weights_vector[i] != 0.){ + *output += input_vector[i] * weights_vector[i]; + } + } + return; +} + +/* +void finitedifferences_stride(float * delta, + const float * input_vector, const int i_stride, + const float * weights_vector, const int w_stride, + const unsigned int filter_size) +{ + unsigned int i; + + *delta = 0.; + + for(i=0; i<filter_size; i++) + { + if(weights_vector[i*w_stride] != 0.) + { + *delta += input_vector[i*i_stride] * weights_vector[i*w_stride]; + } + } + + return; +} +*/ + + +void finitedifferences_vector(float * delta, + const float * input_matrix, const unsigned int input_size, + const float * weights_vector, const unsigned int filter_size) +{ + unsigned int i,j; + + for(j=0; j<input_size; j++) + { + delta[j] = 0.; + } + + for(i=0; i<filter_size; i++) + { + if(weights_vector[i] != 0.) /* skip zeros */ + { + for(j=0; j<input_size; j++) + { + delta[j] += input_matrix[i*input_size+j] * weights_vector[i]; + } + } + } + + return; +} + + +/* +void finitedifferences_vector_stride(float * delta, const int d_stride, + const float * input_matrix, const int i_stride, + const unsigned int input_size, + const float * weights_vector, const int w_stride, + const unsigned int filter_size) +{ + int i,j; + + for(j=0; j<input_size*d_stride; j+=d_stride) + { + delta[j] = 0.; + } + + for(i=0; i<filter_size; i++) + { + if(weights_vector[i*w_stride] != 0.) / * skip zeros * / + { + for(j=0; j<input_size; j++) + { + delta[j*d_stride] += input_matrix[(i*input_size+j)*i_stride] * + weights_vector[i*w_stride]; + } + } + } + + return; +} +*/ + +int accuracy_to_filtersize(const enum FDMethod method, const int derivative_order, const int accuracy_order){ + int res; + switch (method){ + case Centered: + res = accuracy_order+2*((derivative_order-1)/2)+1; + break; + case Backward: + case Forward: + res = accuracy_order + derivative_order; + break; + default: + res = 0; + break; + } + return res; +} + +int filtersize_to_accuracy(const enum FDMethod method, const int derivative_order, const unsigned int filter_size){ + int res; + switch (method){ + case Centered: + //res = FDCentered[derivative_order-1][(filter_size-derivative_order+1)/2-1]; + res = filter_size-2*((derivative_order-1)/2)-1; + break; + case Backward: + //res = FDBackward[derivative_order-1][filter_size-derivative_order-1][1]; + //break; + case Forward: + //res = FDForward[derivative_order-1][filter_size-derivative_order-1][1]; + res = filter_size-derivative_order; + break; + default: + res = 0; + break; + } + return res; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/finitedifferences/finitedifferences.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/finitedifferences/finitedifferences.h new file mode 100644 index 0000000..40da4fc --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/finitedifferences/finitedifferences.h @@ -0,0 +1,167 @@ +/** + * @file finitedifferences.h + * @author gael.dubus@ircam.fr + * + * Largely inspired by rta_delta.h + * + * @copyright + * Copyright (C) 2016 by ISMM IRCAM - Centre Pompidou, Paris, France + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _FINITEDIFFERENCES_H_ +#define _FINITEDIFFERENCES_H_ 1 + +#ifdef __cplusplus +extern "C" { +#endif + + +enum FDMethod {Backward, Centered, Forward}; + + + /* + Structure of the tables: + FDBackward[derivative_order][stencil_order] = [stencil_size, accuracy_order, 1/factor, [coefficients]] + */ + + //Name format: B`derivative_order``stencil_size` + static const int B12[5] = {2, 1, 1, -1, 1}; //array size = array[0]+3 + static const int B13[6] = {3, 2, 2, 1, -4, 3}; + static const int B14[7] = {4, 3, 6, -2, 9, -18, 11}; + static const int B15[8] = {5, 4, 12, 3, -16, 36, -48, 25}; + static const int B16[9] = {6, 5, 60, -12, 75, -200, 300, -300, 137}; + static const int B17[10] = {7, 6, 60, 10, -72, 225, -400, 450, -360, 147}; + static const int B23[6] = {3, 1, 1, 1, -2, 1}; + static const int B24[7] = {4, 2, 1, -1, 4, -5, 2}; + static const int B25[8] = {5, 3, 12, 11, -56, 114, -104, 35}; + static const int B26[9] = {6, 4, 12, -10, 61, -156, 214, -154, 45}; + static const int B27[10] = {7, 5, 180, 137, -972, 2970, -5080, 5265, -3132, 812}; + static const int B28[11] = {8, 6, 180, -126, 1019, -3618, 7380, -9490, 7911, -4014, 938}; + static const int B34[7] = {4, 1, 1, -1, 3, -3, 1}; + static const int B35[8] = {5, 2, 2, 3, -14, 24, -18, 5}; + static const int B36[9] = {6, 3, 4, -7, 41, -98, 118, -71, 17}; + static const int B37[10] = {7, 4, 8, 15, -104, 307, -496, 461, -232, 49}; + static const int B38[11] = {8, 5, 120, -232, 1849, -6432, 12725, -15560, 11787, -5104, 967}; + static const int B39[12] = {9, 6, 120, 469, -4216, 16830, -39128, 58280, -57384, 36706, -13960, 2403}; + static const int B45[8] = {5, 1, 1, 1, -4, 6, -4, 1}; + static const int B46[9] = {6, 2, 1, -2, 11, -24, 26, -14, 3}; + static const int B47[10] = {7, 3, 6, 17, -114, 321, -484, 411, -186, 35}; + static const int B48[11] = {8, 4, 6, -21, 164, -555, 1056, -1219, 852, -333, 56}; + static const int B49[12] = {9, 5, 240, 967, -8576, 33636, -76352, 109930, -102912, 61156, -21056, 3207}; + //Name format: B`derivative_order` + static const int *B1[6] = {B12, B13, B14, B15, B16, B17}; + static const int *B2[6] = {B23, B24, B25, B26, B27, B28}; + static const int *B3[6] = {B34, B35, B36, B37, B38, B39}; + static const int *B4[5] = {B45, B46, B47, B48, B49}; + static const int **FDBackward[4] = {B1, B2, B3, B4}; + //To get the right one: FDBackward[derivative_order-1][stencil_size-derivative_order-1] + + //Forward FD + static const int F12[5] = {2, 1, 1, -1, 1}; + static const int F13[6] = {3, 2, 2, -3, 4, -1}; + static const int F14[7] = {4, 3, 6, -11, 18, -9, 2}; + static const int F15[8] = {5, 4, 12, -25, 48, -36, 16, -3}; + static const int F16[9] = {6, 5, 60, -137, 300, -300, 200, -75, 12}; + static const int F17[10] = {7, 6, 60, -147, 360, -450, 400, -225, 72, -10}; + static const int F23[6] = {3, 1, 1, 1, -2, 1}; + static const int F24[7] = {4, 2, 1, 2, -5, 4, -1}; + static const int F25[8] = {5, 3, 12, 35, -104, 114, -56, 11}; + static const int F26[9] = {6, 4, 12, 45, -154, 214, -156, 61, -10}; + static const int F27[10] = {7, 5, 180, 812, -3132, 5265, -5080, 2970, -972, 137}; + static const int F28[11] = {8, 6, 180, 938, -4014, 7911, -9490, 7380, -3618, 1019, -126}; + static const int F34[7] = {4, 1, 1, -1, 3, -3, 1}; + static const int F35[8] = {5, 2, 2, -5, 18, -24, 14, -3}; + static const int F36[9] = {6, 3, 4, -17, 71, -118, 98, -41, 7}; + static const int F37[10] = {7, 4, 8, -49, 232, -461, 496, -307, 104, -15}; + static const int F38[11] = {8, 5, 120, -967, 5104, -11787, 15560, -12725, 6432, -1849, 232}; + static const int F39[12] = {9, 6, 240, -2403, 13960, -36706, 57384, -58280, 39128, -16830, 4216, -469}; + static const int F45[8] = {5, 1, 1, 1, -4, 6, -4, 1}; + static const int F46[9] = {6, 2, 1, 3, -14, 26, -24, 11, -2}; + static const int F47[10] = {7, 3, 6, 35, -186, 411, -484, 321, -114, 17}; + static const int F48[11] = {8, 4, 6, 56, -333, 852, -1219, 1056, -555, 164, -21}; + static const int F49[12] = {9, 5, 240, 3207, -21056, 61156, -102912, 109930, -76352, 33636, -8576, 967}; + static const int *F1[6] = {F12, F13, F14, F15, F16, F17}; + static const int *F2[6] = {F23, F24, F25, F26, F27, F28}; + static const int *F3[6] = {F34, F35, F36, F37, F38, F39}; + static const int *F4[5] = {F45, F46, F47, F48, F49}; + static const int **FDForward[4] = {F1, F2, F3, F4}; + //To get the right one: FDForward[derivative_order-1][stencil_size-derivative_order-1] + + //Centered FD + static const int C13[6] = {3, 2, 2, -1, 0, 1}; + static const int C15[8] = {5, 4, 12, 1, -8, 0, 8, -1}; + static const int C17[10] = {7, 6, 60, -1, 9, -45, 0, 45, -9, 1}; + static const int C19[12] = {9, 8, 840, 3, -32, 168, -672, 0, 672, -168, 32, -3}; + static const int C23[6] = {3, 2, 1, 1, -2, 1}; + static const int C25[8] = {5, 4, 12, -1, 16, -30, 16, -1}; + static const int C27[10] = {7, 6, 180, 2, -27, 270, -490, 270, -27, 2}; + static const int C29[12] = {9, 8, 5040, -9, 128, -1008, 8040, -14350, 8040, -1008, 128, -9}; + static const int C35[8] = {5, 2, 2, -1, 2, 0, -2, 1}; + static const int C37[10] = {7, 4, 8, 1, -8, 13, 0, -13, 8, -1}; + static const int C39[12] = {9, 6, 240, -7, 72, -338, 488, 0, -488, 338, -72, 7}; + static const int C45[8] = {5, 2, 1, 1, -4, 6, -4, 1}; + static const int C47[10] = {7, 4, 6, -1, 12, -39, 56, -39, 12, -1}; + static const int C49[12] = {9, 6, 240, 7, -96, 676, -1952, 2730, -1952, 676, -96, 7}; + static const int C57[10] = {7, 2, 2, -1, 4, -5, 0, 5, -4, 1}; + static const int C67[10] = {7, 2, 1, 1, -6, 15, -20, 15, -6, 1}; + static const int *C1[4] = {C13, C15, C17, C19}; + static const int *C2[4] = {C23, C25, C27, C29}; + static const int *C3[3] = {C35, C37, C39}; + static const int *C4[3] = {C45, C47, C49}; + static const int *C5[1] = {C57}; + static const int *C6[1] = {C67}; + static const int **FDCentered[6] = {C1, C2, C3, C4, C5, C6}; + //To get the right one: FDCentered[derivative_order-1][(stencil_size-derivative_order+1)/2-1] + +int finitedifferences_weights_by_filtersize(float * weights_vector, const int derivative_order, const unsigned int filter_size, const enum FDMethod method); + +int finitedifferences_weights_by_accuracy(float * weights_vector, const int derivative_order, const int accuracy_order, const enum FDMethod method); + + //int finitedifferences_weights_stride(float * weights_vector, const int w_stride, const unsigned int filter_size, const enum FDMethod method, const int accuracy_order); + + //float finitedifferences_normalization_factor(const unsigned int filter_size, const enum FDMethod method, const int accuracy_order); + +void finitedifferences(float * output, const float * input_vector, const float * weights_vector, const unsigned int filter_size); + + //void finitedifferences_stride(float * delta, const float * input_vector, const int i_stride, const float * weights_vector, const int w_stride, const unsigned int filter_size); + + void finitedifferences_vector(float * delta, const float * input_matrix, const unsigned int input_size, const float * weights_vector, const unsigned int filter_size); + + //void finitedifferences_vector_stride(float * delta, const int d_stride, const float * input_matrix, const int i_stride, const unsigned int input_size, const float * weights_vector, const int w_stride, const unsigned int filter_size); + + int accuracy_to_filtersize(const enum FDMethod method, const int derivative_order, const int accuracy_order); + int filtersize_to_accuracy(const enum FDMethod method, const int derivative_order, const unsigned int filter_size); + +#ifdef __cplusplus +} +#endif + +#endif /* _FINITEDIFFERENCES_H_ */ + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/lpcformants/bbpr.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/lpcformants/bbpr.cpp new file mode 100755 index 0000000..b4e3887 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/lpcformants/bbpr.cpp @@ -0,0 +1,352 @@ +/** + * @file bbpr.cpp + * + * Finds all roots of polynomial by first finding quadratic + * factors using Bairstow's method, then extracting roots + * from quadratics. Implements new algorithm for managing + * multiple roots. + * + * @copyright + * Copyright (C) 2002, 2003, C. Bond. + * All rights reserved. + * + * @see http://www.crbond.com/ + */ + +#include <iomanip> +#include <math.h> +#include <stdlib.h> + +#define maxiter 500 +#define minerr 0.0001 + + +// +// Extract individual real or complex roots from list of quadratic factors +// +int roots(double *a,int n,double *wr,double *wi) +{ + double sq,b2,c,disc; + int m,numroots; + + m = n; + numroots = 0; + while (m > 1) { + b2 = -0.5*a[m-2]; + c = a[m-1]; + disc = b2*b2-c; + if (disc < 0.0) { // complex roots + sq = sqrt(-disc); + wr[m-2] = b2; + wi[m-2] = sq; + wr[m-1] = b2; + wi[m-1] = -sq; + numroots+=2; + } + else { // real roots + sq = sqrt(disc); + wr[m-2] = fabs(b2)+sq; + if (b2 < 0.0) wr[m-2] = -wr[m-2]; + if (wr[m-2] == 0) + wr[m-1] = 0; + else { + wr[m-1] = c/wr[m-2]; + numroots+=2; + } + wi[m-2] = 0.0; + wi[m-1] = 0.0; + } + m -= 2; + } + if (m == 1) { + wr[0] = -a[0]; + wi[0] = 0.0; + numroots++; + } + return numroots; +} +// +// Deflate polynomial 'a' by dividing out 'quad'. Return quotient +// polynomial in 'b' and error metric based on remainder in 'err'. +// +void deflate(double *a,int n,double *b,double *quad,double *err) +{ + double r,s; + int i; + + r = quad[1]; + s = quad[0]; + + b[1] = a[1] - r; + + for (i=2;i<=n;i++){ + b[i] = a[i] - r * b[i-1] - s * b[i-2]; + } + *err = fabs(b[n])+fabs(b[n-1]); +} +// +// Find quadratic factor using Bairstow's method (quadratic Newton method). +// A number of ad hoc safeguards are incorporated to prevent stalls due +// to common difficulties, such as zero slope at iteration point, and +// convergence problems. +// +// Bairstow's method is sensitive to the starting estimate. It is possible +// for convergence to fail or for 'wild' values to trigger an overflow. +// +// It is advisable to institute traps for these problems. (To do!) +// + +// look also at http://jean-pierre.moreau.pagesperso-orange.fr/Cplus/bairstow_cpp.txt + +void find_quad(double *a,int n,double *b,double *quad,double *err, int *iter) +{ + double *c,dn,dr,ds,drn,dsn,eps,r,s, o_r, o_s; + + c = new double [n+1]; + c[0] = 1.0; + r = quad[1]; + s = quad[0]; + eps = 1e-15; + *iter = 1; + + double t = 10000000.0; + + do { + //if (*iter > maxiter) break; + /* + if (((*iter) % 200) == 0) { + eps *= 10.0; + } + */ + b[1] = a[1] - r; + c[1] = b[1] - r; + + for (int i=2;i<=n;i++){ + b[i] = a[i] - r * b[i-1] - s * b[i-2]; + c[i] = b[i] - r * c[i-1] - s * c[i-2]; + } + dn=c[n-1] * c[n-3] - c[n-2] * c[n-2]; + drn=b[n] * c[n-3] - b[n-1] * c[n-2]; + dsn=b[n-1] * c[n-1] - b[n] * c[n-2]; + + if (fabs(dn) < 1e-10) { + if (dn < 0.0) dn = -1e-8; + else dn = 1e-8; + } + dr = drn / dn; + ds = dsn / dn; + r += dr; + s += ds; + (*iter)++; + + if ((fabs(dr)+fabs(ds)) < t){ + t = fabs(dr)+fabs(ds); + o_r = r; + o_s = s; + } + + } while ( (fabs(dr)+fabs(ds)) > eps && *iter < maxiter); + quad[0] = o_s; + quad[1] = o_r; + *err = t; + delete [] c; + return; +} + + +// +// Differentiate polynomial 'a' returning result in 'b'. +// +void diff_poly(double *a,int n,double *b) +{ + double coef; + int i; + + coef = (double)n; + b[0] = 1.0; + for (i=1;i<n;i++) { + b[i] = a[i]*((double)(n-i))/coef; + } +} +// +// Attempt to find a reliable estimate of a quadratic factor using modified +// Bairstow's method with provisions for 'digging out' factors associated +// with multiple roots. +// +// This resursive routine operates on the principal that differentiation of +// a polynomial reduces the order of all multiple roots by one, and has no +// other roots in common with it. If a root of the differentiated polynomial +// is a root of the original polynomial, there must be multiple roots at +// that location. The differentiated polynomial, however, has lower order +// and is easier to solve. +// +// When the original polynomial exhibits convergence problems in the +// neighborhood of some potential root, a best guess is obtained and tried +// on the differentiated polynomial. The new best guess is applied +// recursively on continually differentiated polynomials until failure +// occurs. At this point, the previous polynomial is accepted as that with +// the least number of roots at this location, and its estimate is +// accepted as the root. +// +void recurse(double *a,int n,double *b,int m,double *quad, + double *err,int *iter) +{ + double *c,*x,rs[2],tst; + + if (fabs(b[m]) < 1e-16) m--; // this bypasses roots at zero + if (m == 2) { + quad[0] = b[2]; + quad[1] = b[1]; + *err = 0; + *iter = 0; + return; + } + c = new double [m+1]; + x = new double [n+1]; + c[0] = x[0] = 1.0; + rs[0] = quad[0]; + rs[1] = quad[1]; + *iter = 0; + find_quad(b,m,c,rs,err,iter); + tst = fabs(rs[0]-quad[0])+fabs(rs[1]-quad[1]); + if (*err < 1e-12) { + quad[0] = rs[0]; + quad[1] = rs[1]; + } +// tst will be 'large' if we converge to wrong root + if (((*iter > 5) && (tst < 1e-4)) || ((*iter > 20) && (tst < 1e-1))) { + diff_poly(b,m,c); + recurse(a,n,c,m-1,rs,err,iter); + quad[0] = rs[0]; + quad[1] = rs[1]; + } + delete [] x; + delete [] c; +} +// +// Top level routine to manage the determination of all roots of the given +// polynomial 'a', returning the quadratic factors (and possibly one linear +// factor) in 'x'. +// +void get_quads(double *a,int n,double *quad,double *x) +{ + double *b, *z, err, tmp; + int iter, m; + + if ((tmp = a[0]) != 1.0) { + a[0] = 1.0; + for (int i=1; i<=n; i++) { + a[i] /= tmp; + } + } + if (n == 2) { + x[0] = a[1]; + x[1] = a[2]; + return; + } + else if (n == 1) { + x[0] = a[1]; + return; + } + m = n; + b = new double [n+1]; + z = new double [n+1]; + b[0] = 1.0; + for (int i=0; i<=n; i++) { + z[i] = a[i]; + x[i] = 0.0; + } + do { + if (n > m) { + quad[0] = 3.14159e-1; + quad[1] = 2.78127e-1; + } + do { // This loop tries to assure convergence + //for (i=0;i<5;i++) { + find_quad(z,m,b,quad,&err,&iter); + + if ((err > 1e-7) || (iter > maxiter)) { + diff_poly(z,m,b); + recurse(z,m,b,m-1,quad,&err,&iter); + } + deflate(z,m,b,quad,&err); + if (err > minerr){ + quad[0] = ( (float)rand()/((float)RAND_MAX/10.0) ) - 5.0; + quad[1] = ( (float)rand()/((float)RAND_MAX/10.0) ) - 5.0; + } + /* + if (err < (minerr/2.0)) break; + // quad[0] = random(8) - 4.0; + quad[0] = ( (float)rand()/((float)RAND_MAX/8.0) ) - 4.0; + // quad[1] = random(8) - 4.0; + quad[1] = ( (float)rand()/((float)RAND_MAX/8.0) ) - 4.0; + // } + */ + /* if (err > 0.01) { + printf("Error! Convergence failure in quadratic x^2 + r*x + s."); + exit(1); + }*/ + } while (err > minerr); + x[m-2] = quad[1]; + x[m-1] = quad[0]; + m -= 2; + for (int i=0; i<=m; i++) { + z[i] = b[i]; + } + } while (m > 2); + if (m == 2) { + x[0] = b[1]; + x[1] = b[2]; + } + else x[0] = b[1]; + delete [] z; + delete [] b; +} + +/* +int main() +{ + double a[21],x[21],wr[21],wi[21],quad[2],err,t; + int n,iter,i,numr; + + cout << "Polynomial order (1 <= n <= 20): "; + cin >> n; + if ((n < 1) || (n > 20)) { + cout << "Error! Invalid order: n = " << n << endl; + return 1; + } +// get coefficients of polynomial + cout << "Enter coefficients, high order to low order" << endl; + for (i=0;i<=n;i++) { + cout << "C[" << n-i << "] * x^" << n-i << " : "; + cin >> a[i]; + if (a[0] == 0) { + cout << "Error! Highest coefficient cannot be 0." << endl; + return 0; + } + } + if (a[n] == 0) { + cout << "Error! Lowest coefficient (constant term) cannot be 0." << endl; + return 0; + } +// initialize estimate for 1st root pair + quad[0] = 2.71828e-1; + quad[1] = 3.14159e-1; +// cout << "Estimate for 'R': "; +// cin >> quad[1]; +// cout << "Estimate for 'S': "; +// cin >> quad[0]; +// get roots + get_quads(a,n,quad,x); + numr = roots(x,n,wr,wi); + + cout << endl << "Roots (" << numr << " found):" << endl; + cout.setf(ios::showpoint|ios::showpos|ios::left|ios::scientific); + cout.precision(15); + for (i=0;i<n;i++) { + if ((wr[i] != 0.0) || (wi[i] != 0.0)) + cout << wr[i] << " " << wi[i] << "I" << endl; + } + return 0; +} +*/ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/lpcformants/bbpr.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/lpcformants/bbpr.h new file mode 100644 index 0000000..6f787ca --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/lpcformants/bbpr.h @@ -0,0 +1,22 @@ +/** + * @file bbpr.h + * + * Finds all roots of polynomial by first finding quadratic + * factors using Bairstow's method, then extracting roots + * from quadratics. Implements new algorithm for managing + * multiple roots. + * + * @copyright + * Copyright (C) 2002, 2003, C. Bond. + * All rights reserved. + * + * @see http://www.crbond.com/ + */ + +#ifndef _bbpr_h_ +#define _bbpr_h_ + +int roots(double *a,int n,double *wr,double *wi); +void get_quads(double *a,int n,double *quad,double *x); + +#endif /* _bbpr_h_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/lpcformants/rpoly.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/lpcformants/rpoly.cpp new file mode 100644 index 0000000..f468dc8 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/lpcformants/rpoly.cpp @@ -0,0 +1,766 @@ +/** + * @file rpoly.cpp + * @brief Jenkins-Traub real polynomial root finder. + * + * @copyright + * Copyright (C) 2002, C. Bond. + * All rights reserved. + * + * @see http://www.crbond.com/ + * + * Translation of TOMS493 from FORTRAN to C. This + * implementation of Jenkins-Traub partially adapts + * the original code to a C environment by restruction + * many of the 'goto' controls to better fit a block + * structured form. It also eliminates the global memory + * allocation in favor of local, dynamic memory management. + * + * The calling conventions are slightly modified to return + * the number of roots found as the function value. + * + * INPUT: + * op - double precision vector of coefficients in order of + * decreasing powers. + * degree - integer degree of polynomial + * + * OUTPUT: + * zeror,zeroi - output double precision vectors of the + * real and imaginary parts of the zeros. + * + * RETURN: + * returnval: -1 if leading coefficient is zero, otherwise + * number of roots found. + */ + +#include <stdio.h> +#include <time.h> +#include <math.h> +#include <stdlib.h> + +void quad(double a,double b1,double c,double *sr,double *si, + double *lr,double *li); +void fxshfr(int l2, int *nz); +void quadit(double *uu,double *vv,int *nz); +void realit(double sss, int *nz, int *iflag); +void calcsc(int *type); +void nextk(int *type); +void newest(int type,double *uu,double *vv); +void quadsd(int n,double *u,double *v,double *p,double *q, + double *a,double *b); +double *p,*qp,*k,*qk,*svk; +double sr,si,u,v,a,b,c,d,a1,a2; +double a3,a6,a7,e,f,g,h,szr,szi,lzr,lzi; +double eta,are,mre; +int n,nn,nmi,zerok; +static int itercnt; + +int rpoly(double *op, int degree, double *zeror, double *zeroi, int info[] ) +{ + double t,aa,bb,cc,*temp,factor,rot; + double *pt; + double lo,max,min,xx,yy,cosr,sinr,xxx,x,sc,bnd; + double xm,ff,df,dx,infin,smalno,base; + int cnt,nz,i,j,jj,l,nm1,zerok; + long sec; + + sec = clock(); + +/* The following statements set machine constants. */ + base = 2.0; + eta = 2.22e-16; + infin = 3.4e38; + smalno = 1.2e-38; + + are = eta; + mre = eta; + lo = smalno/eta; +/* Initialization of constants for shift rotation. */ + xx = sqrt(0.5); + yy = -xx; + rot = 94.0; + rot *= 0.017453293; + cosr = cos(rot); + sinr = sin(rot); + n = degree; +/* Algorithm fails of the leading coefficient is zero. */ + if (op[0] == 0.0) return -1; +/* Remove the zeros at the origin, if any. */ + while (op[n] == 0.0) { + j = degree - n; + zeror[j] = 0.0; + zeroi[j] = 0.0; + n--; + } + if (n < 1) return degree; +/* + * Allocate memory here + */ + temp = new double [degree+1]; + pt = new double [degree+1]; + p = new double [degree+1]; + qp = new double [degree+1]; + k = new double [degree+1]; + qk = new double [degree+1]; + svk = new double [degree+1]; +/* Make a copy of the coefficients. */ + for (i=0;i<=n;i++) + p[i] = op[i]; +/* Start the algorithm for one zero. */ +_40: + itercnt = 0; + if (n == 1) { + zeror[degree-1] = -p[1]/p[0]; + zeroi[degree-1] = 0.0; + n -= 1; + if( info != NULL ) + info[ degree ] = 0; + + goto _99; + } +/* Calculate the final zero or pair of zeros. */ + if (n == 2) { + quad(p[0],p[1],p[2],&zeror[degree-2],&zeroi[degree-2], + &zeror[degree-1],&zeroi[degree-1]); + n -= 2; + if( info != NULL ) + info[ degree ] = info[ degree - 1] = 0; + goto _99; + } +/* Find largest and smallest moduli of coefficients. */ + max = 0.0; + min = infin; + for (i=0;i<=n;i++) { + x = fabs(p[i]); + if (x > max) max = x; + if (x != 0.0 && x < min) min = x; + } +/* Scale if there are large or very small coefficients. + * Computes a scale factor to multiply the coefficients of the + * polynomial. The scaling si done to avoid overflow and to + * avoid undetected underflow interfering with the convergence + * criterion. The factor is a power of the base. + */ + sc = lo/min; + if (sc > 1.0 && infin/sc < max) goto _110; + if (sc <= 1.0) { + if (max < 10.0) goto _110; + if (sc == 0.0) + sc = smalno; + } + l = (int)(log(sc)/log(base) + 0.5); + factor = pow(base*1.0,l); + if (factor != 1.0) { + for (i=0;i<=n;i++) + p[i] = factor*p[i]; /* Scale polynomial. */ + } +_110: +/* Compute lower bound on moduli of roots. */ + for (i=0;i<=n;i++) { + pt[i] = (fabs(p[i])); + } + pt[n] = - pt[n]; +/* Compute upper estimate of bound. */ + x = exp((log(-pt[n])-log(pt[0])) / (double)n); +/* If Newton step at the origin is better, use it. */ + if (pt[n-1] != 0.0) { + xm = -pt[n]/pt[n-1]; + if (xm < x) x = xm; + } +/* Chop the interval (0,x) until ff <= 0 */ + while (1) { + xm = x*0.1; + ff = pt[0]; + for (i=1;i<=n;i++) + ff = ff*xm + pt[i]; + if (ff <= 0.0) break; + x = xm; + } + dx = x; +/* Do Newton interation until x converges to two + * decimal places. + */ + while (fabs(dx/x) > 0.005) { + ff = pt[0]; + df = ff; + for (i=1;i<n;i++) { + ff = ff*x + pt[i]; + df = df*x + ff; + } + ff = ff*x + pt[n]; + dx = ff/df; + x -= dx; + itercnt++; + } + bnd = x; +/* Compute the derivative as the initial k polynomial + * and do 5 steps with no shift. + */ + nm1 = n - 1; + for (i=1;i<n;i++) + k[i] = (double)(n-i)*p[i]/(double)n; + k[0] = p[0]; + aa = p[n]; + bb = p[n-1]; + zerok = (k[n-1] == 0); + for(jj=0;jj<5;jj++) { + itercnt++; + cc = k[n-1]; + if (!zerok) { +/* Use a scaled form of recurrence if value of k at 0 is nonzero. */ + t = -aa/cc; + for (i=0;i<nm1;i++) { + j = n-i-1; + k[j] = t*k[j-1]+p[j]; + } + k[0] = p[0]; + zerok = (fabs(k[n-1]) <= fabs(bb)*eta*10.0); + } + else { +/* Use unscaled form of recurrence. */ + for (i=0;i<nm1;i++) { + j = n-i-1; + k[j] = k[j-1]; + } + k[0] = 0.0; + zerok = (k[n-1] == 0.0); + } + } +/* Save k for restarts with new shifts. */ + for (i=0;i<n;i++) + temp[i] = k[i]; +/* Loop to select the quadratic corresponding to each new shift. */ + for (cnt = 0;cnt < 20;cnt++) { +/* Quadratic corresponds to a double shift to a + * non-real point and its complex conjugate. The point + * has modulus bnd and amplitude rotated by 94 degrees + * from the previous shift. + */ + xxx = cosr*xx - sinr*yy; + yy = sinr*xx + cosr*yy; + xx = xxx; + sr = bnd*xx; + si = bnd*yy; + u = -2.0 * sr; + v = bnd; + fxshfr(20*(cnt+1),&nz); + if (nz != 0) { +/* The second stage jumps directly to one of the third + * stage iterations and returns here if successful. + * Deflate the polynomial, store the zero or zeros and + * return to the main algorithm. + */ + j = degree - n; + zeror[j] = szr; + zeroi[j] = szi; + if( info != NULL ) + info[ j + 1 ] = itercnt; + n -= nz; + for (i=0;i<=n;i++) + p[i] = qp[i]; + if (nz != 1) { + zeror[j+1] = lzr; + zeroi[j+1] = lzi; + if( info != NULL ) + info[ j + 2 ] = 0; + } + goto _40; + } +/* If the iteration is unsuccessful another quadratic + * is chosen after restoring k. + */ + for (i=0;i<n;i++) { + k[i] = temp[i]; + } + } +/* Return with failure if no convergence after 20 shifts. */ +_99: + delete [] svk; + delete [] qk; + delete [] k; + delete [] qp; + delete [] p; + delete [] pt; + delete [] temp; + + if( info != NULL ){ + info[ 0 ] = clock() - sec; + info[ 0 ] *= 1000; + info[ 0 ] /= CLOCKS_PER_SEC; + } + + return degree - n; +} +/* Computes up to L2 fixed shift k-polynomials, + * testing for convergence in the linear or quadratic + * case. Initiates one of the variable shift + * iterations and returns with the number of zeros + * found. + */ +void fxshfr(int l2,int *nz) +{ + double svu,svv,ui,vi,s; + double betas,betav,oss,ovv,ss,vv,ts,tv; + double ots,otv,tvv,tss; + int type, i,j,iflag,vpass,spass,vtry,stry; + + *nz = 0; + betav = 0.25; + betas = 0.25; + oss = sr; + ovv = v; +/* Evaluate polynomial by synthetic division. */ + quadsd(n,&u,&v,p,qp,&a,&b); + calcsc(&type); + for (j=0;j<l2;j++) { +/* Calculate next k polynomial and estimate v. */ + nextk(&type); + calcsc(&type); + newest(type,&ui,&vi); + vv = vi; +/* Estimate s. */ + ss = 0.0; + if (k[n-1] != 0.0) ss = -p[n]/k[n-1]; + tv = 1.0; + ts = 1.0; + if (j == 0 || type == 3) goto _70; +/* Compute relative measures of convergence of s and v sequences. */ + if (vv != 0.0) tv = fabs((vv-ovv)/vv); + if (ss != 0.0) ts = fabs((ss-oss)/ss); +/* If decreasing, multiply two most recent convergence measures. */ + tvv = 1.0; + if (tv < otv) tvv = tv*otv; + tss = 1.0; + if (ts < ots) tss = ts*ots; +/* Compare with convergence criteria. */ + vpass = (tvv < betav); + spass = (tss < betas); + if (!(spass || vpass)) goto _70; +/* At least one sequence has passed the convergence test. + * Store variables before iterating. + */ + svu = u; + svv = v; + for (i=0;i<n;i++) { + svk[i] = k[i]; + } + s = ss; +/* Choose iteration according to the fastest converging + * sequence. + */ + vtry = 0; + stry = 0; + if ((spass && (!vpass)) || tss < tvv) goto _40; +_20: + quadit(&ui,&vi,nz); + if (*nz > 0) return; +/* Quadratic iteration has failed. Flag that it has + * been tried and decrease the convergence criterion. + */ + vtry = 1; + betav *= 0.25; +/* Try linear iteration if it has not been tried and + * the S sequence is converging. + */ + if (stry || !spass) goto _50; + for (i=0;i<n;i++) { + k[i] = svk[i]; + } +_40: + realit(s,nz,&iflag); + if (*nz > 0) return; +/* Linear iteration has failed. Flag that it has been + * tried and decrease the convergence criterion. + */ + stry = 1; + betas *=0.25; + if (iflag == 0) goto _50; +/* If linear iteration signals an almost double real + * zero attempt quadratic iteration. + */ + ui = -(s+s); + vi = s*s; + goto _20; +/* Restore variables. */ +_50: + u = svu; + v = svv; + for (i=0;i<n;i++) { + k[i] = svk[i]; + } +/* Try quadratic iteration if it has not been tried + * and the V sequence is convergin. + */ + if (vpass && !vtry) goto _20; +/* Recompute QP and scalar values to continue the + * second stage. + */ + quadsd(n,&u,&v,p,qp,&a,&b); + calcsc(&type); +_70: + ovv = vv; + oss = ss; + otv = tv; + ots = ts; + } +} +/* Variable-shift k-polynomial iteration for a + * quadratic factor converges only if the zeros are + * equimodular or nearly so. + * uu, vv - coefficients of starting quadratic. + * nz - number of zeros found. + */ +void quadit(double *uu,double *vv,int *nz) +{ + double ui,vi; + double mp,omp,ee,relstp,t,zm; + int type,i,j,tried; + + *nz = 0; + tried = 0; + u = *uu; + v = *vv; + j = 0; +/* Main loop. */ +_10: + itercnt++; + quad(1.0,u,v,&szr,&szi,&lzr,&lzi); +/* Return if roots of the quadratic are real and not + * close to multiple or nearly equal and of opposite + * sign. + */ + if (fabs(fabs(szr)-fabs(lzr)) > 0.01 * fabs(lzr)) return; +/* Evaluate polynomial by quadratic synthetic division. */ + quadsd(n,&u,&v,p,qp,&a,&b); + mp = fabs(a-szr*b) + fabs(szi*b); +/* Compute a rigorous bound on the rounding error in + * evaluating p. + */ + zm = sqrt(fabs(v)); + ee = 2.0*fabs(qp[0]); + t = -szr*b; + for (i=1;i<n;i++) { + ee = ee*zm + fabs(qp[i]); + } + ee = ee*zm + fabs(a+t); + ee *= (5.0 *mre + 4.0*are); + ee = ee - (5.0*mre+2.0*are)*(fabs(a+t)+fabs(b)*zm); + ee = ee + 2.0*are*fabs(t); +/* Iteration has converged sufficiently if the + * polynomial value is less than 20 times this bound. + */ + if (mp <= 20.0*ee) { + *nz = 2; + return; + } + j++; +/* Stop iteration after 20 steps. */ + if (j > 20) return; + if (j < 2) goto _50; + if (relstp > 0.01 || mp < omp || tried) goto _50; +/* A cluster appears to be stalling the convergence. + * Five fixed shift steps are taken with a u,v close + * to the cluster. + */ + if (relstp < eta) relstp = eta; + relstp = sqrt(relstp); + u = u - u*relstp; + v = v + v*relstp; + quadsd(n,&u,&v,p,qp,&a,&b); + for (i=0;i<5;i++) { + calcsc(&type); + nextk(&type); + } + tried = 1; + j = 0; +_50: + omp = mp; +/* Calculate next k polynomial and new u and v. */ + calcsc(&type); + nextk(&type); + calcsc(&type); + newest(type,&ui,&vi); +/* If vi is zero the iteration is not converging. */ + if (vi == 0.0) return; + relstp = fabs((vi-v)/vi); + u = ui; + v = vi; + goto _10; +} +/* Variable-shift H polynomial iteration for a real zero. + * sss - starting iterate + * nz - number of zeros found + * iflag - flag to indicate a pair of zeros near real axis. + */ +void realit(double sss, int *nz, int *iflag) +{ + double pv,kv,t,s; + double ms,mp,omp,ee; + int i,j; + + *nz = 0; + s = sss; + *iflag = 0; + j = 0; +/* Main loop */ + while (1) { + itercnt++; + pv = p[0]; +/* Evaluate p at s. */ + qp[0] = pv; + for (i=1;i<=n;i++) { + pv = pv*s + p[i]; + qp[i] = pv; + } + mp = fabs(pv); +/* Compute a rigorous bound on the error in evaluating p. */ + ms = fabs(s); + ee = (mre/(are+mre))*fabs(qp[0]); + for (i=1;i<=n;i++) { + ee = ee*ms + fabs(qp[i]); + } +/* Iteration has converged sufficiently if the polynomial + * value is less than 20 times this bound. + */ + if (mp <= 20.0*((are+mre)*ee-mre*mp)) { + *nz = 1; + szr = s; + szi = 0.0; return ; // HVE return added + } + j++; +/* Stop iteration after 10 steps. */ + if (j > 10) return; + if (j < 2) goto _50; + if (fabs(t) > 0.001*fabs(s-t) || mp < omp) goto _50; +/* A cluster of zeros near the real axis has been + * encountered. Return with iflag set to initiate a + * quadratic iteration. + */ + *iflag = 1; sss =s; // HVE sss=s added + return; +/* Return if the polynomial value has increased significantly. */ +_50: + omp = mp; +/* Compute t, the next polynomial, and the new iterate. */ + kv = k[0]; + qk[0] = kv; + for (i=1;i<n;i++) { + kv = kv*s + k[i]; + qk[i] = kv; + } + if (fabs(kv) <= fabs(k[n-1])*10.0*eta) { // HVE n -> n-1 +/* Use unscaled form. */ + k[0] = 0.0; + for (i=1;i<n;i++) { + k[i] = qk[i-1]; + } + } + else { +/* Use the scaled form of the recurrence if the value + * of k at s is nonzero. + */ + t = -pv/kv; + k[0] = qp[0]; + for (i=1;i<n;i++) { + k[i] = t*qk[i-1] + qp[i]; + } + } + kv = k[0]; + for (i=1;i<n;i++) { + kv = kv*s + k[i]; + } + t = 0.0; + if (fabs(kv) > fabs(k[n-1]*10.0*eta)) t = -pv/kv; + s += t; + } +} + +/* This routine calculates scalar quantities used to + * compute the next k polynomial and new estimates of + * the quadratic coefficients. + * type - integer variable set here indicating how the + * calculations are normalized to avoid overflow. + */ +void calcsc(int *type) +{ +/* Synthetic division of k by the quadratic 1,u,v */ + quadsd(n-1,&u,&v,k,qk,&c,&d); + if (fabs(c) > fabs(k[n-1]*100.0*eta)) goto _10; + if (fabs(d) > fabs(k[n-2]*100.0*eta)) goto _10; + *type = 3; +/* Type=3 indicates the quadratic is almost a factor of k. */ + return; +_10: + if (fabs(d) < fabs(c)) { + *type = 1; +/* Type=1 indicates that all formulas are divided by c. */ + e = a/c; + f = d/c; + g = u*e; + h = v*b; + a3 = a*e + (h/c+g)*b; + a1 = b - a*(d/c); + a7 = a + g*d + h*f; + return; + } + *type = 2; +/* Type=2 indicates that all formulas are divided by d. */ + e = a/d; + f = c/d; + g = u*b; + h = v*b; + a3 = (a+g)*e + h*(b/d); + a1 = b*f-a; + a7 = (f+u)*a + h; +} +/* Computes the next k polynomials using scalars + * computed in calcsc. + */ +void nextk(int *type) +{ + double temp; + int i; + + if (*type == 3) { +/* Use unscaled form of the recurrence if type is 3. */ + k[0] = 0.0; + k[1] = 0.0; + for (i=2;i<n;i++) { + k[i] = qk[i-2]; + } + return; + } + temp = a; + if (*type == 1) temp = b; + if (fabs(a1) <= fabs(temp)*eta*10.0) { +/* If a1 is nearly zero then use a special form of the + * recurrence. + */ + k[0] = 0.0; + k[1] = -a7*qp[0]; + for(i=2;i<n;i++) { + k[i] = a3*qk[i-2] - a7*qp[i-1]; + } return; // HVE return added + } +/* Use scaled form of the recurrence. */ + a7 /= a1; + a3 /= a1; + k[0] = qp[0]; + k[1] = qp[1] - a7*qp[0]; + for (i=2;i<n;i++) { + k[i] = a3*qk[i-2] - a7*qp[i-1] + qp[i]; + } +} +/* Compute new estimates of the quadratic coefficients + * using the scalars computed in calcsc. + */ +void newest(int type,double *uu,double *vv) +{ + double a4,a5,b1,b2,c1,c2,c3,c4,temp; + +/* Use formulas appropriate to setting of type. */ + if (type == 3) { +/* If type=3 the quadratic is zeroed. */ + *uu = 0.0; + *vv = 0.0; + return; + } + if (type == 2) { + a4 = (a+g)*f + h; + a5 = (f+u)*c + v*d; + } + else { + a4 = a + u*b +h*f; + a5 = c + (u+v*f)*d; + } +/* Evaluate new quadratic coefficients. */ + b1 = -k[n-1]/p[n]; + b2 = -(k[n-2]+b1*p[n-1])/p[n]; + c1 = v*b2*a1; + c2 = b1*a7; + c3 = b1*b1*a3; + c4 = c1 - c2 - c3; + temp = a5 + b1*a4 - c4; + if (temp == 0.0) { + *uu = 0.0; + *vv = 0.0; + return; + } + *uu = u - (u*(c3+c2)+v*(b1*a1+b2*a7))/temp; + *vv = v*(1.0+c4/temp); + return; +} + +/* Divides p by the quadratic 1,u,v placing the quotient + * in q and the remainder in a,b. + */ +void quadsd(int nn,double *u,double *v,double *p,double *q, + double *a,double *b) +{ + double c; + int i; + + *b = p[0]; + q[0] = *b; + *a = p[1] - (*b)*(*u); + q[1] = *a; + for (i=2;i<=nn;i++) { + c = p[i] - (*a)*(*u) - (*b)*(*v); + q[i] = c; + *b = *a; + *a = c; + } +} +/* Calculate the zeros of the quadratic a*z^2 + b1*z + c. + * The quadratic formula, modified to avoid overflow, is used + * to find the larger zero if the zeros are real and both + * are complex. The smaller real zero is found directly from + * the product of the zeros c/a. + */ +void quad(double a,double b1,double c,double *sr,double *si, + double *lr,double *li) +{ + double b,d,e; + + if (a == 0.0) { /* less than two roots */ + if (b1 != 0.0) *sr = -c/b1; + else *sr = 0.0; + *lr = 0.0; + *si = 0.0; + *li = 0.0; + return; + } + if (c == 0.0) { /* one real root, one zero root */ + *sr = 0.0; + *lr = -b1/a; + *si = 0.0; + *li = 0.0; + return; + } +/* Compute discriminant avoiding overflow. */ + b = b1/2.0; + if (fabs(b) < fabs(c)) { + if (c < 0.0) e = -a; + else e = a; + e = b*(b/fabs(c)) - e; + d = sqrt(fabs(e))*sqrt(fabs(c)); + } + else { + e = 1.0 - (a/b)*(c/b); + d = sqrt(fabs(e))*fabs(b); + } + if (e < 0.0) { /* complex conjugate zeros */ + *sr = -b/a; + *lr = *sr; + *si = fabs(d/a); + *li = -(*si); + } + else { + if (b >= 0.0) d = -d; /* real zeros. */ + *lr = (-b+d)/a; + *sr = 0.0; + if (*lr != 0.0) *sr = (c/ *lr)/a; + *si = 0.0; + *li = 0.0; + } +} + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/lpcformants/rpoly.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/lpcformants/rpoly.h new file mode 100644 index 0000000..34e6407 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/lpcformants/rpoly.h @@ -0,0 +1,40 @@ +/** + * @file rpoly.h + * @brief Jenkins-Traub real polynomial root finder. + * + * @copyright + * Copyright (C) 2002, C. Bond. + * All rights reserved. + * + * @see http://www.crbond.com/ + * + * Translation of TOMS493 from FORTRAN to C. This + * implementation of Jenkins-Traub partially adapts + * the original code to a C environment by restruction + * many of the 'goto' controls to better fit a block + * structured form. It also eliminates the global memory + * allocation in favor of local, dynamic memory management. + * + * The calling conventions are slightly modified to return + * the number of roots found as the function value. + * + * INPUT: + * op - double precision vector of coefficients in order of + * decreasing powers. + * degree - integer degree of polynomial + * + * OUTPUT: + * zeror,zeroi - output double precision vectors of the + * real and imaginary parts of the zeros. + * + * RETURN: + * returnval: -1 if leading coefficient is zero, otherwise + * number of roots found. + */ + +#ifndef _rpoly_h_ +#define _rpoly_h_ + +int rpoly(double *op, int degree, double *zeror, double *zeroi, int info[]); + +#endif /* _rpoly_h_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta.h new file mode 100644 index 0000000..43d9e99 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta.h @@ -0,0 +1,47 @@ +/** + * @file rta.h + * @author Jean-Philippe Lambert + * @date Mon Sep 10 11:05:09 2007 + * + * @brief Base header file for rta library. + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_H_ +#define _RTA_H_ 1 + +/** rta_configuration.h must be user-defined. */ +#include "rta_configuration.h" + +#include "rta_types.h" + +#endif /* _RTA_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_bpf.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_bpf.c new file mode 100644 index 0000000..6d4e9aa --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_bpf.c @@ -0,0 +1,94 @@ +/** + * @file rta_bpf.c + * @author Norbert.Schnell@ircam.fr + * + * @brief Break-point function utilities. + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_bpf.h" +#include "rta_float.h" // for DBL_MAX + +static int rta_bf_get_index (rta_bpf_t *bpf, double time) +{ + int size = rta_bpf_get_size(bpf); + int index = bpf->index; + + if (index >= size - 1) + index = size - 2; + + /* search index */ + if (time >= rta_bpf_get_time(bpf, index + 1)) + { + index++; + + while (time >= rta_bpf_get_time(bpf, index + 1)) + index++; + } + else if (time < rta_bpf_get_time(bpf, index)) + { + index--; + + while (time < rta_bpf_get_time(bpf, index)) + index--; + } + else if (rta_bpf_get_slope(bpf, index) == DBL_MAX) + { + index++; + + while (rta_bpf_get_slope(bpf, index) == DBL_MAX) + index++; + } + + bpf->index = index; + + return index; +} + + +double rta_bpf_get_interpolated (rta_bpf_t *self, double time) +{ + double duration = rta_bpf_get_duration(self); + + if (time <= rta_bpf_get_time(self, 0)) + return rta_bpf_get_value(self, 0); + else if (time >= duration) + { + int size = rta_bpf_get_size(self); + return rta_bpf_get_value(self, size - 1); + } + else + { + int index = rta_bf_get_index(self, time); + return rta_bpf_get_value(self, index) + (time - rta_bpf_get_time(self, index)) * rta_bpf_get_slope(self, index); + } +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_bpf.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_bpf.h new file mode 100644 index 0000000..19fa003 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_bpf.h @@ -0,0 +1,86 @@ +/** + * @file rta_bpf.h + * @author Norbert Schnell + * + * @brief Break-point function utilities. + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_BPF_H_ +#define _RTA_BPF_H_ + +#include "rta.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Break-point function (or time-tagged values). + * + * For the moment read only, since construction is done by binary-compatible bpf_t from FTM + */ + +/* a single bpf point */ +typedef struct rta_bpf_point +{ + double time; /**< absolute break point time */ + double value; /**< break point value */ + double slope; /**< slope to next value */ +} rta_bpf_point_t; + +/** the break-point function itself + * + * ATTENTION: must be binary-compatible with FTM struct bpfunc in ftmlib/classes/bpf.c!!! + */ +typedef struct _rta_bpf +{ + rta_bpf_point_t *points; /**< break points ... */ + int alloc; /**< alloc ... */ + int size; /**< size ... */ + int index; /**< index cache for get_interpolated method */ +} rta_bpf_t; + + +#define rta_bpf_get_size(b) ((b)->size) +#define rta_bpf_get_time(b, i) ((b)->points[i].time) +#define rta_bpf_get_value(b, i) ((b)->points[i].value) +#define rta_bpf_get_slope(b, i) ((b)->points[i].slope) +#define rta_bpf_get_duration(b) ((b)->points[(b)->size - 1].time) + +double rta_bpf_get_interpolated (rta_bpf_t *bpf, double time); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_BPF_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_complex.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_complex.h new file mode 100644 index 0000000..ca2a5b8 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_complex.h @@ -0,0 +1,299 @@ +/** + * @file rta_complex.h + * @author Jean-Philippe Lambert + * @date Mon Sep 10 11:05:09 2007 + * + * @brief rta_complex_t type warper for float, double or long double + * complex. + * + * Default is the same as RTA_REAL_TYPE. Define your RTA_COMPLEX_TYPE to + * override these. + * @see rta_configuration.h + * @see rta_real.h + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_COMPLEX_H_ +#define _RTA_COMPLEX_H_ 1 + +#include "rta.h" + +/** default complex precision is the same as real precision */ +#ifndef RTA_COMPLEX_TYPE +#define RTA_COMPLEX_TYPE RTA_REAL_TYPE +#endif + +#ifdef WIN32 + +#if (RTA_COMPLEX_TYPE == RTA_FLOAT_TYPE) +#undef rta_complex_t + +typedef struct floatcomplex_ +{ + float real; + float imag; +} floatcomplex; + +#define rta_complex_t floatcomplex +#define inline + +static inline rta_complex_t rta_make_complex(float real, float imag) +{ + rta_complex_t z = {real, imag}; + return z; +} +#endif + +#if (RTA_COMPLEX_TYPE == RTA_DOUBLE_TYPE) +#undef rta_complex_t + +typedef struct complex_ +{ + double real; + double imag; +} complex; + +#define rta_complex_t complex +static inline rta_complex_t rta_make_complex(double real, double imag) +{ + rta_complex_t z = {real, imag}; + return z; +} +#endif + +#if (RTA_COMPLEX_TYPE == RTA_LONG_DOUBLE_TYPE) +#undef rta_complex_t + +typedef struct complex_ +{ + long double real; + long double imag; +} complex; + +#define rta_complex_t complex +static inline rta_complex_t rta_make_complex(long double real, long double imag) +{ + rta_complex_t z = {real, imag}; + return z; +} +#endif + +#define creal(z) ((z).real) +#define cimag(z) ((z).imag) + +static inline rta_complex_t rta_add_complex(rta_complex_t a, rta_complex_t b) +{ + rta_complex_t z = {a.real + b.real, a.imag + b.imag}; + return z; +} + +static inline rta_complex_t rta_sub_complex(rta_complex_t a, rta_complex_t b) +{ + rta_complex_t z = {a.real - b.real, a.imag - b.imag}; + return z; +} + +static inline rta_complex_t rta_mul_complex(rta_complex_t a, rta_complex_t b) +{ + rta_complex_t z = {a.real * b.real - a.imag * b.imag, a.imag * b.real + a.real * b.imag}; + return z; +} + +static inline rta_complex_t rta_mul_complex_real(rta_complex_t a, float b) +{ + rta_complex_t z = {a.real * b, a.imag * b}; + return z; +} + +static inline rta_complex_t rta_div_complex(rta_complex_t a, rta_complex_t b) +{ + rta_complex_t z = {(a.real * b.real + a.imag * b.imag)/(b.real * b.real + b.imag * b.imag), (b.real * a.imag - a.real * b.imag) / (b.real * b.real + b.imag * b.imag)}; + return z; +} + +static inline rta_complex_t rta_conj(rta_complex_t a) +{ + rta_complex_t z = {a.real, -a.imag}; + return z; +} + +static inline void rta_set_complex_real(rta_complex_t a, float b) +{ + a.real = b; + a.imag = 0.0; +} + +#define rta_cabs cabs +#define rta_cacos cacos +#define rta_cacosh cacosh +#define rta_carg carg +#define rta_casin casin +#define rta_casinh casinh +#define rta_catan catan +#define rta_catanh catanh +#define rta_ccos ccos +#define rta_ccosh ccosh +#define rta_cexp cexp +#define rta_cimag cimag +#define rta_clog clog +#define rta_cpow cpow +#define rta_cproj cproj +#define rta_creal creal +#define rta_csin csin +#define rta_csinh csinh +#define rta_csqrt csqrt +#define rta_ctan ctan +#define rta_ctanh ctanh + +#else + +#ifndef __cplusplus +#include <complex.h> +#else +#include "/usr/include/complex.h" +#endif + +#if (RTA_COMPLEX_TYPE == RTA_FLOAT_TYPE) +#undef rta_complex_t +#define rta_complex_t float complex + +static inline rta_complex_t rta_make_complex(float real, float imag) +{ +#if (__STDC_VERSION__ > 199901L || __DARWIN_C_LEVEL >= __DARWIN_C_FULL) \ + && defined __clang__ + return CMPLX(real, imag); +#else // old gcc way of creating a complex number + return (real + imag * I); +#endif +} + +#define rta_cabs cabsf +#define rta_cacos cacosf +#define rta_cacosh cacoshf +#define rta_carg cargf +#define rta_casin casinf +#define rta_casinh casinhf +#define rta_catan catanf +#define rta_catanh catanhf +#define rta_ccos ccosf +#define rta_ccosh ccoshf +#define rta_cexp cexpf +#define rta_cimag cimagf +#define rta_clog clogf +#define rta_conj conjf +#define rta_cpow cpowf +#define rta_cproj cprojf +#define rta_creal crealf +#define rta_csin csinf +#define rta_csinh csinhf +#define rta_csqrt csqrtf +#define rta_ctan ctanf +#define rta_ctanh ctanhf + +#endif + +#if (RTA_COMPLEX_TYPE == RTA_DOUBLE_TYPE) +#undef rta_complex_t +#define rta_complex_t double complex +static inline rta_complex_t rta_make_complex(double real, double imag) +{ + return real + imag * I; +} + +#define rta_cabs cabs +#define rta_cacos cacos +#define rta_cacosh cacosh +#define rta_carg carg +#define rta_casin casin +#define rta_casinh casinh +#define rta_catan catan +#define rta_catanh catanh +#define rta_ccos ccos +#define rta_ccosh ccosh +#define rta_cexp cexp +#define rta_cimag cimag +#define rta_clog clog +#define rta_conj conj +#define rta_cpow cpow +#define rta_cproj cproj +#define rta_creal creal +#define rta_csin csin +#define rta_csinh csinh +#define rta_csqrt csqrt +#define rta_ctan ctan +#define rta_ctanh ctanh + +#endif + +#if (RTA_COMPLEX_TYPE == RTA_LONG_DOUBLE_TYPE) +#undef rta_complex_t +#define rta_complex_t long double complex +static inline rta_complex_t rta_make_complex(long double real, long double imag) +{ + return real + imag * I; +} + +#define rta_cabs cabsl +#define rta_cacos cacosl +#define rta_cacosh cacoshl +#define rta_carg cargl +#define rta_casin casinl +#define rta_casinh casinhl +#define rta_catan catanl +#define rta_catanh catanhl +#define rta_ccos ccosl +#define rta_ccosh ccoshl +#define rta_cexp cexpl +#define rta_cimag cimagl +#define rta_clog clogl +#define rta_conj conjl +#define rta_cpow cpowl +#define rta_cproj cprojl +#define rta_creal creall +#define rta_csin csinl +#define rta_csinh csinhl +#define rta_csqrt csqrtl +#define rta_ctan ctanl +#define rta_ctanh ctanhl + +#endif + +#define rta_add_complex(a, b) ((a)+(b)) +#define rta_sub_complex(a, b) ((a)-(b)) +#define rta_mul_complex(a, b) ((a)*(b)) +#define rta_div_complex(a, b) ((a)/(b)) +#define rta_mul_complex_real(a, b) ((a)*(b)) +#define rta_set_complex_real(a, b) ((a) = (b)) + +#endif /* WIN32 */ + +#endif /* _RTA_COMPLEX_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_float.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_float.h new file mode 100644 index 0000000..c9d996f --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_float.h @@ -0,0 +1,95 @@ +/** + * @file rta_float.h + * @author Jean-Philippe Lambert + * @date Mon Sep 10 11:05:09 2007 + * + * @brief rta_real_t type wrapper for <float.h> + * + * Default is RTA_REAL_FLOAT. Define your RTA_REAL_TYPE (into + * rta_configuration.h) to override these. + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_FLOAT_H_ +#define _RTA_FLOAT_H_ 1 + +#include "rta.h" + +/** @name Real type constants */ +/** @{ */ +#if (RTA_REAL_TYPE == RTA_FLOAT_TYPE) + +#define RTA_REAL_DIG FLT_DIG +#define RTA_REAL_EPSILON FLT_EPSILON +#define RTA_REAL_MANT_DIG FLT_MANT_DIG +#define RTA_REAL_MAX FLT_MAX +#define RTA_REAL_MAX_10_EXP FLT_MAX_10_EXP +#define RTA_REAL_MAX_EXP FLT_MAX_EXP +#define RTA_REAL_MIN FLT_MIN +#define RTA_REAL_MIN_10_EXP FLT_MIN_10_EXP +#define RTA_REAL_MIN_EXP FLT_MIN_EXP + +#endif /* float */ + +#if (RTA_REAL_TYPE == RTA_DOUBLE_TYPE) + +#define RTA_REAL_DIG DBL_DIG +#define RTA_REAL_EPSILON DBL_EPSILON +#define RTA_REAL_MANT_DIG DBL_MANT_DIG +#define RTA_REAL_MAX DBL_MAX +#define RTA_REAL_MAX_10_EXP DBL_MAX_10_EXP +#define RTA_REAL_MAX_EXP DBL_MAX_EXP +#define RTA_REAL_MIN DBL_MIN +#define RTA_REAL_MIN_10_EXP DBL_MIN_10_EXP +#define RTA_REAL_MIN_EXP DBL_MIN_EXP + +#endif /* double */ + +#if (RTA_REAL_TYPE == RTA_LONG_DOUBLE_TYPE) + +#define RTA_REAL_DIG LDBL_DIG +#define RTA_REAL_EPSILON LDBL_EPSILON +#define RTA_REAL_MANT_DIG LDBL_MANT_DIG +#define RTA_REAL_MAX LDBL_MAX +#define RTA_REAL_MAX_10_EXP LDBL_MAX_10_EXP +#define RTA_REAL_MAX_EXP LDBL_MAX_EXP +#define RTA_REAL_MIN LDBL_MIN +#define RTA_REAL_MIN_10_EXP LDBL_MIN_10_EXP +#define RTA_REAL_MIN_EXP LDBL_MIN_EXP + +#endif /* long double */ +/** @} */ +/* Real type constants */ + +#include <float.h> + +#endif /* _RTA_FLOAT_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_int.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_int.c new file mode 100644 index 0000000..3a033a3 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_int.c @@ -0,0 +1,80 @@ +/** + * @file rta_int.c + * @author Jean-Philippe.Lambert@ircam.fr + * @date Thu Sep 12 18:10:41 2007 + * + * @brief Integer mathematical functions + * + * @copyright + * Copyright (C) 2007 - 2009 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_int.h" + + +unsigned int +rta_ilog2(unsigned int n) +{ + unsigned int log2 = 0; + int i; + + for(i=n>>1; i; i>>=1) + { + log2++; + } + + return log2; +} + +inline int rta_imax(int m, int n) +{ + return (m > n) ? m : n; +} + +inline int rta_imin(int m, int n) +{ + return (m < n) ? m : n; +} + +unsigned int +rta_inextpow2(unsigned int n) +{ + unsigned int pow2 = 2; + int i; + + for(i=((n-1)>>1); i>0; i>>=1) + { + pow2 <<= 1; + } + + return pow2; +} + + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_int.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_int.h new file mode 100644 index 0000000..07e0ae8 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_int.h @@ -0,0 +1,94 @@ +/** + * @file rta_int.h + * @author Jean-Philippe Lambert + * @date Thu Sep 12 18:10:41 2007 + * + * @brief Integer mathematical functions + * + * @copyright + * Copyright (C) 2007 - 2009 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_INT_H_ +#define _RTA_INT_H_ 1 + +#include "rta.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef WIN32 +#define inline +#endif +/** + * Integer version of the log2 function (rounded down) + * + * @param n + * + * @return log2('n') or 0 if 'n' == 0 + */ +unsigned int rta_ilog2(unsigned int n); + +/** + * Integer version of the maximum + * + * @param m + * @param n + * + * @return the smallest integer between 'm' and 'n' + */ +extern inline int rta_imax(int m, int n); + +/** + * Integer version of the minimum + * + * @param m + * @param n + * + * @return the smallest integer between 'm' and 'n' + */ +extern inline int rta_imin(int m, int n); + + +/** + * Next (or equal) 'n' power of 2 + * + * @param n + * + * @return minimum p such as 2^p >= 'n' + */ +unsigned int rta_inextpow2(unsigned int n); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_INT_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_math.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_math.h new file mode 100644 index 0000000..6d2d36f --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_math.h @@ -0,0 +1,250 @@ +/** + * @file rta_math.h + * @author Jean-Philippe Lambert + * @date Mon Sep 10 11:05:09 2007 + * + * @brief Mathematical functions, <math.h> for rta_real_t type + * + * @copyright + * Copyright (C) 2007 - 2009 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_MATH_H_ +#define _RTA_MATH_H_ 1 + +#include "rta.h" + + +#ifdef WIN32 +/* TODO: check every windows functions against C99 */ +/* float and double functions differenciation */ + +#define rta_max(a,b) (((a)>(b))? (a) : (b)) +#define rta_min(a,b) (((a)<(b))? (a) : (b)) + +#define rta_abs fabs +#define rta_floor floor +#define rta_ceil ceil + +/* round is C99 but does not seem to exist on windows (visual studio 6) */ +#define rta_round(a)(floor((a) + 0.5)) +#define rta_lround(a)(floor((a) + 0.5)) +#define rta_llround(a)(floor((a) + 0.5)) + +#define rta_sqrt sqrt +#define rta_pow pow + +#define rta_log log +#define rta_log2 log2 +#define rta_log10 log10 +#define rta_log1p log1p + +#define rta_exp exp +#define rta_exp2 exp2 +#define rta_expm1 expm1 + +#define rta_cos cos +#define rta_sin sin + +#define rta_hypot hypot + +#else + +#if (RTA_REAL_TYPE == RTA_FLOAT_TYPE) + +#define rta_max fmaxf +#define rta_min fminf + +#define rta_abs fabsf +#define rta_floor floorf +#define rta_ceil ceilf +#define rta_round roundf +#define rta_lround lroundf +#define rta_llround llroundf + +#define rta_sqrt sqrtf +#define rta_pow powf + +#define rta_log logf +#define rta_log2 log2f +#define rta_log10 log10f +#define rta_log1p log1pf + +#define rta_exp expf +#define rta_exp2 exp2f +#define rta_expm1 expm1f + +#define rta_cos cosf +#define rta_sin sinf + +#define rta_hypot hypotf + +#endif + +#if (RTA_REAL_TYPE == RTA_DOUBLE_TYPE) + +#define rta_max fmax +#define rta_min fmin + +#define rta_abs fabs +#define rta_floor floor +#define rta_ceil ceil +#define rta_round round +#define rta_lround lround +#define rta_llround llround + +#define rta_sqrt sqrt +#define rta_pow pow + +#define rta_log log +#define rta_log2 log2 +#define rta_log10 log10 +#define rta_log1p log1p + +#define rta_exp exp +#define rta_exp2 exp2 +#define rta_expm1 expm1 + +#define rta_cos cos +#define rta_sin sin + +#define rta_hypot hypot + +#endif + +#if (RTA_REAL_TYPE == RTA_LONG_DOUBLE_TYPE) + +#define rta_max fmaxl +#define rta_min fminl + +#define rta_abs fabsl +#define rta_floor floorl +#define rta_ceil ceill +#define rta_round roundl +#define rta_lround lroundl +#define rta_llround llroundl + +#define rta_sqrt sqrtl +#define rta_pow powl + +#define rta_log logl +#define rta_log2 log2l +#define rta_log10 log10l +#define rta_log1p log1pl + +#define rta_exp expl +#define rta_exp2 exp2l +#define rta_expm1 expm1l + +#define rta_cos cosl +#define rta_sin sinl + +#define rta_hypot hypotl + +#endif + +#endif /* WIN32 */ + +#include <math.h> + +/** @name Numerical constants */ +/** @{ */ +#ifndef M_E +#define M_E 2.71828182845904523536028747135 /**< e */ +#endif + +#ifndef M_LOG2E +#define M_LOG2E 1.44269504088896340735992468100 /**< log_2 (e) */ +#endif + +#ifndef M_LOG10E +#define M_LOG10E 0.43429448190325182765112891892 /**< log_10 (e) */ +#endif + +#ifndef M_SQRT2 +#define M_SQRT2 1.41421356237309504880168872421 /**< sqrt(2) */ +#endif + +#ifndef M_SQRT1_2 +#define M_SQRT1_2 0.70710678118654752440084436210 /**< sqrt(1/2) */ +#endif + + +#ifndef M_SQRT3 +#define M_SQRT3 1.73205080756887729352744634151 /**< sqrt(3) */ +#endif + +#ifndef M_PI +#define M_PI 3.14159265358979323846264338328 /**< pi */ +#endif + +#ifndef M_PI_2 +#define M_PI_2 1.57079632679489661923132169164 /**< pi/2 */ +#endif + +#ifndef M_PI_4 +#define M_PI_4 0.78539816339744830961566084582 /**< pi/4 */ +#endif + +#ifndef M_SQRTPI +#define M_SQRTPI 1.77245385090551602729816748334 /**< sqrt(pi) */ +#endif + +#ifndef M_2_SQRTPI +#define M_2_SQRTPI 1.12837916709551257389615890312 /**< 2/sqrt(pi) */ +#endif + +#ifndef M_1_PI +#define M_1_PI 0.31830988618379067153776752675 /**< 1/pi */ +#endif + +#ifndef M_2_PI +#define M_2_PI 0.63661977236758134307553505349 /**< 2/pi */ +#endif + +#ifndef M_LN10 +#define M_LN10 2.30258509299404568401799145468 /**< ln(10) */ +#endif + +#ifndef M_LN2 +#define M_LN2 0.69314718055994530941723212146 /**< ln(2) */ +#endif + +#ifndef M_LNPI +#define M_LNPI 1.14472988584940017414342735135 /**< ln(pi) */ +#endif + +#ifndef M_EULER +#define M_EULER 0.57721566490153286060651209008 /**< Euler constant */ +#endif +/*@} */ +/* Numerical constants */ + +#endif /* _RTA_MATH_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_stdio.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_stdio.h new file mode 100644 index 0000000..646d60e --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_stdio.h @@ -0,0 +1,51 @@ +/** + * @file rta_stdio.h + * @author Diemo Schwarz + * @date 30.10.2008 + * + * @brief Default defines for the rta library + * + * Define your own to override these. + * @see rta_configuration.h + * + * @copyright + * Copyright (C) 2008 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_STDIO_H_ +#define _RTA_STDIO_H_ 1 + +/** default define for console printing */ +#ifndef rta_post +#define rta_post printf +#include <stdio.h> +#endif + +#endif /* _RTA_STDIO_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_stdlib.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_stdlib.h new file mode 100644 index 0000000..c1051dc --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_stdlib.h @@ -0,0 +1,74 @@ +/** + * @file rta_stdlib.h + * @author Jean-Philippe Lambert + * @date Mon Sep 10 11:05:09 2007 + * + * @brief Default defines for the rta library + * + * Define your own to override these. + * @see rta_configuration.h + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_STDLIB_H_ +#define _RTA_STDLIB_H_ 1 + +/** default define for memory allocation */ +#ifndef rta_malloc +#define rta_malloc malloc +#include <stdlib.h> +#endif + +/** default define for memory reallocation */ +#ifndef rta_realloc +#define rta_realloc realloc +#include <stdlib.h> +#endif + +/** default define for memory reallocation */ +#ifndef rta_zalloc +#define rta_zalloc(n) (calloc(1, (n))) +#include <stdlib.h> +#endif + +/** default define for memory deallocation */ +#ifndef rta_free +#define rta_free free +#include <stdlib.h> +#endif + +#ifndef NULL +#define NULL 0 +#endif + + +#endif /* _RTA_STDLIB_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_types.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_types.h new file mode 100644 index 0000000..148427d --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_types.h @@ -0,0 +1,71 @@ +/** + * @file rta_types.h + * @author Jean-Philippe Lambert + * @date Mon Sep 10 11:05:09 2007 + * + * @brief rta_real_t type warper for float, double or long double + * + * Default is RTA_REAL_FLOAT. Define your RTA_REAL_TYPE to override these. + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_TYPES_H_ +#define _RTA_TYPES_H_ 1 + +/** default floating point precision */ +#ifndef RTA_REAL_TYPE +#define RTA_REAL_TYPE RTA_FLOAT_TYPE +#endif + +#undef RTA_FLOAT_TYPE +#define RTA_FLOAT_TYPE 1 +#undef RTA_DOUBLE_TYPE +#define RTA_DOUBLE_TYPE 2 +#undef RTA_LONG_DOUBLE_TYPE +#define RTA_LONG_DOUBLE_TYPE 3 + +#if (RTA_REAL_TYPE == RTA_FLOAT_TYPE) +#undef rta_real_t +#define rta_real_t float +#endif + +#if (RTA_REAL_TYPE == RTA_DOUBLE_TYPE) +#undef rta_real_t +#define rta_real_t double +#endif + +#if (RTA_REAL_TYPE == RTA_LONG_DOUBLE_TYPE) +#undef rta_real_t +#define rta_real_t long double +#endif + +#endif /* _RTA_TYPES_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_util.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_util.c new file mode 100644 index 0000000..048d012 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_util.c @@ -0,0 +1,100 @@ +/** + * @file rta_util.c + * @author Diemo Schwarz + * @date 1.12.2009 + * + * @brief file with common support functions + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_util.h" +#include <stdlib.h> +#ifdef WIN32 +static long random(){return rand();} +#endif + +static int compint (const void *a, const void *b) +{ + return *(int *) a - *(int *) b; +} + +/* generate k random indices out of 0..n-1 in vector sample(k) + time complexity: O(k log k), space complexity O(k) + + todo: reimplement using permutation + hashing for O(k) complexity +*/ +void rta_choose_k_from_n (int k, int n, int *sample) +{ + int doubles = 99; + int i; + + if (k >= n) + { /* error: non-specified case */ + for (i = 0; i < k; i++) + sample[i] = i % n; + rta_post("illegal parameters for choose %d from %d!!!\n", k, n); + return; + } + + /* generate k random numbers with possible repetition */ + + for (i = 0; i < k; i++) + sample[i] = random() % n; + + while (doubles > 0) + { + /* sort and check for uniqueness */ + qsort(sample, k, sizeof(int), compint); + + for (i = 1, doubles = 0; i < k; i++) + if (sample[i - 1] == sample[i]) + { /* repetition: generate new random value */ + sample[i] = random() % n; + doubles++; + } + if (doubles > 0) + rta_post("choose %d from %d -> doubles %d\n", k, n, doubles); + } +} + + +/* return index i such that i is the highest i for which x < arr[i] + num !> 0 */ +int rta_find_int (int x, int num, int *arr) +{ + int i = 0; + + while (i < num && x >= arr[i]) + i++; + + return i; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_util.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_util.h new file mode 100644 index 0000000..4a3f938 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/common/rta_util.h @@ -0,0 +1,108 @@ +/** + * @file rta_util.h + * @author Diemo Schwarz + * @date 1.12.2009 + * + * @brief file with common support functions + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_UTIL_H_ +#define _RTA_UTIL_H_ + +#include "rta.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/** generate k random indices out of 0..n-1 in vector sample(k) */ +void rta_choose_k_from_n (int k, int n, int *sample); + + +/** return index i such that i is the highest i for which x < arr[i] + num !> 0 */ +int rta_find_int (int x, int num, int *arr); + + + +/********************************************************************************* + * + * idefix + * + */ + +#define RTA_IDEFIX_INDEX_BITS 31 +#define RTA_IDEFIX_INDEX_MAX 2147483647 /* index is signed */ + +#define RTA_IDEFIX_FRAC_BITS 32 +#define RTA_IDEFIX_FRAC_MAX ((unsigned int) 4294967295U) +#define RTA_IDEFIX_FRAC_RANGE ((double) 4294967296.0L) + +typedef struct rta_idefix +{ + int index; + unsigned int frac; +} rta_idefix_t; + +#define rta_idefix_get_index(x) ((int)(x).index) +#define rta_idefix_get_frac(x) ((double)((x).frac) / RTA_IDEFIX_FRAC_RANGE) + +#define rta_idefix_get_float(x) ((x).index + ((double)((x).frac) / RTA_IDEFIX_FRAC_RANGE)) + +#define rta_idefix_set_int(x, i) ((x)->index = (i), (x)->frac = 0) +#define rta_idefix_set_float(x, f) ((x)->index = floor(f), (x)->frac = ((double)(f) - (x)->index) * RTA_IDEFIX_FRAC_RANGE) + +#define rta_idefix_set_zero(x) ((x)->index = 0, (x)->frac = 0) +#define rta_idefix_set_max(x) ((x)->index = RTA_IDEFIX_INDEX_MAX, (x)->frac = RTA_IDEFIX_FRAC_MAX) + +#define rta_idefix_negate(x) ((x)->index = -(x)->index - ((x)->frac > 0), (x)->frac = (RTA_IDEFIX_FRAC_MAX - (x)->frac) + 1) + +#define rta_idefix_incr(x, c) ((x)->frac += (c).frac, (x)->index += ((c).index + ((x)->frac < (c).frac))) + +#define rta_idefix_add(x, a, b) ((x)->frac = (a).frac + (b).frac, (x)->index = (a).index + ((b).index + ((x)->frac < (a).frac))) +#define rta_idefix_sub(x, a, b) ((x)->index = (a).index - ((b).index + ((a).frac < (b).frac)), (x)->frac = (a).frac - (b).frac) + +#define rta_idefix_lshift(x, c, i) ((x)->index = ((c).index << (i)) + ((c).frac >> (RTA_IDEFIX_FRAC_BITS - (i))), (x)->frac = (c).frac << (i)) + +#define rta_idefix_lt(x, c) (((x).index < (c).index) || (((x).index == (c).index) && ((x).frac < (c).frac))) +#define rta_idefix_gt(x, c) (((x).index > (c).index) || (((x).index == (c).index) && ((x).frac > (c).frac))) +#define rta_idefix_eq(x, c) (((x).index == (c).index) && ((x).frac == (c).frac)) +#define rta_idefix_is_zero(x) (((x).index == 0) && ((x).frac == 0)) + + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_UTIL_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_bands.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_bands.c new file mode 100644 index 0000000..ebb60ea --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_bands.c @@ -0,0 +1,391 @@ +/** + * @file rta_bands.c + * @author Jean-Philippe.Lambert@ircam.fr + * @date Fri Jun 15 15:29:25 2007 + * + * @brief Spectrum bands integrations (HTK and Auditory Toolbox styles) + * + * Based on Rastamat by Dan Ellis. + * @see http://www.ee.columbia.edu/~dpwe/resources/matlab/rastamat + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_bands.h" +#include "rta_mel.h" +#include "rta_math.h" +#include "rta_stdlib.h" + + +int rta_spectrum_to_mel_bands_weights( + rta_real_t * weights_matrix, unsigned int * weights_bounds, + const unsigned int spectrum_size, + const rta_real_t sample_rate, const unsigned int filters_number, + const rta_real_t min_freq, const rta_real_t max_freq, + const rta_real_t scale_width, + const rta_hz_to_mel_function hz_to_mel, + const rta_mel_to_hz_function mel_to_hz, + const rta_mel_t mel_type) +{ + unsigned int i,j; /* counters */ + unsigned int min_weight_index_defined; + int ret = 0; + + /* center frequency of each FFT bin */ + rta_real_t * fft_freq = (rta_real_t*) rta_malloc( + sizeof(rta_real_t) * spectrum_size); + + const rta_real_t min_mel = (*hz_to_mel)(min_freq); + const rta_real_t max_mel = (*hz_to_mel)(max_freq); + +/* Center frequencies of mel bands - uniformly spaced between limits */ + rta_real_t * filter_freq = (rta_real_t*) rta_malloc(sizeof(rta_real_t) * (filters_number + 2)); + +/* scaled filter frequencies according to <scale_width> */ + rta_real_t * scaled_filter_freq = (rta_real_t*) rta_malloc(sizeof(rta_real_t) * (filters_number + 2)); + + if(fft_freq != NULL && filter_freq != NULL && scaled_filter_freq != NULL) + { + const rta_real_t fft_size = 2. * (spectrum_size - 1.); + for(j=0; j<spectrum_size; j++) + { + fft_freq[j] = sample_rate * j / fft_size; + } + + /* There is 2 more filters as the actual number, so as to calculate */ + /* the slopes */ + for(i=0; i<filters_number + 2; i++) + { + filter_freq[i] = (*mel_to_hz)(min_mel + i / (filters_number + 1.) * + (max_mel - min_mel)); + } + + for(i=0; i<filters_number + 1; i++) + { + scaled_filter_freq[i] = filter_freq[i+1] + + scale_width * (filter_freq[i] - filter_freq[i+1]); + } + scaled_filter_freq[i] = filter_freq[i]; + + for(i=0; i<filters_number; i++) + { + min_weight_index_defined = 0; + /* Do not process the last spectrum component as it will be zeroed */ + /* later to avoid aliasing */ + for(j=0; j<spectrum_size-1; j++) + { + /* Lower slope and upper slope, intersect with each other and zero */ + weights_matrix[i*spectrum_size+j] = + rta_max(0., rta_min( + (fft_freq[j] - scaled_filter_freq[i]) / + (scaled_filter_freq[i+1] - scaled_filter_freq[i]), + (scaled_filter_freq[i+2] - fft_freq[j]) / + (scaled_filter_freq[i+2] - scaled_filter_freq[i+1]) + ) + ); + + /* Define the bounds so as to use an index <i> of the form */ + /* for(j=weights_bounds[i*2+0]; j<weights_bounds[i*2+1]; j++)) */ + /* lower bound included, upper bound excluded */ + if(weights_matrix[i*spectrum_size+j] > 0.) + { + if(min_weight_index_defined == 0) + { + min_weight_index_defined = 1; + weights_bounds[i*2] = j; + } + weights_bounds[i*2+1] = j+1; + } + } + /* empty filter */ + if(min_weight_index_defined == 0) + { + weights_bounds[i*2] = weights_bounds[i*2+1] = 0; + } + } + + /* Slaney-style mel is scaled to be approx constant E per channel */ + if(mel_type == rta_mel_slaney) + { + for(i=0; i<filters_number; i++) + { + /* process only non null values */ + for(j=weights_bounds[i*2]; j<weights_bounds[i*2+1]; j++) + { + weights_matrix[i*spectrum_size+j] *= 2. / (filter_freq[i+2] - filter_freq[i]); + } + } + } + + /* Make sure that 2nd half of FFT is zero */ + /* (We process only the middle, not the upper part) */ + /* Seems like a good idea to avoid aliasing */ + j = spectrum_size-1; + for(i=0; i<filters_number; i++) + { + weights_matrix[i*spectrum_size+j] = 0.; + } + ret = 1; + } + + if(fft_freq != NULL) + { + rta_free(fft_freq); + } + + if(filter_freq != NULL) + { + rta_free(filter_freq); + } + + if(scaled_filter_freq != NULL) + { + rta_free(scaled_filter_freq); + } + + return ret; +} + +int rta_spectrum_to_mel_bands_weights_stride( + rta_real_t * weights_matrix, const int wm_stride, + unsigned int * weights_bounds, const int wb_stride, + const unsigned int spectrum_size, + const rta_real_t sample_rate, const unsigned int filters_number, + const rta_real_t min_freq, const rta_real_t max_freq, const rta_real_t scale_width, + const rta_hz_to_mel_function hz_to_mel, + const rta_mel_to_hz_function mel_to_hz, + const rta_mel_t mel_type) +{ + unsigned int i,j; /* counters */ + unsigned int min_weight_index_defined; + int ret = 0; + +/* center frequency of each FFT bin */ + rta_real_t * fft_freq = (rta_real_t*) rta_malloc(sizeof(rta_real_t) * spectrum_size); + + const rta_real_t min_mel = (*hz_to_mel)(min_freq); + const rta_real_t max_mel = (*hz_to_mel)(max_freq); + +/* Center frequencies of mel bands - uniformly spaced between limits */ + rta_real_t * filter_freq = (rta_real_t*) rta_malloc(sizeof(rta_real_t) * (filters_number + 2)); + +/* scaled filter frequencies according to <scale_width> */ + rta_real_t * scaled_filter_freq = (rta_real_t*) rta_malloc(sizeof(rta_real_t) * (filters_number + 2)); + + if(fft_freq != NULL && filter_freq != NULL && scaled_filter_freq != NULL) + { + const rta_real_t fft_size = 2. * (spectrum_size - 1.); + for(j=0; j<spectrum_size; j++) + { + fft_freq[j] = sample_rate * j / fft_size; + } + + /* There is 2 more filters as the actual number, so as to calculate */ + /* the slopes */ + for(i=0; i<filters_number + 2; i++) + { + filter_freq[i] = (*mel_to_hz)(min_mel + i / (filters_number + 1.) * + (max_mel - min_mel)); + } + + for(i=0; i<filters_number + 2; i++) //FIXME: shouldn't be filters_number + 1, since i+1 is used in body? + { + scaled_filter_freq[i] = filter_freq[i+1] + + scale_width * (filter_freq[i] - filter_freq[i+1]); + } + + for(i=0; i<filters_number; i++) + { + min_weight_index_defined = 0; + /* Do not process the last spectrum component as it will be zeroed */ + /* later to avoid aliasing */ + for(j=0; j<spectrum_size-1; j++) + { + /* Lower slope and upper slope, intersect with each other and zero */ + weights_matrix[(i*spectrum_size+j)*wm_stride] = + rta_max(0., rta_min( + (fft_freq[j] - scaled_filter_freq[i]) / + (scaled_filter_freq[i+1] - scaled_filter_freq[i]), + (scaled_filter_freq[i+2] - fft_freq[j]) / + (scaled_filter_freq[i+2] - scaled_filter_freq[i+1]) + ) + ); + + /* Define the bounds so as to use an index <i> of the form */ + /* for(j=weights_bounds[i*2+0]; j<weights_bounds[i*2+1]; j++)) */ + /* lower bound included, upper bound excluded */ + if(weights_matrix[(i*spectrum_size+j)*wm_stride] > 0.) + { + if(min_weight_index_defined == 0) + { + min_weight_index_defined = 1; + weights_bounds[i*2*wb_stride] = j; + } + weights_bounds[(i*2+1)*wb_stride] = j+1; + } + } + /* empty filter */ + if(min_weight_index_defined == 0) + { + weights_bounds[i*2*wb_stride] = weights_bounds[(i*2+1)*wb_stride] = 0; + } + } + + /* Slaney-style mel is scaled to be approx constant E per channel */ + if(mel_type == rta_mel_slaney) + { + for(i=0; i<filters_number; i++) + { + /* process only non null values */ + for(j=weights_bounds[i*2]; j<weights_bounds[i*2+1]; j++) + { + weights_matrix[(i*spectrum_size+j)*wm_stride] *= + 2. / (filter_freq[i+2] - filter_freq[i]); + } + } + } + /* Make sure that 2nd half of FFT is zero */ + /* (We process only the middle, not the upper part) */ + /* Seems like a good idea to avoid aliasing */ + j = spectrum_size-1; + for(i=0; i<filters_number; i++) + { + weights_matrix[(i*spectrum_size+j)*wm_stride] = 0.; + } + ret = 1; + } + + if(fft_freq != NULL) + { + rta_free(fft_freq); + } + + if(filter_freq != NULL) + { + rta_free(filter_freq); + } + + if(scaled_filter_freq != NULL) + { + rta_free(scaled_filter_freq); + } + + return ret; +} + + +/* Integrate FFT bins into bands, in abs domain */ +void rta_spectrum_to_bands_abs( + rta_real_t * bands, const rta_real_t * spectrum, + const rta_real_t * weights_matrix, const unsigned int * weights_bounds, + const unsigned int spectrum_size, const unsigned int filters_number) +{ + unsigned int i,j; + + for(i=0; i<filters_number; i++) + { + bands[i] = 0.; + for(j=weights_bounds[i*2]; j<weights_bounds[i*2+1]; j++) + { + bands[i] += weights_matrix[i*spectrum_size+j] * spectrum[j]; + } + } + + return; +} + +/* Integrate FFT bins into bands, in abs domain */ +void rta_spectrum_to_bands_abs_stride( + rta_real_t * bands, const int b_stride, + const rta_real_t * spectrum, const int s_stride, + const rta_real_t * weights_matrix, const int wm_stride, + const unsigned int * weights_bounds, const int wb_stride, + const unsigned int spectrum_size, const unsigned int filters_number) +{ + unsigned int i,j; + + for(i=0; i<filters_number; i++) + { + bands[i*b_stride] = 0.; + for(j=weights_bounds[i*2*wb_stride]; j<weights_bounds[(i*2+1)*wb_stride]; j++) + { + bands[i*b_stride] += + weights_matrix[(i*spectrum_size+j)*wm_stride] * spectrum[j*s_stride]; + } + } + + return; +} + +/* Integrate FFT bins into bands, in abs^2 domain */ +void rta_spectrum_to_bands_square_abs( + rta_real_t * bands, const rta_real_t * spectrum, + const rta_real_t * weights_matrix, const unsigned int * weights_bounds, + const unsigned int spectrum_size, const unsigned int filters_number) +{ + unsigned int i,j; + + for(i=0; i<filters_number; i++) + { + bands[i] = 0.; + for(j=weights_bounds[i*2]; j<weights_bounds[i*2+1]; j++) + { + bands[i] += weights_matrix[i*spectrum_size+j] * rta_sqrt(spectrum[j]); + } + bands[i] = rta_pow(bands[i], 2); + } + + return; +} + +/* Integrate FFT bins into bands, in abs^2 domain */ +void rta_spectrum_to_bands_square_abs_stride( + rta_real_t * bands, const int b_stride, + const rta_real_t * spectrum, const int s_stride, + const rta_real_t * weights_matrix, const int wm_stride, + const unsigned int * weights_bounds, const int wb_stride, + const unsigned int spectrum_size, const unsigned int filters_number) +{ + unsigned int i,j; + + for(i=0; i<filters_number; i++) + { + bands[i*b_stride] = 0.; + for(j=weights_bounds[i*2*wb_stride]; j<weights_bounds[(i*2+1)*wb_stride]; j++) + { + bands[i*b_stride] += weights_matrix[(i*spectrum_size+j)*wm_stride] * + rta_sqrt(spectrum[j*s_stride]); + } + bands[i*b_stride] = rta_pow(bands[i*b_stride], 2); + } + + return; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_bands.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_bands.h new file mode 100644 index 0000000..6d5095a --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_bands.h @@ -0,0 +1,276 @@ +/** + * @file rta_bands.h + * @author Jean-Philippe.Lambert@ircam.fr + * @date Fri Jun 15 15:29:25 2007 + * + * @brief Spectrum bands integrations (HTK and Auditory Toolbox styles) + * + * Based on Rastamat by Dan Ellis. + * @see http://www.ee.columbia.edu/~dpwe/resources/matlab/rastamat + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_BANDS_H_ +#define _RTA_BANDS_H_ 1 + +#include "rta.h" +#include "rta_mel.h" /**< mel types and functions for mel bands */ + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum +{ + rta_bands_sum = 0, /**< simple sum between specified bins */ + rta_bands_bark = 1, + rta_bands_mel = 2, + rta_bands_htk_mel = 3, + rta_bands_feacalc_mel = 4 +} rta_bands_t; + +/** Integrate FFT bins into Mel bins, in abs or abs^2 domains */ +typedef enum +{ + rta_bands_abs_integration = 0, /**< sumpower = 0 (cf. Dan Ellis) */ + rta_bands_square_abs_integration = 1 +} rta_integration_t; + + +/* from fft2melmx.m */ + +/** + * Generate a matrix of weights 'weights_matrix' to combine a power + * spectrum into mel bands. + * As this matrix is rather sparse, generate also a bounds matrix + * 'weights_bounds', to avoid further null multiplications. + * + * You can exactly duplicate the mel matrix in Slaney's mfcc.m as + * ret = rta_spectrum_to_mel_bands_weights(weights_matrix, weights_bounds, + * 512, 8000., 40, 133., 6855.5, 1., + * rta_hz_to_mel_slaney, rta_mel_to_hz_slaney, rta_slaney_mel); + * + * Temporary memory allocation (and deallocation) is done inside this function. + * \see rta_stdlib.h + * + * @param weights_matrix size is 'filters_number'*'spectrum_size' + * @param weights_bounds size is 'filters_number'*2. + * Define the bounds for each filter 'f' so as to use an index 'i' of the form + * for(i=weights_bounds[f*2+0]; i<weights_bounds[f*2+1]; i++) + * lower bound included, upper bound excluded + * @param spectrum_size points number of the power spectrum (which is + * the complex square module of the FFT, so 'spectrum_size' is ('fft_size'/2.)+1.) + * @param sample_rate of the signal corresponding to the power spectrum + * @param filters_number number of output mel bands + * @param min_freq in Hz. + * default is 0, but 133.33 is a common standard (to skip LF). + * @param max_freq in Hertz + * @param scale_width frequencies are scale by this factor (generally + * 1., which means no scale) + * @param hz_to_mel function used for conversion + * @param mel_to_hz function used for conversion (inverse of hz_to_mel) + * @param mel_type slaney_mel is scaled to be approx constant E per + * channel, not HTK. Integration windows peak at 1 for HTK, not sum to + * 1 (as for Slaney) + * + * @return 1 on success 0 on fail + */ +int rta_spectrum_to_mel_bands_weights( + rta_real_t * weights_matrix, unsigned int * weights_bounds, + const unsigned int spectrum_size, + const rta_real_t sample_rate, const unsigned int filters_number, + const rta_real_t min_freq, const rta_real_t max_freq, const rta_real_t scale_width, + const rta_hz_to_mel_function hz_to_mel, + const rta_mel_to_hz_function mel_to_hz, + const rta_mel_t mel_type); + +/** + * Generate a matrix of weights 'weights_matrix' to combine a power + * spectrum into mel bands. + * As this matrix is rather sparse, generate also a bounds matrix + * 'weights_bounds', to avoid further null multiplications. + * + * You can exactly duplicate the mel matrix in Slaney's mfcc.m as + * ret = rta_spectrum_to_mel_bands_weights(weights_matrix, weights_bounds, + * 512, 8000., 40, 133., 6855.5, 1., + * rta_hz_to_mel_slaney, rta_mel_to_hz_slaney, rta_slaney_mel); + * + * Temporary memory allocation (and deallocation) is done inside this function. + * \see rta_memory.h + * + * @param weights_matrix size is 'filters_number'*'spectrum_size' + * @param wm_stride is 'weights_matrix' stride + * @param weights_bounds size is 'filters_number'*2. + * Define the bounds for each filter 'f' so as to use an index 'i' of the form + * for(i=weights_bounds[f*2+0]; i<weights_bounds[f*2+1]; i++) + * lower bound included, upper bound excluded + * @param wb_stride is 'weights_bounds' stride + * @param spectrum_size points number of the power spectrum (which is + * the complex square module of the FFT, so 'spectrum_size' is ('fft_size'/2.)+1.) + * @param sample_rate of the signal corresponding to the power spectrum + * @param filters_number number of output mel bands + * @param min_freq in Hertz. + * default is 0, but 133.33 is a common standard (to skip LF). + * @param max_freq in Hertz + * @param scale_width frequencies are scale by this factor (generally + * 1., which means no scale) + * @param hz_to_mel function used for conversion + * @param mel_to_hz function used for conversion (inverse of hz_to_mel) + * @param mel_type slaney_mel is scaled to be approx constant E per + * channel, not HTK. Integration windows peak at 1 for HTK, not sum to + * 1 (as for Slaney) + * + * @return 1 on success 0 on fail + */ +int rta_spectrum_to_mel_bands_weights_stride( + rta_real_t * weights_matrix, const int wm_stride, + unsigned int * weights_bounds, const int wb_stride, + const unsigned int spectrum_size, + const rta_real_t sample_rate, const unsigned int filters_number, + const rta_real_t min_freq, const rta_real_t max_freq, const rta_real_t scale_width, + const rta_hz_to_mel_function hz_to_mel, + const rta_mel_to_hz_function mel_to_hz, + const rta_mel_t mel_type); + +/*from audspec.m */ + +/** + * function pointer to avoid tests during bands integration + * \see rta_spectrum_to_bands_abs + * \see rta_spectrum_to_bands_square_abs + */ +typedef void (*rta_spectrum_to_bands_function) +(rta_real_t *, const rta_real_t *, const rta_real_t *, + const unsigned int *, const unsigned int, const unsigned int); + +/** + * function pointer to avoid tests during bands integration + * \see rta_spectrum_to_bands_abs_stride + * \see rta_spectrum_to_bands_square_abs_stride + */ +typedef void (*rta_spectrum_to_bands_stride_function) +(rta_real_t *, const int, const rta_real_t *, const int, const rta_real_t *, const int, + const unsigned int *, const int, + const unsigned int, const unsigned int); + + +/** + * Integrate amplitude spectrum into bands, in abs domain + * 'bands' = 'weights_matrix'*'spectrum' + * + * @param bands size is 'filters_number' + * @param spectrum size is 'spectrum_size' + * @param weights_matrix size is 'filters_number'*'spectrum_size' + * @param weights_bounds size is 'filters_number'*2. + * @param spectrum_size points number of the power spectrum (which is + * the complex square module of the FFT, so 'spectrum_size' is ('fft_size'/2.)+1.) + * @param filters_number number of output bands + * + */ +void rta_spectrum_to_bands_abs( + rta_real_t * bands, const rta_real_t * spectrum, + const rta_real_t * weights_matrix, const unsigned int * weights_bounds, + const unsigned int spectrum_size, const unsigned int filters_number); + +/** + * Integrate amplitude spectrum into bands, in abs domain + * 'bands' = 'weights_matrix'*'spectrum' + * + * @param bands size is 'filters_number' + * @param b_stride is 'bands' stride + * @param spectrum size is 'spectrum_size' + * @param s_stride is 'spectrum' stride + * @param weights_matrix size is 'filters_number'*'spectrum_size' + * @param wm_stride is 'weights_matrix' stride + * @param weights_bounds size is 'filters_number'*2. + * @param wb_stride is 'weights_bounds' stride + * @param spectrum_size points number of the power spectrum (which is + * the complex square module of the FFT, so 'spectrum_size' is ('fft_size'/2.)+1.) + * @param filters_number number of output bands + * + */ +void rta_spectrum_to_bands_abs_stride( + rta_real_t * bands, const int b_stride, + const rta_real_t * spectrum, const int s_stride, + const rta_real_t * weights_matrix, const int wm_stride, + const unsigned int * weights_bounds, const int wb_stride, + const unsigned int spectrum_size, const unsigned int filters_number); + +/** + * Integrate power spectrum into bands, in abs^2 domain + * 'bands' = ('weights_matrix'*sqrt('spectrum')).^2 + * + * @param bands size is 'filters_number' + * @param spectrum size is 'spectrum_size' + * @param weights_matrix size is 'filters_number'*'spectrum_size' + * @param weights_bounds size is 'filters_number'*2. + * @param spectrum_size points number of the power spectrum (which is + * the complex square module of the FFT, so 'spectrum_size' is ('fft_size'/2.)+1.) + * @param filters_number number of output bands + * + */ +void rta_spectrum_to_bands_square_abs( + rta_real_t * bands, const rta_real_t * spectrum, + const rta_real_t * weights_matrix, const unsigned int * weights_bounds, + const unsigned int spectrum_size, const unsigned int filters_number); + +/** + * Integrate power spectrum into bands, in abs^2 domain + * 'bands' = ('weights_matrix'*sqrt('spectrum')).^2 + * + * @param bands size is 'filters_number' + * @param b_stride is 'bands' stride + * @param spectrum size is 'spectrum_size' + * @param s_stride is 'spectrum' stride + * @param weights_matrix size is 'filters_number'*'spectrum_size' + * @param wm_stride is 'weights_matrix' stride + * @param weights_bounds size is 'filters_number'*2. + * @param wb_stride is 'weights_bounds' stride + * @param spectrum_size points number of the power spectrum (which is + * the complex square module of the FFT, so 'spectrum_size' is ('fft_size'/2.)+1.) + * @param filters_number number of output bands + * + */ +void rta_spectrum_to_bands_square_abs_stride( + rta_real_t * bands, const int b_stride, + const rta_real_t * spectrum, const int s_stride, + const rta_real_t * weights_matrix, const int wm_stride, + const unsigned int * weights_bounds, const int wb_stride, + const unsigned int spectrum_size, const unsigned int filters_number); + + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_BANDS_H_ */ + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_biquad.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_biquad.c new file mode 100644 index 0000000..0cc7525 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_biquad.c @@ -0,0 +1,768 @@ +/** + * @file rta_biquad.c + * @author Jean-Philippe.Lambert@ircam.fr + * @date Fri Aug 29 12:38:46 2008 + * + * @brief Biquad filter and coefficients calculation + * + * Based on the "Cookbook formulae for audio EQ biquad filter + * coefficients" by Robert Bristow-Johnson + * + * @copyright + * Copyright (C) 2008 - 2009 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_biquad.h" +#include "rta_filter.h" /* filter types */ +#include "rta_math.h" /* rta_sin, rta_cos, M_PI */ + +/* y(n) = b0 x(n) + b1 x(n-1) + b2 x(n-2) */ +/* - a1 x(n-1) - a2 x(n-2) */ + +/* note that MaxMSP biquad~ swaps the names for a and b */ + +/* f0 is normalised by the nyquist frequency */ +/* q must be > 0. */ +/* gain must be > 0. and is linear */ + +/* when there is no gain parameter, one can simply multiply the b + * coefficients by a (linear) gain */ + +/* a0 is always 1. as each coefficient is normalised by a0, including a0 */ + +/* a1 is a[0] and a2 is a[1] */ + + +/* LPF: H(s) = 1 / (s^2 + s/Q + 1) */ +void rta_biquad_lowpass_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, const rta_real_t q) +{ + const rta_real_t w0 = M_PI * f0; + const rta_real_t alpha = rta_sin(w0) / (2. * q); + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / (1. + alpha); + + a[0] = (-2. * c) * a0_inv; + a[1] = (1. - alpha) * a0_inv; + + b[0] = ((1. - c) * 0.5) * a0_inv; + b[1] = (1. - c) * a0_inv; + b[2] = b[0]; + + return; +} + +/* LPF: H(s) = 1 / (s^2 + s/Q + 1) */ +void rta_biquad_lowpass_coefs_stride(rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, const rta_real_t q) +{ + const rta_real_t w0 = M_PI * f0; + const rta_real_t alpha = rta_sin(w0) / (2. * q); + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / (1. + alpha); + + a[0] = (-2. * c) * a0_inv; + a[a_stride] = (1. - alpha) * a0_inv; + + b[0] = ((1. - c) * 0.5) * a0_inv; + b[b_stride] = (1. - c) * a0_inv; + b[2*b_stride] = b[0]; + + return; +} + +/* HPF: H(s) = s^2 / (s^2 + s/Q + 1) */ +void rta_biquad_highpass_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, const rta_real_t q) +{ + const rta_real_t w0 = M_PI * f0; + const rta_real_t alpha = rta_sin(w0) / (2. * q); + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / (1. + alpha); + + a[0] = (-2. * c) * a0_inv; + a[1] = (1. - alpha) * a0_inv; + + b[0] = ((1. + c) * 0.5) * a0_inv; + b[1] = (-1. - c) * a0_inv; + b[2] = b[0]; + + return; +} + +/* HPF: H(s) = s^2 / (s^2 + s/Q + 1) */ +void rta_biquad_highpass_coefs_stride(rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, const rta_real_t q) +{ + const rta_real_t w0 = M_PI * f0; + const rta_real_t alpha = rta_sin(w0) / (2. * q); + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / (1. + alpha); + + a[0] = (-2. * c) * a0_inv; + a[a_stride] = (1. - alpha) * a0_inv; + + b[0] = ((1. + c) * 0.5) * a0_inv; + b[b_stride] = (-1. - c) * a0_inv; + b[2*b_stride] = b[0]; + + return; +} + +/* BPF: H(s) = s / (s^2 + s/Q + 1) (constant skirt gain, peak gain = Q) */ +void rta_biquad_bandpass_constant_skirt_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, + const rta_real_t q) +{ + const rta_real_t w0 = M_PI * f0; + const rta_real_t s = rta_sin(w0); + const rta_real_t alpha = s / (2. * q); + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / (1. + alpha); + + a[0] = (-2. * c) * a0_inv; + a[1] = (1. - alpha) * a0_inv; + + b[0] = (s * 0.5) * a0_inv; + b[1] = 0.; + b[2] = -b[0]; + + return; +} + +/* BPF: H(s) = s / (s^2 + s/Q + 1) (constant skirt gain, peak gain = Q) */ +void rta_biquad_bandpass_constant_skirt_coefs_stride( + rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, + const rta_real_t q) +{ + const rta_real_t w0 = M_PI * f0; + const rta_real_t s = rta_sin(w0); + const rta_real_t alpha = s / (2. * q); + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / (1. + alpha); + + a[0] = (-2. * c) * a0_inv; + a[a_stride] = (1. - alpha) * a0_inv; + + b[0] = (s * 0.5) * a0_inv; + b[b_stride] = 0.; + b[2*b_stride] = -b[0]; + + return; +} + +/* BPF: H(s) = (s/Q) / (s^2 + s/Q + 1) (constant 0 dB peak gain) */ +void rta_biquad_bandpass_constant_peak_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, + const rta_real_t q) +{ + const rta_real_t w0 = M_PI * f0; + const rta_real_t alpha = rta_sin(w0) / (2. * q); + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / (1. + alpha); + + a[0] = (-2. * c) * a0_inv; + a[1] = (1. - alpha) * a0_inv; + + b[0] = alpha * a0_inv; + b[1] = 0.; + b[2] = -b[0]; + + return; +} + +/* BPF: H(s) = (s/Q) / (s^2 + s/Q + 1) (constant 0 dB peak gain) */ +void rta_biquad_bandpass_constant_peak_coefs_stride( + rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, + const rta_real_t q) +{ + const rta_real_t w0 = M_PI * f0; + const rta_real_t alpha = rta_sin(w0) / (2. * q); + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / (1. + alpha); + + a[0] = (-2. * c) * a0_inv; + a[a_stride] = (1. - alpha) * a0_inv; + + b[0] = alpha * a0_inv; + b[b_stride] = 0.; + b[2*b_stride] = -b[0]; + + return; +} + +/* notch: H(s) = (s^2 + 1) / (s^2 + s/Q + 1) */ +void rta_biquad_notch_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, const rta_real_t q) +{ + const rta_real_t w0 = M_PI * f0; + const rta_real_t alpha = rta_sin(w0) / (2. * q); + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / (1. + alpha); + + a[0] = (-2. * c) * a0_inv; + a[1] = (1. - alpha) * a0_inv; + + b[0] = a0_inv; + b[1] = a[0]; + b[2] = b[0]; + + return; +} + +/* notch: H(s) = (s^2 + 1) / (s^2 + s/Q + 1) */ +void rta_biquad_notch_coefs_stride(rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, const rta_real_t q) +{ + const rta_real_t w0 = M_PI * f0; + const rta_real_t alpha = rta_sin(w0) / (2. * q); + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / (1. + alpha); + + a[0] = (-2. * c) * a0_inv; + a[a_stride] = (1. - alpha) * a0_inv; + + b[0] = a0_inv; + b[b_stride] = a[0]; + b[2*b_stride] = b[0]; + + return; +} + +/* APF: H(s) = (s^2 - s/Q + 1) / (s^2 + s/Q + 1) */ +void rta_biquad_allpass_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, const rta_real_t q) +{ + const rta_real_t w0 = M_PI * f0; + const rta_real_t alpha = rta_sin(w0) / (2. * q); + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / (1. + alpha); + + a[0] = (-2. * c) * a0_inv; + a[1] = (1. - alpha) * a0_inv; + + b[0] = a[1]; + b[1] = a[0]; + b[2] = 1.; + + return; +} + +/* APF: H(s) = (s^2 - s/Q + 1) / (s^2 + s/Q + 1) */ +void rta_biquad_allpass_coefs_stride(rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, const rta_real_t q) +{ + const rta_real_t w0 = M_PI * f0; + const rta_real_t alpha = rta_sin(w0) / (2. * q); + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / (1. + alpha); + + a[0] = (-2. * c) * a0_inv; + a[a_stride] = (1. - alpha) * a0_inv; + + b[0] = a[a_stride]; + b[b_stride] = a[0]; + b[2*b_stride] = 1.; + + return; +} + +/* peakingEQ: H(s) = (s^2 + s*(A/Q) + 1) / (s^2 + s/(A*Q) + 1) */ +/* A = sqrt( 10^(dBgain/20) ) = 10^(dBgain/40) */ +/* gain is linear here */ +void rta_biquad_peaking_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, const rta_real_t q, + const rta_real_t gain) +{ + const rta_real_t g = rta_sqrt(gain); + const rta_real_t g_inv = 1. / g; + + const rta_real_t w0 = M_PI * f0; + const rta_real_t alpha = rta_sin(w0) / (2. * q); + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / (1. + alpha * g_inv); + + a[0] = (-2. * c) * a0_inv; + a[1] = (1. - alpha * g_inv) * a0_inv; + + b[0] = (1. + alpha * g) * a0_inv; + b[1] = a[0]; + b[2] = (1. - alpha * g) * a0_inv; + + return; +} + +/* peakingEQ: H(s) = (s^2 + s*(A/Q) + 1) / (s^2 + s/(A*Q) + 1) */ +/* A = sqrt( 10^(dBgain/20) ) = 10^(dBgain/40) */ +/* gain is linear here */ +void rta_biquad_peaking_coefs_stride(rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, const rta_real_t q, + const rta_real_t gain) +{ + const rta_real_t g = rta_sqrt(gain); + const rta_real_t g_inv = 1. / g; + + const rta_real_t w0 = M_PI * f0; + const rta_real_t alpha = rta_sin(w0) / (2. * q); + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / (1. + alpha * g_inv); + + a[0] = (-2. * c) * a0_inv; + a[a_stride] = (1. - alpha * g_inv) * a0_inv; + + b[0] = (1. + alpha * g) * a0_inv; + b[b_stride] = a[0]; + b[2*b_stride] = (1. - alpha * g) * a0_inv; + + return; +} + +/* lowShelf: H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1) */ +/* A = sqrt( 10^(dBgain/20) ) = 10^(dBgain/40) */ +/* gain is linear here */ +void rta_biquad_lowshelf_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, const rta_real_t q, + const rta_real_t gain) +{ + const rta_real_t g = rta_sqrt(gain); + + const rta_real_t w0 = M_PI * f0; + const rta_real_t alpha_2_sqrtg = rta_sin(w0) * rta_sqrt(g) / q ; + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / + ( (g+1.) + (g-1.) * c + alpha_2_sqrtg); + + a[0] = (-2. * ( (g-1.) + (g+1.) * c ) ) * a0_inv; + a[1] = ( (g+1.) + (g-1.) * c - alpha_2_sqrtg ) * a0_inv; + + b[0] = ( g * ( (g+1.) - (g-1.) * c + alpha_2_sqrtg) ) * a0_inv; + b[1] = ( 2. * g * ( (g-1.) - (g+1.) * c ) ) * a0_inv; + b[2] = ( g * ( (g+1.) - (g-1.) * c - alpha_2_sqrtg) ) * a0_inv; + + return; +} + +/* lowShelf: H(s) = A * (s^2 + (sqrt(A)/Q)*s + A)/(A*s^2 + (sqrt(A)/Q)*s + 1) */ +/* A = sqrt( 10^(dBgain/20) ) = 10^(dBgain/40) */ +/* gain is linear here */ +void rta_biquad_lowshelf_coefs_stride(rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, const rta_real_t q, + const rta_real_t gain) +{ + const rta_real_t g = rta_sqrt(gain); + + const rta_real_t w0 = M_PI * f0; + const rta_real_t alpha_2_sqrtg = rta_sin(w0) * rta_sqrt(g) / q ; + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / + ( (g+1.) + (g-1.) * c + alpha_2_sqrtg); + + a[0] = (-2. * ( (g-1.) + (g+1.) * c ) ) * a0_inv; + a[a_stride] = ( (g+1.) + (g-1.) * c - alpha_2_sqrtg ) * a0_inv; + + b[0] = ( g * ( (g+1.) - (g-1.) * c + alpha_2_sqrtg) ) * a0_inv; + b[b_stride] = ( 2. * g * ( (g-1.) - (g+1.) * c ) ) * a0_inv; + b[2*b_stride] = ( g * ( (g+1.) - (g-1.) * c - alpha_2_sqrtg) ) * a0_inv; + + return; +} + +/* highShelf: H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A) */ +/* A = sqrt( 10^(dBgain/20) ) = 10^(dBgain/40) */ +/* gain is linear here */ +void rta_biquad_highshelf_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, const rta_real_t q, + const rta_real_t gain) +{ + const rta_real_t g = rta_sqrt(gain); + + const rta_real_t w0 = M_PI * f0; + const rta_real_t alpha_2_sqrtg = rta_sin(w0) * rta_sqrt(g) / q ; + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / + ( (g+1.) - (g-1.) * c + alpha_2_sqrtg); + + a[0] = ( 2. * ( (g-1.) - (g+1.) * c ) ) * a0_inv; + a[1] = ( (g+1.) - (g-1.) * c - alpha_2_sqrtg ) * a0_inv; + + b[0] = ( g * ( (g+1.) + (g-1.) * c + alpha_2_sqrtg) ) * a0_inv; + b[1] = (-2. * g * ( (g-1.) + (g+1.) * c ) ) * a0_inv; + b[2] = ( g * ( (g+1.) + (g-1.) * c - alpha_2_sqrtg) ) * a0_inv; + + return; +} + +/* highShelf: H(s) = A * (A*s^2 + (sqrt(A)/Q)*s + 1)/(s^2 + (sqrt(A)/Q)*s + A) */ +/* A = sqrt( 10^(dBgain/20) ) = 10^(dBgain/40) */ +/* gain is linear here */ +void rta_biquad_highshelf_coefs_stride( + rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, const rta_real_t q, + const rta_real_t gain) +{ + const rta_real_t g = rta_sqrt(gain); + + const rta_real_t w0 = M_PI * f0; + const rta_real_t alpha_2_sqrtg = rta_sin(w0) * rta_sqrt(g) / q ; + const rta_real_t c = rta_cos(w0); + + const rta_real_t a0_inv = 1. / + ( (g+1.) - (g-1.) * c + alpha_2_sqrtg); + + a[0] = ( 2. * ( (g-1.) - (g+1.) * c ) ) * a0_inv; + a[a_stride] = ( (g+1.) - (g-1.) * c - alpha_2_sqrtg ) * a0_inv; + + b[0] = ( g * ( (g+1.) + (g-1.) * c + alpha_2_sqrtg) ) * a0_inv; + b[b_stride] = (-2. * g * ( (g-1.) + (g+1.) * c ) ) * a0_inv; + b[2*b_stride] = ( g * ( (g+1.) + (g-1.) * c - alpha_2_sqrtg) ) * a0_inv; + + return; +} + +/* helper */ +void rta_biquad_coefs(rta_real_t * b, rta_real_t * a, + const rta_filter_t type, + const rta_real_t f0, const rta_real_t q, + const rta_real_t gain) +{ + + switch(type) + { + case rta_lowpass: + rta_biquad_lowpass_coefs(b, a, f0, q); + break; + + case rta_highpass: + rta_biquad_highpass_coefs(b, a, f0, q); + break; + + case rta_bandpass_constant_skirt: + rta_biquad_bandpass_constant_skirt_coefs(b, a, f0, q); + break; + + case rta_bandpass_constant_peak: + rta_biquad_bandpass_constant_peak_coefs(b, a, f0, q); + break; + + case rta_notch: + rta_biquad_notch_coefs(b, a, f0, q); + break; + + case rta_allpass: + rta_biquad_allpass_coefs(b, a, f0, q); + break; + + case rta_peaking: + rta_biquad_peaking_coefs(b, a, f0, q, gain); + break; + + case rta_lowshelf: + rta_biquad_lowshelf_coefs(b, a, f0, q, gain); + break; + + case rta_highshelf: + rta_biquad_highshelf_coefs(b, a, f0, q, gain); + break; + } + + switch(type) + { + case rta_lowpass: + case rta_highpass: + case rta_bandpass_constant_skirt: + case rta_bandpass_constant_peak: + case rta_notch: + case rta_allpass: + + if(gain != 1.) + { + b[0] *= gain; + b[1] *= gain; + b[2] *= gain; + } + break; + + /* gain is already integrated for the following */ + case rta_peaking: + case rta_lowshelf: + case rta_highshelf: + break; + } + + return; +} + +/* helper */ +void rta_biquad_coefs_stride(rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_filter_t type, + const rta_real_t f0, const rta_real_t q, + const rta_real_t gain) +{ + + switch(type) + { + case rta_lowpass: + rta_biquad_lowpass_coefs_stride(b, b_stride, a, a_stride, f0, q); + break; + + case rta_highpass: + rta_biquad_highpass_coefs_stride(b, b_stride, a, a_stride, f0, q); + break; + + case rta_bandpass_constant_skirt: + rta_biquad_bandpass_constant_skirt_coefs_stride(b, b_stride, a, a_stride, + f0, q); + break; + + case rta_bandpass_constant_peak: + + rta_biquad_bandpass_constant_peak_coefs_stride(b, b_stride, a, a_stride, + f0, q); + break; + + case rta_notch: + rta_biquad_notch_coefs_stride(b, b_stride, a, a_stride, f0, q); + break; + + case rta_allpass: + rta_biquad_allpass_coefs_stride(b, b_stride, a, a_stride, f0, q); + break; + + case rta_peaking: + rta_biquad_peaking_coefs_stride(b, b_stride, a, a_stride, f0, q, gain); + break; + + case rta_lowshelf: + rta_biquad_lowshelf_coefs_stride(b, b_stride, a, a_stride, f0, q, gain); + break; + + case rta_highshelf: + rta_biquad_highshelf_coefs_stride(b, b_stride, a, a_stride, f0, q, gain); + break; + } + + switch(type) + { + case rta_lowpass: + case rta_highpass: + case rta_bandpass_constant_skirt: + case rta_bandpass_constant_peak: + case rta_notch: + case rta_allpass: + + if(gain != 1.) + { + b[0] *= gain; + b[b_stride] *= gain; + b[2*b_stride] *= gain; + } + break; + + /* gain is already integrated for the following */ + case rta_peaking: + case rta_lowshelf: + case rta_highshelf: + break; + } + + return; +} + +/* direct form I */ +/* a0 = 1, a1 = a[0], a2 = a[1] */ +/* 4 states (in that order): x(n-1), x(n-2), y(n-1), y(n-2) */ +inline rta_real_t rta_biquad_df1(const rta_real_t x, + const rta_real_t * b, const rta_real_t * a, + rta_real_t * states) +{ + rta_real_t y = b[0] * x + + b[1] * states[0] + b[2] * states[1] - a[0] * states[2] - a[1] * states[3]; + + states[1] = states[0]; + states[0] = x; + + states[3] = states[2]; + states[2] = y; + + return y; +} + +/* transposed direct form II */ +/* a0 = 1, a1 = a[0], a2 = a[1] */ +/* 2 states */ +inline rta_real_t rta_biquad_df2t(const rta_real_t x, + const rta_real_t * b, const rta_real_t * a, + rta_real_t * states) +{ + rta_real_t y = b[0] * x + states[0]; + states[0] = b[1] * x - a[0] * y + states[1]; + states[1] = b[2] * x - a[1] * y; + + return y; +} + +/* direct form I */ +/* a0 = 1, a1 = a[0], a2 = a[1] */ +/* 4 states (in that order): x(n-1), x(n-2), y(n-1), y(n-2) */ +inline rta_real_t rta_biquad_df1_stride( + const rta_real_t x, + const rta_real_t * b, const int b_stride, + const rta_real_t * a, const int a_stride, + rta_real_t * states, const int s_stride) +{ + rta_real_t y = b[0] * x + + b[b_stride] * states[0] + b[2*b_stride] * states[s_stride] - + a[0] * states[2*s_stride] - a[a_stride] * states[3*s_stride]; + + states[s_stride] = states[0]; + states[0] = x; + + states[3*s_stride] = states[2*s_stride]; + states[2*s_stride] = y; + + return y; +} + +/* transposed direct form II */ +/* a0 = 1, a1 = a[0], a2 = a[1] */ +/* 2 states */ +inline rta_real_t rta_biquad_df2t_stride( + const rta_real_t x, + const rta_real_t * b, const int b_stride, + const rta_real_t * a, const int a_stride, + rta_real_t * states, const int s_stride) +{ + rta_real_t y = b[0] * x + states[0]; + states[0] = b[b_stride] * x - a[0] * y + states[s_stride]; + states[s_stride] = b[2*b_stride] * x - a[a_stride] * y; + + return y; +} + +void rta_biquad_df1_vector(rta_real_t * y, + const rta_real_t * x, const unsigned int x_size, + const rta_real_t * b, const rta_real_t * a, + rta_real_t * states) +{ + unsigned int i; + + for(i = 0; i < x_size; i++) + { + y[i] = rta_biquad_df1(x[i], b, a, states); + } + + + return; +} + +void rta_biquad_df2t_vector(rta_real_t * y, + const rta_real_t * x, const unsigned int x_size, + const rta_real_t * b, const rta_real_t * a, + rta_real_t * states) +{ + unsigned int i; + + for(i = 0; i < x_size; i++) + { + y[i] = rta_biquad_df2t(x[i], b, a, states); + } + + + return; +} + +void rta_biquad_df1_vector_stride( + rta_real_t * y, const int y_stride, + const rta_real_t * x, const int x_stride, const unsigned int x_size, + const rta_real_t * b, const int b_stride, + const rta_real_t * a, const int a_stride, + rta_real_t * states, const int s_stride) +{ + int ix, iy; + + for(ix = 0, iy = 0; + ix < x_size*x_stride; + ix += x_stride, iy += y_stride) + { + y[iy] = rta_biquad_df1_stride( + x[ix], b, b_stride, a, a_stride, states, s_stride); + } + + return; +} + +void rta_biquad_df2t_vector_stride( + rta_real_t * y, const int y_stride, + const rta_real_t * x, const int x_stride, const unsigned int x_size, + const rta_real_t * b, const int b_stride, + const rta_real_t * a, const int a_stride, + rta_real_t * states, const int s_stride) +{ + int ix, iy; + + for(ix = 0, iy = 0; + ix < x_size*x_stride; + ix += x_stride, iy += y_stride) + { + y[iy] = rta_biquad_df2t_stride( + x[ix], b, b_stride, a, a_stride, states, s_stride); + } + + return; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_biquad.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_biquad.h new file mode 100644 index 0000000..286e990 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_biquad.h @@ -0,0 +1,727 @@ +/** + * @file rta_biquad.h + * @author Jean-Philippe.Lambert@ircam.fr + * @date Fri Aug 29 12:38:46 2008 + * + * @brief Biquad filter and coefficients calculations. + * + * Based on the "Cookbook formulae for audio EQ biquad filter + * coefficients" by Robert Bristow-Johnson. + * + * @htmlonly <pre> + * y(n) = b0 x(n) + b1 x(n-1) + b2 x(n-2) + * - a1 y(n-1) - a2 y(n-2) + * </pre> @endhtmlonly + * + * (This is Matlab convention, MaxMSP biquad~ swaps the names for a + * and b.) + * + * a0 is always 1. as each coefficient is normalised by a0, including + * a0. + * + * For every function, a1 is a[0] and a2 is a[1]. b0 is b[0], b1 is + * b[1] and b2 is b[2]. + * + * @copyright + * Copyright (C) 2008 - 2009 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause)} + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_BIQUAD_H_ +#define _RTA_BIQUAD_H_ 1 + +#include "rta.h" +#include "rta_filter.h" /* filter types */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef WIN32 +#define inline +#endif + +/** + * Biquad coefficients for a low-pass filter. + * H(s) = 1 / (s^2 + s/q + 1) + * + * @param b is a vector of feed-forward coefficients. To apply a + * (linear) gain, simply multiply the b coefficients by the gain. + * @param a is a vector of feed-backward coefficients + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency: the filter is closed if f0 == 0. and open if f0 == 1. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. q <= 1./sqrt(2.) is the limit for monotonic response. + */ +void rta_biquad_lowpass_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, const rta_real_t q); + +/** + * Biquad coefficients for a low-pass filter. + * H(s) = 1 / (s^2 + s/q + 1) + * + * @param b is a vector of feed-forward coefficients. To apply a + * (linear) gain, simply multiply the b coefficients by the gain. + * @param b_stride is 'b' stride + * @param a is a vector of feed-backward coefficients + * @param a_stride is 'a' stride + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency: the filter is closed if f0 == 0. and open if f0 == 1. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. q <= 1./sqrt(2.) is the limit for monotonic response. + */ +void rta_biquad_lowpass_coefs_stride( + rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, const rta_real_t q); + +/** + * Biquad coefficients for a high-pass filter. + * H(s) = s^2 / (s^2 + s/q + 1) + * + * @param b is a vector of feed-forward coefficients. To apply a + * (linear) gain, simply multiply the b coefficients by the gain. + * @param a is a vector of feed-backward coefficients + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency: the filter is closed if f0 == 1. and open if f0 == 0. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. q <= 1./sqrt(2.) is the limit for monotonic response. + */ +void rta_biquad_highpass_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, const rta_real_t q); + +/** + * Biquad coefficients for a high-pass filter. + * H(s) = s^2 / (s^2 + s/q + 1) + * + * @param b is a vector of feed-forward coefficients. To apply a + * (linear) gain, simply multiply the b coefficients by the gain. + * @param b_stride is 'b' stride + * @param a is a vector of feed-backward coefficients + * @param a_stride is 'a' stride + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency: the filter is closed if f0 == 1. and open if f0 == 0. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. q <= 1./sqrt(2.) is the limit for monotonic response. + */ +void rta_biquad_highpass_coefs_stride( + rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, const rta_real_t q); + +/** + * Biquad coefficients for a band-pass filter with constant skirt. The + * peak gain is 'q'. + * H(s) = s / (s^2 + s/q + 1) + * + * @param b is a vector of feed-forward coefficients. To apply a + * (linear) gain, simply multiply the b coefficients by the gain. + * @param a is a vector of feed-backward coefficients + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. + */ +void rta_biquad_bandpass_constant_skirt_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, + const rta_real_t q); + +/** + * Biquad coefficients for a band-pass filter with constant skirt. The + * peak gain is 'q'. + * H(s) = s / (s^2 + s/q + 1) + * + * @param b is a vector of feed-forward coefficients. To apply a + * (linear) gain, simply multiply the b coefficients by the gain. + * @param b_stride is 'b' stride + * @param a is a vector of feed-backward coefficients + * @param a_stride is 'a' stride + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. + */ +void rta_biquad_bandpass_constant_skirt_coefs_stride( + rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, + const rta_real_t q); + +/** + * Biquad coefficients for a band-pass filter with constant 0 dB peak. + * H(s) = (s/q) / (s^2 + s/q + 1) + * + * @param b is a vector of feed-forward coefficients. To apply a + * (linear) gain, simply multiply the b coefficients by the gain. + * @param a is a vector of feed-backward coefficients + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. + */ +void rta_biquad_bandpass_constant_peak_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, + const rta_real_t q); + +/** + * Biquad coefficients for a band-pass filter with constant 0 dB peak. + * H(s) = (s/q) / (s^2 + s/q + 1) + * + * @param b is a vector of feed-forward coefficients. To apply a + * (linear) gain, simply multiply the b coefficients by the gain. + * @param b_stride is 'b' stride + * @param a is a vector of feed-backward coefficients + * @param a_stride is 'a' stride + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. + */ +void rta_biquad_bandpass_constant_peak_coefs_stride( + rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, + const rta_real_t q); + +/** + * Biquad coefficients for a notch filter. + * H(s) = (s^2 + 1) / (s^2 + s/q + 1) + * + * @param b is a vector of feed-forward coefficients. To apply a + * (linear) gain, simply multiply the b coefficients by the gain. + * @param a is a vector of feed-backward coefficients + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. + */ +void rta_biquad_notch_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, const rta_real_t q); + +/** + * Biquad coefficients for a notch filter. + * H(s) = (s^2 + 1) / (s^2 + s/q + 1) + * + * @param b is a vector of feed-forward coefficients. To apply a + * (linear) gain, simply multiply the b coefficients by the gain. + * @param b_stride is 'b' stride + * @param a is a vector of feed-backward coefficients + * @param a_stride is 'a' stride + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. + */ +void rta_biquad_notch_coefs_stride( + rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, const rta_real_t q); + +/** + * Biquad coefficients for an all-pass filter. + * H(s) = (s^2 - s/q + 1) / (s^2 + s/q + 1) + * + * @param b is a vector of feed-forward coefficients. To apply a + * (linear) gain, simply multiply the b coefficients by the gain. + * @param a is a vector of feed-backward coefficients + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. + */ +void rta_biquad_allpass_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, const rta_real_t q); + +/** + * Biquad coefficients for an all-pass filter. + * H(s) = (s^2 - s/q + 1) / (s^2 + s/q + 1) + * + * @param b is a vector of feed-forward coefficients. To apply a + * (linear) gain, simply multiply the b coefficients by the gain. + * @param b_stride is 'b' stride + * @param a is a vector of feed-backward coefficients + * @param a_stride is 'a' stride + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. + */ +void rta_biquad_allpass_coefs_stride( + rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, const rta_real_t q); + +/** + * Biquad coefficients for an peaking filter. + * H(s) = (s^2 + s*(g/q) + 1) / (s^2 + s/(g*q) + 1), + * g = sqrt('gain'), + * 'gain' is linear. + * + * @param b is a vector of feed-forward coefficients + * @param a is a vector of feed-backward coefficients + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. + * @param gain is linear and must be > 0. + */ +void rta_biquad_peaking_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, const rta_real_t q, + const rta_real_t gain); + +/** + * Biquad coefficients for an peaking filter. + * H(s) = (s^2 + s*(g/q) + 1) / (s^2 + s/(g*q) + 1), + * g = sqrt('gain'), + * 'gain' is linear. + * + * @param b is a vector of feed-forward coefficients + * @param b_stride is 'b' stride + * @param a is a vector of feed-backward coefficients + * @param a_stride is 'a' stride + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. + * @param gain is linear and must be > 0. + */ +void rta_biquad_peaking_coefs_stride( + rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, const rta_real_t q, + const rta_real_t gain); + +/** + * Biquad coefficients for an low-shelf filter. + * H(s) = g * (s^2 + (sqrt(g)/q)*s + g)/(g*s^2 + (sqrt(g)/q)*s + 1) + * g = sqrt('gain'), + * 'gain' is linear. + * + * @param b is a vector of feed-forward coefficients + * @param a is a vector of feed-backward coefficients + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. q <= 1./sqrt(2.) is the limit for monotonic response. + * @param gain is linear and must be > 0. + */ +void rta_biquad_lowshelf_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, const rta_real_t q, + const rta_real_t gain); + +/** + * Biquad coefficients for an low-shelf filter. + * H(s) = g * (s^2 + (sqrt(g)/q)*s + g)/(g*s^2 + (sqrt(g)/q)*s + 1) + * g = sqrt('gain'), + * 'gain' is linear. + * + * @param b is a vector of feed-forward coefficients + * @param b_stride is 'b' stride + * @param a is a vector of feed-backward coefficients + * @param a_stride is 'a' stride + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. q <= 1./sqrt(2.) is the limit for monotonic response. + * @param gain is linear and must be > 0. + */ +void rta_biquad_lowshelf_coefs_stride( + rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, const rta_real_t q, + const rta_real_t gain); + +/** + * Biquad coefficients for an high-shelf filter. + * H(s) = g * (g*s^2 + (sqrt(g)/q)*s + 1)/(s^2 + (sqrt(g)/q)*s + g) + * g = sqrt('gain'), + * 'gain' is linear. + * + * @param b is a vector of feed-forward coefficients + * @param a is a vector of feed-backward coefficients + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. q <= 1./sqrt(2.) is the limit for monotonic response. + * @param gain is linear and must be > 0. + */ +void rta_biquad_highshelf_coefs(rta_real_t * b, rta_real_t * a, + const rta_real_t f0, const rta_real_t q, + const rta_real_t gain); + +/** + * Biquad coefficients for an high-shelf filter. + * H(s) = g * (g*s^2 + (sqrt(g)/q)*s + 1)/(s^2 + (sqrt(g)/q)*s + g) + * g = sqrt('gain'), + * 'gain' is linear. + * + * @param b is a vector of feed-forward coefficients + * @param b_stride is 'b' stride + * @param a is a vector of feed-backward coefficients + * @param a_stride is 'a' stride + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. q <= 1./sqrt(2.) is the limit for monotonic response. + * @param gain is linear and must be > 0. + */ +void rta_biquad_highshelf_coefs_stride( + rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_real_t f0, const rta_real_t q, + const rta_real_t gain); + +/** + * Helper function calling the proper biquad coefficients calculation + * function, depending on the filter type. + * + * @param b is a vector of feed-forward coefficients + * @param a is a vector of feed-backward coefficients + * @param type can be: + * <pre> + * lowpass: H(s) = 1 / (s^2 + s/q + 1) + * highpass: H(s) = s^2 / (s^2 + s/q + 1) + * bandpass_cst_skirt: H(s) = s / (s^2 + s/q + 1) + * (The peak gain is q*gain) + * bandpass_cst_peak: H(s) = (s/q) / (s^2 + s/q + 1) + * (The peak gain is gain) + * notch: H(s) = (s^2 + 1) / (s^2 + s/q + 1) + * allpass: H(s) = (s^2 - s/q + 1) / (s^2 + s/q + 1) + * peaking: H(s) = (s^2 + s*(g/q) + 1) / (s^2 + s/(g*q) + 1), + * with g = sqrt(gain) + * lowshelf: H(s) = g * (s^2 + (sqrt(g)/q)*s + g)/ + * (g*s^2 + (sqrt(g)/q)*s + 1) + * with g = sqrt(gain) + * highshelf: H(s) = g * (g*s^2 + (sqrt(g)/q)*s + 1)/ + * (s^2 + (sqrt(g)/q)*s + g) + * with g = sqrt(gain) + * </pre> + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. q <= 1./sqrt(2.) is the limit for monotonic response + * for lowpass, highpass, lowshelf and highshelf types. + * @param gain is linear and must be > 0. + */ +void rta_biquad_coefs(rta_real_t * b, rta_real_t * a, + const rta_filter_t type, + const rta_real_t f0, const rta_real_t q, + const rta_real_t gain); + + +/** + * Helper function calling the proper biquad coefficients calculation + * function, depending on the filter type. + * + * @param b is a vector of feed-forward coefficients + * @param b_stride is 'b' stride + * @param a is a vector of feed-backward coefficients + * @param a_stride is 'a' stride + * @param type can be: + * <pre> + * lowpass: H(s) = 1 / (s^2 + s/q + 1) + * highpass: H(s) = s^2 / (s^2 + s/q + 1) + * bandpass_cst_skirt: H(s) = s / (s^2 + s/q + 1) + * (The peak gain is q*gain) + * bandpass_cst_peak: H(s) = (s/q) / (s^2 + s/q + 1) + * (The peak gain is gain) + * notch: H(s) = (s^2 + 1) / (s^2 + s/q + 1) + * allpass: H(s) = (s^2 - s/q + 1) / (s^2 + s/q + 1) + * peaking: H(s) = (s^2 + s*(g/q) + 1) / (s^2 + s/(g*q) + 1), + * with g = sqrt(gain) + * lowshelf: H(s) = g * (s^2 + (sqrt(g)/q)*s + g)/ + * (g*s^2 + (sqrt(g)/q)*s + 1) + * with g = sqrt(gain) + * highshelf: H(s) = g * (g*s^2 + (sqrt(g)/q)*s + 1)/ + * (s^2 + (sqrt(g)/q)*s + g) + * with g = sqrt(gain) + * </pre> + * @param f0 is the cutoff frequency, normalised by the nyquist + * frequency. + * @param q must be > 0. and is generally >= 0.5 for audio + * filtering. q <= 1./sqrt(2.) is the limit for monotonic response + * for lowpass, highpass, lowshelf and highshelf types. + * @param gain is linear and must be > 0. + */ +void rta_biquad_coefs_stride( + rta_real_t * b, const int b_stride, + rta_real_t * a, const int a_stride, + const rta_filter_t type, + const rta_real_t f0, const rta_real_t q, + const rta_real_t gain); + + +/** + * Biquad computation, using a direct form I. + * + * <pre> + * x b0 y + * --------+----->----->( + )-------->-----+-------> + * | ^ ^ ^ ^ | + * V b1 / / \ \ -a1 V + * [x-1]--->----/ / \ \------<---[y-1] + * | / \ | + * V b2 / \ -a2 V + * [x-2]--->---/ \-----<---[y-2] + * + * </pre> + * + * @param x is an input sample + * @param b is a vector of feed-forward coefficients. b0 is b[0], b1 + * is b[1] and b2 is b[2]. + * @param a is a vector of feed-backward coefficients. Note that a1 is + * a[0] and a2 is a[1] (and a0 is supposed to be 1.). + * @param states is a vector of 4 elements: for an input 'x' and an + * output 'y', the states are, in that order, x(n-1), x(n-2), y(n-1), + * and y(n-2). Both can be initialised with 0. or the last computed + * values, which are updated by this function. + * + * @return the output sample y + */ +extern inline rta_real_t rta_biquad_df1(const rta_real_t x, + const rta_real_t * b, const rta_real_t * a, + rta_real_t * states); + +/** + * Biquad computation, using a transposed direct form II. + * + * <pre> + * x + * --------+---------------+---------------+ + * | | | + * |b2 |b1 |b0 + * V V V y + * (+)--->[z-1]--->(+)--->[z-1]--->(+)----+-------> + * ^ ^ | + * |-a2 |-a1 | + * | | | + * +---------------+---------------------+ + * + * </pre> + * + * @param x is an input sample + * @param b is a vector of feed-forward coefficients. b0 is b[0], b1 + * is b[1] and b2 is b[2]. + * @param a is a vector of feed-backward coefficients. Note that a1 is + * a[0] and a2 is a[1] (and a0 is supposed to be 1.). + * @param states is a vector of 2 elements: states[0] is the one + * sample delay state and states[1] is the two samples delay + * state. Both can be initialised with 0. or the last computed values, + * which are updated by this function. + * + * @return the output sample y + */ +extern inline rta_real_t rta_biquad_df2t(const rta_real_t x, + const rta_real_t * b, const rta_real_t * a, + rta_real_t * states); + +/** + * Biquad computation, using a direct form I. + * + * <pre> + * x b0 y + * --------+----->----->( + )-------->-----+-------> + * | ^ ^ ^ ^ | + * V b1 / / \ \ -a1 V + * [x-1]--->----/ / \ \------<---[y-1] + * | / \ | + * V b2 / \ -a2 V + * [x-2]--->---/ \-----<---[y-2] + * + * </pre> + * + * @param x is an input sample + * @param b is a vector of feed-forward coefficients. b0 is b[0], b1 + * is b[1] and b2 is b[2]. + * @param b_stride is 'b' stride + * @param a is a vector of feed-backward coefficients. Note that a1 is + * a[0] and a2 is a[1] (and a0 is supposed to be 1.). + * @param a_stride is 'a' stride + * @param states is a vector of 4 elements: for an input 'x' and an + * output 'y', the states are, in that order, x(n-1), x(n-2), y(n-1), + * and y(n-2). Both can be initialised with 0. or the last computed + * values, which are updated by this function. + * @param s_stride is 'states' strides. + * + * @return the output sample y + */ +extern inline rta_real_t rta_biquad_df1_stride( + const rta_real_t x, + const rta_real_t * b, const int a_stride, + const rta_real_t * a, const int b_stride, + rta_real_t * states, const int s_stride); + +/** + * Biquad computation, using a transposed direct form II. + * + * <pre> + * + * x + * --------+---------------+---------------+ + * | | | + * |b2 |b1 |b0 + * V V V y + * (+)--->[z-1]--->(+)--->[z-1]--->(+)----+-------> + * ^ ^ | + * |-a2 |-a1 | + * | | | + * +---------------+---------------------+ + * + * </pre> + * + * @param x is an input sample + * @param b is a vector of feed-forward coefficients. b0 is b[0], b1 + * is b[1] and b2 is b[2]. + * @param b_stride is 'b' stride + * @param a is a vector of feed-backward coefficients. Note that a1 is + * a[0] and a2 is a[1] (and a0 is supposed to be 1.). + * @param a_stride is 'a' stride + * @param states is a vector of 2 elements: states[0] is the one + * sample delay state and states[1] is the two samples delay + * state. Both can be initialised with 0. or the last computed values, + * which are updated by this function. + * @param s_stride is 'states' strides. + * + * @return the output sample y + */ +extern inline rta_real_t rta_biquad_df2t_stride( + const rta_real_t x, + const rta_real_t * b, const int b_stride, + const rta_real_t * a, const int a_stride, + rta_real_t * states, const int s_stride); + +/** + * Biquad computation on a vector of samples, using a direct form I. + * + * \see rta_biquad_df1 + * + * @param y is a vector of output samples. Its size is 'x_size' + * @param x is a vector of input samples. Its size is 'x_size' + * @param x_size is the size of 'y' and 'x' + * @param b is a vector of feed-forward coefficients. b0 is b[0], b1 + * is b[1] and b2 is b[2]. + * @param a is a vector of feed-backward coefficients. Note that a1 is + * a[0] and a2 is a[1] (and a0 is supposed to be 1.). + * @param states is a vector of 4 elements: for an input 'x' and an + * output 'y', the states are, in that order, x(n-1), x(n-2), y(n-1), + * and y(n-2). Both can be initialised with 0. or the last computed + * values, which are updated by this function. + */ +void rta_biquad_df1_vector(rta_real_t * y, + const rta_real_t * x, const unsigned int x_size, + const rta_real_t * b, const rta_real_t * a, + rta_real_t * states); + +/** + * Biquad computation on a vector of samples, using a transposed + * direct form II. + * + * \see rta_biquad_df2t + * + * @param y is a vector of output samples. Its size is 'x_size' + * @param x is a vector of input samples. Its size is 'x_size' + * @param x_size is the size of 'y' and 'x' + * @param b is a vector of feed-forward coefficients. b0 is b[0], b1 + * is b[1] and b2 is b[2]. + * @param a is a vector of feed-backward coefficients. Note that a1 is + * a[0] and a2 is a[1] (and a0 is supposed to be 1.). + * @param states is a vector of 2 elements: states[0] is the one + * sample delay state and states[1] is the two samples delay + * state. Both can be initialised with 0. or the last computed values, + * which are updated by this function. + */ +void rta_biquad_df2t_vector(rta_real_t * y, + const rta_real_t * x, const unsigned int x_size, + const rta_real_t * b, const rta_real_t * a, + rta_real_t * states); + +/** + * Biquad computation on a vector of samples, using a direct form I. + * + * \see rta_biquad_df1 + * + * @param y is a vector of output samples. Its size is 'x_size' + * @param y_stride is 'y' stride + * @param x is a vector of input samples. Its size is 'x_size' + * @param x_stride is 'x' stride + * @param x_size is the size of 'y' and 'x' + * @param b is a vector of feed-forward coefficients. b0 is b[0], b1 + * is b[1] and b2 is b[2]. + * @param b_stride is 'b' stride + * @param a is a vector of feed-backward coefficients. Note that a1 is + * a[0] and a2 is a[1] (and a0 is supposed to be 1.). + * @param a_stride is 'a' stride + * @param states is a vector of 4 elements: for an input 'x' and an + * output 'y', the states are, in that order, x(n-1), x(n-2), y(n-1), + * and y(n-2). Both can be initialised with 0. or the last computed + * values, which are updated by this function. + * @param s_stride is 'states' strides. + */ +void rta_biquad_df1_vector_stride( + rta_real_t * y, const int y_stride, + const rta_real_t * x, const int x_stride, const unsigned int x_size, + const rta_real_t * b, const int b_stride, + const rta_real_t * a, const int a_stride, + rta_real_t * states, const int s_stride); + +/** + * Biquad computation on a vector of samples, using a transposed + * direct form II. + * + * \see rta_biquad_df2t + * + * @param y is a vector of output samples. Its size is 'x_size' + * @param y_stride is 'y' stride + * @param x is a vector of input samples. Its size is 'x_size' + * @param x_stride is 'x' stride + * @param x_size is the size of 'y' and 'x' + * @param b is a vector of feed-forward coefficients. b0 is b[0], b1 + * is b[1] and b2 is b[2]. + * @param b_stride is 'b' stride + * @param a is a vector of feed-backward coefficients. Note that a1 is + * a[0] and a2 is a[1] (and a0 is supposed to be 1.). + * @param a_stride is 'a' stride + * @param states is a vector of 2 elements: states[0] is the one + * sample delay state and states[1] is the two samples delay + * state. Both can be initialised with 0. or the last computed values, + * which are updated by this function. + * @param s_stride is 'states' strides. + */ +void rta_biquad_df2t_vector_stride( + rta_real_t * y, const int y_stride, + const rta_real_t * x, const int x_stride, const unsigned int x_size, + const rta_real_t * b, const int b_stride, + const rta_real_t * a, const int a_stride, + rta_real_t * states, const int s_stride); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_BIQUAD_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_correlation.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_correlation.c new file mode 100644 index 0000000..bb70f87 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_correlation.c @@ -0,0 +1,326 @@ +/** + * @file rta_correlation.c + * @author Jean-Philippe.Lambert@ircam.fr + * @date Mon Aug 27 12:25:16 2007 + * + * @brief Correlation (cross or auto) + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_correlation.h" + + +/* specific implementations */ +#if defined(RTA_USE_VECLIB) +//#include <vDSP.h> +#include <Accelerate/Accelerate.h> +#endif + +/* Fast, unbiased by nature, recommended if (c_size / filter_size > 20) */ +/* Requirement: (a_size, b_size) >= c_size + filter_size */ +/* Warning: for VecLib, a_size is required to be aligned on a multiple */ +/* of 4, that is */ +/* a_size >= 'c_size' + 4*(('filter_size'+ 4 - 1)/4) */ +void rta_correlation_fast( + rta_real_t * correlation, const unsigned int c_size, + const rta_real_t * input_vector_a, + const rta_real_t * input_vector_b, + const unsigned int filter_size) +{ +#if defined(RTA_USE_VECLIB) + if(filter_size <= 2044 && filter_size + c_size >=12) + { +#if (RTA_REAL_TYPE == RTA_FLOAT_TYPE) + vDSP_conv(input_vector_a, 1, input_vector_b, 1, correlation, 1, + c_size, filter_size); +#elif (RTA_REAL_TYPE == RTA_DOUBLE_TYPE) + vDSP_convD(input_vector_a, 1, input_vector_b, 1, correlation, 1, + c_size, filter_size); +#endif + } + else + { +#endif /* RTA_USE_VECLIB */ + +/* Base algorithm */ + int c,f; + for(c=0; c<c_size; c++) + { + correlation[c] = 0.0; + for(f=0; f<filter_size; f++) + { + correlation[c] += input_vector_a[f+c] * input_vector_b[f]; + } + } /* end of base algorithm */ + +#if defined(RTA_USE_VECLIB) + } +#endif + return; +} + +/* Requirement: {a_size*a_stride, b_size*b_stride} >= */ +/* (c_size+filter_size)*c_stride */ +/* Warning: for VecLib, a_size is required to be aligned on a multiple */ +/* of 4, that is */ +/* a_size >= 'c_size' + 4*(('filter_size'+ 4 - 1)/4) */ +void rta_correlation_fast_stride( + rta_real_t * correlation, const int c_stride, const unsigned int c_size, + const rta_real_t * input_vector_a, const int a_stride, + const rta_real_t * input_vector_b, const int b_stride, + const unsigned int filter_size) +{ +#if defined(RTA_USE_VECLIB) + if(filter_size <= 2044 && filter_size + c_size >=12) + { +#if (RTA_REAL_TYPE == RTA_FLOAT_TYPE) + vDSP_conv(input_vector_a, a_stride, input_vector_b, b_stride, + correlation, c_stride, c_size, filter_size); +#elif (RTA_REAL_TYPE == RTA_DOUBLE_TYPE) + vDSP_convD(input_vector_a, a_stride, input_vector_b, b_stride, + correlation, c_stride, c_size, filter_size); +#endif + } + else + { +#endif /* RTA_USE_VECLIB */ + +/* Base algorithm */ + int c, ca, fa, fb; + for(c=0, ca=0; c<c_size*c_stride; c+=c_stride, ca+=a_stride) + { + correlation[c] = 0.0; + for(fa=0, fb=0; fa<filter_size*a_stride; fa+=a_stride, fb+=b_stride) + { + correlation[c] += + input_vector_a[fa+ca] * input_vector_b[fb]; + } + } /* end of base algorithm */ + +#if defined(RTA_USE_VECLIB) + } +#endif + return; +} + +/* Requirement: (a_size, b_size) >= max_filter_size > c_size */ +void rta_correlation_raw( + rta_real_t * correlation, const unsigned int c_size, + const rta_real_t * input_vector_a, + const rta_real_t * input_vector_b, + const unsigned int max_filter_size) +{ + int c,f; + for(c=0; c<c_size; c++) + { + correlation[c] = 0.0; + for(f=0; f<max_filter_size-c; f++) + { + correlation[c] += input_vector_a[f+c] * input_vector_b[f]; + } + } + return; +} + +/* Requirement: (a_size, b_size) >= max_filter_size > c_size */ +void rta_correlation_raw_stride( + rta_real_t * correlation, const int c_stride, const unsigned int c_size, + const rta_real_t * input_vector_a, const int a_stride, + const rta_real_t * input_vector_b, const int b_stride, + const unsigned int max_filter_size) +{ + int c, ca, fa, fb; + for(c=0, ca=0; c<c_size*c_stride; c+=c_stride, ca+=a_stride) + { + correlation[c] = 0.0; + for(fa=0, fb=0; + fa<max_filter_size*a_stride-ca; + fa+=a_stride, fb+=b_stride) + { + correlation[c] += input_vector_a[fa+ca] * input_vector_b[fb]; + } + } + return; +} + + +/* Requirements: (a_size, b_size) >= max_filter_size > c_size */ +void rta_correlation_unbiased( + rta_real_t * correlation, const unsigned int c_size, + const rta_real_t * input_vector_a, + const rta_real_t * input_vector_b, + const unsigned int max_filter_size) +{ + int c,f; + for(c=0; c<c_size; c++) + { + correlation[c] = 0.0; + for(f=0; f<max_filter_size-c; f++) + { + correlation[c] += input_vector_a[f+c] * input_vector_b[f]; + } + correlation[c] /= f; + } + return; +} + +/* Requirements: (a_size, b_size) >= max_filter_size > c_size */ +void rta_correlation_unbiased_stride( + rta_real_t * correlation, const int c_stride, const unsigned int c_size, + const rta_real_t * input_vector_a, const int a_stride, + const rta_real_t * input_vector_b, const int b_stride, + const unsigned int max_filter_size) +{ + int c, ca, f, fa, fb; + for(c=0, ca=0; c<c_size*c_stride; c+=c_stride, ca+=a_stride) + { + correlation[c] = 0.0; + for(f=0, fa=0, fb=0; + fa<max_filter_size*a_stride-ca; + f++, fa+=a_stride, fb+=b_stride) + { + correlation[c] += input_vector_a[fa+ca] * input_vector_b[fb]; + } + correlation[c] /= f; + } + + return; +} + + +rta_real_t rta_correlation_fast_normalization_factor(const unsigned int filter_size) +{ + rta_real_t normalization = 1.; + + if(filter_size>0) + { + normalization = 1. / (rta_real_t)filter_size; + } + return normalization; +} + +rta_real_t rta_correlation_raw_normalization_factor(const unsigned int max_filter_size) +{ + rta_real_t normalization = 1.; + + if(max_filter_size>0) + { + normalization = 1. / (rta_real_t)(max_filter_size + 1); + } + return normalization; +} + + +/* Requirement: (a_size, b_size) >= c_size + filter_size */ +void rta_correlation_fast_scaled( + rta_real_t * correlation, const unsigned int c_size, + const rta_real_t * input_vector_a, + const rta_real_t * input_vector_b, + const unsigned int filter_size, const rta_real_t scale) +{ + int c,f; + for(c=0; c<c_size; c++) + { + correlation[c] = 0.0; + for(f=0; f<filter_size; f++) + { + correlation[c] += input_vector_a[f+c] * input_vector_b[f]; + } + correlation[c] *= scale; + } + return; +} + + +/* Requirement: {a_size*a_stride, b_size*b_stride} >= (c_size+filter_size)*c_stride */ +void rta_correlation_fast_scaled_stride( + rta_real_t * correlation, const int c_stride, const unsigned int c_size, + const rta_real_t * input_vector_a, const int a_stride, + const rta_real_t * input_vector_b, const int b_stride, + const unsigned int filter_size, const rta_real_t scale) +{ + int c,ca,fa,fb; + for(c=0, ca=0; c<c_size*c_stride; c+=c_stride, ca+=a_stride) + { + correlation[c] = 0.0; + for(fa=0, fb=0; fa<filter_size*a_stride; fa+=a_stride, fb+=b_stride) + { + correlation[c] += + input_vector_a[fa+ca] * input_vector_b[fb]; + } + correlation[c] *= scale; + } + return; +} + +/* Requirement: (a_size, b_size) >= max_filter_size */ +void rta_correlation_raw_scaled( + rta_real_t * correlation, const unsigned int c_size, + const rta_real_t * input_vector_a, + const rta_real_t * input_vector_b, + const unsigned int max_filter_size, const rta_real_t scale) +{ + int c,f; + for(c=0; c<c_size; c++) + { + correlation[c] = 0.0; + for(f=0; f<max_filter_size-c; f++) + { + correlation[c] += input_vector_a[f+c] * input_vector_b[f]; + } + correlation[c] *= scale; + } + return; +} + +/* Requirement: (a_size, b_size) >= max_filter_size */ +void rta_correlation_raw_scaled_stride( + rta_real_t * correlation, const int c_stride, const unsigned int c_size, + const rta_real_t * input_vector_a, const int a_stride, + const rta_real_t * input_vector_b, const int b_stride, + const unsigned int max_filter_size, const rta_real_t scale) +{ + int c, ca, fa, fb; + for(c=0, ca=0; c<c_size*c_stride; c+=c_stride, ca+=a_stride) + { + correlation[c] = 0.0; + for(fa=0, fb=0; + fa<max_filter_size*a_stride-ca; + fa+=a_stride, fb+=b_stride) + { + correlation[c] += input_vector_a[fa+ca] * input_vector_b[fb]; + } + correlation[c] *= scale; + } + return; +} + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_correlation.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_correlation.h new file mode 100644 index 0000000..b0cf8b1 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_correlation.h @@ -0,0 +1,372 @@ +/** + * @file rta_correlation.h + * @author Jean-Philippe.Lambert@ircam.fr + * @date Mon Aug 27 12:25:16 2007 + * + * @brief Correlation (cross or auto) + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_CORRELATION_H_ +#define _RTA_CORRELATION_H_ 1 + +#include "rta.h" + +#ifdef __cplusplus +extern "C" { +#endif + + + +/** + * Compute correlation between 'input_vector_a' and 'input_vector_b' into + * 'correlation'. If 'input_vector_a' == 'input_vector_b', it computes + * auto-correlation. This function can run in place if 'correlation' == + * 'input_vector_a' or 'correlation' == 'input_vector_b'. + * + * \f$C(i) = \sum_{f=0}^{filter\_size-1} A(f+i) \cdot B(f), i=\{0,c\_size-1\}\f$ + * + * This function is unbiased by nature but misses some information, + * specially for the first coefficients. It should be negligible if + * 'filter_size' is much greater than 'c_size', like ('filter_size' / + * 'c_size' > 20). + * + * @param correlation size is 'c_size' + * @param c_size is the 'correlation' order + 1, 'c_size' must be > 0 + * @param input_vector_a size a_size must be >= 'c_size' + 'filter_size' + * @param input_vector_b size b_size must be >= 'c_size' + * @param filter_size is the maximum shift for 'input_vector_a'. In + * practice, 'filter_size' == (a_size - 'c_size') + */ +void +rta_correlation_fast( + rta_real_t * correlation, const unsigned int c_size, + const rta_real_t * input_vector_a, + const rta_real_t * input_vector_b, + const unsigned int filter_size); + + +/** + * Compute correlation between 'input_vector_a' and 'input_vector_b' into + * 'correlation'. If 'input_vector_a' == 'input_vector_b', it computes + * auto-correlation. This function can run in place if 'correlation' == + * 'input_vector_a' or 'correlation' == 'input_vector_b'. + * + * \f$C(i) = \sum_{f=0}^{filter\_size-1} A(f+i) \cdot B(f), i=\{0,c\_size-1\}\f$ + * + * + * This function is unbiased by nature but misses some information, + * specially for the first coefficients. It should be negligible if + * 'filter_size' is much greater than 'c_size', like ('filter_size' / + * 'c_size' > 20). + * + * @param correlation size is 'c_size' + * @param c_stride is 'correlation' stride + * @param c_size is the 'correlation' order + 1, 'c_size' must be > 0 + * @param input_vector_a size must be >= 'c_size' + 'filter_size' + * @param a_stride is 'input_vector_a' stride + * @param input_vector_b size must be >= 'c_size' + * @param b_stride is 'input_vector_b' stride + * @param filter_size is the maximum shift for 'input_vector_a'. In + * practice, 'filter_size' == (a_size - 'c_size') + */ +void +rta_correlation_fast_stride( + rta_real_t * correlation, const int c_stride, const unsigned int c_size, + const rta_real_t * input_vector_a, const int a_stride, + const rta_real_t * input_vector_b, const int b_stride, + const unsigned int filter_size); + +/** + * Compute correlation between 'input_vector_a' and 'input_vector_b' into + * 'correlation'. If 'input_vector_a' == 'input_vector_b', it computes + * auto-correlation. This function can run in place if 'correlation' == + * 'input_vector_a' or 'correlation' == 'input_vector_b'. + * + * \f$C(i) = \sum_{f=0}^{max\_filter\_size-i} A(f+i) \cdot B(f), i=\{0,c\_size-1\}\f$ + * + * This function is biased but uses all the information available for + * each coefficient. + * + * @param correlation size is 'c_size' + * @param c_size is the 'correlation' order + 1, 'c_size' must be > 0 + * @param input_vector_a size a_size must be >= 'max_filter_size' + * @param input_vector_b size b_size must be >= 'max_filter_size' + * @param max_filter_size is the maximum shift for 'input_vector_a'. + * 'max_filter_size' must be > 'c_size'. + * In practice, 'max_filter_size' == a_size + */ +void +rta_correlation_raw( + rta_real_t * correlation, const unsigned int c_size, + const rta_real_t * input_vector_a, + const rta_real_t * input_vector_b, + const unsigned int max_filter_size); + +/** + * Compute correlation between 'input_vector_a' and 'input_vector_b' into + * 'correlation'. If 'input_vector_a' == 'input_vector_b', it computes + * auto-correlation. This function can run in place if 'correlation' == + * 'input_vector_a' or 'correlation' == 'input_vector_b'. + * + * \f$C(i) = \sum_{f=0}^{max\_filter\_size-i} A(f+i) \cdot B(f), i=\{0,c\_size-1\}\f$ + * + * This function is biased but uses all the information available for + * each coefficient. + * + * @param correlation size is 'c_size' + * @param c_stride is 'correlation' stride + * @param c_size is the 'correlation' order + 1, 'c_size' must be > 0 + * @param input_vector_a size a_size must be >= 'max_filter_size' + * @param a_stride is 'input_vector_a' stride + * @param input_vector_b size b_size must be >= 'max_filter_size' + * @param b_stride is 'input_vector_b' stride + * @param max_filter_size is the maximum shift for 'input_vector_a'. + * 'max_filter_size' must be > 'c_size'. + * In practice, 'max_filter_size' == a_size + */ +void +rta_correlation_raw_stride( + rta_real_t * correlation, const int c_stride, const unsigned int c_size, + const rta_real_t * input_vector_a, const int a_stride, + const rta_real_t * input_vector_b, const int b_stride, + const unsigned int max_filter_size); + +/** + * Compute correlation between 'input_vector_a' and 'input_vector_b' into + * 'correlation'. If 'input_vector_a' == 'input_vector_b', it computes + * auto-correlation. This function can run in place if 'correlation' == + * 'input_vector_a' or 'correlation' == 'input_vector_b'. + * + * \f$C(i) = \frac{1}{max\_filter\_size-i} \sum_{f=0}^{max\_filter\_size-i} A(f+i) \cdot B(f), i=\{0,c\_size-1\}\f$ + * + * This function is unbiased as it normalizes each coefficient by its + * actual filter size. + * + * @param correlation size is 'c_size' + * @param c_size is the 'correlation' order + 1, 'c_size' must be > 0 + * @param input_vector_a size a_size must be >= 'max_filter_size' + * @param input_vector_b size b_size must be >= 'max_filter_size' + * @param max_filter_size is the maximum shift for 'input_vector_a'. + * 'max_filter_size' must be > 'c_size'. + * In practice, 'max_filter_size' == a_size + */ +void +rta_correlation_unbiased( + rta_real_t * correlation, const unsigned int c_size, + const rta_real_t * input_vector_a, + const rta_real_t * input_vector_b, + const unsigned int max_filter_size); + +/** + * Compute correlation between 'input_vector_a' and 'input_vector_b' into + * 'correlation'. If 'input_vector_a' == 'input_vector_b', it computes + * auto-correlation. This function can run in place if 'correlation' == + * 'input_vector_a' or 'correlation' == 'input_vector_b'. + * + * \f$C(i) = \frac{1}{max\_filter\_size-i} \sum_{f=0}^{max\_filter\_size-i} A(f+i) \cdot B(f), i=\{0,c\_size-1\}\f$ + * + * This function is unbiased as it normalizes each coefficient by its + * actual filter size. + * + * @param correlation size is 'c_size' + * @param c_stride is 'correlation' stride + * @param c_size is the 'correlation' order + 1, 'c_size' must be > 0 + * @param input_vector_a size a_size must be >= 'max_filter_size' + * @param a_stride is 'input_vector_a' stride + * @param input_vector_b size b_size must be >= 'max_filter_size' + * @param b_stride is 'input_vector_b' stride + * @param max_filter_size is the maximum shift for 'input_vector_a'. + * 'max_filter_size' must be > 'c_size'. + * In practice, 'max_filter_size' == a_size + */ +void +rta_correlation_unbiased_stride( + rta_real_t * correlation, const int c_stride, const unsigned int c_size, + const rta_real_t * input_vector_a, const int a_stride, + const rta_real_t * input_vector_b, const int b_stride, + const unsigned int max_filter_size); + +/** + * Generate a factor '*normalization' to multiply the correlation + * with, in order to normalize the correlation_fast values against the + * 'max_filter_size'. + * + * @param filter_size is the maximum shift for 'input_vector_a' + * + * @return normalization factor to multiply the correlation_fast with + * + * \see rta_correlation_fast_scaled + * \see rta_correlation_fast_scaled_stride + */ +rta_real_t +rta_correlation_fast_normalization_factor(const unsigned int filter_size); + +/** + * Generate a factor '*normalization' to multiply the correlation + * with, in order to normalize the correlation_raw values against the + * 'max_filter_size'. + * + * @param max_filter_size is the maximum shift for 'input_vector_a' + * + * @return normalization factor to multiply the correlation_raw with + * + * \see rta_correlation_raw_scaled + * \see rta_correlation_raw_scaled_stride + */ +rta_real_t +rta_correlation_raw_normalization_factor(const unsigned int max_filter_size); + + +/** + * Compute correlation between 'input_vector_a' and 'input_vector_b' into + * 'correlation'. If 'input_vector_a' == 'input_vector_b', it computes + * auto-correlation. This function can run in place if 'correlation' == + * 'input_vector_a' or 'correlation' == 'input_vector_b'. + * + * \f$C(i) = scale \sum_{f=0}^{filter\_size-1} A(f+i) \cdot B(f), i=\{0,c\_size-1\}\f$ + * + * This function is unbiased by nature but misses some information, + * specially for the first coefficients. It should be negligible if + * 'filter_size' is much greater than 'c_size', like ('filter_size' / + * 'c_size' > 20). + * + * @param correlation size is 'c_size' + * @param c_size is the 'correlation' order + 1, 'c_size' must be > 0 + * @param input_vector_a size must be >= 'c_size' + 'filter_size' + * @param input_vector_b size must be >= 'c_size' + * @param filter_size is the maximum shift for 'input_vector_a'. In + * practice, 'filter_size' == (a_size - 'c_size') + * @param scale is a factor to multiply the 'correlation' values with + */ +void +rta_correlation_fast_scaled( + rta_real_t * correlation, const unsigned int c_size, + const rta_real_t * input_vector_a, + const rta_real_t * input_vector_b, + const unsigned int filter_size, const rta_real_t scale); + +/** + * Compute correlation between 'input_vector_a' and 'input_vector_b' into + * 'correlation'. If 'input_vector_a' == 'input_vector_b', it computes + * auto-correlation. This function can run in place if 'correlation' == + * 'input_vector_a' or 'correlation' == 'input_vector_b'. + * + * \f$(i) = scale \sum_{f=0}^{filter\_size-1} A(f+i) \cdot B(f), i=\{0,c\_size-1\}\f$ + * + * This function is unbiased by nature but misses some information, + * specially for the first coefficients. It should be negligible if + * 'filter_size' is much greater than 'c_size', like ('filter_size' / + * 'c_size' > 20). + * + * @param correlation size is 'c_size' + * @param c_stride is 'correlation' stride + * @param c_size is the 'correlation' order + 1, 'c_size' must be > 0 + * @param input_vector_a size must be >= 'c_size' + 'filter_size' + * @param a_stride is 'input_vector_a' stride + * @param input_vector_b size must be >= 'c_size' + * @param b_stride is 'input_vector_b' stride + * @param filter_size is the maximum shift for 'input_vector_a'. In + * practice, 'filter_size' == (a_size - 'c_size') + * @param scale is a factor to multiply the 'correlation' values with + */ +void +rta_correlation_fast_scaled_stride( + rta_real_t * correlation, const int c_stride, const unsigned int c_size, + const rta_real_t * input_vector_a, const int a_stride, + const rta_real_t * input_vector_b, const int b_stride, + const unsigned int filter_size, const rta_real_t scale); + +/** + * Compute correlation between 'input_vector_a' and 'input_vector_b' into + * 'correlation'. If 'input_vector_a' == 'input_vector_b', it computes + * auto-correlation. This function can run in place if 'correlation' == + * 'input_vector_a' or 'correlation' == 'input_vector_b'. + * + * \f$C(i) = scale \sum_{f=0}^{max\_filter\_size-i} A(f+i) \cdot B(f), i=\{0,c\_size-1\}\f$ + * + * This function is biased but uses all the information available for + * each coefficient. + * + * @param correlation size is 'c_size' + * @param c_size is the 'correlation' order + 1, 'c_size' must be > 0 + * @param input_vector_a size a_size must be >= 'max_filter_size' + * @param input_vector_b size b_size must be >= 'max_filter_size' + * @param max_filter_size is the maximum shift for 'input_vector_a'. + * 'max_filter_size' must be > 'c_size'. + * In practice, 'max_filter_size' == a_size + * @param scale is a factor to multiply the 'correlation' values with + */ +void +rta_correlation_raw_scaled( + rta_real_t * correlation, const unsigned int c_size, + const rta_real_t * input_vector_a, + const rta_real_t * input_vector_b, + const unsigned int max_filter_size, const rta_real_t scale); + + +/** + * Compute correlation between 'input_vector_a' and 'input_vector_b' into + * 'correlation'. If 'input_vector_a' == 'input_vector_b', it computes + * auto-correlation. This function can run in place if 'correlation' == + * 'input_vector_a' or 'correlation' == 'input_vector_b'. + * + * \f$C(i) = scale \sum_{f=0}^{max\_filter\_size-i} A(f+i) \cdot B(f), i=\{0,c\_size-1\}\f$ + * + * This function is biased but uses all the information available for + * each coefficient. + * + * @param correlation size is 'c_size' + * @param c_stride is 'correlation' stride + * @param c_size is the 'correlation' order + 1, 'c_size' must be > 0 + * @param input_vector_a size a_size must be >= 'max_filter_size' + * @param a_stride is 'input_vector_a' stride + * @param input_vector_b size b_size must be >= 'max_filter_size' + * @param b_stride is 'input_vector_b' stride + * @param max_filter_size is the maximum shift for 'input_vector_a'. + * 'max_filter_size' must be > 'c_size'. + * In practice, 'max_filter_size' == a_size + * @param scale is a factor to multiply the 'correlation' values with + */ +void +rta_correlation_raw_scaled_stride( + rta_real_t * correlation, const int c_stride, const unsigned int c_size, + const rta_real_t * input_vector_a, const int a_stride, + const rta_real_t * input_vector_b, const int b_stride, + const unsigned int max_filter_size, const rta_real_t scale); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_CORRELATION_H_ */ + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_cubic.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_cubic.c new file mode 100644 index 0000000..8ea410e --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_cubic.c @@ -0,0 +1,58 @@ +/** + * @file rta_cubic.h + * @author Norbert.Schnell@ircam.fr + * + * @copyright + * Copyright (C) 1994, 1995, 1998, 1999, 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +/* coefficient atable for cubic interpolation */ + +#include "rta_cubic.h" + +static rta_cubic_coefs_t _rta_cubic_table[RTA_CUBIC_TABLE_SIZE]; +rta_cubic_coefs_t *rta_cubic_table = _rta_cubic_table; + +void rta_cubic_table_init () +{ + int i; + float f; + rta_cubic_coefs_t *p = rta_cubic_table; + + for (i = 0; i < RTA_CUBIC_TABLE_SIZE; i++) + { + f = i * (1.0 / RTA_CUBIC_TABLE_SIZE); + p->pm1 = -0.1666667 * f * (1 - f) * (2 - f); + p->p0 = 0.5 * (1 + f) * (1 - f) * (2 - f); + p->p1 = 0.5 * (1 + f) * f * (2 - f); + p->p2 = -0.1666667 * (1 + f) * f * (1 - f); + p++; + } +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_cubic.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_cubic.h new file mode 100644 index 0000000..1da3d0d --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_cubic.h @@ -0,0 +1,149 @@ +/** + * @file rta_cubic.h + * @author Norbert.Schnell@ircam.fr + * + * @copyright + * Copyright (C) 1994, 1995, 1998, 1999, 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_CUBIC_H +#define _RTA_CUBIC_H + + +/******************************************************************************* + * + * cubic interpolation + * + */ + +#ifndef RTA_CUBIC_TABLE_SIZE +#define RTA_CUBIC_TABLE_SIZE 256 +#endif + +#define RTA_CUBIC_HEAD 1 +#define RTA_CUBIC_TAIL 2 + +#define RTA_CUBIC_TABLE_BITS 8 +#define RTA_CUBIC_TABLE_SIZE 256 + +#define RTA_CUBIC_INTPHASE_LOST_BITS 8 +#define RTA_CUBIC_INTPHASE_FRAC_BITS (RTA_CUBIC_TABLE_BITS + RTA_CUBIC_INTPHASE_LOST_BITS) +#define RTA_CUBIC_INTPHASE_FRAC_SIZE (1 << RTA_CUBIC_INTPHASE_FRAC_BITS) + +#define rta_cubic_get_table_index_from_idefix(i) \ + ((int)(((i).frac & RTA_CUBIC_IDEFIX_BIT_MASK) >> RTA_CUBIC_IDEFIX_SHIFT_BITS)) + +#define rta_cubic_get_table_index_from_frac(f) \ + ((unsigned int)((f) * (double)RTA_CUBIC_TABLE_SIZE) & (RTA_CUBIC_TABLE_SIZE - 1)) + +#define RTA_CUBIC_IDEFIX_SHIFT_BITS 24 +#define RTA_CUBIC_IDEFIX_BIT_MASK 0xff000000 + +#define rta_cubic_intphase_scale(f) ((f) * RTA_CUBIC_INTPHASE_FRAC_SIZE) +#define rta_cubic_intphase_get_int(i) ((i) >> RTA_CUBIC_INTPHASE_FRAC_BITS) +#define rta_cubic_intphase_get_frac(i) ((i) & (RTA_CUBIC_INTPHASE_FRAC_SIZE - 1)) + +typedef struct +{ + float pm1; + float p0; + float p1; + float p2; +} rta_cubic_coefs_t; + +rta_cubic_coefs_t *rta_cubic_table; + +void rta_cubic_table_init (); + +#define rta_cubic_get_coefs(f) \ + (rta_cubic_table + rta_cubic_get_table_index_from_frac(f)) + +#define rta_cubic_calc(x, p) \ + ((x)[-1] * (p)->pm1 + (x)[0] * (p)->p0 + (x)[1] * (p)->p1 + (x)[2] * (p)->p2) + +#define rta_cubic_calc_stride(x, p, s) \ + ((x)[-(s)] * (p)->pm1 + (x)[0] * (p)->p0 + (x)[s] * (p)->p1 + (x)[2 * (s)] * (p)->p2) + +#define rta_cubic_calc_head(x, p) \ + ((x)[0] * (p)->p0 + (x)[1] * (p)->p1 + (x)[2] * (p)->p2) + +#define rta_cubic_calc_stride_head(x, p, s) \ +((x)[0] * (p)->p0 + (x)[s] * (p)->p1 + (x)[2 * (s)] * (p)->p2) + +#define rta_cubic_calc_tailm2(x, p) \ + ((x)[-1] * (p)->pm1 + (x)[0] * (p)->p0 + (x)[1] * (p)->p1) + +#define rta_cubic_calc_tailm2_xm1(x, p, xm1) \ + ((x)[-1] * (p)->pm1 + (x)[0] * (p)->p0 + (x)[1] * (p)->p1 + (xm1) * (p)->p2) + +#define rta_cubic_calc_stride_tailm2(x, p, s) \ + ((x)[-(s)] * (p)->pm1 + (x)[0] * (p)->p0 + (x)[s] * (p)->p1) + +#define rta_cubic_calc_stride_tailm2_xm1(x, p, s, xm1) \ + ((x)[-(s)] * (p)->pm1 + (x)[0] * (p)->p0 + (x)[s] * (p)->p1 + (xm1) * (p)->p2) + +#define rta_cubic_calc_tailm1(x, p) \ + ((x)[-1] * (p)->pm1 + (x)[0] * (p)->p0) + +#define rta_cubic_calc_tailm1_xm2_xm1(x, p, xm2, xm1) \ + ((x)[-1] * (p)->pm1 + (x)[0] * (p)->p0 + (xm2) * (p)->p1 + (xm1) * (p)->p2) + +#define rta_cubic_calc_stride_tailm1(x, p, s) \ + ((x)[-(s)] * (p)->pm1 + (x)[0] * (p)->p0) + +#define rta_cubic_calc_stride_tailm1_xm2_xm1(x, p, s, xm2, xm1) \ + ((x)[-(s)] * (p)->pm1 + (x)[0] * (p)->p0 + (xm2) * (p)->p1 + (xm1) * (p)->p2) + +#define rta_cubic_idefix_interpolate(p, i, y) \ +do { \ + rta_cubic_coefs_t *ft = rta_cubic_table + rta_cubic_get_table_index_from_idefix(i); \ + *(y) = rta_cubic_calc((p) + (i).index, ft); \ + } while(0) + +#define rta_cubic_idefix_interpolate_stride(p, i, s, y) \ + do { \ + rta_cubic_coefs_t *ft = rta_cubic_table + rta_cubic_get_table_index_from_idefix(i); \ + *(y) = rta_cubic_calc_stride((p) + (s) * (i).index, ft, (s)); \ + } while(0) + +#define rta_cubic_intphase_interpolate(p, i, y) \ + do { \ + float* q = (p) + ((i) >> RTA_CUBIC_INTPHASE_FRAC_BITS); \ + rta_cubic_coefs_t *ft = rta_cubic_table + (((i) >> RTA_CUBIC_INTPHASE_LOST_BITS) & (RTA_CUBIC_TABLE_SIZE - 1)); \ + *(y) = rta_cubic_calc(q, ft); \ + } while(0) + +#define rta_cubic_interpolate(p, i, f, y) \ + do { \ + rta_cubic_coefs_t *ft = rta_cubic_table + rta_cubic_get_table_index_from_frac(f); \ + *(y) = rta_cubic_calc((p) + (i), ft); \ + } while(0) + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_dct.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_dct.c new file mode 100644 index 0000000..c0c15cf --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_dct.c @@ -0,0 +1,320 @@ +/** + * @file rta_dct.c + * @author Jean-Philippe.Lambert@ircam.fr + * @date Fri Jun 15 15:29:25 2007 + * + * @brief Discrete Cosine Transform (HTK and Auditory Toolbox styles) + * + * Based on Rastamat by Dan Ellis. + * See http://www.ee.columbia.edu/~dpwe/resources/matlab/rastamat + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_dct.h" +#include "rta_math.h" + +int rta_dct_weights(rta_real_t * weights_matrix, + const unsigned int input_size, + const unsigned int dct_order, + const rta_dct_t dct_t) +{ + int i,j; + int ret = 1; /* return value */ + + /* This is the orthogonal one, the one you want */ + if(dct_t == rta_dct_slaney || dct_t == rta_dct_htk) + { + for(i=0; i<dct_order; i++) + { + for(j=0; j<input_size; j++) + { + weights_matrix[i*input_size+j] = + rta_cos(i*((j+1)*2.-1.)/(2.*input_size)*M_PI) * + rta_sqrt(2./input_size); + } + } + + /* Make it unitary (but not for HTK) */ + if(dct_t == rta_dct_slaney) + { + /* first line only */ + for(j=0; j<input_size; j++) + { + weights_matrix[j] /= M_SQRT2; + } + } + } + + /* + * type 1 (PLPDCT) with implicit repeating of first, last bins + * Deep in the heart of the rasta/feacalc code, there is the logic + * that the first and last auditory bands extend beyond the edge of + * the actual spectra, and they are thus copied from their neighbors. + * Normally, we just ignore those bands and take the 19 in the middle, + * but when feacalc calculates mfccs, it actually takes the dct + * over the spectrum *including* the repeated bins at each end. + * Here, we simulate 'repeating' the bins and an nrow+2-length + * spectrum by adding in extra DCT weight to the first and last + * bins. + */ + else if(dct_t == rta_dct_feacalc) + { + for(i=0; i<dct_order; i++) + { + for(j=0; j<input_size; j++) + { + weights_matrix[i*input_size+j] = + rta_cos(i*(j+1.)/(input_size+1.)*M_PI) * 2.; + } + + /* Add in edge points at ends (includes fixup scale) */ + weights_matrix[i*input_size] += 1.; + if(i&1) /* odd */ + { + weights_matrix[(i+1)*input_size-1] -= 1.; + } + else /* even */ + { + weights_matrix[(i+1)*input_size-1] += 1.; + } + } + + for(i=0; i<dct_order*input_size; i++) + { + weights_matrix[i] /= 2.*(input_size+1.); + } + } + + /* dpwe type 1 - same as old spec2cep that expanded & used fft */ + else if(dct_t == rta_dct_plp) + { + for(i=0; i<dct_order; i++) + { + for(j=0; j<input_size; j++) + { + weights_matrix[i*input_size+j] = + rta_cos(i*j/(input_size-1.)*M_PI) / (input_size-1.); + + } + /* Fixup 'non-repeated' points */ + weights_matrix[i*input_size] *= 0.5; + weights_matrix[(i+1)*input_size-1] *= 0.5; + } + } + else + { + ret = 0; + } + + return ret; +} + +int rta_dct_weights_stride(rta_real_t * weights_matrix, const int w_stride, + const unsigned int input_size, + const unsigned int dct_order, + const rta_dct_t dct_t) +{ + int i,j; + int ret = 1; /* return value */ + + /* This is the orthogonal one, the one you want */ + if(dct_t == rta_dct_slaney || dct_t == rta_dct_htk) + { + for(i=0; i<dct_order; i++) + { + for(j=0; j<input_size; j++) + { + weights_matrix[(i*input_size+j)*w_stride] = + rta_cos(i*((j+1)*2.-1.)/(2.*input_size)*M_PI) * + rta_sqrt(2./input_size); + } + } + + /* Make it unitary (but not for HTK) */ + if(dct_t == rta_dct_slaney) + { + /* first line only */ + for(j=0; j<input_size; j++) + { + weights_matrix[j*w_stride] /= M_SQRT2; + } + } + } + + /* + * type 1 (PLPDCT) with implicit repeating of first, last bins + * Deep in the heart of the rasta/feacalc code, there is the logic + * that the first and last auditory bands extend beyond the edge of + * the actual spectra, and they are thus copied from their neighbors. + * Normally, we just ignore those bands and take the 19 in the middle, + * but when feacalc calculates mfccs, it actually takes the dct + * over the spectrum *including* the repeated bins at each end. + * Here, we simulate 'repeating' the bins and an nrow+2-length + * spectrum by adding in extra DCT weight to the first and last + * bins. + */ + else if(dct_t == rta_dct_feacalc) + { + for(i=0; i<dct_order; i++) + { + for(j=0; j<input_size; j++) + { + weights_matrix[(i*input_size+j)*w_stride] = + rta_cos(i*(j+1.)/(input_size+1.)*M_PI) * 2.; + } + + /* Add in edge points at ends (includes fixup scale) */ + weights_matrix[i*input_size*w_stride] += 1.; + if(i&1) /* odd */ + { + weights_matrix[((i+1)*input_size-1)*w_stride] -= 1.; + } + else /* even */ + { + weights_matrix[((i+1)*input_size-1)*w_stride] += 1.; + } + } + + for(i=0; i<dct_order*input_size; i++) + { + weights_matrix[i*w_stride] /= 2.*(input_size+1.); + } + } + + /* dpwe type 1 - same as old spec2cep that expanded & used fft */ + else if(dct_t == rta_dct_plp) + { + for(i=0; i<dct_order; i++) + { + for(j=0; j<input_size; j++) + { + weights_matrix[(i*input_size+j)*w_stride] = + rta_cos(i*j/(input_size-1.)*M_PI) / (input_size-1.); + + } + /* Fixup 'non-repeated' points */ + weights_matrix[i*input_size*w_stride] *= 0.5; + weights_matrix[((i+1)*input_size-1)*w_stride] *= 0.5; + } + } + else + { + ret = 0; + } + + return ret; +} + +/* Calculate dct from spectral samples */ +void rta_dct(rta_real_t * dct, const rta_real_t * input_vector, + const rta_real_t * weights_matrix, + const unsigned int input_size, + const unsigned int dct_order) +{ + unsigned int i,j; + + for(i=0; i<dct_order; i++) + { + dct[i] = 0.; + for(j=0; j<input_size; j++) + { + dct[i] += weights_matrix[i*input_size+j] * input_vector[j]; + } + } + + return; +} + +void rta_dct_scaled(rta_real_t * dct, const rta_real_t * input_vector, + const rta_real_t * weights_matrix, + const unsigned int input_size, + const unsigned int dct_order, + rta_real_t scale) +{ + unsigned int i,j; + + for(i=0; i<dct_order; i++) + { + dct[i] = 0.; + for(j=0; j<input_size; j++) + { + dct[i] += weights_matrix[i*input_size+j] * input_vector[j] * scale; + } + } + + return; +} + +/* Calculate dct from spectral samples */ +void rta_dct_stride(rta_real_t * dct, const int d_stride, + const rta_real_t * input_vector, const int i_stride, + const rta_real_t * weights_matrix, const int w_stride, + const unsigned int input_size, + const unsigned int dct_order) +{ + unsigned int i,j; + + for(i=0; i<dct_order; i++) + { + dct[i*d_stride] = 0.; + for(j=0; j<input_size; j++) + { + dct[i*d_stride] += weights_matrix[(i*input_size+j)*w_stride] * + input_vector[j*i_stride]; + } + } + + return; +} + +/* Calculate dct from spectral samples */ +void rta_dct_stride_scaled(rta_real_t * dct, const int d_stride, + const rta_real_t * input_vector, const int i_stride, + const rta_real_t * weights_matrix, const int w_stride, + const unsigned int input_size, + const unsigned int dct_order, + rta_real_t scale) +{ + unsigned int i,j; + + for(i=0; i<dct_order; i++) + { + dct[i*d_stride] = 0.; + for(j=0; j<input_size; j++) + { + dct[i*d_stride] += weights_matrix[(i*input_size+j)*w_stride] * + input_vector[j*i_stride] * scale; + } + } + + return; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_dct.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_dct.h new file mode 100644 index 0000000..7299270 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_dct.h @@ -0,0 +1,188 @@ +/** + * @file rta_dct.h + * @author Jean-Philippe.Lambert@ircam.fr + * @date Fri Jun 15 15:29:25 2007 + * + * @brief Discrete Cosine Transform (HTK and Auditory Toolbox styles) + * + * Based on Rastamat by Dan Ellis. + * See http://www.ee.columbia.edu/~dpwe/resources/matlab/rastamat + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_DCT_H_ +#define _RTA_DCT_H_ 1 + +#include "rta.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum +{ + rta_dct_plp = 1, /**< dpwe type 1 - same as old spec2cep that expanded & used fft */ + rta_dct_slaney = 2, /**< orthogonal and unitary (Auditory Toolbox like) */ + rta_dct_htk = 3, /**< orthogonal but not unitary (HTK like) */ + rta_dct_feacalc = 4 /**< type 1 with implicit repeating of first, last bins */ +} rta_dct_t; + + +/* from spec2cep.m */ + +/** + * Generate a matrix of weights 'weights_matrix' to perform a discrete + * cosine transform. This is type II dct, or type I if type is + * specified as 'PLPDCT'. + * + * @param weights_matrix size is 'input_size'*'dct_order' + * @param input_size number of input mel bands + * @param dct_order number of output dct coefficients + * @param dct_type + * PLPDCT dpwe type 1: same as old spec2cep that expanded & used fft + * slaney_dct: orthogonal and unitary + * HTKDCT: orthogonal but not unitary (HTK like) + * feacalc_dct: PLPDCT with implicit repeating of first, last bins + * Deep in the heart of the rasta/feacalc code, there is the logic + * that the first and last auditory bands extend beyond the edge of + * the actual spectra, and they are thus copied from their neighbors. + * Normally, we just ignore those bands and take the 19 in the middle, + * but when feacalc calculates mfccs, it actually takes the cepstrum + * over the spectrum *including* the repeated bins at each end. Here, + * we simulate 'repeating' the bins and an nrow+2-length spectrum by + * adding in extra DCT weight to the first and last bins. + * + * @return 1 on success 0 on fail + */ +int rta_dct_weights(rta_real_t * weights_matrix, + const unsigned int input_size, + const unsigned int dct_order, + const rta_dct_t dct_type); + +/** + * Generate a matrix of weights 'weights_matrix' to perform a discrete + * cosine transform. This is type II dct, or type I if type is + * specified as 'PLPDCT'. + * + * @param weights_matrix size is 'input_size'*'dct_order' + * @param w_stride is 'weights_matrix' stride + * @param input_size number of input mel bands + * @param dct_order number of output dct coefficients + * @param dct_type + * PLPDCT dpwe type 1: same as old spec2cep that expanded & used fft + * slaney_dct: orthogonal and unitary + * HTKDCT: orthogonal but not unitary (HTK like) + * feacalc_dct: PLPDCT with implicit repeating of first, last bins + * Deep in the heart of the rasta/feacalc code, there is the logic + * that the first and last auditory bands extend beyond the edge of + * the actual spectra, and they are thus copied from their neighbors. + * Normally, we just ignore those bands and take the 19 in the middle, + * but when feacalc calculates mfccs, it actually takes the cepstrum + * over the spectrum *including* the repeated bins at each end. Here, + * we simulate 'repeating' the bins and an nrow+2-length spectrum by + * adding in extra DCT weight to the first and last bins. + * + * @return 1 on success 0 on fail + */ +int rta_dct_weights_stride(rta_real_t * weights_matrix, const int w_stride, + const unsigned int input_size, + const unsigned int dct_order, + const rta_dct_t dct_type); + +/** + * Perform a discrete cosine transform as + * 'dct' = 'weights_matrix'*'input_vector' + * + * Calculate 'dct' from the log of the spectral samples + * 'input_vector' as + * 'dct' = 'weights_matrix'*log('input_vector') + * to get MFCC. + * + * @param dct size is 'dct_order' + * @param input_vector size is 'input_size' it is actually the log of the + * mel bands + * @param weights_matrix size is 'input_size'*'dct_order' + * @param input_size number of input mel bands + * @param dct_order number of output dct coefficients + * + */ +void rta_dct(rta_real_t * dct, const rta_real_t * input_vector, + const rta_real_t * weights_matrix, + const unsigned int input_size, + const unsigned int dct_order); + +void rta_dct_scaled(rta_real_t * dct, const rta_real_t * input_vector, + const rta_real_t * weights_matrix, + const unsigned int input_size, + const unsigned int dct_order, + rta_real_t scale); + + /** + * + * Perform a discrete cosine transform as + * 'dct' = 'weights_matrix'*'input_vector' + * + * Calculate 'dct' from the log of the spectral samples + * 'input_vector' as + * 'dct' = 'weights_matrix'*log('input_vector') + * to get MFCC. + * + * @param dct size is 'dct_order' + * @param d_stride is 'dct' stride + * @param input_vector size is 'input_size' it is actually the log of the + * mel bands + * @param i_stride is 'input_vector' stride + * @param weights_matrix size is 'input_size'*'dct_order' + * @param w_stride is 'weights_matrix' stride + * @param input_size number of input mel bands + * @param dct_order number of output dct coefficients + * + */ +void rta_dct_stride(rta_real_t * dct, const int d_stride, + const rta_real_t * input_vector, const int i_stride, + const rta_real_t * weights_matrix, const int w_stride, + const unsigned int input_size, + const unsigned int dct_order); + +void rta_dct_stride_scaled(rta_real_t * dct, const int d_stride, + const rta_real_t * input_vector, const int i_stride, + const rta_real_t * weights_matrix, const int w_stride, + const unsigned int input_size, + const unsigned int dct_order, + rta_real_t scale); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_DCT_H_ */ + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_delta.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_delta.c new file mode 100644 index 0000000..3c62bc8 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_delta.c @@ -0,0 +1,193 @@ +/** + * @file rta_delta.c + * @author Jean-Philippe.Lambert@ircam.fr + * @date Thu Aug 2 18:39:26 2007 + * + * @brief Delta (derivative for a sequence at a fixed sampling rate) + * + * Simple linear slope. Each column (a scalar value during time) is + * filtered separately. + * + * @copyright + * Copyright (C) 2007 - 2009 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_delta.h" +#include "rta_math.h" + +/* <filter_size> should be odd and positive */ +int rta_delta_weights(rta_real_t * weights_vector, const unsigned int filter_size) +{ + int i; + rta_real_t filter_value; + + const rta_real_t half_filter_size = rta_floor(filter_size * 0.5); + + for(i=0, filter_value=-half_filter_size; + i<filter_size; + i++, filter_value+=1.) + { + weights_vector[i] = filter_value; + } + + return 1; +} + +/* <filter_size> should be odd and positive */ +int rta_delta_weights_stride(rta_real_t * weights_vector, const int w_stride, + const unsigned int filter_size) +{ + int i; + rta_real_t filter_value; + + const rta_real_t half_filter_size = rta_floor(filter_size * 0.5); + + for(i=0, filter_value=-half_filter_size; + i<filter_size*w_stride; + i+=w_stride, filter_value+=1.) + { + weights_vector[i] = filter_value; + } + + return 1; +} + + +rta_real_t rta_delta_normalization_factor(const unsigned int filter_size) +{ + rta_real_t normalization = 0.; + + if(filter_size>0) + { + int i; + const int half_filter_size = filter_size / 2; + + for(i=1; i<=half_filter_size; i++) + { + normalization += (rta_real_t) (i*i); + } + + normalization = 0.5 / normalization; + } + return normalization; +} + +void rta_delta(rta_real_t * delta, const rta_real_t * input_vector, + const rta_real_t * weights_vector, + const unsigned int filter_size) +{ + unsigned int i; + + *delta = 0.; + + for(i=0; i<filter_size; i++) + { + if(weights_vector[i] != 0.) + { + *delta += input_vector[i] * weights_vector[i]; + } + } + + return; +} + +void rta_delta_stride(rta_real_t * delta, + const rta_real_t * input_vector, const int i_stride, + const rta_real_t * weights_vector, const int w_stride, + const unsigned int filter_size) +{ + unsigned int i; + + *delta = 0.; + + for(i=0; i<filter_size; i++) + { + if(weights_vector[i*w_stride] != 0.) + { + *delta += input_vector[i*i_stride] * weights_vector[i*w_stride]; + } + } + + return; +} + + +void rta_delta_vector(rta_real_t * delta, + const rta_real_t * input_matrix, const unsigned int input_size, + const rta_real_t * weights_vector, const unsigned int filter_size) +{ + unsigned int i,j; + + for(j=0; j<input_size; j++) + { + delta[j] = 0.; + } + + for(i=0; i<filter_size; i++) + { + if(weights_vector[i] != 0.) /* skip zeros */ + { + for(j=0; j<input_size; j++) + { + delta[j] += input_matrix[i*input_size+j] * weights_vector[i]; + } + } + } + + return; +} + +void rta_delta_vector_stride(rta_real_t * delta, const int d_stride, + const rta_real_t * input_matrix, const int i_stride, + const unsigned int input_size, + const rta_real_t * weights_vector, const int w_stride, + const unsigned int filter_size) +{ + int i,j; + + for(j=0; j<input_size*d_stride; j+=d_stride) + { + delta[j] = 0.; + } + + for(i=0; i<filter_size; i++) + { + if(weights_vector[i*w_stride] != 0.) /* skip zeros */ + { + for(j=0; j<input_size; j++) + { + delta[j*d_stride] += input_matrix[(i*input_size+j)*i_stride] * + weights_vector[i*w_stride]; + } + } + } + + return; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_delta.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_delta.h new file mode 100644 index 0000000..7c82c64 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_delta.h @@ -0,0 +1,209 @@ +/** + * @file rta_delta.h + * @author Jean-Philippe.Lambert@ircam.fr + * @date Fri Jun 15 15:29:25 2007 + * + * @brief Delta (derivative for a sequence at a fixed sampling rate) + * + * Simple linear slope. Each column (a scalar value during time) is + * filtered separately. + * + * @copyright + * Copyright (C) 2007 - 2009 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_DELTA_H_ +#define _RTA_DELTA_H_ 1 + +#include "rta.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/* from deltas.m */ +/** + * + * Generate a vector of weights 'weights_vector' to calculate the + * delta (derivative) of a sequence of regularly sampled values. Use + * a 'filter_size'-points window. to calculate delta using a simple + * linear slope. This mirrors the delta calculation performed in + * feacalc etc. Delta corresponds to the mid-points values (which are + * not used, by the way). + * + * 'filter_size' must be odd and stricly positive. + * + * 'filter_size' == 7 is a common value to calculate the delta-mfcc + * and 'filter_size' == 5 is a common value for delta-delta-mfcc. + * + * Note for HTK 'DELTAWINDOW' (same for 'ACCWINDOW'): + * 'filter_size' == ('DELTAWINDOW' * 2) + 1 + * + * @param weights_vector size is 'filter_size' + * @param filter_size must be odd and stricly positive. + * + * @return 1 on success 0 on fail + */ +int rta_delta_weights(rta_real_t * weights_vector, const unsigned int filter_size); + +/** + * + * Generate a vector of weights 'weights_vector' to calculate the + * delta (derivatives) of a sequence of regularly sampled values. Use + * a 'filter_size'-points window. to calculate delta using a simple + * linear slope. This mirrors the delta calculation performed in + * feacalc etc. Delta corresponds to the mid-points values (which are + * not used, by the way). + * + * 'filter_size' must be odd and stricly positive. + * + * 'filter_size' == 7 is a common value to calculate the delta-mfcc + * and 'filter_size' == 5 is a common value for delta-delta-mfcc. + * + * Note for HTK 'DELTAWINDOW' (same for 'ACCWINDOW'): + * 'filter_size' == ('DELTAWINDOW' * 2) + 1 + * + * @param weights_vector size is 'filter_size' + * @param w_stride is 'weights_vector' stride + * @param filter_size must be odd and stricly positive. + * + * @return 1 on success 0 on fail + */ +int rta_delta_weights_stride(rta_real_t * weights_vector, const int w_stride, + const unsigned int filter_size); + +/** + * Generate a factor to multiply the delta with, in order to normalize + * the 'delta' values against the 'filter_size'. The delta is then the + * slope of the linear regression. Note that it is equivalent to + * multiply the 'weights_vector' values (but it is less precise, as + * errors in weights are added). + * + * \f$normalization = \frac{1}{2 \left(\sum\limits_{\theta=1}^{\theta=filter_size} \theta^2 \right)}\f$ + * + * @param filter_size is the number of points to evaluate the delta + * + * @return normalization factor to multiply the delta with + */ +rta_real_t rta_delta_normalization_factor(const unsigned int filter_size); + +/** + * Calculate the delta of 'input_vector' as + * 'delta' = 'input_vector' * 'weights_vector' + * + * To calculate 'delta' over a ring buffer of 'input_vector', replicate + * the 'weights_vector' at the end (which memory size is now + * 2*'filter_size') and use (weights_vector + filter_size - 1 - + * current_input) as 'weights_vector' start pointer. + * + * @param delta is a scalar + * @param input_vector size is 'filter_size' + * @param weights_vector size is 'filter_size' + * @param filter_size is the number of points to evaluate the delta + */ +void rta_delta(rta_real_t * delta, const rta_real_t * input_vector, + const rta_real_t * weights_vector, + const unsigned int filter_size); + +/** + * Calculate the delta of 'input_vector' as + * 'delta' = 'input_vector' * 'weights_vector' + * + * To calculate 'delta' over a ring buffer of 'input_vector', replicate + * the 'weights_vector' at the end (which memory size is now + * 2*'filter_size') and use (weights_vector + filter_size - 1 - + * current_input) as 'weights_vector' start pointer. + * + * @param delta is a scalar + * @param input_vector size is 'filter_size' + * @param i_stride is 'input_vector' stride + * @param weights_vector size is 'filter_size' + * @param w_stride is 'weights_vector' stride + * @param filter_size is the number of points to evaluate the delta + */ +void rta_delta_stride(rta_real_t * delta, + const rta_real_t * input_vector, const int i_stride, + const rta_real_t * weights_vector, const int w_stride, + const unsigned int filter_size); + + +/** + * Calculate the deltas of 'input_matrix' as + * 'delta' = 'input_matrix' * 'weights_vector' + * + * To calculate 'delta' over a ring buffer of rows 'input_matrix', + * replicate the 'weights_vector' at the end (which memory size is now + * 2*'filter_size') and use (weights_vector + filter_size - 1 - + * current_input) as 'weights_vector' start pointer. + * + * @param delta size is 'input_size' + * @param input_matrix size is 'filter_size'*'input_size'. It is a vector + * of inputs as rows + * @param input_size is the 'input_matrix' rows number and 'delta' size + * @param weights_vector size is 'filter_size' + * @param filter_size is 'input_matrix' columns number, which is the + * number of points to evaluate the deltas + */ +void rta_delta_vector(rta_real_t * delta, + const rta_real_t * input_matrix, const unsigned int input_size, + const rta_real_t * weights_vector, const unsigned int filter_size); + +/** + * Calculate the deltas of 'input_matrix' as + * 'delta' = 'input_matrix' * 'weights_vector' + * + * To calculate 'delta' over a ring buffer of rows 'input_matrix', + * replicate the 'weights_vector' at the end (which memory size is now + * 2*'filter_size') and use (weights_vector + filter_size - 1 - + * current_input) as 'weights_vector' start pointer. + * + * @param delta size is 'input_size' + * @param d_stride is 'delta' stride + * @param input_matrix size is 'filter_size'*'input_size'. It is a vector + * of inputs as rows + * @param i_stride is 'input_matrix' stride + * @param input_size is the 'input_matrix' rows number and 'delta' size + * @param weights_vector size is 'filter_size' + * @param w_stride is 'weights_vector' stride + * @param filter_size is 'input_matrix' columns number, which is the + * number of points to evaluate the deltas + */ +void rta_delta_vector_stride(rta_real_t * delta, const int d_stride, + const rta_real_t * input_matrix, const int i_stride, + const unsigned int input_size, + const rta_real_t * weights_vector, const int w_stride, + const unsigned int filter_size); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_DELTA_H_ */ + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_fft.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_fft.c new file mode 100644 index 0000000..3937ad3 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_fft.c @@ -0,0 +1,1595 @@ +/** + * @file rta_fft.c + * @author Jean-Philippe Lambert + * @date Thu Sep 12 18:10:41 2007 + * + * @brief Fast Fourier Transform + * + * Based on FTM (FTS) FFT routines. + * @see http://ftm.ircam.fr + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_fft.h" +#include "rta_complex.h" +#include "rta_stdlib.h" /* memory management */ + +#include "rta_int.h" /* integer log2 function */ +#include "rta_math.h" /* M_PI, cos, sin */ + +/* ------- private (depends on implementation) ------ */ +/* from FTS implementation (Butterfly) */ +struct rta_fft_setup +{ + void * output; + int o_stride; + unsigned int fft_size; + void * input; + int i_stride; + unsigned int input_size; + unsigned int log2_size; + rta_fft_t fft_type; + rta_real_t * nyquist; /**< last coefficient for real transforms */ + rta_real_t * scale; + rta_real_t * cos; + rta_real_t * sin; + unsigned int * bitrev; +}; /* from fft_lookup_t */ + + +/* bitreversal with oversampled index table */ +/* from cfft_bitreversal_over_inplc */ +static void +bitreversal_oversampled_inplace(rta_complex_t * buf, + const unsigned int * bitrev, + const unsigned int size) +{ + unsigned int idx; + rta_complex_t z; + + for(idx=0; idx<size; idx++) + { + unsigned int xdi = bitrev[2 * idx]; + + if(xdi > idx) + { + z = buf[idx]; + buf[idx] = buf[xdi]; + buf[xdi] = z; + } + } + return; +} + +static void +bitreversal_oversampled_inplace_stride(rta_complex_t * buf, + const int b_stride, + const unsigned int * bitrev, + const unsigned int size) +{ + unsigned int idx; + rta_complex_t z; + + for(idx=0; idx<size; idx++) + { + unsigned int xdi = bitrev[2 * idx]; + + if(xdi > idx) + { + int idx_tmp = idx * b_stride; + xdi *= b_stride; + z = buf[idx_tmp]; + buf[idx_tmp] = buf[xdi]; + buf[xdi] = z; + } + } + return; +} + +/* from cfft_bitreversal_inplc */ +static void +bitreversal_inplace(rta_complex_t * buf, + const unsigned int * bitrev, + const unsigned int size) +{ + unsigned int idx; + rta_complex_t z; + + for(idx=0; idx<size; idx++) + { + unsigned int xdi = bitrev[idx]; + if(xdi > idx) + { + z = buf[idx]; + buf[idx] = buf[xdi]; + buf[xdi] = z; + } + } + return; +} + +static void +bitreversal_inplace_stride(rta_complex_t * buf, + const int b_stride, + const unsigned int * bitrev, + const unsigned int size) +{ + unsigned int idx; + rta_complex_t z; + + for(idx=0; idx<size; idx++) + { + unsigned int xdi = bitrev[idx]; + if(xdi > idx) + { + int idx_tmp = idx * b_stride; + xdi *= b_stride; + z = buf[idx_tmp]; + buf[idx_tmp] = buf[xdi]; + buf[xdi] = z; + } + } + return; +} + +/******************************************************************** + * from cfft_inplc: + * + * fft computation on bit reversed shuffled data + * for fft: coef = exp(j*2*PI*n/N), n = 0..N-1 + * for ifft: coef = exp(-j*2*PI*n/N), n = 0..N-1 + * see routine: generate_fft_coefficients() + */ +/* FFT with over-sampled coefficient tables */ +static void +fft_inplace(rta_complex_t * buf, + const rta_real_t * coef_real, + const rta_real_t * coef_imag, + const unsigned int size) +{ + unsigned int m, n; + unsigned int j, k, up, down; + + for(up=1, down=size>>1; up<size; up<<=1, down>>=1) + { + for(j=0, k=0; j<up; j++, k+=down) + { + //rta_complex_t W = coef_real[k] + coef_imag[k] *I; + rta_complex_t W = rta_make_complex(coef_real[k], coef_imag[k]); + + unsigned int incr = 2 * up; + + for(m=j, n=j+up; m<size; m+=incr, n+=incr) + { + rta_complex_t A = buf[m]; + rta_complex_t B = buf[n]; + + rta_complex_t C = rta_make_complex(rta_cimag(B) * rta_cimag(W) + rta_creal(B) * rta_creal(W), + rta_cimag(B) * rta_creal(W) - rta_creal(B) * rta_cimag(W)); + + buf[m] = rta_add_complex(A , C); + buf[n] = rta_sub_complex(A , C); + } + } + } + return; +} + +/******************************************************************** + * from cfft_inplc: + * + * fft computation on bit reversed shuffled data + * for fft: coef = exp(j*2*PI*n/N), n = 0..N-1 + * for ifft: coef = exp(-j*2*PI*n/N), n = 0..N-1 + * see routine: generate_fft_coefficients() + */ +/* FFT with over-sampled coefficient tables */ +static void +fft_inplace_stride(rta_complex_t * buf, + const int b_stride, + const rta_real_t * coef_real, + const rta_real_t * coef_imag, + const unsigned int size) +{ + unsigned int m, n; + unsigned int j, k, up, down; + + for(up=1, down=size>>1; up<size; up<<=1, down>>=1) + { + for(j=0, k=0; j<up; j++, k+=down) + { + //rta_complex_t W = coef_real[k] + coef_imag[k] *I; + rta_complex_t W = rta_make_complex(coef_real[k], coef_imag[k]); + + int incr = 2 * up * b_stride; + + for(m=j*b_stride, n=(j+up)*b_stride; m<size; m+=incr, n+=incr) + { + rta_complex_t A = buf[m]; + rta_complex_t B = buf[n]; + + rta_complex_t C = rta_make_complex(rta_cimag(B) * rta_cimag(W) + rta_creal(B) * rta_creal(W), + rta_cimag(B) * rta_creal(W) - rta_creal(B) * rta_cimag(W)); + + buf[m] = rta_add_complex(A, C); + buf[n] = rta_sub_complex(A, C); + } + } + } + return; +} + + +/* FFT with over-sampled coefficient tables */ +static void +fft_inplace_oversampled_coefficients(rta_complex_t * buf, + const rta_real_t * coef_real, + const rta_real_t * coef_imag, + const unsigned int size) +{ + unsigned int m, n; + unsigned int j, k, up, down; + + for(up=1, down=size>>1; up<size; up<<=1, down>>=1) + { + for(j=0, k=0; j<up; j++, k+=2*down) + { + //rta_complex_t W = coef_real[k] + coef_imag[k] *I; + rta_complex_t W = rta_make_complex(coef_real[k], coef_imag[k]); + + unsigned int incr = 2 * up; + + for(m=j, n=j+up; m<size; m+=incr, n+=incr) + { + rta_complex_t A = buf[m]; + rta_complex_t B = buf[n]; + + rta_complex_t C = rta_make_complex(rta_cimag(B) * rta_cimag(W) + rta_creal(B) * rta_creal(W), + rta_cimag(B) * rta_creal(W) - rta_creal(B) * rta_cimag(W)); + + buf[m] = rta_add_complex(A, C); + buf[n] = rta_sub_complex(A, C); + } + } + } + return; +} + +/* FFT with over-sampled coefficient tables */ +static void +fft_inplace_oversampled_coefficients_stride(rta_complex_t * buf, + const int b_stride, + const rta_real_t * coef_real, + const rta_real_t * coef_imag, + const unsigned int size) +{ + unsigned int m, n; + unsigned int j, k, up, down; + + for(up=1, down=size>>1; up<size; up<<=1, down>>=1) + { + for(j=0, k=0; j<up; j++, k+=2*down) + { + //rta_complex_t W = coef_real[k] + coef_imag[k] *I; + rta_complex_t W = rta_make_complex(coef_real[k], coef_imag[k]); + + int incr = 2 * up * b_stride; + + for(m=j*b_stride, n=(j+up)*b_stride; m<size; m+=incr, n+=incr) + { + rta_complex_t A = buf[m]; + rta_complex_t B = buf[n]; + + rta_complex_t C = rta_make_complex(rta_cimag(B) * rta_cimag(W) + rta_creal(B) * rta_creal(W), + rta_cimag(B) * rta_creal(W) - rta_creal(B) * rta_cimag(W)); + + buf[m] = rta_add_complex(A, C); + buf[n] = rta_sub_complex(A, C); + } + } + } + return; +} + +static void +ifft_inplace(rta_complex_t * buf, + const rta_real_t * coef_real, + const rta_real_t * coef_imag, + const unsigned int size) +{ + unsigned int m, n; + unsigned int j, k, up, down; + + for(up=1, down=size>>1; up<size; up<<=1, down>>=1) + { + for(j=0, k=0; j<up; j++, k+=down) + { + //rta_complex_t W = coef_real[k] + coef_imag[k] *I; + rta_complex_t W = rta_make_complex(coef_real[k], coef_imag[k]); + + unsigned int incr = 2 * up; + + for(m=j, n=j+up; m<size; m+=incr, n+=incr) + { + rta_complex_t A = buf[m]; + rta_complex_t B = buf[n]; + + rta_complex_t C = rta_make_complex(rta_creal(B) * rta_creal(W) - rta_cimag(B) * rta_cimag(W), + rta_creal(B) * rta_cimag(W) + rta_cimag(B) * rta_creal(W)); + + buf[m] = rta_add_complex(A, C); + buf[n] = rta_sub_complex(A, C); + } + } + } + return; +} + +static void +ifft_inplace_stride(rta_complex_t * buf, + const int b_stride, + const rta_real_t * coef_real, + const rta_real_t * coef_imag, + const unsigned int size) +{ + unsigned int m, n; + unsigned int j, k, up, down; + + for(up=1, down=size>>1; up<size; up<<=1, down>>=1) + { + for(j=0, k=0; j<up; j++, k+=down) + { + //rta_complex_t W = coef_real[k] + coef_imag[k] *I; + rta_complex_t W = rta_make_complex(coef_real[k], coef_imag[k]); + + int incr = 2 * up * b_stride; + + for(m=j*b_stride, n=(j+up)*b_stride; m<size; m+=incr, n+=incr) + { + rta_complex_t A = buf[m]; + rta_complex_t B = buf[n]; + + rta_complex_t C = rta_make_complex(rta_creal(B) * rta_creal(W) - rta_cimag(B) * rta_cimag(W), + rta_creal(B) * rta_cimag(W) + rta_cimag(B) * rta_creal(W)); + + buf[m] = rta_add_complex(A, C); + buf[n] = rta_sub_complex(A, C); + } + } + } + return; +} + + +static void +ifft_inplace_oversampled_coefficients(rta_complex_t * buf, + const rta_real_t * coef_real, + const rta_real_t * coef_imag, + const unsigned int size) +{ + unsigned int m, n; + unsigned int j, k, up, down; + + for(up=1, down=size>>1; up<size; up<<=1, down>>=1) + { + for(j=0, k=0; j<up; j++, k+=2*down) + { + //rta_complex_t W = coef_real[k] + coef_imag[k] *I; + rta_complex_t W = rta_make_complex(coef_real[k], coef_imag[k]); + + unsigned int incr = 2 * up; + + for(m=j, n=j+up; m<size; m+=incr, n+=incr) + { + rta_complex_t A = buf[m]; + rta_complex_t B = buf[n]; + + rta_complex_t C = rta_make_complex(rta_creal(B) * rta_creal(W) - rta_cimag(B) * rta_cimag(W), + rta_creal(B) * rta_cimag(W) + rta_cimag(B) * rta_creal(W)); + + buf[m] = rta_add_complex(A, C); + buf[n] = rta_sub_complex(A, C); + } + } + } + return; +} + +static void +ifft_inplace_oversampled_coefficients_stride(rta_complex_t * buf, + const int b_stride, + const rta_real_t * coef_real, + const rta_real_t * coef_imag, + const unsigned int size) +{ + unsigned int m, n; + unsigned int j, k, up, down; + + for(up=1, down=size>>1; up<size; up<<=1, down>>=1) + { + for(j=0, k=0; j<up; j++, k+=2*down) + { + //rta_complex_t W = coef_real[k] + coef_imag[k] *I; + rta_complex_t W = rta_make_complex(coef_real[k], coef_imag[k]); + + int incr = 2 * up * b_stride; + + for(m=j*b_stride, n=(j+up)*b_stride; m<size; m+=incr, n+=incr) + { + rta_complex_t A = buf[m]; + rta_complex_t B = buf[n]; + + rta_complex_t C = rta_make_complex(rta_creal(B) * rta_creal(W) - rta_cimag(B) * rta_cimag(W), + rta_creal(B) * rta_cimag(W) + rta_cimag(B) * rta_creal(W)); + + buf[m] = rta_add_complex(A, C); + buf[n] = rta_sub_complex(A, C); + } + } + } + return; +} + + +/* from rfft_shuffle_after_fft_inplc */ +/************************************************************************** + * + * rfft_shuffle_after_fft() and rfft_shuffle_befor_ifft() + * + * shuffling routines to compute the positive half of a spectra out of the FFT + * of a 2*N points real signal treated as real and imaginary part of a complex + * signal and vice versa: + * + * with: + * X+ = rfft_shuffle_after_fft(S, ...) ... use after complex FFT + * and: + * S = rfft_shuffle_befor_ifft(X+, ...) ... use befor complex IFFT + * + * where: + * x[m], m = 0..2*N-1 ... real signal + * X+[k], k = 0..N-1 ... positive part of spectrum of x[m] + * and: + * s[n] = x[2n] + j x[2n+1], n = 0..N-1 ... real signal as complex vector + * S[k], k = 0..N-1 ... complex FFT of complex vector s[n] + * + * + * arguments: + * buf ... buffer for inplace shuffling + * in, out ... input vector, output vector for non inplace shuffling + * coef_re ... lookup table with cos(2*PI*i/size), i = 0 ... size/2-1 + * coef_im ... lookup table with sin(2*PI*i/size), i = 0 ... size/2-1 + * size ... # of complex points (cfft size) + * (Note: the lookup tables just contain half of the sine/cosine period in size points) + */ +static void +shuffle_after_real_fft_inplace(rta_complex_t * buf, + const rta_real_t * coef_real, + const rta_real_t * coef_imag, + const int size) +{ + int idx, xdi; + + /* nyquist point coded in imaginary part first point */ + buf[0] = rta_make_complex(rta_creal(buf[0]) + rta_cimag(buf[0]), rta_creal(buf[0]) - rta_cimag(buf[0])); + + + for(idx=1, xdi=size-1; idx<size/2; idx++, xdi--) + { + rta_real_t x1_real = 0.5*(rta_creal(buf[idx]) + rta_creal(buf[xdi])); + rta_real_t x1_imag = 0.5*(rta_cimag(buf[idx]) - rta_cimag(buf[xdi])); + + rta_real_t x2_real = 0.5*(rta_cimag(buf[xdi]) + rta_cimag(buf[idx])); + rta_real_t x2_imag = 0.5*(rta_creal(buf[xdi]) - rta_creal(buf[idx])); + + /* real of x2[idx] * exp(-j*PI*i/size) */ + rta_real_t x2Ej_real = x2_imag * coef_imag[idx] + x2_real * coef_real[idx]; + + /* imaginary of x2[idx] * exp(-j*PI*i/size) */ + rta_real_t x2Ej_imag = x2_imag * coef_real[idx] - x2_real * coef_imag[idx]; + + buf[idx] = rta_make_complex(x1_real + x2Ej_real, x1_imag + x2Ej_imag); + buf[xdi] = rta_make_complex(x1_real - x2Ej_real, x2Ej_imag - x1_imag); + } + + buf[idx] = rta_conj(buf[idx]); + return; +} + +static void +shuffle_after_real_fft_inplace_stride(rta_complex_t * buf, + const int b_stride, + const rta_real_t * coef_real, + const rta_real_t * coef_imag, + const int size) +{ + int idx; + int idx_s, xdi_s; /* indexes * b_stride */ + + /* nyquist point coded in imaginary part first point */ + buf[0] = rta_make_complex(rta_creal(buf[0]) + rta_cimag(buf[0]), rta_creal(buf[0]) - rta_cimag(buf[0])); + + for(idx=1, idx_s=b_stride, xdi_s=(size-1)*b_stride; + idx<size/2; + idx++, idx_s+=b_stride, xdi_s-=b_stride) + { + rta_real_t x1_real = 0.5*(rta_creal(buf[idx_s]) + rta_creal(buf[xdi_s])); + rta_real_t x1_imag = 0.5*(rta_cimag(buf[idx_s]) - rta_cimag(buf[xdi_s])); + + rta_real_t x2_real = 0.5*(rta_cimag(buf[xdi_s]) + rta_cimag(buf[idx_s])); + rta_real_t x2_imag = 0.5*(rta_creal(buf[xdi_s]) - rta_creal(buf[idx_s])); + + /* real of x2[idx] * exp(-j*PI*i/size) */ + rta_real_t x2Ej_real = x2_imag * coef_imag[idx] + x2_real * coef_real[idx]; + + /* imaginary of x2[idx] * exp(-j*PI*i/size) */ + rta_real_t x2Ej_imag = x2_imag * coef_real[idx] - x2_real * coef_imag[idx]; + + buf[idx_s] = rta_make_complex(x1_real + x2Ej_real, x1_imag + x2Ej_imag); + buf[xdi_s] = rta_make_complex(x1_real - x2Ej_real, x2Ej_imag - x1_imag); + } + + buf[idx_s] = rta_conj(buf[idx_s]); + return; +} + +/* from rfft_shuffle_before_ifft_inplc */ +static void +shuffle_before_real_inverse_fft_inplace(rta_complex_t * buf, + const rta_real_t *coef_real, + const rta_real_t *coef_imag, + const int size) +{ + int idx, xdi; + + /* nyquist point coded in imaginary part of the first point */ + buf[0] = rta_make_complex(rta_creal(buf[0]) + rta_cimag(buf[0]), rta_creal(buf[0]) - rta_cimag(buf[0])); + + for(idx=1, xdi=size-1; idx<size/2; idx++, xdi--) + { + rta_real_t x1_real = rta_creal(buf[idx]) + rta_creal(buf[xdi]); + rta_real_t x1_imag = rta_cimag(buf[idx]) - rta_cimag(buf[xdi]); + + /* real of x2[idx] * exp(-j*PI*i/size) */ + rta_real_t x2Ej_real = rta_creal(buf[idx]) - rta_creal(buf[xdi]); + + /* imaginary of x2[idx] * exp(-j*PI*i/size) */ + rta_real_t x2Ej_imag = rta_cimag(buf[idx]) + rta_cimag(buf[xdi]); + + /* real of x2 */ + rta_real_t x2_real = x2Ej_real * coef_real[idx] - x2Ej_imag * coef_imag[idx]; + + /* imaginary of x2 */ + rta_real_t x2_imag = x2Ej_real * coef_imag[idx] + x2Ej_imag * coef_real[idx]; + + buf[idx] = rta_make_complex(x1_real - x2_imag, x1_imag + x2_real); + buf[xdi] = rta_make_complex(x1_real + x2_imag, x2_real - x1_imag); + + } + buf[idx] = rta_mul_complex_real(rta_conj(buf[idx]), 2); + return; +} + +static void +shuffle_before_real_inverse_fft_inplace_stride(rta_complex_t * buf, + const int b_stride, + const rta_real_t *coef_real, + const rta_real_t *coef_imag, + const int size) +{ + int idx; + int idx_s, xdi_s; /* indexes * b_stride */ + + /* nyquist point coded in imaginary part of the first point */ + buf[0] = rta_make_complex(rta_creal(buf[0]) + rta_cimag(buf[0]), rta_creal(buf[0]) - rta_cimag(buf[0])); + + for(idx=1, idx_s=b_stride, xdi_s=(size-1)*b_stride; + idx<size/2; + idx++, idx_s+=b_stride, xdi_s-=b_stride) + { + rta_real_t x1_real = rta_creal(buf[idx_s]) + rta_creal(buf[xdi_s]); + rta_real_t x1_imag = rta_cimag(buf[idx_s]) - rta_cimag(buf[xdi_s]); + + /* real of x2[idx] * exp(-j*PI*i/size) */ + rta_real_t x2Ej_real = rta_creal(buf[idx_s]) - rta_creal(buf[xdi_s]); + + /* imaginary of x2[idx] * exp(-j*PI*i/size) */ + rta_real_t x2Ej_imag = rta_cimag(buf[idx_s]) + rta_cimag(buf[xdi_s]); + + /* real of x2 */ + rta_real_t x2_real = x2Ej_real * coef_real[idx] - x2Ej_imag * coef_imag[idx]; + + /* imaginary of x2 */ + rta_real_t x2_imag = x2Ej_real * coef_imag[idx] + x2Ej_imag * coef_real[idx]; + + buf[idx_s] = rta_make_complex(x1_real - x2_imag, x1_imag + x2_real); + buf[xdi_s] = rta_make_complex(x1_real + x2_imag, x2_real - x1_imag); + + } + buf[idx_s] = rta_mul_complex_real(rta_conj(buf[idx_s]), 2); + return; +} + + +/* FTS fill_real */ +static void +fill_real_scale_zero_pad(rta_real_t * output, const unsigned int output_size, + rta_real_t * input, const unsigned int input_size, + const rta_real_t scale) +{ + unsigned int i; + unsigned int used_input_size; + + if(input_size > output_size) + { + used_input_size = output_size; + } + else + { + used_input_size = input_size; + } + + if(scale != 1.) + { + for(i=0; i<used_input_size; i++) + { + output[i] = input[i] * scale; + } + } + else + { + for (i = 0; i < used_input_size; i++) + { + output[i] = input[i]; + } + } + + /* zero padding */ + for(; i<output_size; i++) + { + output[i] = 0.0; + } + return; +} + +static void +fill_real_scale_zero_pad_stride( + rta_real_t * output, const int o_stride, const unsigned int output_size, + rta_real_t * input, const int i_stride, const unsigned int input_size, + const rta_real_t scale) +{ + unsigned int o, i; + unsigned int used_input_size; + + if(input_size > output_size) + { + used_input_size = output_size; + } + else + { + used_input_size = input_size; + } + + if(scale != 1.) + { + for(i=0, o=0; i<used_input_size*i_stride; i+=i_stride, o+=o_stride) + { + output[o] = input[i] * scale; + } + } + else + { + for(i=0, o=0; i<used_input_size*i_stride; i+=i_stride, o+=o_stride) + { + output[o] = input[i]; + } + } + + /* zero padding */ + for(; o<output_size*o_stride; o+=o_stride) + { + output[o] = 0.0; + } + return; +} + +/* FTS fill_complex */ +static void +fill_complex_scale_zero_pad(rta_complex_t * output, const unsigned int output_size, + rta_complex_t * input, const unsigned int input_size, + const rta_real_t scale) +{ + unsigned int i; + unsigned int used_input_size; + + if(input_size > output_size) + { + used_input_size = output_size; + } + else + { + used_input_size = input_size; + } + + if(scale != 1.) + { + for(i=0; i<used_input_size; i++) + { + output[i] = rta_mul_complex_real(input[i], scale); + } + } + else + { + for(i=0; i<used_input_size; i++) + { + output[i] = input[i]; + } + } + + /* zero padding */ + for(; i<output_size; i++) + { + rta_set_complex_real(output[i], 0.0); + } + return; +} + +static void +fill_complex_scale_zero_pad_stride( + rta_complex_t * output, const int o_stride, const unsigned int output_size, + rta_complex_t * input, const int i_stride, const unsigned int input_size, + const rta_real_t scale) +{ + unsigned int i, o; + unsigned int used_input_size; + + if(input_size > output_size) + { + used_input_size = output_size; + } + else + { + used_input_size = input_size; + } + + if(scale != 1.) + { + for(i=0, o=0; i<used_input_size*i_stride; i+=i_stride, o+=o_stride) + { + output[o] = rta_mul_complex_real(input[i], scale); + } + } + else + { + for(i=0, o=0; i<used_input_size*i_stride; i+=i_stride, o+=o_stride) + { + output[o] = input[i]; + } + } + + /* zero padding */ + for(; o<output_size*o_stride; o+=o_stride) + { + rta_set_complex_real(output[o], 0.0); + } + return; +} + + +static void +fill_complex_from_real_scale_zero_pad( + rta_complex_t * output, const unsigned int output_size, + rta_real_t * input, const unsigned int input_size, + const rta_real_t scale) +{ + unsigned int i; + unsigned int used_input_size; + + if(input_size > output_size) + { + used_input_size = output_size; + } + else + { + used_input_size = input_size; + } + + if(scale != 1.) + { + for(i=0; i<used_input_size; i++) + { + rta_set_complex_real(output[i], input[i] * scale); + } + } + else + { + for (i = 0; i < used_input_size; i++) + { + rta_set_complex_real(output[i], input[i]); + } + } + + /* zero padding */ + for(; i<output_size; i++) + { + rta_set_complex_real(output[i], 0.0); + } + return; +} + +static void +fill_complex_from_real_scale_zero_pad_stride( + rta_complex_t * output, const int o_stride, const unsigned int output_size, + rta_real_t * input, const int i_stride, const unsigned int input_size, + const rta_real_t scale) +{ + unsigned int i, o; + unsigned int used_input_size; + + if(input_size > output_size) + { + used_input_size = output_size; + } + else + { + used_input_size = input_size; + } + + if(scale != 1.) + { + for(i=0, o=0; i<used_input_size*i_stride; i+=i_stride, o+=o_stride) + { + rta_set_complex_real(output[o], input[i] * scale); + } + } + else + { + for(i=0, o=0; i<used_input_size*i_stride; i+=i_stride, o+=o_stride) + { + rta_set_complex_real(output[o], input[i]); + } + } + + /* zero padding */ + for(; o<output_size*o_stride; o+=o_stride) + { + rta_set_complex_real(output[o], 0.0); + } + return; +} + + +static void +scale_real_zero_pad_in_place(rta_real_t * buf, const unsigned int output_size, + const unsigned int input_size, + const rta_real_t scale) +{ + unsigned int i; + unsigned int used_input_size; + + if(input_size > output_size) + { + used_input_size = output_size; + } + else + { + used_input_size = input_size; + } + + if(scale != 1.) + { + for(i=0; i<used_input_size; i++) + { + buf[i] *= scale; + } + } + else + { + i = used_input_size; + } + + /* zero padding */ + for(; i<output_size; i++) + { + buf[i] = 0.0; + } + return; +} + +static void +scale_real_zero_pad_in_place_stride( + rta_real_t * buf, const int b_stride, const unsigned int output_size, + const unsigned int input_size, + const rta_real_t scale) +{ + unsigned int i; + unsigned int used_input_size; + + if(input_size > output_size) + { + used_input_size = output_size; + } + else + { + used_input_size = input_size; + } + + if(scale != 1.) + { + for(i=0; i<used_input_size*b_stride; i+=b_stride) + { + buf[i] *= scale; + } + } + else + { + i = used_input_size*b_stride; + } + + /* zero padding */ + for(; i<output_size*b_stride; i+=b_stride) + { + buf[i] = 0.0; + } + return; +} + + +static void +scale_complex_zero_pad_in_place(rta_complex_t * buf, const unsigned int output_size, + const unsigned int input_size, + const rta_real_t scale) +{ + unsigned int i; + unsigned int used_input_size; + + if(input_size > output_size) + { + used_input_size = output_size; + } + else + { + used_input_size = input_size; + } + + if(scale != 1.) + { + for(i=0; i<used_input_size; i++) + { + buf[i] = rta_mul_complex_real(buf[i], scale); + } + } + else + { + i = used_input_size; + } + + /* zero padding */ + for(; i<output_size; i++) + { + rta_set_complex_real(buf[i], 0.0); + } + return; +} + +static void +scale_complex_zero_pad_in_place_stride( + rta_complex_t * buf, const int b_stride, const unsigned int output_size, + const unsigned int input_size, + const rta_real_t scale) +{ + unsigned int i; + unsigned int used_input_size; + + if(input_size > output_size) + { + used_input_size = output_size; + } + else + { + used_input_size = input_size; + } + + if(scale != 1.) + { + for(i=0; i<used_input_size*b_stride; i+=b_stride) + { + buf[i] = rta_mul_complex_real(buf[i], scale); + } + } + else + { + i = used_input_size*b_stride; + } + + /* zero padding */ + for(; i<output_size*b_stride; i+=b_stride) + { + rta_set_complex_real(buf[i], 0.0); + } + return; +} + + + +/* sine, cosine and bitreverse tables */ +/* retrun 1 on success, 0 on fail */ +static int +tables_new(rta_fft_setup_t * fft_setup) +{ + int ret = 0; + /* sine (and cosine) table */ + + /* 1/4 more for cosine as phase shift and one more point at the end */ + /* => total size is 5/4*sine_size + 1 */ + fft_setup->sin = (rta_real_t *) rta_malloc( + sizeof(rta_real_t) * (fft_setup->fft_size * 5/4 + 1)); + + if(fft_setup->sin != NULL) + { + /* sine function from 0 to 2pi, inclusive (plus 1/4 for cosine) */ + /* step = 5/4 * 2 pi / (5/4 * size) = 2 * pi / size */ + const rta_real_t step = 2. * M_PI / fft_setup->fft_size; + unsigned int i; + for(i=0; i<=fft_setup->fft_size * 5/4; i++) + { + fft_setup->sin[i] = rta_sin(i*step); + } + + /* cosine function is just a phase-shifted sine */ + /* Memory is shared */ + fft_setup->cos = fft_setup->sin + (fft_setup->fft_size / 4); + + /* Bit reversal table */ + fft_setup->bitrev = (unsigned int *) rta_malloc( + sizeof(unsigned int) * fft_setup->fft_size); + + if(fft_setup->bitrev != NULL) + { + unsigned int idx, xdi; + unsigned int i, j; + + for(i=0; i<fft_setup->fft_size; i++) + { + idx = i; + xdi = 0; + + for(j=1; j<fft_setup->log2_size; j++) + { + xdi += (idx & 1); + xdi <<= 1; + idx >>= 1; + } + + fft_setup->bitrev[i] = xdi + (idx & 1); + } + + ret = 1; /* setup complete */ + } + else /* bitrev failed */ + rta_free(fft_setup->sin); + } + /* else: sin failed */ + + return ret; +} + +/* ------- end of private ---------------------------- */ + +/* ------- Public functions -------------------------- */ + +int +rta_fft_real_setup_new(rta_fft_setup_t ** fft_setup, + const rta_fft_t fft_type, rta_real_t * scale, + void * input, const unsigned int input_size, + void * output, const unsigned int fft_size, + rta_real_t * nyquist) +/* FFTW uses input and output to plan executions */ +{ + int ret = 0; + + *fft_setup = (rta_fft_setup_t *) rta_malloc(sizeof(rta_fft_setup_t)); + + if(*fft_setup != NULL) + { + /* actual FFT size is the next power of 2 of the given argument */ + (*fft_setup)->fft_size = rta_inextpow2(fft_size); + (*fft_setup)->log2_size = rta_ilog2((*fft_setup)->fft_size); + (*fft_setup)->input_size = input_size; + + (*fft_setup)->output = output; + (*fft_setup)->o_stride = 1; + + (*fft_setup)->input = input; + (*fft_setup)->i_stride = 1; + + (*fft_setup)->nyquist = nyquist; + + (*fft_setup)->scale = scale; + (*fft_setup)->fft_type = fft_type; + + ret = tables_new(*fft_setup); + if(ret == 0) + { + rta_free(*fft_setup); + *fft_setup = NULL; + } + } + + return ret; +} + +int +rta_fft_real_setup_new_stride( + rta_fft_setup_t ** fft_setup, + const rta_fft_t fft_type, rta_real_t * scale, + void * input, const int i_stride, const unsigned int input_size, + void * output, const int o_stride, const unsigned int fft_size, + rta_real_t * nyquist) +/* FFTW uses input and output to plan executions */ +{ + int ret = 0; + + *fft_setup = (rta_fft_setup_t *) rta_malloc(sizeof(rta_fft_setup_t)); + + if(fft_setup != NULL) + { + /* actual FFT size is the next power of 2 of the given argument */ + (*fft_setup)->fft_size = rta_inextpow2(fft_size); + (*fft_setup)->log2_size = rta_ilog2((*fft_setup)->fft_size); + (*fft_setup)->input_size = input_size; + + (*fft_setup)->output = output; + (*fft_setup)->o_stride = o_stride; + + (*fft_setup)->input = input; + (*fft_setup)->i_stride = i_stride; + + (*fft_setup)->nyquist = nyquist; + + (*fft_setup)->scale = scale; + (*fft_setup)->fft_type = fft_type; + + ret = tables_new(*fft_setup); + if(ret == 0) + { + rta_free(*fft_setup); + *fft_setup = NULL; + } + } + + return ret; +} + +int +rta_fft_setup_new(rta_fft_setup_t ** fft_setup, + const rta_fft_t fft_type, rta_real_t * scale, + rta_complex_t * input, const unsigned int input_size, + rta_complex_t * output, const unsigned int fft_size) +/* FFTW uses input and output to plan executions */ +{ + int ret = 0; + + *fft_setup = (rta_fft_setup_t *) rta_malloc(sizeof(rta_fft_setup_t)); + + if(*fft_setup != NULL) + { + /* actual FFT size is the next power of 2 of the given argument */ + (*fft_setup)->fft_size = rta_inextpow2(fft_size); + (*fft_setup)->log2_size = rta_ilog2((*fft_setup)->fft_size); + (*fft_setup)->input_size = input_size; + + (*fft_setup)->output = (void *) output; + (*fft_setup)->o_stride = 1; + + (*fft_setup)->input = (void *) input; + (*fft_setup)->i_stride = 1; + + (*fft_setup)->nyquist = NULL; + + (*fft_setup)->scale = scale; + (*fft_setup)->fft_type = fft_type; + + ret = tables_new(*fft_setup); + if(ret == 0) + { + rta_free(*fft_setup); + *fft_setup = NULL; + } + } + + return ret; +} + +int +rta_fft_setup_new_stride( + rta_fft_setup_t ** fft_setup, + const rta_fft_t fft_type, rta_real_t * scale, + rta_complex_t * input, const int i_stride, const unsigned int input_size, + rta_complex_t * output, const int o_stride, const unsigned int fft_size) +/* FFTW uses input and output to plan executions */ +{ + int ret = 0; + + *fft_setup = (rta_fft_setup_t *) rta_malloc(sizeof(rta_fft_setup_t)); + + if(*fft_setup != NULL) + { + /* actual FFT size is the next power of 2 of the given argument */ + (*fft_setup)->fft_size = rta_inextpow2(fft_size); + (*fft_setup)->log2_size = rta_ilog2((*fft_setup)->fft_size); + (*fft_setup)->input_size = input_size; + + (*fft_setup)->output = (void *) output; + (*fft_setup)->o_stride = o_stride; + + (*fft_setup)->input = (void *) input; + (*fft_setup)->i_stride = i_stride; + + (*fft_setup)->nyquist = NULL; + + (*fft_setup)->scale = scale; + (*fft_setup)->fft_type = fft_type; + + ret = tables_new(*fft_setup); + if(ret == 0) + { + rta_free(*fft_setup); + *fft_setup = NULL; + } + } + + return ret; +} + + +void +rta_fft_setup_delete(rta_fft_setup_t * fft_setup) +{ + if(fft_setup != NULL) + { + if(fft_setup->sin != NULL) + { + rta_free(fft_setup->sin); + } + + if(fft_setup->bitrev != NULL) + { + rta_free(fft_setup->bitrev); + } + + rta_free(fft_setup); + } + + return; +} + + +void +rta_fft_execute(void * output, void * input, const unsigned int input_size, + rta_fft_setup_t * fft_setup) +{ + const unsigned int no_stride = + fft_setup->i_stride == 1 && fft_setup->o_stride == 1; + unsigned int spectrum_size = fft_setup->fft_size >> 1; + fft_setup->input = input; + fft_setup->output = output; + fft_setup->input_size = input_size; + + switch(fft_setup->fft_type) + { + case rta_fft_real_to_complex_1d: + { + rta_real_t * real_input = (rta_real_t *) fft_setup->input; + rta_complex_t * complex_output = (rta_complex_t *) fft_setup->output; + + /* out of place transform */ + if(fft_setup->input != fft_setup->output) + { + /* at this moment, the output buffer is real, as the input one */ + if(no_stride) + { + fill_real_scale_zero_pad( + (rta_real_t *) fft_setup->output, fft_setup->fft_size, + real_input, fft_setup->input_size, *(fft_setup->scale)); + } + else + { + fill_real_scale_zero_pad_stride( + (rta_real_t *) fft_setup->output, fft_setup->o_stride, + fft_setup->fft_size, + real_input, fft_setup->i_stride, fft_setup->input_size, + *(fft_setup->scale)); + } + } + else + { + if(no_stride) + { + scale_real_zero_pad_in_place( + real_input, fft_setup->fft_size, + fft_setup->input_size, *(fft_setup->scale)); + } + else + { + /* for in place transforms, fft_setup->o_stride and */ + /* fft_setup->i_stride must be the equal */ + scale_real_zero_pad_in_place_stride( + real_input, fft_setup->i_stride, fft_setup->fft_size, + fft_setup->input_size, *(fft_setup->scale)); + } + } + + if(fft_setup->o_stride == 1) + { + bitreversal_oversampled_inplace( + complex_output, fft_setup->bitrev, spectrum_size); + + fft_inplace_oversampled_coefficients( + complex_output, fft_setup->cos, fft_setup->sin, spectrum_size); + + shuffle_after_real_fft_inplace( + complex_output, fft_setup->cos, fft_setup->sin, spectrum_size); + } + else + { + bitreversal_oversampled_inplace_stride( + complex_output, fft_setup->o_stride, fft_setup->bitrev, spectrum_size); + + fft_inplace_oversampled_coefficients_stride( + complex_output, fft_setup->o_stride, + fft_setup->cos, fft_setup->sin, spectrum_size); + + shuffle_after_real_fft_inplace_stride( + complex_output, fft_setup->o_stride, + fft_setup->cos, fft_setup->sin, spectrum_size); + + } + *(fft_setup->nyquist) = rta_cimag(complex_output[0]); + rta_set_complex_real(complex_output[0], rta_creal(complex_output[0])); + + break; + } + + case rta_fft_complex_to_real_1d: + { + rta_complex_t * complex_input = (rta_complex_t *) fft_setup->input; + rta_real_t * real_output = (rta_real_t *) fft_setup->output; + rta_complex_t * complex_output = (rta_complex_t *) fft_setup->output; + + /* out of place transform */ + if(fft_setup->input != fft_setup->output) + { + if(no_stride) + { + fill_complex_scale_zero_pad( + complex_output, spectrum_size, + complex_input, fft_setup->input_size, *(fft_setup->scale)); + } + else + { + fill_complex_scale_zero_pad_stride( + complex_output, fft_setup->o_stride, spectrum_size, + complex_input, fft_setup->i_stride, fft_setup->input_size, + *(fft_setup->scale)); + } + } + else + { + if(no_stride) + { + scale_complex_zero_pad_in_place( + complex_input, spectrum_size, + fft_setup->input_size,*(fft_setup->scale)); + } + else + { + /* for in place transforms, fft_setup->o_stride and */ + /* fft_setup->i_stride must be the equal */ + scale_complex_zero_pad_in_place_stride( + complex_input, fft_setup->i_stride, spectrum_size, + fft_setup->input_size,*(fft_setup->scale)); + } + } + + /* nyquist value is coded on the first imaginary value */ + /* there is no stride here: real and imaginary values of the */ + /* complex type must be contiguous */ + if(*(fft_setup->scale) != 1.) + { + real_output[1] = *(fft_setup->nyquist) * *(fft_setup->scale); + } + else + { + real_output[1] = *(fft_setup->nyquist); + } + + if(fft_setup->o_stride == 1) + { + shuffle_before_real_inverse_fft_inplace( + complex_output, fft_setup->cos, fft_setup->sin, spectrum_size); + + bitreversal_oversampled_inplace( + complex_output, fft_setup->bitrev, spectrum_size); + + ifft_inplace_oversampled_coefficients( + complex_output, fft_setup->cos, fft_setup->sin, spectrum_size); + } + else + { + shuffle_before_real_inverse_fft_inplace_stride( + complex_output, fft_setup->o_stride, + fft_setup->cos, fft_setup->sin, spectrum_size); + + bitreversal_oversampled_inplace_stride( + complex_output, fft_setup->o_stride, + fft_setup->bitrev, spectrum_size); + + ifft_inplace_oversampled_coefficients_stride( + complex_output, fft_setup->o_stride, + fft_setup->cos, fft_setup->sin, spectrum_size); + } + + break; + } + + case rta_fft_complex_1d: + { + rta_complex_t * complex_input = (rta_complex_t *) fft_setup->input; + rta_complex_t * complex_output = (rta_complex_t *) fft_setup->output; + + /* out of place transform */ + if(fft_setup->input != fft_setup->output) + { + if(no_stride) + { + fill_complex_scale_zero_pad( + complex_output, fft_setup->fft_size, + complex_input, fft_setup->input_size, *(fft_setup->scale)); + } + else + { + fill_complex_scale_zero_pad_stride( + complex_output, fft_setup->o_stride, fft_setup->fft_size, + complex_input, fft_setup->i_stride, fft_setup->input_size, + *(fft_setup->scale)); + } + } + else + { + if(no_stride) + { + scale_complex_zero_pad_in_place( + complex_input, fft_setup->fft_size, + fft_setup->input_size,*(fft_setup->scale)); + } + else + { + /* for in place transforms, fft_setup->o_stride and */ + /* fft_setup->i_stride must be the equal */ + scale_complex_zero_pad_in_place_stride( + complex_input, fft_setup->i_stride, fft_setup->fft_size, + fft_setup->input_size,*(fft_setup->scale)); + } + } + + if(fft_setup->o_stride == 1) + { + bitreversal_inplace(complex_output, fft_setup->bitrev, fft_setup->fft_size); + + fft_inplace(complex_output, fft_setup->cos, fft_setup->sin, fft_setup->fft_size); + } + else + { + bitreversal_inplace_stride(complex_output, fft_setup->o_stride, + fft_setup->bitrev, fft_setup->fft_size); + + fft_inplace_stride(complex_output, fft_setup->o_stride, + fft_setup->cos, fft_setup->sin, fft_setup->fft_size); + } + + break; + } + + case rta_fft_complex_inverse_1d: + { + rta_complex_t * complex_input = (rta_complex_t *) fft_setup->input; + rta_complex_t * complex_output = (rta_complex_t *) fft_setup->output; + + /* out of place transform */ + if(fft_setup->input != fft_setup->output) + { + if(no_stride) + { + fill_complex_scale_zero_pad( + complex_output, fft_setup->fft_size, + complex_input, fft_setup->input_size, *(fft_setup->scale)); + } + else + { + fill_complex_scale_zero_pad_stride( + complex_output, fft_setup->o_stride, fft_setup->fft_size, + complex_input, fft_setup->i_stride, fft_setup->input_size, + *(fft_setup->scale)); + } + } + else + { + if(no_stride) + { + scale_complex_zero_pad_in_place( + complex_input, fft_setup->fft_size, + fft_setup->input_size,*(fft_setup->scale)); + } + else + { + /* for in place transforms, fft_setup->o_stride and */ + /* fft_setup->i_stride must be the equal */ + scale_complex_zero_pad_in_place_stride( + complex_input, fft_setup->i_stride, fft_setup->fft_size, + fft_setup->input_size,*(fft_setup->scale)); + } + } + + if(fft_setup->o_stride == 1) + { + bitreversal_inplace( + complex_output, fft_setup->bitrev, fft_setup->fft_size); + + ifft_inplace( + complex_output, fft_setup->cos, fft_setup->sin, fft_setup->fft_size); + } + else + { + bitreversal_inplace_stride(complex_output, fft_setup->o_stride, + fft_setup->bitrev, fft_setup->fft_size); + ifft_inplace_stride(complex_output, fft_setup->o_stride, + fft_setup->cos, fft_setup->sin, fft_setup->fft_size); + } + + break; + } + + default: + break; + } + return; +} + +inline void +rta_fft_real_execute(void * output, void * input, const unsigned int input_size, + rta_fft_setup_t * fft_setup, + rta_real_t * nyquist) +{ + fft_setup->nyquist = nyquist; + rta_fft_execute(output, input, input_size, fft_setup); + return; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_fft.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_fft.h new file mode 100644 index 0000000..0a2f84d --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_fft.h @@ -0,0 +1,316 @@ +/** + * @file rta_fft.h + * @author Jean-Philippe Lambert + * @date Thu Sep 12 18:10:41 2007 + * + * @brief Fast Fourier Transform + * + * Based on FTM (based on FTS) FFT routines. + * @see http://ftm.ircam.fr + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_FFT_H_ +#define _RTA_FFT_H_ 1 + +#include "rta.h" +#include "rta_complex.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum +{ + rta_fft_real_to_complex_1d = 1, /**< real to complex direct transform */ + rta_fft_complex_to_real_1d = 2, /**< complex to real inverse transform */ + rta_fft_complex_1d = 3, /**< complex to complex direct transform */ + rta_fft_complex_inverse_1d = 4 /**< complex to complex inverse transform*/ +} rta_fft_t; + +/* rta_fft_setup is private (depends on implementation) */ +typedef struct rta_fft_setup rta_fft_setup_t; + + +/** + * Allocate and initialize an FFT setup for real to complex or complex + * to real transform, according to the planned processes. + * + * The internal implementation always uses an FFT size of the next (or + * equal) power of 2 of the given 'fft_size'. If the 'input_size is + * smaller than the actual FFT size, it is zero-padded. The use of + * external libraries may differ. + * + * Processing can be in place if 'input' == 'output'. Any real input + * data must be written as real (static cast). + * + * For an out of place transform, 'input' and 'output' must not + * overlap. + * + * \see rta_fft_setup_delete + * + * @param fft_setup is an address of a pointer to a private structure, + * which may depend on the actual FFT implementation. This function + * allocates 'fft_setup' and fills it. + * @param fft_type may be real_to_complex_1d or complex_to_real_1d + * @param scale is usually used for inverse FFT as 1/'fft_size' in + * order to obtain the identity transform when calculating FFT and + * then inverse FFT. It does not need to be constant and may change + * after the setup. + * @param input can be an array of rta_real_t or rta_complex_t, + * depending on 'fft_type'. + * It may be used to determine a proper setup (FFTW) and its content + * may be affected. + * @param input_size must be <= 'fft_size' + * @param output can be an array of rta_real_t or rta_complex_t, + * depending on 'fft_type'. + * It may be used to determine a proper setup (FFTW) and its content + * may be affected. + * @param fft_size must be >= 'input_size' + * @param nyquist is the last coefficient for real transforms + * + * @return 1 on success 0 on fail. If it fails, nothing should be done + * with 'fft_setup' (even a delete). + */ +int +rta_fft_real_setup_new(rta_fft_setup_t ** fft_setup, + rta_fft_t fft_type, rta_real_t * scale, + void * input, const unsigned int input_size, + void * output, const unsigned int fft_size, + rta_real_t * nyquist); + +/** + * Allocate and initialize an FFT setup for real to complex or complex + * to real transform, according to the planned processes. + * + * The internal implementation always uses an FFT size of the next (or + * equal) power of 2 of the given 'fft_size'. If the 'input_size is + * smaller than the actual FFT size, it is zero-padded. The use of + * external libraries may differ. + * + * Processing can be in place if 'input' == 'output'. Any real input + * data must be written as real (static cast), using 'o_stride'. + * + * For an out of place transform, 'input' and 'output' must not + * overlap and 'i_stride' and 'o_stride' must be equal. + * + * \see rta_fft_setup_delete + * + * @param fft_setup is an address of a pointer to a private structure, + * which may depend on the actual FFT implementation. This function + * allocates 'fft_setup' and fills it. + * @param fft_type may be real_to_complex_1d or complex_to_real_1d + * @param scale is usually used for inverse FFT as 1/'fft_size' in + * order to obtain the identity transform when calculating FFT and + * then inverse FFT. It does not need to be constant and may change + * after the setup. + * @param input can be an array of rta_real_t or rta_complex_t, + * depending on 'fft_type'. + * It may be used to determine a proper setup (FFTW) and its content + * may be affected. + * @param i_stride is 'input' stride + * @param input_size must be <= 'fft_size' + * @param output can be an array of rta_real_t or rta_complex_t, + * depending on 'fft_type'. + * It may be used to determine a proper setup (FFTW) and its content + * may be affected. + * @param o_stride is 'output' stride + * @param fft_size must be >= 'input_size' + * @param nyquist is the last coefficient for real transforms + * + * @return 1 on success 0 on fail. If it fails, nothing should be done + * with 'fft_setup' (even a delete). + */ +int +rta_fft_real_setup_new_stride( + rta_fft_setup_t ** fft_setup, + rta_fft_t fft_type, rta_real_t * scale, + void * input, const int i_stride, const unsigned int input_size, + void * output, const int o_stride, const unsigned int fft_size, + rta_real_t * nyquist); + +/** + * Allocate and initialize an FFT setup for complex transform, direct + * or inverse, according to the planned processes. + * + * The internal implementation always uses an FFT size of the next (or + * equal) power of 2 of the given 'fft_size'. If the 'input_size is + * smaller than the actual FFT size, it is zero-padded. The use of + * external libraries may differ. + * + * Processing can be in place if 'input' == 'output'. Any real input + * data must be written as complex (real and imaginary values must be + * contiguous, imaginary one being zero). + * + * For an out of place transform, 'input' and 'output' must not + * overlap. + * + * \see rta_fft_setup_delete + * + * @param fft_setup is an address of a pointer to a private structure, + * which may depend on the actual FFT implementation. This function + * allocates 'fft_setup' and fills it. + * @param fft_type may be rta_fft_complex_1d or + * rta_fft_complex_inverse_1d + * @param scale is usually used for inverse FFT as 1/'fft_size' in + * order to obtain the identity transform when calculating FFT and + * then inverse FFT. It does not need to be constant and may change + * after the setup. + * @param input is an array of rta_complex_t. + * It may be used to determine a proper setup (FFTW) and its content + * may be affected. + * @param input_size must be <= 'fft_size' + * @param output is an array of rta_complex_t. + * It may be used to determine a proper setup (FFTW) and its content + * may be affected. + * @param fft_size must be >= 'input_size' + * + * @return 1 on success 0 on fail. If it fails, nothing should be done + * with 'fft_setup' (even a delete). + */ +int +rta_fft_setup_new(rta_fft_setup_t ** fft_setup, + rta_fft_t fft_type, rta_real_t * scale, + rta_complex_t * input, const unsigned int input_size, + rta_complex_t * output, const unsigned int fft_size); +/** + * Allocate and initialize an FFT setup for complex transform, direct + * or inverse, according to the planned processes. + * + * The internal implementation always uses an FFT size of the next (or + * equal) power of 2 of the given 'fft_size'. If the 'input_size is + * smaller than the actual FFT size, it is zero-padded. The use of + * external libraries may differ. + * + * Processing can be in place if 'input' == 'output'. (real and + * imaginary values must be contiguous no matter the strides). + * + * For an out of place transform, 'input' and 'output' must not + * overlap. + * + * \see rta_fft_setup_delete + * + * @param fft_setup is an address of a pointer to a private structure, + * which may depend on the actual FFT implementation. This function + * allocates 'fft_setup' and fills it. + * @param fft_type may be rta_fft_complex_1d or + * crta_fft_complex_inverse_1d + * @param scale is usually used for inverse FFT as 1/'fft_size' in + * order to obtain the identity transform when calculating FFT and + * then inverse FFT. It does not need to be constant and may change + * after the setup. + * @param input is an array of rta_complex_t. + * It may be used to determine a proper setup (FFTW) and its content + * may be affected. + * @param i_stride is 'input' stride + * @param input_size must be <= 'fft_size' + * @param output is an array of rta_complex_t. + * It may be used to determine a proper setup (FFTW) and its content + * may be affected. + * @param o_stride is 'output' stride + * @param fft_size must be >= 'input_size' + * + * @return 1 on success 0 on fail. If it fails, nothing should be done + * with 'fft_setup' (even a delete). + */ +int +rta_fft_setup_new_stride( + rta_fft_setup_t ** fft_setup, + rta_fft_t fft_type, rta_real_t * scale, + rta_complex_t * input, const int i_stride, const unsigned int input_size, + rta_complex_t * output, const int o_stride, const unsigned int fft_size); + +/** + * Deallocate any (sucessfully) allocated FFT setup. + * + * \see rta_fft_setup_new + * + * @param fft_setup is a pointer to the memory wich will be released. + */ +void rta_fft_setup_delete(rta_fft_setup_t * fft_setup); + +/** + * Compute an FFT according to an FFT setup. It is possible to use + * different 'input' and 'output' arguments as those used to + * plan the setup, but they must use exactly the same size and stride. + * + * \see rta_fft_setup_new + * \see rta_fft_real_setup_new + * \see rta_fft_setup_new_stride + * \see rta_fft_real_setup_new_stride + * + * @param output can be an array of rta_real_t or rta_complex_t, + * depending on 'fft_type'. + * @param input can be an array of rta_real_t or rta_complex_t, + * depending on 'fft_type'. + * @param input_size is used to perform zero padding, not to resize + * 'input' after a planned setup. + * @param fft_setup is a pointer to a private structure, which may + * depend on the actual FFT implementation. + */ +void rta_fft_execute(void * output, void * input, const unsigned int input_size, + rta_fft_setup_t * fft_setup); + + +/** + * Compute an FFT according to an FFT setup. It is possible to use + * different 'input' and 'output' arguments as those used to + * plan the setup, but they must use exactly the same size and stride. + * + * \see rta_fft_setup_new + * \see rta_fft_real_setup_new + * \see rta_fft_setup_new_stride + * \see rta_fft_real_setup_new_stride + * + * @param output can be an array of rta_real_t or rta_complex_t, + * depending on 'fft_type'. + * @param input can be an array of rta_real_t or rta_complex_t, + * depending on 'fft_type'. + * @param input_size is used to perform zero padding, not to resize + * 'input' after a planned setup. + * @param fft_setup is a pointer to a private structure, which may + * depend on the actual FFT implementation. + * @param nyquist is the address of the real transform value at the + * Nyquist frequency (for direct and inverse real transforms). + */ +void +rta_fft_real_execute(void * output, void * input, const unsigned int input_size, + rta_fft_setup_t * fft_setup, + rta_real_t * nyquist); + +#ifdef __cplusplus +} +#endif + + +#endif /* _RTA_FFT_H_ */ + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_filter.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_filter.h new file mode 100644 index 0000000..07bb0b1 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_filter.h @@ -0,0 +1,67 @@ +/** + * @file rta_filter.h + * @author Jean-Philippe.Lambert@ircam.fr + * @date Fri Aug 29 12:38:46 2008 + * + * @brief Filter types + * + * @copyright + * Copyright (C) 2007 - 2009 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_FILTER_H_ +#define _RTA_FILTER_H_ 1 + +#include "rta.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef enum +{ + rta_lowpass = 0, + rta_highpass = 1, + rta_bandpass_constant_skirt = 2, /* msp name: resonant */ + rta_bandpass_constant_peak = 3, /* msp name: bandpass */ + rta_notch = 4, /* msp name: bandstop */ + rta_allpass = 5, + rta_peaking = 6, /* msp name: peaknotch */ + rta_lowshelf = 7, + rta_highshelf = 8 +} rta_filter_t; + + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_FILTER_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_lifter.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_lifter.c new file mode 100644 index 0000000..a0bc63b --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_lifter.c @@ -0,0 +1,165 @@ +/** + * @file rta_lifter.c + * @author Jean-Philippe.Lambert@ircam.fr + * @date Fri Jun 15 15:29:25 2007 + * + * @brief Cepstral liftering (HTK and Auditory Toolbox styles) + * + * Based on Rastamat by Dan Ellis. + * @see http://www.ee.columbia.edu/~dpwe/resources/matlab/rastamat + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_lifter.h" +#include "rta_math.h" + +int rta_lifter_weights(rta_real_t * weights_vector, const unsigned int cepstrum_order, + const rta_real_t liftering_factor, + const rta_lifter_t lifter_t, const rta_lifter_mode_t lifter_m) +{ + int i; + int ret = 1; /* return value */ + + if(lifter_t == rta_lifter_exponential) + { + weights_vector[0] = weights_vector[1] = 1.; + for(i=2; i<cepstrum_order; i++) + { + weights_vector[i] = rta_pow(i, liftering_factor); + } + } + /* HTK-style liftering */ + else if(lifter_t == rta_lifter_sinusoidal) + { + weights_vector[0] = 1.; + for(i=1; i<cepstrum_order; i++) + { + weights_vector[i] = 1. + liftering_factor / 2. * + rta_sin(i * M_PI / liftering_factor); + } + } + else + { + ret = 0; + } + /* inversion */ + if(lifter_m == rta_lifter_mode_inverse) + { + for(i=1; i<cepstrum_order; i++) + { + weights_vector[i] = 1./weights_vector[i]; + } + } + + return ret; +} + +int rta_lifter_weights_stride(rta_real_t * weights_vector, const int w_stride, + const unsigned int cepstrum_order, + const rta_real_t liftering_factor, + const rta_lifter_t lifter_t, const rta_lifter_mode_t lifter_m) +{ + int i; + int ret = 1; /* return value */ + + if(lifter_t == rta_lifter_exponential) + { + weights_vector[0] = weights_vector[w_stride] = 1.; + for(i=2; i<cepstrum_order; i++) + { + weights_vector[i*w_stride] = rta_pow(i, liftering_factor); + } + } + /* HTK-style liftering */ + else if(lifter_t == rta_lifter_sinusoidal) + { + weights_vector[0] = 1.; + for(i=1; i<cepstrum_order; i++) + { + weights_vector[i*w_stride] = 1. + liftering_factor / 2. * + rta_sin(i * M_PI / liftering_factor); + } + } + else + { + ret = 0; + } + /* inversion */ + if(lifter_m == rta_lifter_mode_inverse) + { + for(i=w_stride; i<cepstrum_order*w_stride; i+=w_stride) + { + weights_vector[i] = 1./weights_vector[i]; + } + } + + return ret; +} + + +void rta_lifter_cepstrum(rta_real_t * out_cepstrum, rta_real_t * in_cepstrum, + const rta_real_t * weights_vector, + const unsigned int cepstrum_order) +{ + int i; + for(i=0; i<cepstrum_order; i++) + { + out_cepstrum[i] = in_cepstrum[i] * weights_vector[i]; + } + return; +} + +void rta_lifter_cepstrum_in_place(rta_real_t * cepstrum, const rta_real_t * weights_vector, + const unsigned int cepstrum_order) +{ + int i; + for(i=0; i<cepstrum_order; i++) + { + cepstrum[i] *= weights_vector[i]; + } + return; +} + +void rta_lifter_cepstrum_stride(rta_real_t * out_cepstrum, const int o_stride, + rta_real_t * in_cepstrum, const int i_stride, + const rta_real_t * weights_vector, const int w_stride, + const unsigned int cepstrum_order) +{ + int ii, io, iw; + for(ii=0, io=0, iw=0; + ii<cepstrum_order*i_stride; + ii+=i_stride, io+=o_stride, iw+=w_stride) + { + out_cepstrum[io] = in_cepstrum[ii] * weights_vector[iw]; + } + return; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_lifter.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_lifter.h new file mode 100644 index 0000000..e373d05 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_lifter.h @@ -0,0 +1,190 @@ +/** + * @file rta_lifter.h + * @author Jean-Philippe.Lambert@ircam.fr + * @date Fri Jun 15 15:29:25 2007 + * + * @brief Cepstral liftering (HTK and Auditory Toolbox styles) + * + * Based on Rastamat by Dan Ellis. + * @see http://www.ee.columbia.edu/~dpwe/resources/matlab/rastamat + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_LIFTER_H_ +#define _RTA_LIFTER_H_ 1 + +#include "rta.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum +{ + rta_lifter_mode_normal = 0, /**< default */ + rta_lifter_mode_inverse = 1 /**< to undo a normal liftering */ +} rta_lifter_mode_t; + +typedef enum +{ + rta_lifter_exponential = 0, /**< default, Auditory Toolbox like */ + rta_lifter_sinusoidal = 1 /**< HTK like */ +} rta_lifter_t; + + +/* from lifter.m */ +/** + * Generate a vector of weights 'weights_vector' to lifter a cepstrum + * (usually to boost high coefficients). First coefficient is unchanged. + * + * 'factor' = exponent of x i^n liftering in exponential type + * (Auditory toolbox like) + * 'factor' = length of sin-curve liftering in sinusoidal mode (HTK style) + * + * @param weights_vector size is 'cepstrum_order' + * @param cepstrum_order number of input and output cepstrum coefficients + * @param liftering_factor + * 'lifter_t' == exponential_lifter: + * 0. is neutral, 0.6 is usual + * 'lifter_t' == sinusoidal_lifter: + * 'liftering_factor' must be >0. + * 1. is neutral, 22. is usual + * @param lifter_t + * 'lifter_t' == exponential_lifter: Auditory Toolbox like + * 'lifter_t' == sinusoidal_lifter: HTK like + * @param lifter_m + * 'lifter_m' == rta_lifter_mode_normal: standard calculation, the one you + * want to + * 'lifter_m' == rta_lifter_mode_inverse: inverse calculation, to undo a + * liftering. + * + * @return 1 on success 0 on fail + */ +int rta_lifter_weights(rta_real_t * weights_vector, + const unsigned int cepstrum_order, + const rta_real_t liftering_factor, + const rta_lifter_t lifter_t, + const rta_lifter_mode_t lifter_m); + + +/** + * Generate a vector of weights 'weights_vector' to lifter a cepstrum + * (usually to boost high coefficients). First coefficient is unchanged. + * + * 'factor' = exponent of x i^n liftering in exponential type + * (Auditory toolbox like) + * 'factor' = length of sin-curve liftering in sinusoidal mode (HTK style) + * + * @param weights_vector size is 'cepstrum_order' + * @param w_stride is 'weights_vector' stride + * @param cepstrum_order number of input and output cepstrum coefficients + * @param liftering_factor + * 'lifter_t' == exponential_lifter: + * 0. is neutral, 0.6 is usual + * 'lifter_t' == sinusoidal_lifter: + * 'liftering_factor' must be >0. + * 1. is neutral, 22. is usual + * @param lifter_t + * 'lifter_t' == exponential_lifter: Auditory Toolbox like + * 'lifter_t' == sinusoidal_lifter: HTK like + * @param lifter_m + * 'lifter_m' == rta_lifter_mode_normal: standard calculation, the one you + * want to + * 'lifter_m' == rta_lifter_mode_inverse: inverse calculation, to undo a + * liftering. + * + * @return 1 on success 0 on fail + */ +int rta_lifter_weights_stride( + rta_real_t * weights_vector, const int w_stride, + const unsigned int cepstrum_order, + const rta_real_t liftering_factor, + const rta_lifter_t lifter_t, const rta_lifter_mode_t lifter_m); + + +/** + * Apply lifter to 'cepstrum' as + * 'out_cepstrum' = 'in_cepstrum'*'weights_vector' + * + * This can be in place calculation if 'out_cepstrum' == 'in_cepstrum' + * + * @param out_cepstrum size is 'cepstrum_order' + * @param in_cepstrum size is 'cepstrum_order' + * @param weights_vector size is 'cepstrum_order' + * @param cepstrum_order number of input and output cepstrum coefficients + */ +void rta_lifter_cepstrum(rta_real_t * out_cepstrum, rta_real_t * in_cepstrum, + const rta_real_t * weights_vector, + const unsigned int cepstrum_order); + +/** + * Apply lifter to 'cepstrum' as + * 'cepstrum' = 'cepstrum'*'weights_vector' + * + * This is in place calculation. + * + * @param cepstrum size is 'cepstrum_order' + * @param weights_vector size is 'cepstrum_order' + * @param cepstrum_order number of input and output cepstrum coefficients + */ +void rta_lifter_cepstrum_in_place( + rta_real_t * cepstrum, const rta_real_t * weights_vector, + const unsigned int cepstrum_order); + +/** + * Apply lifter to 'cepstrum' as + * 'cepstrum' = 'cepstrum'*'weights_vector' + * + * This can be in place calculation if 'out_cepstrum' == 'in_cepstrum' + * and 'i_stride' == 'o_stride'. + * + * @param out_cepstrum size is 'cepstrum_order' + * @param o_stride is 'out_cepstrum' stride + * @param in_cepstrum size is 'cepstrum_order' + * @param i_stride is 'in_cepstrum' stride + * @param weights_vector size is 'cepstrum_order' + * @param w_stride is 'weights_vector' stride + * @param cepstrum_order number of input and output cepstrum coefficients + * + */ +void rta_lifter_cepstrum_stride( + rta_real_t * out_cepstrum, const int o_stride, + rta_real_t * in_cepstrum, const int i_stride, + const rta_real_t * weights_vector, const int w_stride, + const unsigned int cepstrum_order); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_LIFTER_H_ */ + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_lpc.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_lpc.c new file mode 100644 index 0000000..d5abd2e --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_lpc.c @@ -0,0 +1,209 @@ +/** + * @file rta_lpc.c + * @author Jean-Philippe.Lambert@ircam.fr + * @date Mon Aug 27 12:25:16 2007 + * + * @brief Linear Prediction Coding (Autocorrelation - Durbin-Levinson method) + * + * Based on mat_mtl (used in super_vp) by Axel Roebel + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_lpc.h" + +#include "rta_float.h" +#include "rta_math.h" + +#include "rta_correlation.h" + +/* Requirements: input_size >= lpc_size > 1 */ +/* autocorrelation_size >= input_size - lpc_size */ +/* Note: lpc_size == lpc_order+1 */ +void rta_lpc(rta_real_t * lpc, const unsigned int lpc_size, + rta_real_t * error, rta_real_t * autocorrelation, + const rta_real_t * input_vector, const unsigned int input_size) +{ + /* Requirement: (a_size, b_size) >= c_size + lpc_order */ + rta_correlation_raw(autocorrelation, lpc_size, + input_vector, input_vector, input_size); + /* Requirement: a_size >= lpc_size */ + rta_levinson(lpc, lpc_size, error, autocorrelation); + + return; +} + +/* Requirements: input_size >= lpc_size > 1 */ +/* autocorrelation_size >= input_size - lpc_size */ +/* Note: lpc_size == lpc_order+1 */ +void rta_lpc_stride( + rta_real_t * lpc, const int l_stride, const unsigned int lpc_size, + rta_real_t * error, + rta_real_t * autocorrelation, const int a_stride, + const rta_real_t * input_vector, const int i_stride, + const unsigned int input_size) +{ + /* Requirement: (a_size, b_size) >= c_size + lpc_size */ + rta_correlation_raw_stride(autocorrelation, a_stride, lpc_size, + input_vector, i_stride, input_vector, i_stride, + input_size); + /* Requirement: a_size >= lpc_size */ + rta_levinson_stride(lpc, l_stride, lpc_size, error, autocorrelation, a_stride); + + return; +} + + +/* Requirement: a_size >= l_size > 1 */ +void rta_levinson( + rta_real_t * levinson, const unsigned int l_size, rta_real_t * error, + const rta_real_t * autocorrelation) +{ + int i,j,k; + + levinson[0] = 1.; + if(rta_abs(autocorrelation[0]) <= RTA_REAL_MIN) + { + for(i=1; i<l_size; i++) + { + levinson[i] = 0.; + } + *error = 0.; + } + else + { + /* skip first coefficient, which value is 1. anyway */ + rta_real_t * lev1 = levinson+1; + rta_real_t tmp_sum; + rta_real_t reflexion; + + lev1[0] = -autocorrelation[1] / autocorrelation[0]; + *error = autocorrelation[0] + lev1[0] * autocorrelation[1]; + + for(i=1; i<l_size-1; i++) + { + /* No more error (constant signal?), just fill with zeroes */ + if(rta_abs(*error) <= RTA_REAL_MIN) + { + for(; i<l_size-1; i++) + { + lev1[i] = 0.; + } + break; + } + + tmp_sum = autocorrelation[i+1]; + for(j=0; j<i; j++) + { + tmp_sum += lev1[j] * autocorrelation[i-j]; + } + + lev1[i] = reflexion = -tmp_sum / *error; + *error += tmp_sum * reflexion; + + for(j=0, k=i-j-1; j<k; ++j, --k) + { + const rta_real_t tmp = lev1[j]; + lev1[j] += reflexion*lev1[k]; + lev1[k] += reflexion*tmp; + } + + if (k==j) + { + lev1[k] += reflexion*lev1[k]; + } + } + } + return; +} + +/* Requirement: a_size*a_stride >= l_size*l_stride > 1 */ +void rta_levinson_stride(rta_real_t * levinson, const int l_stride, + const unsigned int l_size, rta_real_t * error, + const rta_real_t * autocorrelation, const int a_stride) +{ + int i,j,k; + + levinson[0] = 1.; + if(rta_abs(autocorrelation[0]) <= RTA_REAL_MIN) + { + for(i=l_stride; i<l_size*l_stride; i+=l_stride) + { + levinson[i] = 0.; + } + *error = 0.; + } + else + { + /* skip first coefficient, which value is 1. anyway */ + rta_real_t * lev1 = levinson+l_stride; + rta_real_t tmp_sum; + rta_real_t reflexion; + + lev1[0] = -autocorrelation[a_stride] / autocorrelation[0]; + *error = autocorrelation[0] + lev1[0] * autocorrelation[a_stride]; + + for(i=1; i<l_size-1; i++) + { + /* No more error (constant signal?), just fill with zeroes */ + if(rta_abs(*error) <= RTA_REAL_MIN) + { + for(; i<l_size-1; i++) + { + lev1[i*l_stride] = 0.; + } + break; + } + + tmp_sum = autocorrelation[(i+1)*a_stride]; + for(j=0; j<i; j++) + { + tmp_sum += lev1[j*l_stride] * autocorrelation[(i-j)*a_stride]; + } + + lev1[i*l_stride] = reflexion = -tmp_sum / *error; + *error += tmp_sum * reflexion; + + for(j=0, k=i-j-1; j<k; ++j, --k) + { + const rta_real_t tmp = lev1[j*l_stride]; + lev1[j*l_stride] += reflexion*lev1[k*l_stride]; + lev1[k*l_stride] += reflexion*tmp; + } + + if (k==j) + { + lev1[k*l_stride] += reflexion*lev1[k*l_stride]; + } + } + } + return; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_lpc.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_lpc.h new file mode 100644 index 0000000..efde5ee --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_lpc.h @@ -0,0 +1,173 @@ +/** + * @file rta_lpc.h + * @author Jean-Philippe.Lambert@ircam.fr + * @date Mon Aug 27 12:25:16 2007 + * + * @brief Linear Prediction Coding (Autocorrelation - Durbin-Levinson method) + * + * Based on mat_mtl (used in super_vp) by Axel Roebel + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_LPC_H_ +#define _RTA_LPC_H_ 1 + +#include "rta.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Calculate the linear prediction coefficients 'lpc' of order + * 'lpc_size'-1 for 'input_vector', using autocorrelation and + * levinson-durbin decomposition + * + * Calculate the linear prediction coefficients L of order N + * for the given input vector X such that + * + * sum(X(n-k)*L(k)) =! min + * + * \see rta_correlation_raw + * \see rta_levinson + * + * @param lpc coefficients vector + * @param lpc_size is lpc order + 1 and must be > 0 + * @param error is the prediction error (variance) + * @param autocorrelation size must be >= 'lpc_size'. It + * is computed within this function + * @param input_vector size is 'input_size' + * @param input_size must be >= lpc_size + */ +void +rta_lpc(rta_real_t * lpc, const unsigned int lpc_size, + rta_real_t * error, rta_real_t * autocorrelation, + const rta_real_t * input_vector, const unsigned int input_size); + +/** + * Calculate the linear prediction coefficients 'lpc' of order + * 'lpc_size'-1 for 'input_vector', using autocorrelation and + * levinson-durbin decomposition + * + * Calculate the linear prediction coefficients L of order N + * for the given input vector X such that + * + * sum(X(n-k)*L(k)) =! min + * + * \see rta_correlation_raw_stride + * \see rta_levinson_stride + * + * @param lpc coefficients vector + * @param l_stride is 'lpc' vector stride + * @param lpc_size is lpc order + 1 and must be > 0 + * @param error is the prediction error (variance) + * @param autocorrelation size must be >= 'lpc_size'. It + * is computed within this function + * @param a_stride is 'autocorrelation' vector stride + * @param input_vector size is 'input_size' + * @param i_stride is 'input_vector' stride + * @param input_size must be >= lpc_size + */ +void +rta_lpc_stride(rta_real_t * lpc, const int l_stride, const unsigned int lpc_size, + rta_real_t * error, + rta_real_t * autocorrelation, const int a_stride, + const rta_real_t * input_vector, const int i_stride, + const unsigned int input_size); + +/** + * Levinson-Durbin decomposition. + * + * the levinson function calculates the vector L + * that solves the linear equation + * + * [ A(1) A(2) ... A(N) ] [ L(2) ] = [ -A(2) ] + * [ A(2) A(1) ... A(N-1) ] [ L(3) ] = [ -A(3) ] + * [ . . . ] [ . ] = [ . ] + * [ A(N-1) A(N-2) ... A(2) ] [ L(N) ] = [ -A(N) ] + * [ A(N) A(N-1) ... A(1) ] [ L(N+1) ] = [ -A(N+1) ] + * + * The coefficient vector L will have N+1 elements with the first element + * set to 1. The form of the equation is adapted to solve the + * linear prediction problem + * + * sum(X(n-k)*L(k)) = min + * + * where A is the autocorrelation sequence of X + * + * @param levinson coefficients vector + * @param l_size is levinson order + 1 and must be > 1 + * @param error is the prediction error (variance) + * @param autocorrelation vector is given and its size must be >= 'l_size' + */ +void +rta_levinson(rta_real_t * levinson, const unsigned int l_size, rta_real_t * error, + const rta_real_t * autocorrelation); + +/** + * Levinson-Durbin decomposition. + * + * the levinson function calculates the vector L + * that solves the linear equation + * + * [ A(1) A(2) ... A(N) ] [ L(2) ] = [ -A(2) ] + * [ A(2) A(1) ... A(N-1) ] [ L(3) ] = [ -A(3) ] + * [ . . . ] [ . ] = [ . ] + * [ A(N-1) A(N-2) ... A(2) ] [ L(N) ] = [ -A(N) ] + * [ A(N) A(N-1) ... A(1) ] [ L(N+1) ] = [ -A(N+1) ] + * + * The coefficient vector L will have N+1 elements with the first element + * set to 1. The form of the equation is adapted to solve the + * linear prediction problem + * + * sum(X(n-k)*L(k)) = min + * + * where A is the autocorrelation sequence of X + * + * @param levinson coefficients vector + * @param l_stride is 'levinson' vector stride + * @param l_size is levinson order + 1 and must be > 1 + * @param error is the prediction error (variance) + * @param autocorrelation vector is given and its size must be >= 'l_size' + * @param a_stride is 'autocorrelation' stride + */ +void +rta_levinson_stride(rta_real_t * levinson, const int l_stride, + const unsigned int l_size, rta_real_t * error, + const rta_real_t * autocorrelation, const int a_stride); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_LPC_H_ */ + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_mean_variance.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_mean_variance.c new file mode 100644 index 0000000..9d6bcc0 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_mean_variance.c @@ -0,0 +1,309 @@ +/** + * @file rta_mean_variance.c + * @author Jean-Philippe.Lambert@ircam.fr + * @date Mon Aug 25 16:13:42 2008 + * + * @brief Mean and variance from an input vector + * + * @copyright + * Copyright (C) 2008 - 2009 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_mean_variance.h" + +/* Var(X) = E((X-mu)^2) = E(X^2) - mu^2 */ +void +rta_mean_variance(rta_real_t * mean, rta_real_t * variance, + rta_real_t * input, const unsigned int i_size) + +{ + unsigned int i; + + rta_real_t mean_x2 = 0.; /* mean(x^2) */ + rta_real_t mean2; /* mean^2 */ + const rta_real_t normalisation_factor = 1. / (rta_real_t) i_size; + + *mean = 0.; + + for(i=0; i<i_size; i++) + { + *mean += input[i]; + mean_x2 += input[i] * input[i]; + } + + *mean *= normalisation_factor; + mean_x2 *= normalisation_factor; + mean2 = *mean * *mean; + + if(mean_x2 > mean2) + { + *variance = mean_x2 - mean2; + } + else /* roundoff errors */ + { + *variance = 0.; + } + + return; +} + +/* Var(X) = E((X-mu)^2) = E(X^2) - mu^2 */ +void +rta_mean_variance_stride(rta_real_t * mean, rta_real_t * variance, + rta_real_t * input, const int i_stride, + const unsigned int i_size) + +{ + unsigned int i; + + rta_real_t mean_x2 = 0.; /* mean(x^2) */ + rta_real_t mean2; /* mean^2 */ + const rta_real_t normalisation_factor = 1. / (rta_real_t) i_size; + + *mean = 0.; + + for(i=0; i<i_size*i_stride; i+=i_stride) + { + *mean += input[i]; + mean_x2 += input[i] * input[i]; + } + + *mean *= normalisation_factor; + mean_x2 *= normalisation_factor; + mean2 = *mean * *mean; + + if(mean_x2 > mean2) + { + *variance = mean_x2 - mean2; + } + else /* roundoff errors */ + { + *variance = 0.; + } + + return; +} + +void +rta_mean_variance_unbiased(rta_real_t * mean, rta_real_t * variance, + rta_real_t * input, const unsigned int i_size) + +{ + unsigned int i; + + rta_real_t mean_x2 = 0.; /* mean(x^2) */ + rta_real_t mean2; /* mean^2 */ + const rta_real_t mean_norm_factor = 1. / (rta_real_t) i_size; + rta_real_t var_norm_factor; + + if(i_size > 1) + { + var_norm_factor = 1. / (rta_real_t) (i_size - 1); + } + else + { + var_norm_factor = 1.; + } + + *mean = 0.; + + for(i=0; i<i_size; i++) + { + *mean += input[i]; + mean_x2 += input[i] * input[i]; + } + + *mean *= mean_norm_factor; + mean2 = *mean * *mean; + + if(mean_x2 > mean2) + { + *variance = (mean_x2 - i_size * mean2) * var_norm_factor; + } + else /* roundoff errors */ + { + *variance = 0.; + } + + return; +} + +void +rta_mean_variance_unbiased_stride(rta_real_t * mean, rta_real_t * variance, + rta_real_t * input, const int i_stride, + const unsigned int i_size) + +{ + unsigned int i; + + rta_real_t mean_x2 = 0.; /* mean(x^2) */ + rta_real_t mean2; /* mean^2 */ + const rta_real_t mean_norm_factor = 1. / (rta_real_t) i_size; + rta_real_t var_norm_factor; + + if(i_size > 1) + { + var_norm_factor = 1. / (rta_real_t) (i_size - 1); + } + else + { + var_norm_factor = 1.; + } + + *mean = 0.; + + for(i=0; i<i_size*i_stride; i+=i_stride) + { + *mean += input[i]; + mean_x2 += input[i] * input[i]; + } + + *mean *= mean_norm_factor; + mean2 = *mean * *mean; + + if(mean_x2 > mean2) + { + *variance = (mean_x2 - i_size * mean2) * var_norm_factor; + } + else /* roundoff errors */ + { + *variance = 0.; + } + + return; +} + +rta_real_t rta_mean(rta_real_t * input, const unsigned int i_size) +{ + rta_real_t mean = 0.; + unsigned int i; + + for(i = 0; i<i_size; i++) + { + mean += input[i]; + } + + mean /= (rta_real_t) i_size; + + return mean; +} + +rta_real_t rta_mean_stride(rta_real_t * input, const int i_stride, + const unsigned int i_size) +{ + rta_real_t mean = 0.; + unsigned int i; + + for(i = 0; i<i_size*i_stride; i+=i_stride) + { + mean += input[i]; + } + + mean /= (rta_real_t) i_size; + + return mean; +} + +rta_real_t rta_variance(rta_real_t * input, const unsigned int i_size, + rta_real_t mean) +{ + rta_real_t variance = 0.; + unsigned int i; + + for(i=0; i<i_size; i++) + { + rta_real_t t = input[i] - mean; + variance += t * t; + } + + variance /= (rta_real_t) i_size; + + return variance; +} + +rta_real_t rta_variance_stride(rta_real_t * input, const int i_stride, + const unsigned int i_size, + rta_real_t mean) +{ + rta_real_t variance = 0.; + unsigned int i; + + for(i=0; i<i_size*i_stride; i+=i_stride) + { + rta_real_t t = input[i] - mean; + variance += t * t; + } + + variance /= (rta_real_t) i_size; + + return variance; +} + +rta_real_t +rta_variance_unbiased(rta_real_t * input, const unsigned int i_size, + rta_real_t mean) +{ + rta_real_t variance = 0.; + unsigned int i; + + for(i=0; i<i_size; i++) + { + rta_real_t t = input[i] - mean; + variance += t * t; + } + + if(i_size > 1) + { + variance /= (rta_real_t) (i_size - 1); + } + + return variance; +} + +rta_real_t +rta_variance_unbiased_stride(rta_real_t * input, const int i_stride, + const unsigned int i_size, rta_real_t mean) +{ + rta_real_t variance = 0.; + unsigned int i; + + for(i=0; i<i_size*i_stride; i+=i_stride) + { + rta_real_t t = input[i] - mean; + variance += t * t; + } + + if(i_size > 1) + { + variance /= (rta_real_t) (i_size - 1); + } + + return variance; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_mean_variance.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_mean_variance.h new file mode 100644 index 0000000..8df0a41 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_mean_variance.h @@ -0,0 +1,219 @@ +/** + * @file rta_mean_variance.h + * @author Jean-Philippe.Lambert@ircam.fr + * @date Mon Aug 25 16:13:42 2008 + * + * @brief Mean and variance from an input vector + * + * @copyright + * Copyright (C) 2008 - 2009 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_MEAN_VARIANCE_H_ +#define _RTA_MEAN_VARIANCE_H_ 1 + +#include "rta.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Variance is computed as var(x) = E(x^2) - mean(x)^2 so as it is + * done in one loop. Note that this may lead to inacuracies when + * E(x^2) and mean(x)^2 are similar in magnitude. The mean and + * variance are normalised by 'i_size', hence the bias. + * \see rta_variance + * \see rta_mean_variance_unbiased + * + * @param mean is a pointer to the mean result + * @param variance is a pointer to the variance result + * @param input is the input vector of size 'i_size' + * @param i_size is the size of 'input' and must be > 0 + */ +void +rta_mean_variance(rta_real_t * mean, rta_real_t * variance, + rta_real_t * input, const unsigned int i_size); + +/** + * Variance is computed as var(x) = E(x^2) - mean(x)^2 so as it is + * done in one loop. Note that this may lead to inacuracies when + * E(x^2) and mean(x)^2 are similar in magnitude. The mean and + * variance are normalised by 'i_size', hence the bias. + * \see rta_variance + * \see rta_mean_variance_unbiased + * + * @param mean is a pointer to the mean result + * @param variance is a pointer to the variance result + * @param input is the input vector of size 'i_size' + * @param i_stride is the 'input' stride + * @param i_size is the size of 'input' and must be > 0 + */ +void +rta_mean_variance_stride( + rta_real_t * mean, rta_real_t * variance, + rta_real_t * input, const int i_stride, const unsigned int i_size); + +/** + * Variance is computed as var(x) = E(x^2) - mean(x)^2 so as it is + * done in one loop. Note that this may lead to inacuracies when + * E(x^2) and mean(x)^2 are similar in magnitude. The mean and + * variance are normalised by ('i_size' - 1). + * \see rta_variance + * \see rta_mean_variance + * + * @param mean is a pointer to the mean result + * @param variance is a pointer to the variance result + * @param input is the input vector of size 'i_size' + * @param i_size is the size of 'input' and must be > 0 + */ +void +rta_mean_variance_unbiased(rta_real_t * mean, rta_real_t * variance, + rta_real_t * input, const unsigned int i_size); + +/** + * Variance is computed as var(x) = E(x^2) - mean(x)^2 so as it is + * done in one loop. Note that this may lead to inacuracies when + * E(x^2) and mean(x)^2 are similar in magnitude. The mean and + * variance are normalised by ('i_size' - 1). + * \see rta_variance + * \see rta_mean_variance + * + * @param mean is a pointer to the mean result + * @param variance is a pointer to the variance result + * @param input is the input vector of size 'i_size' + * @param i_stride is the 'input' stride + * @param i_size is the size of 'input' and must be > 0 + */ +void +rta_mean_variance_unbiased_stride( + rta_real_t * mean, rta_real_t * variance, + rta_real_t * input, const int i_stride, const unsigned int i_size); + +/** + * Mean of 'input' + * + * @param input is the input vector of size 'i_size' + * @param i_size is the size of 'input' and must be > 0 + * + * @return mean of 'input' + */ +rta_real_t +rta_mean(rta_real_t * input, const unsigned int i_size); + +/** + * Mean of 'input' + * + * @param input is the input vector of size 'i_size' + * @param i_stride is the 'input' stride + * @param i_size is the size of 'input' and must be > 0 + * + * @return mean of 'input' + */ +rta_real_t +rta_mean_stride( + rta_real_t * input, const int i_stride, const unsigned int i_size); + +/** + * Variance is computed as var(x) = E( (x - mean(x))^2 ) and is + * normalised by 'i_size', hence the bias. + * \see rta_variance_unbiased + * \see rta_mean_variance + * \see rta_mean + * + * @param input is the input vector of size 'i_size' + * @param i_size is the size of 'input' and must be > 0 + * @param mean is the mean of 'input' + * + * @return variance of 'input' + */ +rta_real_t +rta_variance(rta_real_t * input, const unsigned int i_size, rta_real_t mean); + +/** + * Variance is computed as var(x) = E( (x - mean(x))^2 ) and is + * normalised by 'i_size', hence the bias. + * \see rta_variance_unbiased + * \see rta_mean_variance + * \see rta_mean + * + * @param input is the input vector of size 'i_size' + * @param i_stride is the 'input' stride + * @param i_size is the size of 'input' and must be > 0 + * @param mean is the mean of 'input' + * + * @return variance of 'input' + */ +rta_real_t +rta_variance_stride( + rta_real_t * input, const int i_stride, const unsigned int i_size, + rta_real_t mean); + +/** + * Variance is computed as var(x) = E( (x - mean(x))^2 ) and is + * normalised by ('i_size' - 1). + * \see rta_variance + * \see rta_mean_variance + * \see rta_mean + * + * @param input is the input vector of size 'i_size' + * @param i_size is the size of 'input' and must be > 0 + * @param mean is the mean of 'input' + * + * @return variance of 'input' + */ +rta_real_t +rta_variance_unbiased(rta_real_t * input, const unsigned int i_size, + rta_real_t mean); + +/** + * Variance is computed as var(x) = E( (x - mean(x))^2 ) and is + * normalised by ('i_size' - 1). + * \see rta_variance + * \see rta_mean_variance + * \see rta_mean + * + * @param input is the input vector of size 'i_size' + * @param i_stride is the 'input' stride + * @param i_size is the size of 'input' and must be > 0 + * @param mean is the mean of 'input' + * + * @return variance of 'input' + */ +rta_real_t rta_variance_unbiased_stride( + rta_real_t * input, const int i_stride, const unsigned int i_size, + rta_real_t mean); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_MEAN_VARIANCE_H_ */ + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_mel.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_mel.c new file mode 100644 index 0000000..fba4900 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_mel.c @@ -0,0 +1,113 @@ +/** + * @file rta_mel.c + * @author Jean-Philippe.Lambert@ircam.fr + * @date Fri Jun 15 15:29:25 2007 + * + * @brief Mel conversions (HTK and Auditory Toolbox styles) + * + * Based on Rastamat by Dan Ellis. + * @see http://www.ee.columbia.edu/~dpwe/resources/matlab/rastamat + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_mel.h" +#include "rta_math.h" + +/*@{ Constants for Slaney's Mel conversion (Auditory Toolbox) */ +static const rta_real_t rta_slaney_mel_min_freq = 0. ; + +/** 200. / 3. size of lower bands */ +static const rta_real_t rta_slaney_mel_linear_bandwidth = 66.6666666666666666667; + +static const rta_real_t rta_slaney_mel_break_freq_in_hz = 1000.; + +/** + * starting mel value for log region + * (rta_slaney_mel_break_freq_in_hz - rta_slaney_mel_min_freq) /rta_slaney_mel_linear_bandwidth; + */ +static const rta_real_t rta_slaney_mel_break_freq_in_mel = 15.; + +/** + * logstep = exp(log(6.4)/27); + * the magic 1.0711703 which is the ratio needed to get from 1000 + * Hz to 6400 Hz in 27 steps, and is *almost* the ratio between + * 1000 Hz and the preceding linear filter center at 933.33333 Hz + * (actually 1000/933.33333 = 1.07142857142857 and + * exp(log(6.4)/27) = 1.07117028749447) + * + * mel_step = log(logstep) + * log(6.4)/ 27. + */ +static const rta_real_t rta_slaney_mel_step = 6.87517774209491228099e-02; +/*@} */ + +rta_real_t rta_hz_to_mel_slaney(rta_real_t freq_in_hz) +{ + rta_real_t freq_in_mel = 0.; + if(freq_in_hz < rta_slaney_mel_break_freq_in_hz) + { + freq_in_mel = (freq_in_hz - rta_slaney_mel_min_freq) / rta_slaney_mel_linear_bandwidth; + } + else + { + freq_in_mel = rta_slaney_mel_break_freq_in_mel + + rta_log(freq_in_hz / rta_slaney_mel_break_freq_in_hz) / rta_slaney_mel_step; + } + return freq_in_mel; +} + +rta_real_t rta_hz_to_mel_htk(rta_real_t freq_in_hz) +{ + return 2595. * rta_log10(1. + freq_in_hz/700.); +} + + + +rta_real_t rta_mel_to_hz_slaney(rta_real_t freq_in_mel) +{ + rta_real_t freq_in_hz = 0.; + if(freq_in_mel < rta_slaney_mel_break_freq_in_mel) + { + freq_in_hz = rta_slaney_mel_min_freq + rta_slaney_mel_linear_bandwidth * freq_in_mel; + } + else + { + freq_in_hz = rta_slaney_mel_break_freq_in_hz * rta_exp( + rta_slaney_mel_step * (freq_in_mel - rta_slaney_mel_break_freq_in_mel)); + } + return freq_in_hz; +} + +rta_real_t rta_mel_to_hz_htk(rta_real_t freq_in_mel) +{ + return 700. * ( rta_pow(10, freq_in_mel / 2595.) -1. ); +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_mel.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_mel.h new file mode 100644 index 0000000..5aff16f --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_mel.h @@ -0,0 +1,124 @@ +/** + * @file rta_mel.h + * @author Jean-Philippe.Lambert@ircam.fr + * @date Fri Jun 15 15:29:25 2007 + * + * @brief Mel conversions (HTK and Auditory Toolbox styles) + * + * Based on Rastamat by Dan Ellis. + * @see http://www.ee.columbia.edu/~dpwe/resources/matlab/rastamat + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_MEL_H_ +#define _RTA_MEL_H_ 1 + +#include "rta.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +typedef enum +{ + rta_mel_slaney = 1, /**< Slaney-style mel is scaled to be approx + * constant E per channel */ + rta_mel_htk = 2 /**< HTK-style is constant max amplitude per + * channel */ +} rta_mel_t; + + +/** MEL from melfcc.m */ + +/** from hz2mel.m */ +/** + * function pointer to avoid tests during conversions + * rta_real_t parameter in frequency in Hertz + * rta_real_t return is corresponding mel value + */ +typedef rta_real_t (*rta_hz_to_mel_function) (rta_real_t); + +/** + * Convert frequencies f (in Hz) to mel 'scale'. + * Mel fn to match Slaney's Auditory Toolbox mfcc.m + * + * @param freq_in_hz [0.,22050.] + * + * @return corresponding mel value [0.,60.] + */ +rta_real_t rta_hz_to_mel_slaney(rta_real_t freq_in_hz); + +/** + * Convert frequencies f (in Hz) to mel 'scale'. + * uses the mel axis defined in the htk_book + * + * @param freq_in_hz [0.,22050.] + * + * @return corresponding mel value [0.,3923.] + */ +rta_real_t rta_hz_to_mel_htk(rta_real_t freq_in_hz); + +/** from mel2hz.m */ +/** + * function pointer to avoid tests during conversions + * rta_real_t parameter is mel value + * rta_real_t return is corresponding frequency + */ +typedef rta_real_t (*rta_mel_to_hz_function) (rta_real_t); + +/** + * Convert 'mel scale' frequencies into Hz + * use the formula from Slaney's mfcc.m + * + * @param freq_in_mel [0.,60.] + * + * @return corresponding frequency [0.,22050.] + */ +rta_real_t rta_mel_to_hz_slaney(rta_real_t freq_in_mel); + +/** + * Convert 'mel scale' frequencies into Hz + * use the HTK formula + * + * @param freq_in_mel [0.,3923.] + * + * @return corresponding frequency [0.,22050.] + */ +rta_real_t rta_mel_to_hz_htk(rta_real_t freq_in_mel); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_MEL_H_ */ + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_moments.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_moments.c new file mode 100644 index 0000000..89a90f4 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_moments.c @@ -0,0 +1,324 @@ +/** + * @file rta_moments.c + * @author Jean-Philippe.Lambert@ircam.fr + * @date Thu Dec 13 15:28:26 2007 + * + * @brief Statistical moments functions + * + * The moments are calculated over the indexes and weighted by the + * input values (eg. the amplitudes of the spectrum regularly + * sampled). Note that all moments (but the first) are centered. The + * results unit is index (starting from 0). + * + * @copyright + * Copyright (C) 2007 - 2009 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_moments.h" +#include "rta_math.h" + +/* 1st order weighted moment over indexes: weighted mean, centroid */ +rta_real_t rta_weighted_moment_1_indexes( + rta_real_t * input_sum, + const rta_real_t * input, const unsigned int input_size) +{ + unsigned int i; + rta_real_t centroid = 0.; + *input_sum = 0.; + + for(i=0; i<input_size; i++) + { + centroid += input[i] * i; + *input_sum += input[i]; + } + + if(*input_sum > 0.) + { + centroid /= *input_sum; + } + else + { + /* flat and null input => centroid is the middle */ + centroid = (input_size - 1) * 0.5; + } + + return centroid; +} + +rta_real_t rta_weighted_moment_1_indexes_stride( + rta_real_t * input_sum, + const rta_real_t * input, const int i_stride, + const unsigned int input_size) +{ + unsigned int i; + int is; + rta_real_t centroid = 0.; + *input_sum = 0.; + + for(i=0, is=0; i<input_size; i++, is+=i_stride) + { + centroid += input[is] * i; + *input_sum += input[is]; + } + + if(*input_sum > 0.) + { + centroid /= *input_sum; + } + else + { + /* flat and null input => centroid is the middle */ + centroid = (input_size - 1) * 0.5; + } + + return centroid; +} + + +/* 2nd order weighted central moment over indexes: spread, weighted variance */ +/* Request: input_sum != 0. */ +/* note: weighted standard deviation is sqrt(weighted variance) */ +rta_real_t rta_weighted_moment_2_indexes( + const rta_real_t * input, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum) +{ + unsigned int i; + rta_real_t moment = 0.; + rta_real_t tmp_diff; + + for(i=0; i<input_size; i++) + { + tmp_diff = i - centroid; + moment += tmp_diff * tmp_diff * input[i]; + } + + return (moment / input_sum); +} + +rta_real_t rta_weighted_moment_2_indexes_stride( + const rta_real_t * input, const int i_stride, + const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum) +{ + unsigned int i; + int is; + rta_real_t moment = 0.; + rta_real_t tmp_diff; + + for(i=0, is=0; i<input_size; i++, is+=i_stride) + { + tmp_diff = i - centroid; + moment += tmp_diff * tmp_diff * input[is]; + } + + return (moment / input_sum); +} + +/* 3rd order weighted central moment over indexes*/ +/* Request: input_sum != 0. */ +rta_real_t rta_weighted_moment_3_indexes( + const rta_real_t * input, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum) +{ + unsigned int i; + rta_real_t moment = 0.; + rta_real_t tmp_diff; + + for(i = 0; i<input_size; i++) + { + tmp_diff = i - centroid; + moment += tmp_diff * tmp_diff * tmp_diff * input[i]; + } + + return (moment / input_sum); +} + +rta_real_t rta_weighted_moment_3_indexes_stride( + const rta_real_t * input, const int i_stride, + const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum) +{ + unsigned int i; + int is; + rta_real_t moment = 0.; + rta_real_t tmp_diff; + + for(i = 0, is=0; i<input_size; i++, is+=i_stride) + { + tmp_diff = i - centroid; + moment += tmp_diff * tmp_diff * tmp_diff * input[is]; + } + + return (moment / input_sum); +} + +/* 3rd order standardised weighted central moment over indexes: skewness */ +/* Requests: input_sum != 0. + deviation != 0. */ +rta_real_t rta_std_weighted_moment_3_indexes( + const rta_real_t * input, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum, + const rta_real_t deviation) +{ + return rta_weighted_moment_3_indexes(input, input_size, centroid, input_sum) / + (deviation * deviation * deviation); +} + +rta_real_t rta_std_weighted_moment_3_indexes_stride( + const rta_real_t * input, const int i_stride, + const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum, + const rta_real_t deviation) +{ + return rta_weighted_moment_3_indexes_stride( + input, i_stride, input_size, centroid, input_sum) / + (deviation * deviation * deviation); +} + +/* 4th order weighted central moment over indexes */ +/* Request: input_sum != 0. */ +rta_real_t rta_weighted_moment_4_indexes( + const rta_real_t * input, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum) +{ + unsigned int i; + rta_real_t moment = 0.; + rta_real_t tmp_diff; + + for(i = 0; i<input_size; i++) + { + tmp_diff = i - centroid; + moment += tmp_diff * tmp_diff * tmp_diff * tmp_diff * input[i]; + } + + return (moment / input_sum); +} + +rta_real_t rta_weighted_moment_4_indexes_stride( + const rta_real_t * input, const int i_stride, + const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum) +{ + unsigned int i; + int is; + rta_real_t moment = 0.; + rta_real_t tmp_diff; + + for(i = 0, is=0; i<input_size; i++, is+=i_stride) + { + tmp_diff = i - centroid; + moment += tmp_diff * tmp_diff * tmp_diff * tmp_diff * input[is]; + } + + return (moment / input_sum); +} + +/* 4th order standardised weighted central moment over indexes: kurtosis */ +/* Requests: input_sum != 0. + deviation != 0. */ +rta_real_t rta_std_weighted_moment_4_indexes( + const rta_real_t * input, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum, + const rta_real_t deviation) +{ + return rta_weighted_moment_4_indexes(input, input_size, centroid, input_sum) / + (deviation * deviation * deviation * deviation); +} + +rta_real_t rta_std_weighted_moment_4_indexes_stride( + const rta_real_t * input, const int i_stride, + const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum, + const rta_real_t deviation) +{ + return rta_weighted_moment_4_indexes_stride( + input, i_stride, input_size, centroid, input_sum) / + (deviation * deviation * deviation * deviation); +} + +/* general order weighted central moment over indexes */ +/* Request: input_sum != 0. */ +rta_real_t rta_weighted_moment_indexes( + const rta_real_t * input, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum, + const rta_real_t order) +{ + unsigned int i; + rta_real_t moment = 0.; + + for(i = 0; i<input_size; i++) + { + moment += rta_pow(i - centroid, order) * input[i]; + } + + return (moment / input_sum); +} + +rta_real_t rta_weighted_moment_indexes_stride( + const rta_real_t * input, const int i_stride, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum, + const rta_real_t order) +{ + unsigned int i; + int is; + rta_real_t moment = 0.; + + for(i = 0, is=0; i<input_size; i++, is+=i_stride) + { + moment += rta_pow(i - centroid, order) * input[is]; + } + + return (moment / input_sum); +} + +/* general order standardised weighted central moment over indexes */ +/* Requests: input_sum != 0. + deviation != 0. */ +rta_real_t rta_std_weighted_moment_indexes( + const rta_real_t * input, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum, + const rta_real_t deviation, + const rta_real_t order) +{ + return rta_weighted_moment_indexes( + input, input_size, centroid, input_sum, order) / + rta_pow(deviation, order); +} + +rta_real_t rta_std_weighted_moment_indexes_stride( + const rta_real_t * input, const int i_stride, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum, + const rta_real_t deviation, + const rta_real_t order) +{ + return rta_weighted_moment_indexes_stride( + input, i_stride, input_size, centroid, input_sum, order) / + rta_pow(deviation, order); +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_moments.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_moments.h new file mode 100644 index 0000000..3c38baf --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_moments.h @@ -0,0 +1,396 @@ +/** + * @file rta_moments.h + * @author Jean-Philippe.Lambert@ircam.fr + * @date Thu Dec 13 15:28:26 2007 + * + * @brief Statistical moments functions + * + * The moments are calculated over the indexes and weighted by the + * input values (eg. the amplitudes of the spectrum regularly + * sampled). Note that all moments (but the first) are centered. The + * results unit is index (starting from 0). + * + * @copyright + * Copyright (C) 2007 - 2009 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_MOMENTS_H_ +#define _RTA_MOMENTS_H_ 1 + +#include "rta.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * First order moment over indexes weighted by 'input' values: + * weighted mean, centroid. + * m1 = centroid = sum(i, i*input(i)) / sum(i, input(i)) + * + * @param input_sum is calculated by the function and may be used for + * higher-order moments. It is the sum of all 'input' values. + * @param input is usually amplitudes or weights. Each element of + * 'input' must be >=0. + * @param input_size is 'input' size + * + * @return the first moment, 0.5 * ('input_size' - 1) if 'input_sum' == 0. + */ +rta_real_t +rta_weighted_moment_1_indexes( + rta_real_t * input_sum, + const rta_real_t * input, const unsigned int input_size); + +/** + * First order moment over indexes weighted by 'input' values: + * weighted mean, centroid. + * m1 = centroid = sum(i, i*input(i)) / sum(i, input(i)) + * + * @param input_sum is calculated by the function and may be used for + * higher-order moments. It is the sum of all 'input' values. + * @param input is usually amplitudes or weights. Each element of + * 'input' must be >=0. + * @param i_stride is 'input' stride + * @param input_size is 'input' size + * + * @return the first moment, 0.5 * ('input_size' - 1) if 'input_sum' == 0. + */ +rta_real_t +rta_weighted_moment_1_indexes_stride( + rta_real_t * input_sum, + const rta_real_t * input, const int i_stride, + const unsigned int input_size); + +/** + * Second order weighted central moment over indexes: spread, weighted + * variance. + * m2 = spread = sum(i,input(i) * (i-centroid)^2) / sum(i, input(i)) + * + * Note that standard deviation is std = sqrt(spread) + * + * @param input is usually amplitudes or weights. Each element of + * 'input' must be >=0. + * @param input_size is 'input' size + * @param centroid is the first moment of 'input'. + * \see rta_weighted_moment_1_indexes + * @param input_sum must be != 0. It is the sum of all 'input' values. + * + * @return spread + */ +rta_real_t +rta_weighted_moment_2_indexes( + const rta_real_t * input, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum); + +/** + * Second order weighted central moment over indexes: spread, weighted + * variance. + * m2 = spread = sum(i,input(i) * (i-centroid)^2) / sum(i, input(i)) + * + * Note that standard deviation is std = sqrt(spread) + * + * @param input is usually amplitudes or weights. Each element of + * 'input' must be >=0. + * @param i_stride is 'input' stride + * @param input_size is 'input' size + * @param centroid is the first moment of 'input'. + * \see rta_weighted_moment_1_indexes_stride + * @param input_sum must be != 0. It is the sum of all 'input' values. + * + * @return spread + */ +rta_real_t +rta_weighted_moment_2_indexes_stride( + const rta_real_t * input, const int i_stride, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum); + +/** + * Third order weighted central moment over indexes. + * m3 = sum(i,input(i) * (i-centroid)^3) / sum(i, input(i)) + * + * @param input is usually amplitudes or weights. Each element of + * 'input' must be >=0. + * @param input_size is 'input' size + * @param centroid is the first moment of 'input'. + * \see rta_weighted_moment_1_indexes + * @param input_sum must be != 0. It is the sum of all 'input' values. + * + * @return third central moment + */ +rta_real_t +rta_weighted_moment_3_indexes( + const rta_real_t * input, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum); + +/** + * Third order weighted central moment over indexes. + * m3 = sum(i,input(i) * (i-centroid)^3) / sum(i, input(i)) + * + * @param input is usually amplitudes or weights. Each element of + * 'input' must be >=0. + * @param i_stride is 'input' stride + * @param input_size is 'input' size + * @param centroid is the first moment of 'input'. + * \see rta_weighted_moment_1_indexes_stride + * @param input_sum must be != 0. It is the sum of all 'input' values. + * + * @return third central moment + */ +rta_real_t +rta_weighted_moment_3_indexes_stride( + const rta_real_t * input, const int i_stride, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum); + +/** + * Third order standardised weighted central moment over indexes: skewness. + * skewness = m3 / std^3 + * + * @param input is usually amplitudes or weights. Each element of + * 'input' must be >=0. + * @param input_size is 'input' size + * @param centroid is the first moment of 'input'. + * \see rta_weighted_moment_1_indexes + * @param input_sum must be != 0. It is the sum of all 'input' values. + * @param deviation must be != 0. It is the standard deviation. + * \see rta_weighted_moment_2_indexes + * + * @return skewness + */ +rta_real_t +rta_std_weighted_moment_3_indexes( + const rta_real_t * input, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum, + const rta_real_t deviation); + +/** + * Third order standardised weighted central moment over indexes: skewness. + * skewness = m3 / std^3 + * + * @param input is usually amplitudes or weights. Each element of + * 'input' must be >=0. + * @param i_stride is 'input' stride + * @param input_size is 'input' size + * @param centroid is the first moment of 'input'. + * \see rta_weighted_moment_1_indexes_stride + * @param input_sum must be != 0. It is the sum of all 'input' values. + * @param deviation must be != 0. It is the standard deviation. + * \see rta_weighted_moment_2_indexes_stride + * + * @return skewness + */ +rta_real_t +rta_std_weighted_moment_3_indexes_stride( + const rta_real_t * input, const int i_stride, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum, + const rta_real_t deviation); + +/** + * Fourth order weighted central moment over indexes. + * m4 = sum(i,input(i) * (i-centroid)^4) / sum(i, input(i)) + * + * @param input is usually amplitudes or weights. Each element of + * 'input' must be >=0. + * @param input_size is 'input' size + * @param centroid is the first moment of 'input'. + * \see rta_weighted_moment_1_indexes + * @param input_sum must be != 0. It is the sum of all 'input' values. + * + * @return fourth central moment + */ +rta_real_t +rta_weighted_moment_4_indexes( + const rta_real_t * input, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum); + +/** + * Fourth order weighted central moment over indexes. + * m4 = sum(i,input(i) * (i-centroid)^4) / sum(i, input(i)) + * + * @param input is usually amplitudes or weights. Each element of + * 'input' must be >=0. + * @param i_stride is 'input' stride + * @param input_size is 'input' size + * @param centroid is the first moment of 'input'. + * \see rta_weighted_moment_1_indexes_stride + * @param input_sum must be != 0. It is the sum of all 'input' values. + * + * @return fourth central moment + */ +rta_real_t +rta_weighted_moment_4_indexes_stride( + const rta_real_t * input, const int i_stride, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum); + +/** + * Fourth order standardised weighted central moment over indexes: kurtosis. + * kurtosis = m4 / std^4 + * + * Note that the kurtosis is often defined as the fourth cumulant + * divided by the square root of the variance, which gives + * kurtosis = m4 / std^4 - 3. This function does not include the "- 3" + * term. + * + * @param input is usually amplitudes or weights. Each element of + * 'input' must be >=0. + * @param input_size is 'input' size + * @param centroid is the first moment of 'input'. + * \see rta_weighted_moment_1_indexes + * @param input_sum must be != 0. It is the sum of all 'input' values. + * @param deviation must be != 0. It is the standard deviation. + * \see rta_weighted_moment_2_indexes + * + * @return kurtosis + */ +rta_real_t +rta_std_weighted_moment_4_indexes( + const rta_real_t * input, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum, + const rta_real_t deviation); + +/** + * Fourth order standardised weighted central moment over indexes: kurtosis. + * kurtosis = m4 / std^4 + * + * Note that the kurtosis is often defined as the fourth cumulant + * divided by the square root of the variance, which gives + * kurtosis = m4 / std^4 - 3. This function does not include the "- 3" + * term. + * + * @param input is usually amplitudes or weights. Each element of + * 'input' must be >=0. + * @param i_stride is 'input' stride + * @param input_size is 'input' size + * @param centroid is the first moment of 'input'. + * \see rta_weighted_moment_1_indexes_stride + * @param input_sum must be != 0. It is the sum of all 'input' values. + * @param deviation must be != 0. It is the standard deviation. + * \see rta_weighted_moment_2_indexes_stride + * + * @return kurtosis + */ +rta_real_t +rta_std_weighted_moment_4_indexes_stride( + const rta_real_t * input, const int i_stride, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum, + const rta_real_t deviation); + +/** + * General order weighted central moment over indexes. + * m_order = sum(i,input(i) * (i-centroid)^order) / sum(i, input(i)) + * + * @param input is usually amplitudes or weights. Each element of + * 'input' must be >=0. + * @param input_size is 'input' size + * @param centroid is the first moment of 'input'. + * \see rta_weighted_moment_1_indexes + * @param input_sum must be != 0. It is the sum of all 'input' values. + * @param order is the moment order. + * + * @return moment + */ +rta_real_t +rta_weighted_moment_indexes( + const rta_real_t * input, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum, + const rta_real_t order); + +/** + * General order weighted central moment over indexes. + * m_order = sum(i,input(i) * (i-centroid)^order) / sum(i, input(i)) + * + * @param input is usually amplitudes or weights. Each element of + * 'input' must be >=0. + * @param i_stride is 'input' stride + * @param input_size is 'input' size + * @param centroid is the first moment of 'input'. + * \see rta_weighted_moment_1_indexes_stride + * @param input_sum must be != 0. It is the sum of all 'input' values. + * @param order is the moment order. + * + * @return moment + */ +rta_real_t +rta_weighted_moment_indexes_stride( + const rta_real_t * input, const int i_stride, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum, + const rta_real_t order); + +/** + * General order standardised weighted central moment over indexes. + * m_order / std^order + * + * @param input is usually amplitudes or weights. Each element of + * 'input' must be >=0. + * @param input_size is 'input' size + * @param centroid is the first moment of 'input'. + * \see rta_weighted_moment_1_indexes + * @param input_sum must be != 0. It is the sum of all 'input' values. + * @param deviation must be != 0. It is the standard deviation. + * \see rta_weighted_moment_2_indexes + * @param order is the moment order. + * + * @return standardised moment + */ +rta_real_t +rta_std_weighted_moment_indexes( + const rta_real_t * input, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum, + const rta_real_t deviation, + const rta_real_t order); + +/** + * General order standardised weighted central moment over indexes. + * m_order / std^order + * + * @param input is usually amplitudes or weights. Each element of + * 'input' must be >=0. + * @param i_stride is 'input' stride + * @param input_size is 'input' size + * @param centroid is the first moment of 'input'. + * \see rta_weighted_moment_1_indexes + * @param input_sum must be != 0. It is the sum of all 'input' values. + * @param deviation must be != 0. It is the standard deviation. + * \see rta_weighted_moment_2_indexes + * @param order is the moment order. + * + * @return standardised moment + */ +rta_real_t +rta_std_weighted_moment_indexes_stride( + const rta_real_t * input, const int i_stride, const unsigned int input_size, + const rta_real_t centroid, const rta_real_t input_sum, + const rta_real_t deviation, + const rta_real_t order); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_MOMENTS_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_onepole.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_onepole.c new file mode 100644 index 0000000..1742c27 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_onepole.c @@ -0,0 +1,123 @@ +/** + * @file rta_onepole.c + * @author Jean-Philippe.Lambert@ircam.fr + * @date Fri Aug 29 12:38:46 2008 + * + * @brief One-pole one-zero filters + * + * Simple low-pass and high-pass filters. + * @see rta_biquad.h + * + * @copyright + * Copyright (C) 2008 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_onepole.h" + +inline rta_real_t rta_onepole_lowpass(const rta_real_t x, const rta_real_t f0, + rta_real_t * state) +{ + *state = x * f0 + *state * (1. - f0); + return *state; +} + +inline rta_real_t rta_onepole_highpass(const rta_real_t x, const rta_real_t f0, + rta_real_t * state) +{ + /* highpass = x - lowpass */ + + rta_real_t y = f0 * x + *state; + *state = (1. - f0) * y; + return (x - y); +} + +void rta_onepole_lowpass_vector( + rta_real_t * y, + const rta_real_t * x, const unsigned int x_size, + const rta_real_t f0, rta_real_t * state) +{ + unsigned int i; + + for(i=0; i<x_size; i++) + { + y[i] = rta_onepole_lowpass(x[i], f0, state); + } + + return; +} + +void rta_onepole_lowpass_vector_stride( + rta_real_t * y, const int y_stride, + const rta_real_t * x, const int x_stride, const unsigned int x_size, + const rta_real_t f0, rta_real_t * state) +{ + int ix, iy; + + for(ix = 0, iy = 0; + ix < x_size*x_stride; + ix += x_stride, iy += y_stride) + { + y[iy] = rta_onepole_lowpass(x[ix], f0, state); + } + + return; +} + +void rta_onepole_highpass_vector( + rta_real_t * y, + const rta_real_t * x, const unsigned int x_size, + const rta_real_t f0, rta_real_t * state) +{ + unsigned int i; + + for(i=0; i<x_size; i++) + { + y[i] = rta_onepole_highpass(x[i], f0, state); + } + + return; +} + +void rta_onepole_highpass_vector_stride( + rta_real_t * y, const int y_stride, + const rta_real_t * x, const int x_stride, const unsigned int x_size, + const rta_real_t f0, rta_real_t * state) +{ + int ix, iy; + + for(ix = 0, iy = 0; + ix < x_size*x_stride; + ix += x_stride, iy += y_stride) + { + y[iy] = rta_onepole_highpass(x[ix], f0, state); + } + + return; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_onepole.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_onepole.h new file mode 100644 index 0000000..266b539 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_onepole.h @@ -0,0 +1,163 @@ +/** + * @file rta_onepole.h + * @author Jean-Philippe.Lambert@ircam.fr + * @date Fri Aug 29 12:38:46 2008 + * + * @brief One-pole one-zero filters + * + * Simple low-pass and high-pass filters. + * @see rta_biquad.h + * + * @copyright + * Copyright (C) 2008 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_ONEPOLE_H_ +#define _RTA_ONEPOLE_H_ 1 + +#include "rta.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifdef WIN32 +#define inline +#endif + +/** + * One-pole low-pass filter computed as: + * y(n) = f0 * x(n) - (f0 - 1) * y(n-1) + * \see rta_onepole_highpass + * + * @param x is an input sample + * @param f0 is the cutoff frequency, normalised by the nyquist frequency. + * @param state is the one sample delay state. It can be initialised + * with 0. or the last computed value, which is updated by this + * function. + * + * @return the output sample y + */ +inline rta_real_t rta_onepole_lowpass(rta_real_t x, const rta_real_t f0, + rta_real_t * state); + +/** + * One-pole high-pass filter computed as the difference between the + * input and a low-pass filtered input: + * y(n) = x(n) - ( f0 * x(n) - (f0 - 1) * y(n-1) ) + * \see rta_onepole_lowpass + * + * @param x is an input sample + * @param f0 is the cutoff frequency, normalised by the nyquist frequency. + * @param state is the one sample delay state. It can be initialised + * with 0. or the last computed value, which is updated by this + * function. + * + * @return the output sample y + */ +inline rta_real_t rta_onepole_highpass(rta_real_t x, const rta_real_t f0, + rta_real_t * state); +/** + * One-pole low-pass computation on a vector of samples. + * \see rta_onepole_lowpass + * + * @param y is a vector of output samples. Its size is 'x_size' + * @param x is a vector of input samples. Its size is 'x_size' + * @param x_size is the size of 'y' and 'x' + * @param f0 is the cutoff frequency, normalised by the nyquist frequency. + * @param state is the one sample delay state. It can be initialised + * with 0. or the last computed value, which is updated by this + * function. + */ +void rta_onepole_lowpass_vector( + rta_real_t * y, + const rta_real_t * x, const unsigned int x_size, + const rta_real_t f0, rta_real_t * state); + +/** + * One-pole low-pass computation on a vector of samples. + * \see rta_onepole_lowpass + * + * @param y is a vector of output samples. Its size is 'x_size' + * @param y_stride is 'y' stride + * @param x is a vector of input samples. Its size is 'x_size' + * @param x_stride is 'x' stride + * @param x_size is the size of 'y' and 'x' + * @param f0 is the cutoff frequency, normalised by the nyquist frequency. + * @param state is the one sample delay state. It can be initialised + * with 0. or the last computed value, which is updated by this + * function. + */ +void rta_onepole_lowpass_vector_stride( + rta_real_t * y, const int y_stride, + const rta_real_t * x, const int x_stride, const unsigned int x_size, + const rta_real_t f0, rta_real_t * state); + +/** + * One-pole high-pass computation on a vector of samples. + * \see rta_onepole_highpass + * + * @param y is a vector of output samples. Its size is 'x_size' + * @param x is a vector of input samples. Its size is 'x_size' + * @param x_size is the size of 'y' and 'x' + * @param f0 is the cutoff frequency, normalised by the nyquist frequency. + * @param state is the one sample delay state. It can be initialised + * with 0. or the last computed value, which is updated by this + * function. + */ +void rta_onepole_highpass_vector( + rta_real_t * y, + const rta_real_t * x, const unsigned int x_size, + const rta_real_t f0, rta_real_t * state); + +/** + * One-pole high-pass computation on a vector of samples. + * \see rta_onepole_highpass + * + * @param y is a vector of output samples. Its size is 'x_size' + * @param y_stride is 'y' stride + * @param x is a vector of input samples. Its size is 'x_size' + * @param x_stride is 'x' stride + * @param x_size is the size of 'y' and 'x' + * @param f0 is the cutoff frequency, normalised by the nyquist frequency. + * @param state is the one sample delay state. It can be initialised + * with 0. or the last computed value, which is updated by this + * function. + */ +void rta_onepole_highpass_vector_stride( + rta_real_t * y, const int y_stride, + const rta_real_t * x, const int x_stride, const unsigned int x_size, + const rta_real_t f0, rta_real_t * state); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_ONEPOLE_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_preemphasis.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_preemphasis.c new file mode 100644 index 0000000..25c7a6b --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_preemphasis.c @@ -0,0 +1,104 @@ +/** + * @file rta_preemphasis.c + * @author Jean-Philippe.Lambert@ircam.fr + * @date Tue Sep 4 16:24:45 2007 + * + * @brief Preemphasis filtering + * + * Simple first order difference equation + * s(n) = s(n) - f * s(n-1) + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_preemphasis.h" + +/* can not be in place */ +/* previous_sample updated */ +void rta_preemphasis_signal(rta_real_t * out_samples, + const rta_real_t * in_samples, const unsigned int input_size, + rta_real_t * previous_sample, const rta_real_t factor) +{ + int i; + + if(factor != 0.) + { + out_samples[0] = in_samples[0] - factor * (*previous_sample); + + for(i=1; i<input_size; i++) + { + out_samples[i] = in_samples[i] - factor * in_samples[i-1]; + } + + } + else + { + for(i=0; i<input_size; i++) + { + out_samples[i] = in_samples[i]; + } + } + + *previous_sample = in_samples[input_size-1]; + + return; +} + +/* can not be in place */ +/* previous_sample updated */ +void rta_preemphasis_signal_stride(rta_real_t * out_samples, const int o_stride, + const rta_real_t * in_samples, const int i_stride, + const unsigned int input_size, + rta_real_t * previous_sample, const rta_real_t factor) +{ + int i,o; + + if(factor != 0.) + { + out_samples[0] = in_samples[0] - factor * (*previous_sample); + + for(i=i_stride, o=o_stride; i<input_size*i_stride; i+=i_stride, o+=o_stride) + { + out_samples[i] = in_samples[i] - factor * in_samples[i-1]; + } + } + else + { + for(i=0, o=0; i<input_size*i_stride; i+=i_stride, o+=o_stride) + { + out_samples[i] = in_samples[i]; + } + } + + *previous_sample = in_samples[i-i_stride]; + + return; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_preemphasis.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_preemphasis.h new file mode 100644 index 0000000..788bf96 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_preemphasis.h @@ -0,0 +1,99 @@ +/** + * @file rta_preemphasis.h + * @author Jean-Philippe.Lambert@ircam.fr + * @date Tue Sep 4 16:24:45 2007 + * + * @brief Preemphasis filtering + * + * Simple first order difference equation + * s(n) = s(n) - f * s(n-1) + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_PREEMPHASIS_H_ +#define _RTA_PREEMPHASIS_H_ 1 + +#include "rta.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Apply preemphasis of 'factor' on 'in_samples' as + * 'out_sample'[0] = 'in_samples'[0] - 'factor' * (*'previous_sample') + * 'out_sample'[i] = 'in_samples'[i] - 'factor' * 'in_samples'[i-1], i>0 + * + * This calculation can not be in place: 'out_sample' != 'in_sample' + * + * @param out_samples size is 'input_size' + * @param in_samples size is 'input_size' + * @param input_size is the number of input and output samples and must + * be > 0 + * @param previous_sample is updated as + * (*'previous_sample') = 'in_samples'['input_size'-1] + * @param factor is generally 0.97 for voice analysis + */ +void +rta_preemphasis_signal(rta_real_t * out_samples, + const rta_real_t * in_samples, const unsigned int input_size, + rta_real_t * previous_sample, const rta_real_t factor); + +/** + * Apply preemphasis of 'factor' on 'in_samples' as + * 'out_sample'[0] = 'in_samples'[0] - 'factor' * (*'previous_sample') + * 'out_sample'[i] = 'in_samples'[i] - 'factor' * 'in_samples'[i-1], i>0 + * + * This calculation can not be in place: 'out_sample' != 'in_sample' + * + * @param out_samples size is 'input_size' + * @param o_stride is 'out_samples' stride + * @param in_samples size is 'input_size' + * @param i_stride is 'input_size' stride + * @param input_size is the number of input and output samples and must + * be > 0 + * @param previous_sample is updated as + * (*'previous_sample') = 'in_samples'[('input_size'-1)*i_stride] + * @param factor is generally 0.97 for voice analysis + */ +void +rta_preemphasis_signal_stride(rta_real_t * out_samples, const int o_stride, + const rta_real_t * in_samples, const int i_stride, + const unsigned int input_size, + rta_real_t * previous_sample, const rta_real_t factor); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_PREEMPHASIS_H_ */ + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_resample.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_resample.c new file mode 100644 index 0000000..ab51fa4 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_resample.c @@ -0,0 +1,363 @@ +/** + * @file rta_resample.c + * @author Jean-Philippe.Lambert@ircam.fr + * @date Mon Nov 12 18:21:06 2007 + * + * @brief Resample utilities + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_resample.h" +#include "rta_util.h" // for idefix + +/* contract: factor > 0; */ +/* o_size >= i_size / factor */ +void rta_downsample_int_mean(rta_real_t * output, + const rta_real_t * input, + const unsigned int i_size, + const unsigned int factor) +{ + const rta_real_t factor_inv = 1. / factor; + unsigned int i,j; + const unsigned int i_max = i_size / factor; + + switch(factor) + { + case 1: + for(i=0; i<i_max; i++) + { + output[i] = input[i]; + } + break; + + case 2: + for(i=0, j=0; i<i_max; i++, j+=factor) + { + output[i] = factor_inv * (input[j] + input[j+1]); + } + break; + + case 3: + for(i=0, j=0; i<i_max; i++, j+=factor) + { + output[i] = factor_inv * (input[j] + input[j+1] + input[j+2]); + } + break; + + case 4: + for(i=0, j=0; i<i_max; i++, j+=factor) + { + output[i] = factor_inv * (input[j] + input[j+1] + input[j+2] + input[j+3]); + } + break; + + case 5: + for(i=0, j=0; i<i_max; i++, j+=factor) + { + output[i] = factor_inv * (input[j] + input[j+1] + input[j+2] + input[j+3] + + input[j+4]); + } + break; + + case 6: + for(i=0, j=0; i<i_max; i++, j+=factor) + { + output[i] = factor_inv * (input[j] + input[j+1] + input[j+2] + input[j+3] + + input[j+4] + input[j+5]); + } + break; + + case 7: + for(i=0, j=0; i<i_max; i++, j+=factor) + { + output[i] = factor_inv * (input[j] + input[j+1] + input[j+2] + input[j+3] + + input[j+4] + input[j+5] + input[j+6]); + } + break; + + case 8: + for(i=0, j=0; i<i_max; i++, j+=factor) + { + output[i] = factor_inv * (input[j] + input[j+1] + input[j+2] + input[j+3] + + input[j+4] + input[j+5] + input[j+6] + input[j+7]); + } + break; + + default: + for(i=0, j=0; i<i_max; i++, j+=factor) + { + unsigned int k; + output[i] = input[j]; + for(k=1; k<factor; k++) + { + output[i] += input[j+k]; + } + output[i] *= factor_inv; + } + } + + return; +} + +/* contract: factor > 0; */ +/* o_size >= i_size / factor */ +void rta_downsample_int_mean_stride( + rta_real_t * output, const int o_stride, + const rta_real_t * input, const int i_stride, + const unsigned int i_size, + const unsigned int factor) +{ + const rta_real_t factor_inv = 1. / factor; + int o,i; + const int o_max = (i_size / factor) * o_stride; + const int i_incr = factor * i_stride; + + + switch(factor) + { + + case 1: + for(o=0, i=0; o<o_max; o+=o_stride, i+=i_incr) + { + output[o] = input[i]; + } + break; + + case 2: + for(o=0, i=0; o<o_max; o+=o_stride, i+=i_incr) + { + output[o] = factor_inv * (input[i] + input[i+i_stride]); + } + break; + + case 3: + for(o=0, i=0; o<o_max; o+=o_stride, i+=i_incr) + { + output[o] = factor_inv * + (input[i] + input[i+i_stride] + input[i+2*i_stride]); + } + break; + + case 4: + for(o=0, i=0; o<o_max; o+=o_stride, i+=i_incr) + { + output[o] = factor_inv * + (input[i] + input[i+i_stride] + input[i+2*i_stride] + + input[i+3*i_stride]); + } + break; + + case 5: + for(o=0, i=0; o<o_max; o+=o_stride, i+=i_incr) + { + output[o] = factor_inv * + (input[i] + input[i+i_stride] + input[i+2*i_stride] + + input[i+3*i_stride] + input[i+4*i_stride]); + } + break; + + case 6: + for(o=0, i=0; o<o_max; o+=o_stride, i+=i_incr) + { + output[o] = factor_inv * + (input[i] + input[i+i_stride] + input[i+2*i_stride] + + input[i+3*i_stride] + input[i+4*i_stride] + input[i+5*i_stride]); + } + break; + + case 7: + for(o=0, i=0; o<o_max; o+=o_stride, i+=i_incr) + { + output[o] = factor_inv * + (input[i] + input[i+i_stride] + input[i+2*i_stride] + + input[i+3*i_stride] + input[i+4*i_stride] + input[i+5*i_stride] + + input[i+6*i_stride]); + } + break; + + case 8: + for(o=0, i=0; o<o_max; o+=o_stride, i+=i_incr) + { + output[o] = factor_inv * + (input[i] + input[i+i_stride] + input[i+2*i_stride] + + input[i+3*i_stride] + input[i+4*i_stride] + input[i+5*i_stride] + + input[i+6*i_stride] + input[i+7*i_stride]); + } + break; + + default: + for(o=0, i=0; o<o_max; o+=o_stride, i+=i_incr) + { + int ii; + output[o] = input[i]; + for(ii=i_stride; ii<i_incr; ii+=i_stride) + { + output[o] += input[i+ii]; + } + output[o] *= factor_inv; + } + } + + return; +} + +/* contract: factor > 0; */ +/* o_size >= i_size / factor */ +void rta_downsample_int_remove(rta_real_t * output, + const rta_real_t * input, + const unsigned int i_size, + const unsigned int factor) +{ + unsigned int i,j; + const unsigned int i_max = i_size / factor; + + for(i=0, j=0; i<i_max; i++, j+=factor) + { + output[i] = input[j]; + } + + return; +} + +/* contract: factor > 0; */ +/* o_size >= i_size / factor */ +void rta_downsample_int_remove_stride( + rta_real_t * output, const int o_stride, + const rta_real_t * input, const int i_stride, + const unsigned int i_size, + const unsigned int factor) +{ + int o,i; + const int o_max = (i_size / factor) * o_stride; + const int i_incr = factor * i_stride; + + for(o=0, i=0; o<o_max; o+=o_stride, i+=i_incr) + { + output[o] = input[i]; + } + + return; +} + + + +int rta_resample_cubic (rta_real_t * out_values, + const rta_real_t * in_values, + const unsigned int i_size, + const unsigned int i_channels, + const double factor) +{ + if (factor == 1.0) + { /* copy through */ + memcpy(out_values, in_values, i_size * i_channels * sizeof(rta_real_t)); + } + else if (in_values != out_values) + { + int m = i_size; + int n = i_channels; + + /* limit resampling range here? */ + if (m > 3) + { + double inv = 1.0 / factor; + int out_m = (int) floor((double) (m - 1) * inv) + 1; + int out_head_m = (int) ceil(inv); + int out_tailm2_m = (int) floor((double) (m - 2) * inv); + rta_idefix_t idefix; + rta_idefix_t incr; + int i, j; + + rta_idefix_set_float(&incr, factor); + + for (j = 0; j < n; j++) + { + rta_idefix_set_zero(&idefix); + + /* copy first points without interpolation */ + for (i = j; i < out_head_m * n; i += n) + { + int onset = rta_idefix_get_index(idefix); + float frac = rta_idefix_get_frac(idefix); + float left = in_values[j + onset * n]; + float right = in_values[j + onset * n + n]; + + //out_values[i] = rta_cubic_calc_stride_head(in_values[j + onset] * n, ft, n); + out_values[i] = left + (right - left) * frac; + rta_idefix_incr(&idefix, incr); + } + + for (; i < out_tailm2_m * n; i += n) + { + rta_cubic_idefix_interpolate_stride(in_values + j, idefix, n, out_values + i); + rta_idefix_incr(&idefix, incr); + } + + /* + for(; i<out_tailm1_m*n; i+=n) + { + rta_cubic_coefs_t *ft = rta_cubic_table + rta_cubic_get_table_index_from_idefix(idefix); + int onset = rta_idefix_get_index(idefix); + + out_values[i] = rta_cubic_calc_stride_tailm2(in_values + j + onset * n, ft, n); + rta_idefix_incr(&idefix, incr); + } + */ + + for (; i < out_m * n; i += n) + { + int onset = rta_idefix_get_index(idefix); + float frac = rta_idefix_get_frac(idefix); + float left = in_values[j + onset * n]; + float right = in_values[j + onset * n + n]; + + //out_values[i] = rta_cubic_calc_stride_head(in_values[j + onset] * n, ft, n); + out_values[i] = left + (right - left) * frac; + rta_idefix_incr(&idefix, incr); + } + } + } + else + return 0; + } + else + return 0; // can't run in-place + + return 1; +} + + +/** EMACS ** + * Local variables: + * mode: c + * c-basic-offset:2 + * End: + */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_resample.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_resample.h new file mode 100644 index 0000000..8c6929a --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_resample.h @@ -0,0 +1,147 @@ +/** + * @file rta_resample.h + * @author Jean-Philippe.Lambert@ircam.fr + * @date Mon Aug 27 12:25:16 2007 + * + * @brief Resampling utilities + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_RESAMPLE_H_ +#define _RTA_RESAMPLE_H_ 1 + +#include "rta.h" +#include "rta_cubic.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Downsample 'input' to 'output', by an integer factor, out of + * place. The 'output' samples are simple means of 'input' over + * 'factor' samples. The calculation can be in place if + * 'input' == 'output' . + * + * @param output size must be >= i_size / 'factor' + * @param input size is 'i_size' + * @param i_size is 'input' size + * @param factor must be > 0 + */ +void +rta_downsample_int_mean(rta_real_t * output, + const rta_real_t * input, const unsigned int i_size, + const unsigned int factor); + +/** + * Downsample 'input' to 'output', by an integer factor, out of + * place. The 'output' samples are simple means of 'input' over + * 'factor' samples. The calculation can be in place if + * 'input' == 'output' and 'i_stride' == 'o_stride'. + * + * @param output size must be >= i_size / 'factor' + * @param o_stride is 'output' stride + * @param input size is 'i_size' + * @param i_stride is 'input' stride + * @param i_size is 'input' size + * @param factor must be > 0 + */ +void +rta_downsample_int_mean_stride( + rta_real_t * output, const int o_stride, + const rta_real_t * input, const int i_stride, + const unsigned int i_size, + const unsigned int factor); + +/** + * Downsample 'input' to 'output', by an integer factor, out of + * place. The 'output' samples are 'input' values kept every + * 'factor' samples. The calculation can be in place if + * 'input' == 'output'. + * + * @param output size must be >= i_size / 'factor' + * @param input size is 'i_size' + * @param i_size is 'input' size + * @param factor must be > 0 + */ +void +rta_downsample_int_remove(rta_real_t * output, + const rta_real_t * input, + const unsigned int i_size, + const unsigned int factor); + +/** + * Downsample 'input' to 'output', by an integer factor, out of + * place. The 'output' samples are 'input' values kept every + * 'factor' samples. The calculation can be in place if + * 'input' == 'output' and 'i_stride' == 'o_stride'. + * + * @param output size must be >= i_size / 'factor' + * @param o_stride is 'output' stride + * @param input size is 'i_size' + * @param i_stride is 'input' stride + * @param i_size is 'input' size + * @param factor must be > 0 + */ +void +rta_downsample_int_remove_stride( + rta_real_t * output, const int o_stride, + const rta_real_t * input, const int i_stride, + const unsigned int i_size, + const unsigned int factor); + + + +/** + * Cubic resampling of interleaved 'input' to 'output' by a factor, out of + * place. + * + * @param output size must be >= i_size / 'factor' + * @param input size 'i_size' * 'i_channels' + * @param i_size is 'input' number of sample frames + * @param i_channels is 'input' number of interleaved channels + * @param factor must be > 0 + * @return 1 if successful, 0 otherwise (in-place or input too short) + */ +int +rta_resample_cubic (rta_real_t *output, + const rta_real_t *input, + const unsigned int i_size, + const unsigned int i_channels, + const double factor); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_RESAMPLE_H_ */ + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_selection.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_selection.c new file mode 100644 index 0000000..04ea09f --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_selection.c @@ -0,0 +1,294 @@ +/** + * @file rta_selection.c + * @author Jean-Philippe.Lambert@ircam.fr + * @date Wed Aug 27 22:12:15 2008 + * + * @brief RTA selection (median, quartile, etc.) + * + * Quick selection, qsort-like, with array selection (for median of a + * vector of even size among others). + * + * @copyright + * Copyright (C) 2007 - 2009 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_selection.h" + +#include "rta_math.h" /* rta_floor, rta_ceil */ + +#ifdef WIN32 +#define inline +#endif + +static inline void rta_swap(rta_real_t * a, rta_real_t * b) +{ + register rta_real_t tmp = *b; + + *b = *a; + *a = tmp; + + return; +} + +/* quicksort-like */ +rta_real_t rta_selection(rta_real_t * input, const unsigned int i_size, const rta_real_t real_selection) +{ + /* low and high inner bounds */ + unsigned int l, h; + + /* partition indexes */ + unsigned int low = 0; + unsigned int mid; + unsigned int high = i_size - 1; + + rta_real_t selection_floor = rta_floor(real_selection); + unsigned int selection = (unsigned int) selection_floor; + + /* s_extension can be 1 in order to sort next index too, + to get real indexes selection */ + unsigned int s_extension = (unsigned int) rta_ceil(real_selection) - selection; + + while(high > low + 1) + { + mid = (low + high) >> 1; /* avoid overflow */ + + /* choose the pivot index as the median of */ + /* input[low], input[mid] and input[high] */ + + /* sort input[low], input[mid], input[high] in that order */ + if(input[mid] < input[low]) + { + rta_swap(input + mid, input + low); + } + /* input[low] <= input[mid] now */ + + if(input[high] < input[mid]) + { + rta_swap(input + high, input + mid); + /* input[mid] <= input[high] now */ + + /* input[low] and input[mid] may have changed */ + if(input[mid] < input[low]) + { + rta_swap(input + mid, input + low); + } + } + + /* put the pivot at the end, it is input[high] from now */ + rta_swap(input + mid, input + high); + + /* we already know that input[low] <= input[high] */ + /* but l will be incremented before any test */ + l = low; + /* the pivot is at index high */ + /* but h will be decremented before any test */ + h = high; + + for(;;) + { + while(input[++l] < input[high]) + { + /* void */ + } + + while(input[high] < input[--h]) + { + /* void */ + } + + if(h <= l) + { + break; + } + else + { + rta_swap(input + l, input + h); + } + } + + /* put the pivot back at index l */ + rta_swap(input + high, input + l); + + /* new partition containing selection */ + if(l <= selection) + { + low = l; + } + + /* (l >= selection + s_extension) for general case with */ + if(l >= selection + s_extension) + { + high = l; + } + } + + /* One or two elements left */ + if(high <= low + 1) + { + /* last sort */ + if(input[high] < input[low]) + { + rta_swap(input + high, input + low); + } + } + + { + rta_real_t ret; + if(s_extension == 0) + { + ret = input[selection]; + } + else + { + rta_real_t ratio = real_selection - selection_floor; + ret = ratio * input[selection] + (1. - ratio) * input[selection + 1]; + } + + return ret; + } +} + +rta_real_t rta_selection_stride(rta_real_t * input, const int i_stride, const unsigned int i_size, const rta_real_t real_selection) +{ + /* low and high inner bounds */ + int l, h; + + /* partition indexes */ + int low = 0; + int mid; + int high = (i_size - 1) * i_stride; + + rta_real_t selection_floor = rta_floor(real_selection); + int selection = ( (int) selection_floor ) * i_stride; + + /* s_extension can be 1 in order to sort next index too, + to get real indexes selection */ + int s_extension = ( (int) rta_ceil(real_selection) ) * i_stride - selection; + + while(high > low + i_stride) + { + mid = (((low + high)/i_stride) >> 1) * i_stride; /* avoid overflow */ + + /* choose the pivot index as the median of */ + /* input[low], input[mid] and input[high] */ + + /* sort input[low], input[mid], input[high] in that order */ + if(input[mid] < input[low]) + { + rta_swap(input + mid, input + low); + } + /* input[low] <= input[mid] now */ + + if(input[high] < input[mid]) + { + rta_swap(input + high, input + mid); + /* input[mid] <= input[high] now */ + + /* input[low] and input[mid] may have changed */ + if(input[mid] < input[low]) + { + rta_swap(input + mid, input + low); + } + } + + /* put the pivot at the end, it is input[high] from now */ + rta_swap(input + mid, input + high); + + /* we already know that input[low] <= input[high] */ + /* but l will be incremented before any test */ + l = low; + /* the pivot is at index high */ + /* but h will be decremented before any test */ + h = high; + + for(;;) + { + do + { + l += i_stride; + } + while(input[l] < input[high]); + + do + { + h -= i_stride; + } + while(input[high] < input[h]); + + if(h <= l) + { + break; + } + else + { + rta_swap(input + l, input + h); + } + } + + /* put the pivot back at index l */ + rta_swap(input + high, input + l); + + /* new partition containing selection */ + if(l <= selection) + { + low = l; + } + + if(l >= selection + s_extension) + { + high = l; + } + } + + /* One or two elements left */ + if(high <= low + i_stride) + { + /* last sort */ + if(input[high] < input[low]) + { + rta_swap(input + high, input + low); + } + } + + { + rta_real_t ret; + if(s_extension == 0) + { + ret = input[selection]; + } + else + { + rta_real_t ratio = real_selection - selection_floor; + ret = ratio * input[selection] + (1. - ratio) * input[selection + i_stride]; + } + + return ret; + } +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_selection.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_selection.h new file mode 100644 index 0000000..e8b6b1d --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_selection.h @@ -0,0 +1,116 @@ +/** + * @file rta_selection.h + * @author Jean-Philippe.Lambert@ircam.fr + * @date Wed Aug 27 22:12:15 2008 + * + * @brief RTA selection (median, quartile, etc.) + * + * Quick selection, qsort-like, with array selection (for median of a + * vector of even size among others). + * + * @copyright + * Copyright (C) 2007 - 2009 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_SELECTION_H_ +#define _RTA_SELECTION_H_ 1 + +#include "rta.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Quick selection of an index, as if the input was sorted. If the + * given index is not an integer, the weighted mean of the two + * adjacent indexes is returned. The median is then: + * median = rta_selection('input', 'i_size', 'i_size' * 0.5); + * + * This function operates in place and the input will be modified. + * + * The algorithm is similar to quick sort but not every element is + * sorted. After this function's call: + * 'input'[index] <= 'input'['selection'] for each (index < 'selection') + * 'input'[index] >= 'input'['selection'] for each (index > 'selection') + * + * @param input is a vector of size 'i_size' + * @param i_size is the size of 'input' + * @param selection must be bewteen 0 and i_size (note that a simple + * search is faster at finding the minimal or maximal element of a list). + * + * @return the value of: + * 'input'['selection'] if floor(selection) == selection, else + * the weighted mean of 'input'[floor('selection')] and + * 'input'[floor('selection')+1] (the weights are the relative difference + * between 'selection' and floor('selection'), and between + * 'selection' and floor('selection') + 1. + */ +rta_real_t rta_selection(rta_real_t * input, const unsigned int i_size, + const rta_real_t selection); + +/** + * Quick selection of an index, as if the input was sorted. If the + * given index is not an integer, the weighted mean of the two + * adjacent indexes is returned. The median is then: + * median = rta_selection('input', 'i_size', 'i_size' * 0.5); + * + * This function operates in place and the input will be modified. + * + * The algorithm is similar to quick sort but not every element is + * sorted. After this function's call: + * 'input'[index] <= 'input'['selection'] for each (index < 'selection') + * 'input'[index] >= 'input'['selection'] for each (index > 'selection') + * + * @param input is a vector of size 'i_size' + * @param i_stride is 'input' stride + * @param i_size is the size of 'input' + * @param selection must be bewteen 0 and i_size (note that a simple + * search is faster at finding the minimal or maximal element of a list). + * + * @return the value of: + * 'input'['selection'] if floor(selection) == selection, else + * the weighted mean of 'input'[floor('selection')] and + * 'input'[floor('selection')+1] (the weights are the relative difference + * between 'selection' and floor('selection'), and between + * 'selection' and floor('selection') + 1. + */ +rta_real_t rta_selection_stride(rta_real_t * input, + const int i_stride, + const unsigned int i_size, + const rta_real_t selection); + + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_SELECTION_H_ */ + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_svd.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_svd.c new file mode 100644 index 0000000..6bec25d --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_svd.c @@ -0,0 +1,1286 @@ +/** + * @file rta_svd.c + * @author Jean-Philippe.Lambert@ircam.fr + * @date Mon Aug 18 09:58:20 2008 + * + * @brief Singular Value Decomposition + * + * From the TNT/Jama package jama_svd.h (Adapted from JAMA, a Java + * Matrix Library, developed jointly by the Mathworks and NIST; see + * http://math.nist.gov/javanumerics/jama). + * + * @copyright + * Copyright (C) 2008 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_svd.h" +#include "rta_math.h" /* rta_abs, rta_max, rta_min, rta_hypot, rta_pow */ +#include "rta_int.h" /* rta_imin, rta_imax */ +#include "rta_float.h" /* RTA_REAL_EPSILON */ +#include "rta_stdlib.h" /* NULL */ + +struct rta_svd_setup +{ + rta_svd_t svd_type; + + /* A is copied when svd_type is 'rta_svd_out_of_place' + or n > m (transposition) */ + rta_real_t * A; /* matrix of size m x n */ + unsigned int m; + unsigned int n; + + /* internal workspaces */ + rta_real_t * e; /* vector of size min(m,n) */ + rta_real_t * work; /* vector of size max(m,n) */ +}; + +int +rta_svd_setup_new(rta_svd_setup_t ** svd_setup, const rta_svd_t svd_type, + rta_real_t * U, rta_real_t * S, rta_real_t * V, + rta_real_t * A, const unsigned int m, const unsigned int n) +{ + int ret = 1; + *svd_setup = (rta_svd_setup_t *) rta_malloc(sizeof(rta_svd_setup_t)); + + if(*svd_setup == NULL) + { + ret = 0; + } + else + { + (*svd_setup)->svd_type = svd_type; + (*svd_setup)->m = m; + (*svd_setup)->n = n; + } + + if(ret != 0) + { + if(svd_type == rta_svd_out_of_place || n > m) + { + (*svd_setup)->A = (float *)rta_malloc(m * n * sizeof(rta_real_t)); + if((*svd_setup)->A == NULL) + { + ret = 0; + } + } + else + { + (*svd_setup)->A = NULL; + } + } + + if(ret != 0) + { + (*svd_setup)->e = (rta_real_t *) rta_malloc( + rta_imin(m,n) * sizeof(rta_real_t)); + if((*svd_setup)->e == NULL) + { + ret = 0; + } + } + + if(ret != 0) + { + (*svd_setup)-> work = (rta_real_t *) rta_malloc( + rta_imax(m,n) * sizeof(rta_real_t)); + if((*svd_setup)->work == NULL) + { + ret = 0; + } + } + + if(ret == 0) + { + rta_svd_setup_delete(*svd_setup); + } + + return ret; +} + +void +rta_svd_setup_delete(rta_svd_setup_t * svd_setup) +{ + if(svd_setup != NULL) + { + if((svd_setup)->A != NULL) + { + rta_free((svd_setup)->A); + } + + if((svd_setup)->e != NULL) + { + rta_free((svd_setup)->e); + } + + if((svd_setup)->work != NULL) + { + rta_free((svd_setup)->work); + } + + rta_free(svd_setup); + } + + return; +} + +/* A = U * S * V' */ + +/* A is a 2D array of size m x n */ +/* U is a 2D array of size m x (m,n) */ +/* S is a 1D array of size min(m,n) */ +/* V is a 2D array of size n x min(n,m) */ + +/* 2D arrays are in row-major order */ +/* A can be modified by the computation (or copied first, depends on setup) */ +/* U and V can be NULL and are not computed, then */ + +/* e is a 1D array of size n */ +/* work is a 1D array of size m */ +void +rta_svd(rta_real_t * output_U, rta_real_t * S, rta_real_t * output_V, + rta_real_t * input_A, const rta_svd_setup_t * svd_setup) +{ + rta_real_t * A; /* input_A, copied or transposed into svd_setup->A */ + rta_real_t * U; /* swap with V if A is transposed */ + rta_real_t * V; + + rta_real_t * e = svd_setup->e; /* just to ease the reading */ + rta_real_t * work = svd_setup->work; /* just to ease the reading */ + + unsigned int m = svd_setup->m; + unsigned int n = svd_setup->n; + + int nu; + int nct; + int nrt; + + int i, j, k; + int p, pp, iter; + + if(n <= m) + { + if(svd_setup->svd_type == rta_svd_out_of_place) + { + /* Use an input copy */ + A = svd_setup->A; + j = m*n; + for(i = 0; i<j; i++) + { + A[i] = input_A[i]; + } + } + else /* Work directly on input */ + { + A = input_A; + } + + U = output_U; + V = output_V; + } + else + { + /* Use an input transposed copy */ + A = svd_setup->A; + + for(i = 0; i<m; i++) + { + for(j=0; j<n; j++) + { + A[j*m + i] = input_A[i*n + j]; + } + } + m = svd_setup->n; + n = svd_setup->m; + + /* swap U and V as A is transposed */ + U = output_V; + V = output_U; + } + + nu = rta_imin(m,n); + nct = rta_imin(m-1,n); + nrt = rta_imax(0,rta_imin(n-2,m)); + + /* Reduce A to bidiagonal form, storing the diagonal elements */ + /* in s and the super-diagonal elements in e. */ + for (k = 0; k < rta_imax(nct,nrt); k++) + { + if (k < nct) + { + /* Compute the transformation for the k-th column and */ + /* place the k-th diagonal in S[k]. */ + /* Compute 2-norm of k-th column without under/overflow. */ + S[k] = 0.0; + for (i = k; i < m; i++) + { + S[k] = rta_hypot(S[k],A[i*n + k]); + } + if (S[k] != 0.0) + { + if (A[k*n + k] < 0.0) + { + S[k] = -S[k]; + } + for (i = k; i < m; i++) + { + A[i*n + k] /= S[k]; + } + A[k*n + k] += 1.0; + } + S[k] = -S[k]; + } + for (j = k+1; j < n; j++) + { + if ((k < nct) && (S[k] != 0.0)) + { + /* Apply the transformation. */ + rta_real_t t = 0.0; + for (i = k; i < m; i++) + { + t += A[i*n + k]*A[i*n + j]; + } + t = -t/A[k*n + k]; + for (i = k; i < m; i++) + { + A[i*n + j] += t*A[i*n + k]; + } + } + + /* Place the k-th row of A into e for the */ + /* subsequent calculation of the row transformation. */ + e[j] = A[k*n + j]; + } + if (U != NULL && (k < nct)) + { + /* U initialisation */ + for(i=0; i<k; i++) + { + U[i*n + k] = 0.0; + } + + /* Place the transformation in U for subsequent back */ + /* multiplication. */ + for (i = k; i < m; i++) + { + U[i*n + k] = A[i*n + k]; + } + } + if (k < nrt) + { + /* Compute the k-th row transformation and place the */ + /* k-th super-diagonal in e[k]. */ + /* Compute 2-norm without under/overflow. */ + e[k] = 0.0; + for (i = k+1; i < n; i++) + { + e[k] = rta_hypot(e[k],e[i]); + } + if (e[k] != 0.0) + { + if (e[k+1] < 0.0) + { + e[k] = -e[k]; + } + for (i = k+1; i < n; i++) + { + e[i] /= e[k]; + } + e[k+1] += 1.0; + } + e[k] = -e[k]; + if ((k+1 < m) && (e[k] != 0.0)) + { + /* Apply the transformation. */ + for (i = k+1; i < m; i++) + { + work[i] = 0.0; + } + for (j = k+1; j < n; j++) + { + for (i = k+1; i < m; i++) + { + work[i] += e[j]*A[i*n + j]; + } + } + for (j = k+1; j < n; j++) + { + rta_real_t t = -e[j]/e[k+1]; + for (i = k+1; i < m; i++) + { + A[i*n + j] += t*work[i]; + } + } + } + if (V != NULL) + { + /* V initialisation */ + for(i=0; i<k+1; i++) + { + V[i*n + k] = 0.0; + } + + /* Place the transformation in V for subsequent */ + /* back multiplication. */ + for (i = k+1; i < n; i++) + { + V[i*n + k] = e[i]; + } + } + } + } + + /* Set up the final bidiagonal matrix or order p. */ + p = rta_imin(n,m+1); + if (nct < n) + { + S[nct] = A[nct*n + nct]; + } + if (m < p) + { + S[p-1] = 0.0; + } + if (nrt+1 < p) + { + e[nrt] = A[nrt*n + (p-1)]; + } + e[p-1] = 0.0; + + /* If required, generate U. */ + if (U != NULL) + { + for (j = nct; j < nu; j++) + { + for (i = 0; i < m; i++) + { + U[i*n + j] = 0.0; + } + U[j*n + j] = 1.0; + } + for (k = nct-1; k >= 0; k--) + { + if (S[k] != 0.0) + { + for (j = k+1; j < nu; j++) + { + rta_real_t t = 0.0; + for (i = k; i < m; i++) + { + t += U[i*n + k]*U[i*n + j]; + } + t = -t/U[k*n + k]; + for (i = k; i < m; i++) + { + U[i*n + j] += t*U[i*n + k]; + } + } + for (i = k; i < m; i++ ) + { + U[i*n + k] = -U[i*n + k]; + } + U[k*n + k] = 1.0 + U[k*n + k]; + for (i = 0; i < k-1; i++) + { + U[i*n + k] = 0.0; + } + } + else + { + for (i = 0; i < m; i++) + { + U[i*n + k] = 0.0; + } + U[k*n + k] = 1.0; + } + } + } + + /* If required, generate V. */ + if (V != NULL) + { + for (k = n-1; k >= 0; k--) + { + if ((k < nrt) && (e[k] != 0.0)) + { + for (j = k+1; j < nu; j++) + { + rta_real_t t = 0.0; + for (i = k+1; i < n; i++) + { + t += V[i*n + k]*V[i*n + j]; + } + t = -t/V[(k+1)*n + k]; + for (i = k+1; i < n; i++) + { + V[i*n + j] += t*V[i*n + k]; + } + } + } + for (i = 0; i < n; i++) + { + V[i*n + k] = 0.0; + } + V[k*n + k] = 1.0; + } + } + + /* Main iteration loop for the singular values. */ + pp = p-1; + iter = 0; + + while (p > 0) + { + int k=0; + int kase=0; + + /* Here is where a test for too many iterations would go. */ + + /* This section of the program inspects for */ + /* negligible elements in the s and e arrays. On */ + /* completion the variables kase and k are set as follows. */ + + /* kase = 1 if s(p) and e[k-1] are negligible and k<p */ + /* kase = 2 if s(k) is negligible and k<p */ + /* kase = 3 if e[k-1] is negligible, k<p, and */ + /* s(k), ..., s(p) are not negligible (qr step). */ + /* kase = 4 if e(p-1) is negligible (convergence). */ + + for (k = p-2; k >= -1; k--) + { + if (k == -1) + { + break; + } + if (rta_abs(e[k]) <= RTA_REAL_MIN || + rta_abs(e[k]) <= RTA_REAL_EPSILON * (rta_abs(S[k]) + rta_abs(S[k+1]))) + { + e[k] = 0.0; + break; + } + } + if (k == p-2) + { + kase = 4; + } + else + { + int ks; + rta_real_t t; + for (ks = p-1; ks >= k; ks--) + { + if (ks == k) + { + break; + } + t = (ks != p ? rta_abs(e[ks]) : 0.) + (ks != k+1 ? rta_abs(e[ks-1]) : 0.); + if (rta_abs(S[ks]) <= RTA_REAL_MIN || + rta_abs(S[ks]) <= RTA_REAL_EPSILON * t) + { + S[ks] = 0.0; + break; + } + } + if (ks == k) + { + kase = 3; + } + else if (ks == p-1) + { + kase = 1; + } + else + { + kase = 2; + k = ks; + } + } + k++; + + /* Perform the task indicated by kase. */ + switch (kase) + { + /* Deflate negligible s(p). */ + case 1: + { + rta_real_t f = e[p-2]; + e[p-2] = 0.0; + for (j = p-2; j >= k; j--) + { + rta_real_t t = rta_hypot(S[j],f); + rta_real_t cs = S[j]/t; + rta_real_t sn = f/t; + S[j] = t; + if (j != k) + { + f = -sn*e[j-1]; + e[j-1] = cs*e[j-1]; + } + if (V != NULL) + { + for (i = 0; i < n; i++) + { + t = cs*V[i*n + j] + sn*V[i*n + (p-1)]; + V[i*n + (p-1)] = -sn*V[i*n + j] + cs*V[i*n + (p-1)]; + V[i*n + j] = t; + } + } + } + } + break; + + /* Split at negligible s(k). */ + case 2: + { + rta_real_t f = e[k-1]; + e[k-1] = 0.0; + for (j = k; j < p; j++) + { + rta_real_t t = rta_hypot(S[j],f); + rta_real_t cs = S[j]/t; + rta_real_t sn = f/t; + S[j] = t; + f = -sn*e[j]; + e[j] = cs*e[j]; + if (U != NULL) + { + for (i = 0; i < m; i++) + { + t = cs*U[i*n + j] + sn*U[i*n + (k-1)]; + U[i*n + (k-1)] = -sn*U[i*n + j] + cs*U[i*n + (k-1)]; + U[i*n + j] = t; + } + } + } + } + break; + + /* Perform one qr step. */ + case 3: + { + /* Calculate the shift. */ + rta_real_t scale = + rta_max(rta_max(rta_max(rta_max(rta_abs(S[p-1]), rta_abs(S[p-2])), + rta_abs(e[p-2])), rta_abs(S[k])),rta_abs(e[k])); + rta_real_t sp = S[p-1]/scale; + rta_real_t spm1 = S[p-2]/scale; + rta_real_t epm1 = e[p-2]/scale; + rta_real_t sk = S[k]/scale; + rta_real_t ek = e[k]/scale; + rta_real_t b = ((spm1 + sp)*(spm1 - sp) + epm1*epm1)/2.0; + rta_real_t c = (sp*epm1)*(sp*epm1); + rta_real_t shift = 0.0; + rta_real_t f; + rta_real_t g; + + if ((b != 0.0) || (c != 0.0)) + { + shift = sqrt(b*b + c); + if (b < 0.0) + { + shift = -shift; + } + shift = c/(b + shift); + } + f = (sk + sp)*(sk - sp) + shift; + g = sk*ek; + + /* Chase zeros. */ + for (j = k; j < p-1; j++) + { + rta_real_t t = rta_hypot(f,g); + rta_real_t cs = f/t; + rta_real_t sn = g/t; + if (j != k) + { + e[j-1] = t; + } + f = cs*S[j] + sn*e[j]; + e[j] = cs*e[j] - sn*S[j]; + g = sn*S[j+1]; + S[j+1] = cs*S[j+1]; + if (V != NULL) + { + for (i = 0; i < n; i++) + { + t = cs*V[i*n + j] + sn*V[i*n + (j+1)]; + V[i*n + (j+1)] = -sn*V[i*n + j] + cs*V[i*n + (j+1)]; + V[i*n + j] = t; + } + } + t = rta_hypot(f,g); + cs = f/t; + sn = g/t; + S[j] = t; + f = cs*e[j] + sn*S[j+1]; + S[j+1] = -sn*e[j] + cs*S[j+1]; + g = sn*e[j+1]; + e[j+1] = cs*e[j+1]; + if (U != NULL && (j < m-1)) + { + for (i = 0; i < m; i++) + { + t = cs*U[i*n + j] + sn*U[i*n + (j+1)]; + U[i*n + (j+1)] = -sn*U[i*n + j] + cs*U[i*n + (j+1)]; + U[i*n + j] = t; + } + } + } + e[p-2] = f; + iter = iter + 1; + } + break; + + /* Convergence. */ + case 4: + { + /* Make the singular values positive. */ + if (S[k] <= 0.0) + { + S[k] = (S[k] < 0.0 ? -S[k] : 0.0); + if (V != NULL) + { + for (i = 0; i <= pp; i++) + { + V[i*n + k] = -V[i*n + k]; + } + } + } + + /* Order the singular values. */ + while (k < pp) + { + rta_real_t t; + if (S[k] >= S[k+1]) + { + break; + } + t = S[k]; + S[k] = S[k+1]; + S[k+1] = t; + if (V != NULL && (k < n-1)) + { + for (i = 0; i < n; i++) + { + t = V[i*n + (k+1)]; + V[i*n + (k+1)] = V[i*n + k]; + V[i*n + k] = t; + } + } + if (U != NULL && (k < m-1)) + { + for (i = 0; i < m; i++) + { + t = U[i*n + (k+1)]; + U[i*n + (k+1)] = U[i*n + k]; + U[i*n + k] = t; + } + } + k++; + } + iter = 0; + p--; + } + break; + } + } + return; +} + +void +rta_svd_stride(rta_real_t * output_U, const int ou_stride, + rta_real_t * S, const int s_stride, + rta_real_t * output_V, const int ov_stride, + rta_real_t * input_A, const int ia_stride, + const rta_svd_setup_t * svd_setup) +{ + rta_real_t * A; /* input_A, copied or transposed into svd_setup->A */ + int a_stride; /* actual A stride */ + rta_real_t * U; /* swap with V if A is transposed */ + int u_stride; /* actual U stride */ + rta_real_t * V; + int v_stride; /* actual V stride */ + + + rta_real_t * e = svd_setup->e; /* just to ease the reading */ + rta_real_t * work = svd_setup->work; /* just to ease the reading */ + + unsigned int m = svd_setup->m; + unsigned int n = svd_setup->n; + + int nu; + int nct; + int nrt; + + int i, j, k; + int p, pp, iter; + + if(n <= m) + { + if(svd_setup->svd_type == rta_svd_out_of_place) + { + /* Use an input copy */ + A = svd_setup->A; + a_stride = 1; + j = m*n; + for(i = 0; i<j; i++) + { + A[i] = input_A[i*ia_stride]; + } + } + else /* Work directly on input */ + { + A = input_A; + a_stride = ia_stride; + } + + U = output_U; + u_stride = ou_stride; + V = output_V; + v_stride = ov_stride; + } + else + { + /* Use an input transposed copy */ + A = svd_setup->A; + a_stride = 1; + + for(i = 0; i<m; i++) + { + for(j=0; j<n; j++) + { + A[j*m + i] = input_A[(i*n + j)*ia_stride]; + } + } + m = svd_setup->n; + n = svd_setup->m; + + /* swap U and V as A is transposed */ + U = output_V; + u_stride = ov_stride; + V = output_U; + v_stride = ou_stride; + } + + nu = rta_imin(m,n); + nct = rta_imin(m-1,n); + nrt = rta_imax(0,rta_imin(n-2,m)); + + /* Reduce A to bidiagonal form, storing the diagonal elements */ + /* in s and the super-diagonal elements in e. */ + for (k = 0; k < rta_imax(nct,nrt); k++) + { + if (k < nct) + { + /* Compute the transformation for the k-th column and */ + /* place the k-th diagonal in S[k]. */ + /* Compute 2-norm of k-th column without under/overflow. */ + S[k*s_stride] = 0.0; + for (i = k; i < m; i++) + { + S[k*s_stride] = rta_hypot(S[k*s_stride],A[(i*n + k)*a_stride]); + } + if (S[k*s_stride] != 0.0) + { + if (A[(k*n + k)*a_stride] < 0.0) + { + S[k*s_stride] = -S[k*s_stride]; + } + for (i = k; i < m; i++) + { + A[(i*n + k)*a_stride] /= S[k*s_stride]; + } + A[(k*n + k)*a_stride] += 1.0; + } + S[k*s_stride] = -S[k*s_stride]; + } + for (j = k+1; j < n; j++) + { + if ((k < nct) && (S[k*s_stride] != 0.0)) + { + /* Apply the transformation. */ + rta_real_t t = 0.0; + for (i = k; i < m; i++) + { + t += A[(i*n + k)*a_stride]*A[(i*n + j)*a_stride]; + } + t = -t/A[(k*n + k)*a_stride]; + for (i = k; i < m; i++) + { + A[(i*n + j)*a_stride] += t*A[(i*n + k)*a_stride]; + } + } + + /* Place the k-th row of A into e for the */ + /* subsequent calculation of the row transformation. */ + e[j] = A[(k*n + j)*a_stride]; + } + if (U != NULL && (k < nct)) + { + /* U initialisation */ + for(i=0; i<k; i++) + { + U[(i*n + k)*u_stride] = 0.0; + } + + /* Place the transformation in U for subsequent back */ + /* multiplication. */ + for (i = k; i < m; i++) + { + U[(i*n + k)*u_stride] = A[(i*n + k)*a_stride]; + } + } + if (k < nrt) + { + /* Compute the k-th row transformation and place the */ + /* k-th super-diagonal in e[k]. */ + /* Compute 2-norm without under/overflow. */ + e[k] = 0.0; + for (i = k+1; i < n; i++) + { + e[k] = rta_hypot(e[k],e[i]); + } + if (e[k] != 0.0) + { + if (e[k+1] < 0.0) + { + e[k] = -e[k]; + } + for (i = k+1; i < n; i++) + { + e[i] /= e[k]; + } + e[k+1] += 1.0; + } + e[k] = -e[k]; + if ((k+1 < m) && (e[k] != 0.0)) + { + /* Apply the transformation. */ + for (i = k+1; i < m; i++) + { + work[i] = 0.0; + } + for (j = k+1; j < n; j++) + { + for (i = k+1; i < m; i++) + { + work[i] += e[j]*A[i*n + j]; + } + } + for (j = k+1; j < n; j++) + { + rta_real_t t = -e[j]/e[k+1]; + for (i = k+1; i < m; i++) + { + A[(i*n + j)*a_stride] += t*work[i]; + } + } + } + if (V != NULL) + { + /* V initialisation */ + for(i=0; i<k+1; i++) + { + V[(i*n + k)*v_stride] = 0.0; + } + + /* Place the transformation in V for subsequent */ + /* back multiplication. */ + for (i = k+1; i < n; i++) + { + V[(i*n + k)*v_stride] = e[i]; + } + } + } + } + + /* Set up the final bidiagonal matrix or order p. */ + p = rta_imin(n,m+1); + if (nct < n) + { + S[nct*s_stride] = A[(nct*n + nct)*a_stride]; + } + if (m < p) + { + S[(p-1)*s_stride] = 0.0; + } + if (nrt+1 < p) + { + e[nrt] = A[(nrt*n + (p-1))*a_stride]; + } + e[p-1] = 0.0; + + /* If required, generate U. */ + if (U != NULL) + { + for (j = nct; j < nu; j++) + { + for (i = 0; i < m; i++) + { + U[(i*n + j)*u_stride] = 0.0; + } + U[(j*n + j)*u_stride] = 1.0; + } + for (k = nct-1; k >= 0; k--) + { + if (S[k*s_stride] != 0.0) + { + for (j = k+1; j < nu; j++) + { + rta_real_t t = 0.0; + for (i = k; i < m; i++) + { + t += U[(i*n + k)*u_stride]*U[(i*n + j)*u_stride]; + } + t = -t/U[(k*n + k)*u_stride]; + for (i = k; i < m; i++) + { + U[(i*n + j)*u_stride] += t*U[(i*n + k)*u_stride]; + } + } + for (i = k; i < m; i++ ) + { + U[(i*n + k)*u_stride] = -U[(i*n + k)*u_stride]; + } + U[(k*n + k)*u_stride] = 1.0 + U[(k*n + k)*u_stride]; + for (i = 0; i < k-1; i++) + { + U[(i*n + k)*u_stride] = 0.0; + } + } + else + { + for (i = 0; i < m; i++) + { + U[(i*n + k)*u_stride] = 0.0; + } + U[(k*n + k)*u_stride] = 1.0; + } + } + } + + /* If required, generate V. */ + if (V != NULL) + { + for (k = n-1; k >= 0; k--) + { + if ((k < nrt) && (e[k] != 0.0)) + { + for (j = k+1; j < nu; j++) + { + rta_real_t t = 0.0; + for (i = k+1; i < n; i++) + { + t += V[(i*n + k)*v_stride]*V[(i*n + j)*v_stride]; + } + t = -t/V[((k+1)*n + k)*v_stride]; + for (i = k+1; i < n; i++) + { + V[(i*n + j)*v_stride] += t*V[(i*n + k)*v_stride]; + } + } + } + for (i = 0; i < n; i++) + { + V[(i*n + k)*v_stride] = 0.0; + } + V[(k*n + k)*v_stride] = 1.0; + } + } + + /* Main iteration loop for the singular values. */ + pp = p-1; + iter = 0; + + while (p > 0) + { + int k=0; + int kase=0; + + /* Here is where a test for too many iterations would go. */ + + /* This section of the program inspects for */ + /* negligible elements in the s and e arrays. On */ + /* completion the variables kase and k are set as follows. */ + + /* kase = 1 if s(p) and e[k-1] are negligible and k<p */ + /* kase = 2 if s(k) is negligible and k<p */ + /* kase = 3 if e[k-1] is negligible, k<p, and */ + /* s(k), ..., s(p) are not negligible (qr step). */ + /* kase = 4 if e(p-1) is negligible (convergence). */ + + for (k = p-2; k >= -1; k--) + { + if (k == -1) + { + break; + } + if (rta_abs(e[k]) <= RTA_REAL_MIN || + rta_abs(e[k]) <= RTA_REAL_EPSILON * + (rta_abs(S[k*s_stride]) + rta_abs(S[(k+1)*s_stride]))) + { + e[k] = 0.0; + break; + } + } + if (k == p-2) + { + kase = 4; + } + else + { + int ks; + rta_real_t t; + for (ks = p-1; ks >= k; ks--) + { + if (ks == k) + { + break; + } + t = (ks != p ? rta_abs(e[ks]) : 0.) + (ks != k+1 ? rta_abs(e[ks-1]) : 0.); + if (rta_abs(S[ks*s_stride]) <= RTA_REAL_MIN || + rta_abs(S[ks*s_stride]) <= RTA_REAL_EPSILON * t) + { + S[ks*s_stride] = 0.0; + break; + } + } + if (ks == k) + { + kase = 3; + } + else if (ks == p-1) + { + kase = 1; + } + else + { + kase = 2; + k = ks; + } + } + k++; + + /* Perform the task indicated by kase. */ + switch (kase) + { + /* Deflate negligible s(p). */ + case 1: + { + rta_real_t f = e[p-2]; + e[p-2] = 0.0; + for (j = p-2; j >= k; j--) + { + rta_real_t t = rta_hypot(S[j*s_stride],f); + rta_real_t cs = S[j*s_stride]/t; + rta_real_t sn = f/t; + S[j*s_stride] = t; + if (j != k) + { + f = -sn*e[j-1]; + e[j-1] = cs*e[j-1]; + } + if (V != NULL) + { + for (i = 0; i < n; i++) + { + t = cs*V[(i*n + j)*v_stride] + sn*V[(i*n + (p-1))*v_stride]; + V[(i*n + (p-1))*v_stride] = + -sn*V[(i*n + j)*v_stride] + cs*V[(i*n + (p-1))*v_stride]; + V[(i*n + j)*v_stride] = t; + } + } + } + } + break; + + /* Split at negligible s(k). */ + case 2: + { + rta_real_t f = e[k-1]; + e[k-1] = 0.0; + for (j = k; j < p; j++) + { + rta_real_t t = rta_hypot(S[j*s_stride],f); + rta_real_t cs = S[j*s_stride]/t; + rta_real_t sn = f/t; + S[j*s_stride] = t; + f = -sn*e[j]; + e[j] = cs*e[j]; + if (U != NULL) + { + for (i = 0; i < m; i++) + { + t = cs*U[(i*n + j)*u_stride] + sn*U[(i*n + (k-1))*u_stride]; + U[(i*n + (k-1))*u_stride] = + -sn*U[(i*n + j)*u_stride] + cs*U[(i*n + (k-1))*u_stride]; + U[(i*n + j)*u_stride] = t; + } + } + } + } + break; + + /* Perform one qr step. */ + case 3: + { + /* Calculate the shift. */ + rta_real_t scale = + rta_max(rta_max(rta_max(rta_max(rta_abs( + S[(p-1)*s_stride]), + rta_abs(S[(p-2)*s_stride])), + rta_abs(e[p-2])), + rta_abs(S[k*s_stride])), + rta_abs(e[k])); + + rta_real_t sp = S[(p-1)*s_stride]/scale; + rta_real_t spm1 = S[(p-2)*s_stride]/scale; + rta_real_t epm1 = e[p-2]/scale; + rta_real_t sk = S[k*s_stride]/scale; + rta_real_t ek = e[k]/scale; + rta_real_t b = ((spm1 + sp)*(spm1 - sp) + epm1*epm1)/2.0; + rta_real_t c = (sp*epm1)*(sp*epm1); + rta_real_t shift = 0.0; + rta_real_t f; + rta_real_t g; + + if ((b != 0.0) || (c != 0.0)) + { + shift = sqrt(b*b + c); + if (b < 0.0) + { + shift = -shift; + } + shift = c/(b + shift); + } + f = (sk + sp)*(sk - sp) + shift; + g = sk*ek; + + /* Chase zeros. */ + for (j = k; j < p-1; j++) + { + rta_real_t t = rta_hypot(f,g); + rta_real_t cs = f/t; + rta_real_t sn = g/t; + if (j != k) + { + e[j-1] = t; + } + f = cs*S[j*s_stride] + sn*e[j]; + e[j] = cs*e[j] - sn*S[j*s_stride]; + g = sn*S[(j+1)*s_stride]; + S[(j+1)*s_stride] = cs*S[(j+1)*s_stride]; + if (V != NULL) + { + for (i = 0; i < n; i++) + { + t = cs*V[(i*n + j)*v_stride] + sn*V[(i*n + (j+1))*v_stride]; + V[(i*n + (j+1))*v_stride] = + -sn*V[(i*n + j)*v_stride] + cs*V[(i*n + (j+1))*v_stride]; + V[(i*n + j)*v_stride] = t; + } + } + t = rta_hypot(f,g); + cs = f/t; + sn = g/t; + S[j*s_stride] = t; + f = cs*e[j] + sn*S[(j+1)*s_stride]; + S[(j+1)*s_stride] = -sn*e[j] + cs*S[(j+1)*s_stride]; + g = sn*e[j+1]; + e[j+1] = cs*e[j+1]; + if (U != NULL && (j < m-1)) + { + for (i = 0; i < m; i++) + { + t = cs*U[(i*n + j)*u_stride] + sn*U[(i*n + (j+1))*u_stride]; + U[(i*n + (j+1))*u_stride] = + -sn*U[(i*n + j)*u_stride] + cs*U[(i*n + (j+1))*u_stride]; + U[(i*n + j)*u_stride] = t; + } + } + } + e[p-2] = f; + iter = iter + 1; + } + break; + + /* Convergence. */ + case 4: + { + /* Make the singular values positive. */ + if (S[k*s_stride] <= 0.0) + { + S[k*s_stride] = (S[k*s_stride] < 0.0 ? -S[k*s_stride] : 0.0); + if (V != NULL) + { + for (i = 0; i <= pp; i++) + { + V[(i*n + k)*v_stride] = -V[(i*n + k)*v_stride]; + } + } + } + + /* Order the singular values. */ + while (k < pp) + { + rta_real_t t; + if (S[k*s_stride] >= S[(k+1)*s_stride]) + { + break; + } + t = S[k*s_stride]; + S[k*s_stride] = S[(k+1)*s_stride]; + S[(k+1)*s_stride] = t; + if (V != NULL && (k < n-1)) + { + for (i = 0; i < n; i++) + { + t = V[(i*n + (k+1))*v_stride]; + V[(i*n + (k+1))*v_stride] = V[(i*n + k)*v_stride]; + V[(i*n + k)*v_stride] = t; + } + } + if (U != NULL && (k < m-1)) + { + for (i = 0; i < m; i++) + { + t = U[(i*n + (k+1))*u_stride]; + U[(i*n + (k+1)*u_stride)] = U[(i*n + k)*u_stride]; + U[(i*n + k)*u_stride] = t; + } + } + k++; + } + iter = 0; + p--; + } + break; + } + } + return; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_svd.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_svd.h new file mode 100644 index 0000000..01d7b38 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_svd.h @@ -0,0 +1,186 @@ +/** + * @file rta_svd.h + * @author Jean-Philippe.Lambert@ircam.fr + * @date Mon Aug 18 09:58:20 2008 + * + * @brief Singular Value Decomposition + * + * @copyright + * Copyright (C) 2008 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_SVD_H_ +#define _RTA_SVD_H_ 1 + +#include "rta.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum +{ + rta_svd_out_of_place = 1, /**< the input matrix A is first copied */ + rta_svd_in_place = 2 /**< the input matrix A can be modified */ +} rta_svd_t; + + +/* rta_svd_setup is private (depends on implementation) */ +typedef struct rta_svd_setup rta_svd_setup_t; + + +/** + * Allocate an svd setup for further svd decomposition. (The values + * referenced by the arrays may change, but not their sizes.) + * + * Any 2D array is in row-major order. + * + * \see rta_svd_setup_delete + * \see rta_svd + * + * @param svd_setup is an address to a pointer to a private structure + * which may depend on actual svd implementation. + * @param svd_type can be + * 'rta_svd_out_of_place': the matrix 'A' is first copied; + * 'rta_svd_in_place': 'A' may be modified. This is the most + * efficient if 'm' >= 'n'. (If 'n' > ''m, 'A' is internally + * copied and transposed.) + * @param U is a 2D array of size 'm' x 'n', or a 'NULL' pointer (it + * is not calculated, then). + * @param S is a 1D array of size 'n', representing the diagonal matrix + * of the singular values of 'A'. + * @param V is a 2D array f size 'n' x 'n', or a 'NULL' pointer (it is + * not calculated, then). + * @param A is a 2D array of size 'm' x 'n'. 'A' can be modified by the + * computation if 'svd_type' is 'rta_svd_in_place'. + * @param m is the first dimension of 'A'. + * @param n is the second dimension of 'A'. + * + * @return 1 on success, 0 on fail. If it fails, nothing should be done + * with 'svd_setup' (even a delete). + */ +int +rta_svd_setup_new(rta_svd_setup_t ** svd_setup, const rta_svd_t svd_type, + rta_real_t * U, rta_real_t * S, rta_real_t * V, + rta_real_t * A, const unsigned int m, const unsigned int n); + +/** + * Deallocate any (sucessfully) allocated svd setup. + * + * \see rta_svd_setup_new + * + * @param svd_setup is a pointer to the memory wich will be released. + */ +void +rta_svd_setup_delete(rta_svd_setup_t * svd_setup); + +/** + * + * For an m-by-n matrix A with m >= n, the singular value + * decomposition is an m-by-n orthogonal matrix U, an n-by-n diagonal + * matrix S, and an n-by-n orthogonal matrix V so that A = U*S*V'. + * (V' is the conjugate transpose of V and only the diagonal vector of + * S is represented here.) + * + * The singular values, S[k] are ordered so that + * S[0] >= S[1] >= ... >= S[n-1]. + * + * The singular value decompostion always exists, so the constructor will + * never fail. The matrix condition number and the effective numerical + * rank can be computed from the singlar values. + * + * Any array must be allocated before calling this function. + * Any 2D array is in row-major order. + * + * \see rta_svd_setup_new + * + * @param U is a 2D array of size 'm' x 'n', or a 'NULL' pointer (it + * is not calculated, then). + * @param S is a 1D array of size 'n', representing the diagonal matrix + * of the singular values of 'A'. + * @param V is a 2D array f size 'n' x 'n', or a 'NULL' pointer (it is not + * calculated, then). + * @param A is a 2D array of size 'm' x 'n'. 'A' may be modified by the + * computation depending on the mode used to create 'svd_setup' + * @param svd_setup is a previously allocated setup (by rta_setup_new). + * + */ +void +rta_svd(rta_real_t * U, rta_real_t * S, rta_real_t * V, rta_real_t * A, + const rta_svd_setup_t * svd_setup); + + +/** + * + * For an m-by-n matrix A with m >= n, the singular value + * decomposition is an m-by-n orthogonal matrix U, an n-by-n diagonal + * matrix S, and an n-by-n orthogonal matrix V so that A = U*S*V'. + * (V' is the conjugate transpose of V and only the diagonal vector of + * S is represented here.) + * + * The singular values, S[k*s_tride] are ordered so that + * S[0] >= S[s_tride] >= ... >= S[(n-1)*s_tride]. + * + * The singular value decompostion always exists, so the constructor will + * never fail. The matrix condition number and the effective numerical + * rank can be computed from the singlar values. + * + * Any array must be allocated before calling this function. + * Any 2D array is in row-major order. + * + * \see rta_svd_setup_new + * + * @param U is a 2D array of size 'm' x 'n', or a 'NULL' pointer (it + * is not calculated, then). + * @param u_stride is 'U' stride + * @param S is a 1D array of size 'n', representing the diagonal matrix + * of the singular values of 'A'. + * @param s_stride is 'S' stride + * @param V is a 2D array f size 'n' x 'n', or a 'NULL' pointer (it is not + * calculated, then). + * @param v_stride is 'V' stride + * @param A is a 2D array of size 'm' x 'n'. 'A' may be modified by the + * computation depending on the mode used to create 'svd_setup' + * @param a_stride is 'A' stride + * @param svd_setup is a previously allocated setup (by rta_setup_new). + * + */ +void +rta_svd_stride(rta_real_t * U, const int u_stride, + rta_real_t * S, const int s_stride, + rta_real_t * V, const int v_stride, + rta_real_t * A, const int a_stride, + const rta_svd_setup_t * svd_setup); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_SVD_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_window.c b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_window.c new file mode 100644 index 0000000..7627616 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_window.c @@ -0,0 +1,300 @@ +/** + * @file rta_window.c + * @author Jean-Philippe.Lambert@ircam.fr + * @date Fri Jun 15 15:29:25 2007 + * + * @brief Signal windowing + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "rta_window.h" +#include "rta_math.h" /* M_PI, cos */ + + + +/* y = 0.5 - 0.5 * cos(2 * pi * x) */ +int rta_window_hann_weights(rta_real_t * weights_vector, + const unsigned int weights_size) +{ + int i; + int ret = 1; /* return value */ + const rta_real_t step = 2. * M_PI / weights_size; + + for(i=0; i<weights_size; i++) + { + weights_vector[i] = 0.5 - 0.5 * rta_cos(i*step); + } + + return ret; +} + +int rta_window_hann_weights_stride( + rta_real_t * weights_vector, const int w_stride, + const unsigned int weights_size) +{ + int i; + int ret = 1; /* return value */ + const rta_real_t step = 2. * M_PI / weights_size; + + for(i=0; i<weights_size*w_stride; i+=w_stride) + { + weights_vector[i] = 0.5 - 0.5 * rta_cos(i*step); + } + + return ret; +} + +void rta_window_hann_apply_in_place(rta_real_t * input_vector, + const unsigned int input_size) +{ + int i; + const rta_real_t step = 2. * M_PI / input_size; + for(i=0; i<input_size; i++) + { + input_vector[i] *= 0.5 - 0.5 * rta_cos(i*step); + } + + return; +} + +void rta_window_hann_apply_in_place_stride( + rta_real_t * input_vector, const int i_stride, + const unsigned int input_size) +{ + int i; + const rta_real_t step = 2. * M_PI / input_size; + for(i=0; i<input_size*i_stride; i+=i_stride) + { + input_vector[i] *= 0.5 - 0.5 * rta_cos(i*step); + } + + return; +} + +/* y = coef + (1-coef)(0.5 - 0.5 * cos(2 * pi * x)) */ +/* raised-cosine, real hamming window if coef == 0.08 */ +int rta_window_hamming_weights(rta_real_t * weights_vector, + const unsigned int weights_size, + const rta_real_t coef) +{ + int i; + int ret = 1; /* return value */ + const rta_real_t step = 2. * M_PI / weights_size; + const rta_real_t scale = (1. - coef) * 0.5; + + for(i=0; i<weights_size; i++) + { + weights_vector[i] = coef + scale * (1. - rta_cos(i*step)); + } + + return ret; +} + +int rta_window_hamming_weights_stride( + rta_real_t * weights_vector, const int w_stride, + const unsigned int weights_size, + const rta_real_t coef) +{ + int i; + int ret = 1; /* return value */ + const rta_real_t step = 2. * M_PI / weights_size; + const rta_real_t scale = (1. - coef) * 0.5; + + for(i=0; i<weights_size*w_stride; i+=w_stride) + { + weights_vector[i] = coef + scale * (1. - rta_cos(i*step)); + } + + return ret; +} + +void rta_window_hamming_apply_in_place(rta_real_t * input_vector, + const unsigned int input_size, + const rta_real_t coef) +{ + int i; + const rta_real_t step = 2. * M_PI / input_size; + const rta_real_t scale = (1. - coef) * 0.5; + + for(i=0; i<input_size; i++) + { + input_vector[i] *= coef + scale * (1. - rta_cos(i*step)); + } + + return; +} + +void rta_window_hamming_apply_in_place_stride( + rta_real_t * input_vector, const int i_stride, + const unsigned int input_size, + const rta_real_t coef) +{ + int i; + const rta_real_t step = 2. * M_PI / input_size; + const rta_real_t scale = (1. - coef) * 0.5; + + for(i=0; i<input_size*i_stride; i+=i_stride) + { + input_vector[i] *= coef + scale * (1. - rta_cos(i*step)); + } + + return; +} + + +void rta_window_apply(rta_real_t * output_vector, + const unsigned int output_size, + const rta_real_t * input_vector, + const rta_real_t * weights_vector) +{ + int i; + + for(i=0; i<output_size; i++) + { + output_vector[i] = input_vector[i] * weights_vector[i]; + } + + return; +} + +void rta_window_apply_stride( + rta_real_t * output_vector, const int o_stride, + const unsigned int output_size, + const rta_real_t * input_vector, const int i_stride, + const rta_real_t * weights_vector, const int w_stride) +{ + int o,i,w; + + for(o=0, i=0, w=0; o<output_size*o_stride; o+=o_stride, i+=i_stride, w+=w_stride) + { + output_vector[o] = input_vector[i] * weights_vector[w]; + } + + return; +} + + +void rta_window_apply_in_place(rta_real_t * input_vector, + const unsigned int input_size, + const rta_real_t * weights_vector) +{ + int i; + + for(i=0; i<input_size; i++) + { + input_vector[i] *= weights_vector[i]; + } + + return; +} + +void rta_window_apply_in_place_stride( + rta_real_t * input_vector, const int i_stride, + const unsigned int input_size, + const rta_real_t * weights_vector, const int w_stride) +{ + int i,w; + + for(i=0,w=0; i<input_size*i_stride; i+=i_stride, w+=w_stride) + { + input_vector[i] *= weights_vector[w]; + } + + return; +} + +void rta_window_rounded_apply( + rta_real_t * output_vector, const unsigned int output_size, + const rta_real_t * input_vector, + const rta_real_t * weights_vector, const unsigned int weights_size) +{ + int i; + const rta_real_t step = (rta_real_t) weights_size / (rta_real_t) output_size; + + for(i=0; i<output_size; i++) + { + output_vector[i] = input_vector[i] * weights_vector[(int)rta_round(i*step)]; + } + + return; +} + +void rta_window_rounded_apply_stride( + rta_real_t * output_vector, const int o_stride, + const unsigned int output_size, + const rta_real_t * input_vector, const int i_stride, + const rta_real_t * weights_vector, const int w_stride, + const unsigned int weights_size) +{ + int i; + const rta_real_t step = (rta_real_t) weights_size / (rta_real_t) output_size; + + for(i=0; i<output_size; i++) + { + output_vector[i] = input_vector[i] * weights_vector[(int)rta_round(i*step)]; + } + + return; +} + +void rta_window_rounded_apply_in_place( + rta_real_t * input_vector, const unsigned int input_size, + const rta_real_t * weights_vector, const unsigned int weights_size) +{ + int i; + const rta_real_t step = (rta_real_t) weights_size / (rta_real_t) input_size; + + for(i=0; i<input_size; i++) + { + input_vector[i] *= weights_vector[(int)rta_round(i*step)]; + } + + return; +} + +void rta_window_rounded_apply_in_place_stride( + rta_real_t * input_vector, const int i_stride, + const unsigned int input_size, + const rta_real_t * weights_vector, const int w_stride, + const unsigned int weights_size) +{ + int i,w; + const rta_real_t step = (rta_real_t) weights_size / (rta_real_t) input_size; + + for(i=0,w=0; i<input_size*i_stride; i+=i_stride, w+=w_stride) + { + input_vector[i] *= weights_vector[(int)rta_round(w*step)]; + } + + return; +} + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_window.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_window.h new file mode 100644 index 0000000..955b78b --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/misc/rta_window.h @@ -0,0 +1,379 @@ +/** + * @file rta_window.h + * @author Jean-Philippe.Lambert@ircam.fr + * @date Fri Jun 15 15:29:25 2007 + * + * @brief Signal windowing + * + * @copyright + * Copyright (C) 2007 by IRCAM-Centre Georges Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_WINDOW_H_ +#define _RTA_WINDOW_H_ 1 + +#include "rta.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Generate a vector of weights 'weights_vector' to be applied to + * another signal vector, on the form of a von Hann window. + * + * y = 0.5 - 0.5 * cos(2 * pi * x), + * x is in [0,1] as x is scaled by ('weights_size' - 1) + * + * \see rta_window_apply + * \see rta_window_apply_in_place + * \see rta_window_rounded_apply + * \see rta_window_rounded_apply_in_place + * + * @param weights_vector size is 'weights_size' + * @param weights_size is the number of steps + * + * @return 1 on success 0 on fail + */ +int +rta_window_hann_weights(rta_real_t * weights_vector, + const unsigned int weights_size); + +/** + * Generate a vector of weights 'weights_vector' to be applied to + * another signal vector, on the form of a von Hann window. + * + * y = 0.5 - 0.5 * cos(2 * pi * x), + * x is in [0,1] as x is scaled by ('weights_size' - 1) + * + * \see rta_window_apply_stride + * \see rta_window_apply_in_place_stride + * \see rta_window_rounded_apply_stride + * \see rta_window_rounded_apply_in_place_stride + * + * @param weights_vector size is 'weights_size' + * @param w_stride is 'weights_vector' stride + * @param weights_size is the number of steps + * + * @return 1 on success 0 on fail + */ +int +rta_window_hann_weights_stride( + rta_real_t * weights_vector, const int w_stride, + const unsigned int weights_size); + +/** + * Apply a von Hann window on an 'input_vector', calculating the + * window on the fly. + * + * \see rta_window_hann_weights + * + * @param input_vector size is 'input_size' + * @param input_size is the number of points of the 'input_vector' + */ +void +rta_window_hann_apply_in_place(rta_real_t * input_vector, + const unsigned int input_size); + +/** + * Apply a von Hann window on an 'input_vector', calculating the + * window on the fly. + * + * \see rta_window_hann_weights_stride + * + * @param input_vector size is 'input_size' + * @param i_stride is 'input_vector' stride + * @param input_size is the number of points of the 'input_vector' + */ +void +rta_window_hann_apply_in_place_stride( + rta_real_t * input_vector, const int i_stride, + const unsigned int input_size); + +/** + * Generate a vector of weights 'weights_vector' to be applied to + * another signal vector, on the form of a raised-cosine window. If + * 'coef' == 0.08, it is a real Hamming window. + * + * y = coef + (1-coef)(0.5 - 0.5 * cos(2 * pi * x)), + * x is in [0,1] as x is scaled by ('weights_size' - 1) + * + * \see rta_window_apply + * \see rta_window_apply_in_place + * \see rta_window_rounded_apply + * \see rta_window_rounded_apply_in_place + * + * @param weights_vector size is 'weights_size' + * @param weights_size is the number of steps + * @param coef is the raiser coefficient + * + * @return 1 on success 0 on fail + */ +int +rta_window_hamming_weights(rta_real_t * weights_vector, + const unsigned int weights_size, + const rta_real_t coef); + +/** + * Generate a vector of weights 'weights_vector' to be applied to + * another signal vector, on the form of a raised-cosine window. If + * 'coef' == 0.08, it is a real Hamming window. + * + * y = coef + (1-coef)(0.5 - 0.5 * cos(2 * pi * x)), + * x is in [0,1] as x is scaled by ('weights_size' - 1) + * + * \see rta_window_apply_stride + * \see rta_window_apply_in_place_stride + * \see rta_window_rounded_apply_stride + * \see rta_window_rounded_apply_in_place_stride + * + * @param weights_vector size is 'weights_size' + * @param w_stride is 'weights_vector' stride + * @param weights_size is the number of steps + * @param coef is the raiser coefficient + * + * @return 1 on success 0 on fail + */ +int +rta_window_hamming_weights_stride( + rta_real_t * weights_vector, const int w_stride, + const unsigned int weights_size, + const rta_real_t coef); + +/** + * Apply a Hamming window on an 'input_vector', calculating the + * window on the fly. + * + * \see rta_window_hamming_weights + * + * @param input_vector size is 'input_size' + * @param input_size is the number of points of the 'input_vector' + * @param coef is the raiser coefficient + */ +void +rta_window_hamming_apply_in_place(rta_real_t * input_vector, + const unsigned int input_size, + const rta_real_t coef); +/** + * Apply a Hamming window on an 'input_vector', calculating the + * window on the fly. + * + * \see rta_window_hamming_weights + * + * @param input_vector size is 'input_size' + * @param i_stride is 'input_vector' stride + * @param input_size is the number of points of the 'input_vector' + * @param coef is the raiser coefficient + */ +void +rta_window_hamming_apply_in_place_stride( + rta_real_t * input_vector, const int i_stride, + const unsigned int input_size, + const rta_real_t coef); + +/** + * Apply any 'weights_vector' on an 'input_vector' and output the + * result as 'output_vector'. + * 'input_vector' and 'weights_vector' may not overlap. + * + * \see rta_window_apply_in_place + * + * @param output_vector size is 'output_size' + * @param output_size is the number of points of 'output_vector' + * @param input_vector size is >= 'output_size' + * @param weights_vector size is >= 'output_size' + */ +void +rta_window_apply(rta_real_t * output_vector, + const unsigned int output_size, + const rta_real_t * input_vector, + const rta_real_t * weights_vector); + +/** + * Apply any 'weights_vector' on an 'input_vector' and output the + * result as 'output_vector'. + * 'input_vector' and 'weights_vector' may not overlap. + * + * \see rta_window_apply_in_place_stride + * + * @param output_vector size is 'output_size' + * @param o_stride is 'output_vector' stride + * @param output_size is the number of points of 'output_vector' + * @param input_vector size is >= 'output_size' + * @param i_stride is 'input_vector' stride + * @param weights_vector size is >= 'output_size' + * @param w_stride is 'weights_vector' stride + */ +void +rta_window_apply_stride( + rta_real_t * output_vector, const int o_stride, + const unsigned int output_size, + const rta_real_t * input_vector, const int i_stride, + const rta_real_t * weights_vector, const int w_stride); + +/** + * Apply any 'weights_vector' on an 'input_vector'. + * 'input_vector' and 'weights_vector' may not overlap. + * + * \see rta_window_hann_weights + * \see rta_window_hamming_weights + * + * @param input_vector size is 'input_size' + * @param input_size is the number of points of the 'input_vector' + * @param weights_vector size must be >= 'input_size'. + */ +void +rta_window_apply_in_place(rta_real_t * input_vector, + const unsigned int input_size, + const rta_real_t * weights_vector); + +/** + * Apply any 'weights_vector' on an 'input_vector'. + * 'input_vector' and 'weights_vector' may not overlap. + * + * \see rta_window_hann_weights_stride + * \see rta_window_hamming_weights_stride + * + * @param input_vector size is 'input_size' + * @param i_stride is 'input_vector' stride + * @param input_size is the number of points of the 'input_vector' + * @param weights_vector size must be >= 'input_size'. + * @param w_stride is 'weights_vector' stride + */ +void +rta_window_apply_in_place_stride( + rta_real_t * input_vector, const int i_stride, + const unsigned int input_size, + const rta_real_t * weights_vector, const int w_stride); + +/** + * Apply any 'weights_vector' on an 'input_vector'. + * 'output_vector' and 'weights_vector' may not overlap. + * + * If 'input_size' != 'weights_size' then the 'weights_vector' indexes + * are scaled and rounded. The rounding error may be acceptable is + * 'weights_size' is big enough (4096 points for 12 bits resolution) + * or if 'input_size' is a multiple of 'weights_size'. + * + * \see rta_window_apply + * + * @param output_vector size is 'output_size' + * @param output_size is the number of points of the 'output_vector' + * @param input_vector size is >= 'output_size' + * @param weights_vector is the number of points of the 'input_vector' + * @param weights_size is the number of points of the 'weights_vector' + */ +void +rta_window_rounded_apply( + rta_real_t * output_vector, const unsigned int output_size, + const rta_real_t * input_vector, + const rta_real_t * weights_vector, const unsigned int weights_size); + +/** + * Apply any 'weights_vector' on an 'input_vector'. + * 'output_vector' and 'weights_vector' may not overlap. + * + * If 'input_size' != 'weights_size' then the 'weights_vector' indexes + * are scaled and rounded. The rounding error may be acceptable is + * 'weights_size' is big enough (4096 points for 12 bits resolution) + * or if 'input_size' is a multiple of 'weights_size'. + * + * \see rta_window_apply_stride + * + * @param output_vector size is 'output_size' + * @param o_stride is 'output_vector' stride + * @param output_size is the number of points of the 'output_vector' + * @param input_vector size is >= 'output_size' + * @param i_stride is 'input_vector' stride + * @param weights_vector is the number of points of the 'input_vector' + * @param w_stride is 'weights_vector' stride + * @param weights_size is the number of points of the 'weights_vector' + */ +void +rta_window_rounded_apply_stride( + rta_real_t * output_vector, const int o_stride, + const unsigned int output_size, + const rta_real_t * input_vector, const int i_stride, + const rta_real_t * weights_vector, const int w_stride, + const unsigned int weights_size); + +/** + * Apply any 'weights_vector' on an 'input_vector'. + * 'input_vector' and 'weights_vector' may not overlap. + * + * If 'input_size' != 'weights_size' then the 'weights_vector' indexes + * are scaled and rounded. The rounding error may be acceptable is + * 'weights_size' is big enough (4096 points for 12 bits resolution) + * or if 'input_size' is a multiple of 'weights_size'. + * + * \see rta_window_apply + * + * @param input_vector size is 'input_size' + * @param input_size is the number of points of the 'input_vector' + * @param weights_vector size is 'weights_size' + * @param weights_size is the number of points of the 'weights_vector' + */ +void +rta_window_rounded_apply_in_place(rta_real_t * input_vector, + const unsigned int input_size, + const rta_real_t * weights_vector, + const unsigned int weights_size); + +/** + * Apply any 'weights_vector' on an 'input_vector'. + * 'input_vector' and 'weights_vector' may not overlap. + * + * If 'input_size' != 'weights_size' then the 'weights_vector' indexes + * are scaled and rounded. The rounding error may be acceptable is + * 'weights_size' is big enough (4096 points for 12 bits resolution) + * or if 'input_size' is a multiple of 'weights_size'. + * + * \see rta_window_apply_stride + * + * @param input_vector size is 'input_size' + * @param i_stride is 'input_vector' stride + * @param input_size is the number of points of the 'input_vector' + * @param weights_vector size is 'weights_size' + * @param w_stride is 'weights_vector' stride + * @param weights_size is the number of points of the 'weights_vector' + */ +void +rta_window_rounded_apply_in_place_stride( + rta_real_t * input_vector, const int i_stride, + const unsigned int input_size, + const rta_real_t * weights_vector, const int w_stride, + const unsigned int weights_size); + +#ifdef __cplusplus +} +#endif + +#endif /* _RTA_WINDOW_H_ */ + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/rta_configuration.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/rta_configuration.h new file mode 100644 index 0000000..b2ec624 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/dependencies/rta/rta_configuration.h @@ -0,0 +1,64 @@ +/** + * @file rta_configuration.h + * @brief Custom configuration for the rta library + * + * @copyright + * Copyright (C) 2008-2014 by IRCAM – Centre Pompidou. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _RTA_CONFIGURATIONx_H_ +#define _RTA_CONFIGURATIONx_H_ 1 + +//#define rta_post post +#define rta_post printf + +/** fts memory allocation */ +#undef rta_malloc +#define rta_malloc malloc + +/** fts memory reallocation */ +#undef rta_realloc +#define rta_realloc realloc + +/** fts memory deallocation */ +#undef rta_free +#define rta_free free + +/** simple floating point precision */ +#undef RTA_REAL_TYPE +#define RTA_REAL_TYPE RTA_FLOAT_TYPE + +/* Apple VecLib for float and double */ +#if defined(__APPLE__) && defined(__MACH__) && \ +(RTA_REAL_TYPE == RTA_FLOAT_TYPE || RTA_REAL_TYPE == RTA_DOUBLE_TYPE) +#define RTA_USE_VECLIB 1 +#endif + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoCollection.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoCollection.cpp new file mode 100644 index 0000000..209b96b --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoCollection.cpp @@ -0,0 +1,187 @@ +/** + * @file PiPoCollection.cpp + * @author Norbert.Schnell@ircam.fr + * @author joseph.larralde@ircam.fr + * + * @brief PiPo Module Collection + * + * @copyright + * Copyright (C) 2013 - 2015 by ISMM IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#include "PiPoCollection.h" + +#include "PiPoHost.h" + +#include "PiPoBands.h" +#include "PiPoBayesFilter.h" +#include "PiPoBiquad.h" +#include "PiPoChop.h" +#include "PiPoConst.h" +#include "PiPoDct.h" +#include "PiPoDelta.h" +#include "PiPoFft.h" +#include "PiPoFiniteDif.h" +#include "PiPoGate.h" +#include "PiPoLpc.h" +#include "PiPoLpcFormants.h" +#include "PiPoMedian.h" +#include "PiPoMel.h" +#include "PiPoMfcc.h" +#include "PiPoMoments.h" +#include "PiPoMvavrg.h" +#include "PiPoOnseg.h" +#include "PiPoPeaks.h" +#include "PiPoScale.h" +#include "PiPoSelect.h" +#include "PiPoSlice.h" +#include "PiPoSum.h" + +class PiPoPool : public PiPoModuleFactory +{ + class PiPoPoolModule : public PiPoModule + { + private: + PiPo *pipo; + std::string instanceName; + + public: + PiPoPoolModule(PiPo *pipo) { + this->pipo = pipo; + } + + PiPoPoolModule() { + if(this->pipo != NULL) { + delete this->pipo; + this->pipo = NULL; + } + } + }; + +public: + PiPoPool(bool defaultPipos = true) + { + if(defaultPipos) + { + includeDefaultPiPos(); + } + } + + ~PiPoPool() + { + /*for(pipoMap::iterator it = map.begin(); it != map.end(); ++it) + { + if(it->second != NULL) { + delete it->second; + it->second = NULL; + } + }*/ + } + + void includeDefaultPiPos() + { + include("bands", new PiPoCreator<PiPoBands>); + include("bayesfilter", new PiPoCreator<PiPoBayesFilter>); + include("biquad", new PiPoCreator<PiPoBiquad>); + include("chop", new PiPoCreator<PiPoChop>); + include("const", new PiPoCreator<PiPoConst>); + include("dct", new PiPoCreator<PiPoDct>); + include("delta", new PiPoCreator<PiPoDelta>); + include("fft", new PiPoCreator<PiPoFft>); + include("finitedif", new PiPoCreator<PiPoFiniteDif>); + include("gate", new PiPoCreator<PiPoGate>); + include("lpc", new PiPoCreator<PiPoLpc>); + include("lpcformants", new PiPoCreator<PiPoLpcFormants>); + include("median", new PiPoCreator<PiPoMedian>); + include("mel", new PiPoCreator<PiPoMel>); + include("mfcc", new PiPoCreator<PiPoMfcc>); + include("moments", new PiPoCreator<PiPoMoments>); + include("mvavrg", new PiPoCreator<PiPoMvavrg>); + include("onseg", new PiPoCreator<PiPoOnseg>); + include("peaks", new PiPoCreator<PiPoPeaks>); + include("scale", new PiPoCreator<PiPoScale>); + include("select", new PiPoCreator<PiPoSelect>); + include("slice", new PiPoCreator<PiPoSlice>); + include("sum", new PiPoCreator<PiPoSum>); + } + + void include(std::string name, PiPoCreatorBase *creator) + { + map[name] = creator; + } + + PiPo *create(unsigned int index, const std::string &pipoName, const std::string &instanceName, PiPoModule *&module) + { + pipoMap::iterator it = map.find(pipoName); + if (it == map.end()) return NULL; + PiPo *ret = it->second->create(); + module = new PiPoPoolModule(ret); + return ret; + } + +private: + typedef std::map<std::string, PiPoCreatorBase *> pipoMap; + pipoMap map; +}; + +//==========================================================// + +static PiPoPool *factory; + +void +PiPoCollection::init(bool defaultPipos) +{ + factory = new PiPoPool(defaultPipos); +} + +void +PiPoCollection::deinit() +{ + if (factory != NULL) delete factory; +} + +void +PiPoCollection::addToCollection(std::string name, PiPoCreatorBase *creator) +{ + factory->include(name, creator); +} + +PiPo * +PiPoCollection::create(std::string name) +{ + PiPoChain *chain = new PiPoChain(NULL, factory); + + if (chain->parse(name.c_str()) > 0 && chain->instantiate() && chain->connect(NULL)) + { + chain->copyPiPoAttributes(); + return static_cast<PiPo *>(chain); + } + return NULL; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoCollection.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoCollection.h new file mode 100644 index 0000000..037bcf2 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoCollection.h @@ -0,0 +1,109 @@ +/** + * @file PiPoCollection.h + * @author Norbert.Schnell@ircam.fr + * @author joseph.larralde@ircam.fr + * + * @brief PiPo Module Collection + * + * @ingroup pipoapi + * + * @copyright + * Copyright (C) 2013 - 2015 by ISMM IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of mosquitto 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. + */ + +#ifndef _PIPO_COLLECTION_ +#define _PIPO_COLLECTION_ + +#include <map> +#include "PiPo.h" + +//============================================================================// +//============================== PiPo factory ================================// +//============================================================================// + +//------------------------------ PiPoCreatorBase +class PiPoCreatorBase +{ +public: + //PiPoCreatorBase() {} + virtual ~PiPoCreatorBase() {} + virtual PiPo *create() = 0; +}; + +//------------------------------ PiPoCreator +template<class T> +class PiPoCreator : public PiPoCreatorBase +{ +public: + PiPoCreator() {} + virtual ~PiPoCreator() {} + virtual PiPo *create() + { + return new T(NULL); + } +}; + +//============================================================================// +//============================== PiPo collection =============================// +//============================================================================// + +// interface with the outside world (uses the factory internally) + +/** + * @brief PiPoCollection class : contains all base PiPo classes + * (with ability to hide them from the outside world) + * and methods to register new PiPos and get PiPo chains + * + * \code + * + * #include "PiPoCollection.h" + * + * // example : register a new non native PiPo : + * PiPoCollection::init(); + * PiPoCollection::addToCollection("mypipo", new PiPoCreator<MyPiPo>); + * PiPo *mychain = PiPoCollection::create("slice:mypipo"); + * + * \endcode + * + */ + +class PiPoCollection +{ +public: + static void deinit(); + static void init(bool defaultPipos = true); + //static void init(std::string pipoPath = ""); + static void addToCollection(std::string name, PiPoCreatorBase *creator); + // static void addAlias(std::string alias, std::string name); ----> TODO + static PiPo *create(std::string name); +private: +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoGraph.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoGraph.h new file mode 100644 index 0000000..c4ab62c --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoGraph.h @@ -0,0 +1,495 @@ +/** + * @file PiPoGraph.h + * @author Joseph Larralde + * + * @brief PiPo dataflow graph class that parses a graph description string and instantiates + * the corresponding graph of PiPos (made of PiPoSequence and PiPoParallel instances) + * + * @ingroup pipoapi + * + * @copyright + * Copyright (C) 2017 by ISMM IRCAM - Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of mosquitto 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. + */ + +#ifndef _PIPOHOST_H_ +#define _PIPOHOST_H_ + +#include <string> +#include <vector> +#include <iostream> + +#include "PiPoSequence.h" +#include "PiPoParallel.h" +#include "PiPoHost.h" + +// TODO: roll your own Module, Factory and Op ? +// -------------------------------------------- + +// class PiPoModule { + +// }; + +// class PiPoModuleFactory { + +// }; + +// class PiPoOp { + +// }; + + + +// NB : this is a work in progress, only performs parsing at the moment +// TODO : implement actual graph instatiation. +// TODO: define error return codes for parsing + +class PiPoGraph : public PiPo { + + typedef enum PiPoGraphTypeE { + undefined = -1, leaf = 0, sequence, parallel + } PiPoGraphType; + +private: + std::string representation; + PiPoGraphType graphType; + + // parallel graphs if isParallel + // sequence of graphs otherwise (not sequence of PiPos) + // empty if leaf + std::vector<PiPoGraph> subGraphs; + + // use op if we are a leaf to parse instanceName and to hold attributes + PiPoOp op; + + PiPo *pipo; + std::vector<std::string *> attrNames; + std::vector<std::string *> attrDescrs; + PiPoModuleFactory *moduleFactory; + + // for intermediary level PiPoGraphs : these point to leaves' attrs so that + // top level PiPoGraph can add them to itself with this->addAttr + std::vector<PiPo::Attr *> attrs; + +public: + PiPoGraph(PiPo::Parent *parent, PiPoModuleFactory *moduleFactory = NULL) : + PiPo(parent) + { + this->parent = parent; + this->moduleFactory = moduleFactory; + } + + ~PiPoGraph() + { + for (unsigned int i = 0; i < attrNames.size(); i++) + { + delete attrNames[i]; + } + + for (unsigned int i = 0; i < attrDescrs.size(); i++) + { + delete attrDescrs[i]; + } + + this->clear(); + } + + void clear() + { + for (unsigned int i = 0; i < this->subGraphs.size(); ++i) + { + this->subGraphs[i].clear(); + } + + if (this->op.getPiPo() == NULL) + { + delete this->pipo; + } + else + { + this->op.clear(); + } + }; + + //======================== PARSE GRAPH EXPRESSION ==========================// + + // or use const char * ? + bool parse(std::string graphStr) { + + //=================== BASIC SYNTAX RULES CHECKING ========================// + + //========== check if we have the right number of '<' and '>' ============// + + int cnt = 0; + for (unsigned int i = 0; i < graphStr.length(); ++i) + { + if (graphStr[i] == '<') + { + cnt++; + } + else if (graphStr[i] == '>') + { + cnt--; + } + } + + if (cnt != 0) + { + return false; + } + + // TODO : add more syntax checking here ? + + //======= determine the type of graph (leaf, sequence or parallel) =======// + + unsigned int trims = 0; + while (graphStr[0] == '<' && graphStr[graphStr.length() - 1] == '>') + { + graphStr = graphStr.substr(1, graphStr.length() - 2); + trims++; + } + + this->representation = graphStr; + + // by default we are a sequence + this->graphType = sequence; + + // if we have surrounding "<...>" and first-level commas, we are a parallel + if (trims > 0) + { + int subLevelsCnt = 0; + for (unsigned int i = 0; i < graphStr.length(); ++i) + { + if (graphStr[i] == '<') + { + subLevelsCnt++; + } + else if (graphStr[i] == '>') + { + subLevelsCnt--; + } + else if (subLevelsCnt == 0 && graphStr[i] == ',') + { + this->graphType = parallel; + break; + } + } + } + + // if we don't have any sequential / parallelism symbol, then we are a leaf + if (graphStr.find("<") >= std::string::npos && + graphStr.find(">") >= std::string::npos && + graphStr.find(",") >= std::string::npos && + graphStr.find(":") >= std::string::npos) + { + this->graphType = leaf; + } + + // std::cout << representation << " " << this->graphType << std::endl; + + //====== now fill (or not) subGraphs vector according to graph type ======// + + switch (this->graphType) + { + + //========================== leaf graph, we are a single PiPo, trim spaces + case leaf: + { + // trim spaces + // TODO: trim tabs and other spaces ? + this->representation.erase( + std::remove(this->representation.begin(), this->representation.end(), ' '), + this->representation.end() + ); + + // this parses pipoName and instanceName + // keep using PiPoOp class for this instead (as in PiPoChain) ? + // ===> YES !!! DEFINITELY !!! PiPoOp manages PiPoVersion etc + // (LEAVE THIS TO PiPoOp CLASS) + + /* + size_t open = this->representation.find('('); + size_t close = this->representation.find(')'); + + if (open < std::string::npos || close < std::string::npos) { + // ok, do nothing + if (open > 0 && open < close && close == this->representation.length() - 1) { + // ok, parse + } else { + // parentheses are not in the right place + } + } + */ + + this->op.parse(this->representation.c_str()); + + // leaf string representation cannot be empty + return (graphStr.length() > 0); + } + + break; + + //================= sequence of graphs, parse according to ':', <' and '>' + case sequence: + { + int subLevelsCnt = 0; + unsigned int lastStartIndex = 0; + std::vector< std::pair<unsigned int, unsigned int> > subStrings; + + if (graphStr[0] == '<') + { + subLevelsCnt++; + } + + for (unsigned int i = 1; i < graphStr.length(); ++i) + { + if (graphStr[i] == ':' && subLevelsCnt == 0) + { + subStrings.push_back(std::pair<unsigned int, unsigned int>( + lastStartIndex, i - lastStartIndex + )); + lastStartIndex = i + 1; + } + else if (graphStr[i] == '<') + { + if (subLevelsCnt == 0) + { + subStrings.push_back(std::pair<unsigned int, unsigned int>( + lastStartIndex, i - lastStartIndex + )); + lastStartIndex = i; + } + subLevelsCnt++; + } + else if (graphStr[i] == '>') + { + subLevelsCnt--; + if (subLevelsCnt == 0) + { + subStrings.push_back(std::pair<unsigned int, unsigned int>( + lastStartIndex, i - lastStartIndex + 1 + )); + lastStartIndex = i + 1; + } + } + else if (graphStr[i] == ',' && subLevelsCnt == 0) + { + // cannot have first-level commas in a sequence + return false; + } + } + + if (graphStr[graphStr.length() - 1] != '>') + { + subStrings.push_back(std::pair<unsigned int, unsigned int>( + lastStartIndex, graphStr.length() - lastStartIndex + )); + } + + for (unsigned int i = 0; i < subStrings.size(); ++i) + { + this->subGraphs.push_back(PiPoGraph()); + PiPoGraph &g = this->subGraphs[subGraphs.size() - 1]; + + if (!g.parse(graphStr.substr(subStrings[i].first, subStrings[i].second))) + { + return false; + } + } + + return (subLevelsCnt == 0); + } + + break; + + //============================= parallel graphs, parse according to commas + case parallel: + { + int subLevelsCnt = 0; + std::vector<unsigned int> commaIndices; + + commaIndices.push_back(0); + + for (unsigned int i = 0; i < graphStr.length(); ++i) + { + if (graphStr[i] == '<') + { + subLevelsCnt++; + } + else if (graphStr[i] == '>') + { + subLevelsCnt--; + } + else if (graphStr[i] == ',' && i < graphStr.length() - 1 && subLevelsCnt == 0) + { + commaIndices.push_back(i + 1); + } + } + + commaIndices.push_back(graphStr.length() + 1); + + for (unsigned int i = 0; i < commaIndices.size() - 1; ++i) + { + this->subGraphs.push_back(PiPoGraph()); + PiPoGraph &g = this->subGraphs[this->subGraphs.size() - 1]; + unsigned int blockStart = commaIndices[i]; + unsigned int blockLength = commaIndices[i + 1] - blockStart - 1; + + if (!g.parse(graphStr.substr(blockStart, blockLength))) + { + return false; + } + } + + return (subLevelsCnt == 0); + } + + break; + + //===================================================== this never happens + default: + + break; + } + + return false; + } + + //================ ONCE EXPRESSION PARSED, INSTANTIATE OPs =================// + + bool instantiate() + { + if (this->graphType == leaf) + { + if (!this->op.instantiate(this->parent, this->moduleFactory)) + { + return false; + } + else + { + this->pipo = this->op.getPiPo(); + } + } + else if (this->graphType == sequence) + { + for (unsigned int i = 0; i < this->subGraphs.size(); ++i) + { + if (!this->subGraphs[i].instantiate()) + { + return false; + } + } + + this->pipo = new PiPoSequence(this->parent); + } + else if (this->graphType == parallel) + { + for (unsigned int i = 0; i < this->subGraphs.size(); ++i) + { + if (!this->subGraphs[i].instantiate()) + { + return false; + } + } + + this->pipo = new PiPoParallel(this->parent); + } + + return true; + } + + void connect( bool topLevel = true) + { + // add from top level to bottom level (see PiPoBasic) + if (this->graphType == sequence) + { + for (unsigned int i = 0; i < this->subGraphs.size(); ++i) + { + this->pipo->add(this->subGraphs[i].getPiPo()); + this->subGraphs[i].connect(false); + } + } + else if (this->graphType == parallel) + { + for (unsigned int i = 0; i < this->subGraphs.size(); ++i) + { + this->pipo->add(this->subGraphs[i].getPiPo()); + this->subGraphs[i].connect(false); + } + } + + if (topLevel) + { + this->setReceiver(this->pipo); + } + } + + void setReceiver(PiPo *receiver) + { + this->setReceiver(receiver); + } + + PiPoGraphType getGraphType() + { + return this->graphType; + } + + PiPo *getPiPo() + { + return this->pipo; + } + + // TODO: add an option to get PiPoAttributes only from named modules ? + void copyPiPoAttributes(bool topLevel = true) + { + for (unsigned int i = 0; i < this->subGraphs.size(); ++i) + { + if (this->subGraphs[i].getGraphType() == leaf) + { + + } + } + } + + // void print() { + // std::cout << this->representation << " " << this->graphType << std::endl; + // for (unsigned int i = 0; i < this->subGraphs.size(); ++i) { + // std::cout << " "; + // this->subGraphs[i].print(); + // } + // } +}; + +//==================== NOW WE CAN WRITE A PIPOHOST CLASS =====================// + +// class PiPoHost { + +// }; + +#endif /* _PIPOHOST_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoHost.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoHost.h new file mode 100644 index 0000000..288fcc4 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoHost.h @@ -0,0 +1,409 @@ +/** + * + * @file PiPoHost.h + * @author Norbert.Schnell@ircam.fr + * + * @brief Plugin Interface for Processing Objects host class + * + * @ingroup pipoapi + * + * A PiPo host is built around the class PiPoChain that represents a sequence of + * PiPo modules piping data into each other. + * See details of the steps there. + * + * @copyright + * Copyright (C) 2012–2016 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of mosquitto 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. + * + */ + +#ifndef _PIPO_HOST_ +#define _PIPO_HOST_ + +#include "PiPoSequence.h" +#include <string> +#include <vector> + +const float PIPO_MIN_SDK_VERSION_REQUIRED = 0.2; + +/** abstract base class for a container of a pipo module for PiPoModuleFactory + */ +class PiPoModule +{ +public: + PiPoModule(void) { }; + ~PiPoModule(void) { }; +}; + +class PiPoModuleFactory +{ +public: + PiPoModuleFactory(void) { }; + ~PiPoModuleFactory(void) { }; + + virtual PiPo *create(unsigned int index, const std::string &pipoName, const std::string &instanceName, PiPoModule *&module) = 0; +}; + +/** element of pipo chain, points to pipo pipo + */ +class PiPoOp +{ + unsigned int index; + std::string pipoName; /// pipo class name + std::string instanceName; + PiPo *pipo; + PiPoModule *module; + +public: + PiPoOp(unsigned int index = 0) : pipoName(), instanceName() + { + this->index = index; + this->pipo = NULL; + this->module = NULL; + }; + +// PiPoOp(const PiPoOp &other) : pipoName(), instanceName() +// { +// this->index = other.index; +// this->pipoName = other.pipoName; +// this->instanceName = other.instanceName; +// this->pipo = other.pipo; +// this->module = other.module; +// }; + + ~PiPoOp(void) { }; + + void setParent(PiPo::Parent *parent) + { + if(this->pipo != NULL) + this->pipo->setParent(parent); + }; + + void clear(void) + { + if(this->module != NULL) + delete this->module; + + this->module = NULL; + + if(this->pipo != NULL) + delete pipo; + + this->pipo = NULL; + }; + + /** parse one pipo name, and optional instance name in '(' ')' + */ + void parse(std::string str, size_t &pos) + { + this->clear(); + + size_t end = str.find_first_of(':', pos); + size_t open = str.find_first_of('(', pos); + size_t closed = str.find_first_of(')', pos); + + if(open < std::string::npos && closed < std::string::npos) + { + this->pipoName = str.substr(pos, open - pos); + this->instanceName = str.substr(open + 1, closed - open - 1); + } + else + { + this->pipoName = str.substr(pos, end - pos); + this->instanceName = this->pipoName; + } + + if(end < std::string::npos) + pos = end + 1; + else + pos = std::string::npos; + }; + + bool instantiate(PiPo::Parent *parent, PiPoModuleFactory *moduleFactory) + { + this->pipo = NULL; + this->module = NULL; + + if(moduleFactory != NULL) + this->pipo = moduleFactory->create(index, this->pipoName, this->instanceName, this->module); + + if(this->pipo != NULL) + { // check if version of created pipo is compatible with host + if (this->pipo->getVersion() < PIPO_MIN_SDK_VERSION_REQUIRED) + { + printf("PiPo Host ERROR: created PiPo %s version %f is smaller than minimum required version %f\n", + this->pipoName.c_str(), this->pipo->getVersion(), PIPO_MIN_SDK_VERSION_REQUIRED); + //TODO: clean up: destroy unusable pipo + return false; + } + + this->pipo->setParent(parent); + return true; + } + + return false; + }; + + void set(unsigned int index, PiPo::Parent *parent, PiPoModuleFactory *moduleFactory, const PiPoOp &other) + { + this->index = index; + this->pipoName = other.pipoName; + this->instanceName = other.instanceName; + + this->instantiate(parent, moduleFactory); + + if(this->pipo != NULL) + this->pipo->cloneAttrs(other.pipo); + }; + + PiPo *getPiPo() { return this->pipo; }; + const char *getInstanceName() { return this->instanceName.c_str(); }; + bool isInstanceName(const char *str) { return (this->instanceName.compare(str) == 0); }; +}; + +/** +A PiPo host is built around the class PiPoChain that represents a sequence of PiPo modules piping data into each other. + +The PiPoChain is setup with the following steps: + +1. parse chain definition string by calling parse() +2. instantiate each PiPoModule in the chain by calling instantiate(), using a PiPoModuleFactory +3. connect PiPos by calling PiPoSequence::connect() + +A PiPoChain is itself also a PiPo module, i.e. data processing works the same as for a simple module: +- the PiPoChain is prepared for processing by calling streamAttributes() on it. +- data is piped into the PiPoChain with the frames() method. + +The host registers as the receiver for the last PiPo module in the PiPoChain. +*/ + +class PiPoChain : public PiPoSequence //TODO: shouldn't PiPoChain just contain a member seq_ for the sequence to build, instead of inheriting? +{ + std::vector<PiPoOp> ops; + // these vectors of pointers seem necessary in copyPiPoAttributes + std::vector<std::string *> attrNames; + std::vector<std::string *> attrDescrs; + //PiPo::Parent *parent; //FIXME: remove? pipo has a parent member already! + PiPoModuleFactory *moduleFactory; + +public: + // constructor + PiPoChain(PiPo::Parent *parent, PiPoModuleFactory *moduleFactory = NULL) + : PiPoSequence(parent), ops() + { + this->parent = parent; + this->moduleFactory = moduleFactory; + }; + + // copy constructor: invoking assignment operator + PiPoChain(const PiPoChain &other) + : PiPoSequence(NULL), ops() + { + *this = other; + }; + + // assignment operator + const PiPoChain& operator=(const PiPoChain &other) + { + this->parent = other.parent; + this->moduleFactory = other.moduleFactory; + + unsigned int numOps = static_cast<unsigned int>(other.ops.size()); + this->ops.clear(); + this->ops.resize(numOps); + + for (unsigned int i = 0; i < numOps; i++) + { + this->ops[i].set(i, this->parent, this->moduleFactory, other.ops[i]); // clone pipos by re-instantiating them + this->add(this->ops[i].getPiPo(), false); // rebuild PiPoSequence to point to cloned pipos + } + + this->connect(NULL); + this->moduleFactory = NULL; + + return *this; + }; + + ~PiPoChain(void) + { + for(unsigned int i = 0; i < attrNames.size(); i++) { + delete attrNames[i]; + } + for(unsigned int i = 0; i < attrDescrs.size(); i++) { + delete attrDescrs[i]; + } + this->clear(); + }; + + + /** @name PiPoChain setup methods */ + /** @{ */ + + void clear() + { + PiPoSequence::clear(); + for(unsigned int i = 0; i < this->ops.size(); i++) + this->ops[i].clear(); + + this->ops.clear(); + }; + + + /** parse pipo chain specification from string + + creates list of PiPoOp in member ops + */ + size_t parse(const char *str) + { + std::string pipoChainStr = str; + size_t pos = 0; + + this->clear(); + + for(unsigned int i = 0; pos < std::string::npos; i++) + { + this->ops.resize(i + 1, i); + this->ops[i].parse(pipoChainStr, pos); + } + + return this->ops.size(); + }; + + /** go through list of PiPoOp in ops and instantiate PiPoModule using PiPoModuleFactory + */ + bool instantiate(void) + { + if(this->ops.size() > 0) + { + for(unsigned int i = 0; i < this->ops.size(); i++) + { + if(this->ops[i].instantiate(this->parent, this->moduleFactory)) + { // build sequence by appending modules + this->add(this->ops[i].getPiPo()); + } + else + { + this->clear(); + return false; + } + } + return true; + } + + return false; + }; + + void copyPiPoAttributes() + { + for(int iPiPo = 0; iPiPo < this->getSize(); iPiPo++) + { + PiPo *pipo = this->getPiPo(iPiPo); + + const char *instanceName = this->getInstanceName(iPiPo); + unsigned int numAttrs = pipo->getNumAttrs(); + + for(unsigned int iAttr = 0; iAttr < numAttrs; iAttr++) + { + PiPo::Attr *attr = pipo->getAttr(iAttr); + + std::string *attrName = new std::string(instanceName); + *attrName += "."; + *attrName += attr->getName(); + + std::string *attrDescr = new std::string(attr->getDescr()); + *attrDescr += " ("; + *attrDescr += instanceName; + *attrDescr += ")"; + + attrNames.push_back(attrName); + attrDescrs.push_back(attrDescr); + + this->addAttr(this, attrNames[attrNames.size() - 1]->c_str(), attrDescrs[attrDescrs.size() - 1]->c_str(), attr); + } + } + } + + /** @} PiPoChain setup methods */ + + /** @name PiPoChain query methods */ + /** @{ */ + + int getSize() + { + return static_cast<int>(this->ops.size()); + }; + + int getIndex(const char *instanceName) + { + for(unsigned int i = 0; i < this->ops.size(); i++) + { + if(this->ops[i].isInstanceName(instanceName)) + return i; + } + + return -1; + }; + + using PiPoSequence::getPiPo; // make getPiPo(unsigned int index) visible for this class PiPoChain + + PiPo *getPiPo(const char *instanceName) + { + int index = getIndex(instanceName); + + if(index >= 0) + return getPiPo(index); + + return NULL; + }; + + const char *getInstanceName(unsigned int index) + { + if(index < this->ops.size()) + return this->ops[index].getInstanceName(); + + return NULL; + }; + + /** @} PiPoChain query methods */ + + /** @name overloaded PiPo methods */ + /** @{ */ + /** @name all preparation and processing methods are inherited from PiPoSequence: + streamAttributes(), reset(), frames(), finalize() */ + /** @} end of overloaded PiPo methods */ +}; + +/** EMACS ** + * Local variables: + * mode: c + * c-basic-offset:2 + * End: + */ + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoModule.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoModule.h new file mode 100644 index 0000000..7adac62 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/PiPoModule.h @@ -0,0 +1,52 @@ +/** + * @file PiPoModule.h + * @author Riccardo Borghesi + * + * @brief extension of PiPo for use in host apps + * + * @ingroup pipoapi + * + * @copyright + * Copyright (C) 2012-2016 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of mosquitto 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. + */ + +#ifndef _PIPO_MODULE_ +#define _PIPO_MODULE_ + +#include "PiPo.h" +#include "PiPoCollection.h" + +#define PIPO_MODULE_CLASS(pipoName, pipoClass) \ + extern "C" const char *getPiPoName(void); \ + extern "C" PiPoCreatorBase *getPiPoCreator(); \ + const char *getPiPoName() { return pipoName; }\ + PiPoCreatorBase *getPiPoCreator() { return new PiPoCreator<pipoClass>; } + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/mimo_host.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/mimo_host.h new file mode 100644 index 0000000..063c732 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/host/mimo_host.h @@ -0,0 +1,63 @@ + +#include "../PiPoHost.h" + +/* + + every mimo module inherits the basic stream description and data + passing methods (streamAttributes() and frames()) from PiPo, but + ignores real-time oriented methods (segment()), and adds iteration + for training. + */ + +class mimo_host : public PiPoChain +{ + /* for mimo, the streamAttributes() method should give the size of the input data as maxframes */ + + /* push data through mimo modules + */ + int run_training (PiPoValue *indata, int numframes) + { + int itercount = 0; + size = width_ * height_; + + // first iteration on imput data, modules output passed to our mimo_receiver + int status = iterate(0, indata, numframes); + + while ((this->maxiter() == 0 || itercount < this->maxiter()) && status == 0) + { + itercount++; + status = iterate(itercount, indata, numframes); + } + } + + int iterate (int itercount, PiPoValue *data, numframes) + { + int status = 0; + + for (int buf = 0; buf < numbuffers; buf++) + for (int track = 0; track < numtracks; track++) + if ((status = getHead()->train(itercount, buf, track, numframes, data, timetags, varsize)) != 0) + return status; + + return status; + } +} + + +/* + reveives data iterated upon by training mimo modules + */ +class mimo_receiver : mimo +{ + PiPoValue *outputdata_; + + int frames (PiPoValue *values) + { + outputdata_ = values; + } + + // store or merge input data transformed by one iteration of training + int train () + { + } +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/PiPo.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/PiPo.h new file mode 100644 index 0000000..db48e1f --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/PiPo.h @@ -0,0 +1,1463 @@ +/** + * @file PiPo.h + * @author Norbert.Schnell@ircam.fr + * + * @brief Plugin Interface for Processing Objects + * + * @ingroup pipoapi + * + * @copyright + * Copyright (C) 2012–2016 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of mosquitto 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. + */ + +#ifndef _PIPO_ +#define _PIPO_ + +#include <string> +#include <vector> +#include <functional> +#include <cstring> +#include <cstdio> + +#include <typeinfo> +#include <map> + +#ifdef WIN32 +#define strcasecmp _stricmp +#define M_PI 3.14159265358979323846264338328 /**< pi */ +#endif + +//TODO: unify with maxpipohost.h +#define PIPO_MAX_LABELS 1024 + +#ifndef PIPO_SDK_VERSION +#define PIPO_SDK_VERSION 0.2 + +#endif + +typedef float PiPoValue; + + +struct PiPoStreamAttributes +{ + int hasTimeTags; + double rate; + double offset; + unsigned int dims[2]; // width, height (by pipo convention) + const char **labels; + unsigned int numLabels; + bool hasVarSize; + double domain; + unsigned int maxFrames; + int labels_alloc; // < allocated size of labels, -1 for no (outside) allocation + + PiPoStreamAttributes (int numlabels = -1) + { + init(numlabels); + } + + PiPoStreamAttributes (bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int height, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + this->hasTimeTags = hasTimeTags; + this->rate = rate; + this->offset = offset; + this->dims[0] = width; + this->dims[1] = height; + this->labels = labels; + this->numLabels = width; + this->labels_alloc = -1; // signals external memory + this->hasVarSize = hasVarSize; + this->domain = domain; + this->maxFrames = maxFrames; + } + + void init (int _numlab = -1) + { + this->hasTimeTags = false; + this->rate = 1000.0; + this->offset = 0.0; + this->dims[0] = 1; // width + this->dims[1] = 1; // height + this->labels = NULL; + this->numLabels = 0; + this->labels_alloc = _numlab; + this->hasVarSize = false; + this->domain = 0.0; + this->maxFrames = 1; + + if (_numlab >= 0) + labels = new const char *[_numlab]; + }; + + ~PiPoStreamAttributes() + { + if (labels && labels_alloc >= 0) + delete [] labels; + }; + + /** append string pointer array to labels array + */ + void concat_labels (const char **_labels, unsigned int _width) + { + if (this->labels_alloc < 0) + { + printf("Warning: PiPoStreamAttributes::concat_labels: can't concat %d labels to char ** with %d labels allocated from the outside\n", _width, this->numLabels); + _width = 0; + } + + if (this->numLabels + _width > this->labels_alloc) + { + printf("Warning: PiPoStreamAttributes::concat_labels: label overflow prevented (trying to concat %d to %d used of %d)\n", _width, this->numLabels, this->labels_alloc); + _width = this->labels_alloc - this->numLabels; + } + + if (_labels != NULL) + memcpy(this->labels + this->numLabels, _labels, _width * sizeof(const char *)); + else + for (unsigned int i = 0; i < _width; i++) + //TODO: invent numbered column, beware of memory! + this->labels[i + this->numLabels] = "unnamed"; + + this->numLabels += _width; + } + + char *to_string (char *str, int len) const + { + snprintf(str, len, + "hasTimeTags\t= %d\n" + "rate\t\t\t= %f\n" + "offset\t\t= %f\n" + "width\t\t= %d\n" + "height\t\t= %d\n" + "labels\t\t= %s...\n" + "labels_alloc\t= %d\n" + "hasVarSize\t= %d\n" + "domain\t\t= %f\n" + "maxFrames\t= %d\n", + (int) hasTimeTags, rate, offset, dims[0], dims[1], + labels && numLabels > 0 ? labels[0] : "n/a", labels_alloc, + (int) hasVarSize, domain, maxFrames); + return str; + } +}; + + +class PiPo +{ + +/** @mainpage + +PiPo is a simple plugin API for modules processing streams of multi-dimensional data such as audio, audio descriptors, or gesture and motion data. The current version of the interface is limited to unary operations. Each PiPo module receives and produces a single stream. The elements of a stream are time-tagged or regularly sampled scalars, vectors, or two-dimensional matrices. + +More information http://ismm.ircam.fr/PiPo + +\section sec_api PiPo API Overview + +The PiPo API consists of an abstract class of a few virtual methods for propagating stream attributes (see below), frames, and additional processing control through a series of modules: + +- Propagating stream attributes +- Propagating frames +- Reset stream processing +- Finalize stream processing +- Propagate the change of a parameter requiring redefining the output stream attributes + + +\subsection sec_impl Implementation of a New PiPo Module + +The minimal module must derive from the class PiPo and implement at least the \ref streamAttributes and \ref frames methods: + +- In \ref streamAttributes, all initialisation can be done, as all input stream parameters (attributes) are known. The output stream parameters are passed on to the receiving module via \ref propagateStreamAttributes. +- In \ref frames, only data processing and, when needed, buffering should be done. Output frames are passed on with \ref propagateFrames. + +If the module can produce additional output data after the end of the input data, it must implement \ref finalize, from within which more calls to \ref propagateFrames can be made, followed by a mandatory call to \ref propagateFinalize. + +If the module keeps internal state or buffering, it should implement the \ref reset method to put itself into a clean state. + +The utility function \ref signalError can be used to pass an error message to the host. + +The utility function \ref signalWarning can be used to pass a warning message to the host. + + +\subsection sec_attr Module Attributes or Parameters + +The template class PiPo::Attr permits to define scalar, enum, or variable or fixed size vector attributes of a pipo module that are exposed to the host environment. + +The are initialised in the module constructor with a short name, a description, a flag if a change of value means the fundamental stream parameters must be reset (if true, \ref streamAttributes will be called again for the whole chain), and a default value. + +Their value can be queried in \ref streamAttributes or \ref frames (in real-time hosts, an attributes value can change over time) with PiPo::Attr::get(). + +\subsection sec_example Example of a Minimal PiPo Module + + +\code + +class PiPoGain : public PiPo +{ +private: + std::vector<PiPoValue> buffer; + +public: + PiPoScalarAttr<double> factor; + + PiPoGain (Parent *parent, PiPo *receiver = NULL) + : PiPo(parent, receiver), + factor(this, "factor", "Gain Factor", false, 1.0) + { } + + ~PiPoGain (void) + { } + + int streamAttributes (bool hasTimeTags, double rate, double offset, + unsigned int width, unsigned int height, + const char **labels, bool hasVarSize, + double domain, unsigned int maxFrames) + { + // A general pipo can not work in place, we need to create an output buffer + buffer.resize(width * height * maxFrames); + + return propagateStreamAttributes(hasTimeTags, rate, offset, width, height, + labels, hasVarSize, domain, maxFrames); + } + + int frames (double time, double weight, PiPoValue *values, + unsigned int size, unsigned int num) + { + double f = factor.get(); // get gain factor here, as it could change while running + PiPoValue *ptr = &buffer[0]; + + for (unsigned int i = 0; i < num; i++) + { + for (unsigned int j = 0; j < size; j++) + ptr[j] = values[j] * f; + + ptr += size; + values += size; + } + + return propagateFrames(time, weight, &buffer[0], size, num); + } +}; +\endcode + + +\section sec_api_details PiPo API Details + +\subsection sec_stream_attr PiPo Stream Attributes + +PiPo streams are a sequences of frames characterized by a set of attributes. A PiPo module defines the attributes of its output stream when receiving the attributes of the input stream. + +Each module can configure its internal state depending on the attributes of the input stream (e.g. memory allocation and pre-calculated state variables) before propagating its output stream attributes to the next module. + +This way, the attributes of the input stream are propagated through a series of PiPo modules before starting the actual stream processing. + +In summary, a PiPo stream is described by the following attributes: + +- a boolean representing whether the elements of the stream are time-tagged +- frame rate (highest average rate for time-tagged streams) +- lag of the output stream relative to the input +- frame width (also number of channels or data matrix columns) +- frame height (or number of matrix rows) +- labels (for the frame channels or columns) +- a boolean representing whether the frames have a variable height (respecting the given frame height as maximum) +- extent of a frame in the given domain (e.g. duration or frequency range) +- maximum number of frames in a block exchanged between two modules + +*/ + + +public: + class Attr; + template<class, std::size_t> class AttrArray; // declare this helper template as PiPo::AttrArray + + /*********************************************** + * + * PiPo Parent + * TODO: rename PiPoHost ? + */ + + class Parent + { + public: + /** called by pipo when an attribute with "changesstream" is set */ + virtual void streamAttributesChanged(PiPo *pipo, PiPo::Attr *attr) { }; + + /** called by pipo to signal error in parameters */ + virtual void signalError(PiPo *pipo, std::string errorMsg) { }; + + /** called by pipo to signal warning in parameters */ + virtual void signalWarning(PiPo *pipo, std::string errorMsg) { }; + }; + +protected: + Parent *parent; + std::vector<PiPo *> receivers; /**< list of receivers */ + +private: + std::vector<Attr *> attrs; /**< list of attributes */ +#if __cplusplus >= 201103L && !defined(WIN32) + constexpr static const float sdk_version = PIPO_SDK_VERSION; /**< pipo SDK version (for inspection) */ +#endif + +public: + PiPo(Parent *parent, PiPo *receiver = NULL) + : receivers(), attrs() + { + this->parent = parent; + + if (receiver != NULL) + this->receivers.push_back(receiver); + }; + + PiPo(const PiPo &other) + { + this->parent = other.parent; + } + + virtual ~PiPo(void) { }; + + /** get version of SDK as a major.minor float (so that host can + * check if a pipo was compiled with correct version of PiPo.h) + */ +#ifdef PIPO_TESTING + virtual float getVersion() // only for unit tests: allow to override version to simulate an out-of-date pipo module +#else + static float getVersion() +#endif + { +#if __cplusplus >= 201103L && !defined(WIN32) + printf("pipo::getVersion -> %f\n", PiPo::sdk_version); + return PiPo::sdk_version; +#else + printf("pipo::getVersion -> %f\n", PIPO_SDK_VERSION); + return PIPO_SDK_VERSION; +#endif + }; + + /** + * @brief Sets PiPo parent. + * + * @param parent PiPo parent + */ + virtual void setParent(Parent *parent) { this->parent = parent; }; + + /** + * @brief Propagates a module's output stream attributes to its receiver. + * + * This method is called in the streamAttributes() method of a PiPo module. + * + * @param hasTimeTags a boolean representing whether the elements of the stream are time-tagged + * @param rate the frame rate (highest average rate for time-tagged streams) + * @param offset the lag of the output stream relative to the input + * @param width the frame width (also number of channels or data matrix columns) + * @param height the frame height (or number of matrix rows) + * @param labels optional labels for the frames' channels or columns + * @param hasVarSize a boolean representing whether the frames have a variable height (respecting the given frame height as maximum) + * @param domain extent of a frame in the given domain (e.g. duration or frequency range) + * @param maxFrames maximum number of frames in a block exchanged between two modules + * @return used as return value of the calling method + */ + int propagateStreamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int height, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + int ret = 0; + + for (unsigned int i = 0; i < this->receivers.size(); i++) + { + ret = this->receivers[i]->streamAttributes(hasTimeTags, rate, offset, width, height, labels, hasVarSize, domain, maxFrames); + + if (ret < 0) + break; + } + + return ret; + }; + + /** + * @brief Propagates the reset control event. + * + * This method is called in the reset() method of a PiPo module. + * + * @return used as return value of the calling method + */ + int propagateReset(void) + { + int ret = -1; + + for (unsigned int i = 0; i < this->receivers.size(); i++) + { + ret = this->receivers[i]->reset(); + + if (ret < 0) + break; + } + + return ret; + } + + /** + * @brief Propagates a module's output frames to its receiver. + * + * This method is called in the frames() method of a PiPo module. + * + * @param time time-tag for a single frame or a block of frames + * @param weight weight for this frame (currently unused) + * @param values interleaved frames values, row by row (interleaving channels or columns), frame by frame + * @param size total size of each frame (number of values = width * height) + * @param num number of frames + * @return used as return value of the calling method + */ + int propagateFrames(double time, double weight, PiPoValue *values, unsigned int size, unsigned int num) + { + int ret = -1; + + for (unsigned int i = 0; i < this->receivers.size(); i++) + { + ret = this->receivers[i]->frames(time, weight, values, size, num); + + if (ret < 0) + break; + } + + return ret; + } + + /** + * @brief Propagates the finalize control event. + * + * This method is called in the finalize() method of a PiPo module. + * + * @return used as return value of the calling method + */ + int propagateFinalize(double inputEnd) + { + int ret = -1; + + for (unsigned int i = 0; i < this->receivers.size(); i++) + { + ret = this->receivers[i]->finalize(inputEnd); + + if (ret < 0) + break; + } + + return ret; + } + + /** + * @brief Gets a PiPo modules receiver (call only by the PiPo host) + * + * @return receiver PiPo module receiving this module's output stream + */ + PiPo *getReceiver(unsigned int index = 0) + { + if (index < this->receivers.size()) + return this->receivers[index]; + + return NULL; + }; + + /** + * @brief Sets a PiPo modules receiver (call only by the PiPo host) + * + * @param receiver PiPo module receiving this module's output stream + * @param add receiver (versus clear and set first) + */ + virtual void setReceiver(PiPo *receiver, bool add = false) + { + if (add) + { + if (receiver != NULL) + this->receivers.push_back(receiver); + } + else + { + this->receivers.clear(); + + if (receiver != NULL) + this->receivers.push_back(receiver); + }; + } + + /** + * @brief Configures a PiPo module according to the input stream attributes and propagate output stream attributes + * + * PiPo module: + * Any implementation of this method requires a propagateStreamAttributes() method call and returns its return value, typically like this: + * + * \code + * return this->propagateStreamAttributes(hasTimeTags, rate, offset, width, height, labels, hasVarSize, domain, maxFrames); + * \endcode + * + * PiPo host: + * A terminating receiver module provided by a PiPo host handles the final output stream attributes and usally returns 0. + * + * @param hasTimeTags a boolean representing whether the elements of the stream are time-tagged + * @param rate the frame rate (highest average rate for time-tagged streams, sample rate for audio input) + * @param offset the lag of the output stream relative to the input + * @param width the frame width (number of channels for audio or data matrix columns) + * @param height the frame height (or number of matrix rows, always 1 for audio) + * @param labels optional labels for the frames' channels or columns (can be NULL) + * @param hasVarSize a boolean representing whether the frames have a variable height (respecting the given frame height as maximum) + * @param domain extent of a frame in the given domain (e.g. duration or frequency range) + * @param maxFrames maximum number of frames in a block exchanged between two modules (window size for audio) + * @return 0 for ok or a negative error code (to be specified), -1 for an unspecified error + */ + virtual int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int height, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) = 0; + + /** + * @brief Resets processing (optional) + * + * PiPo module: + * Any implementation of this method requires a propagateReset() method call and returns its return value. + * + * PiPo host: + * A terminating receiver module provided by a PiPo host usally simply returns 0. + * + * @return 0 for ok or a negative error code (to be specified), -1 for an unspecified error + */ + virtual int reset(void) + { + return this->propagateReset(); + }; + + /** + * @brief Processes a single frame or a block of frames + * + * PiPo module: + * An implementation of this method may call propagateFrames(), typically like this: + * + * \code + * return this->propagateFrames(time, weight, values, size, num); + * \endcode + * + * PiPo host: + * A terminating receiver module provided by a PiPo host handles the received frames and usally returns 0. + * + * @param time time-tag for a single frame or a block of frames + * @param weight weight associated to frame or block + * @param values interleaved frames values, row by row (interleaving channels or columns), frame by frame + TODO: should be const!!! + * @param size total size of each of all frames (size = number of elements = width * height = number of channels for audio) + * @param num number of frames (number of samples for audio input) + * @return 0 for ok or a negative error code (to be specified), -1 for an unspecified error + */ + virtual int frames (double time, double weight, PiPoValue *values, unsigned int size, unsigned int num) = 0; + + /** + * @brief Signals segment start or end + * + * PiPo module: + * An implementation of this method calls propagateFrames() at the end of the segment. + * + * In the case of two sucessive calls to segment(), the second call implitly ends the last segment. + * + * If the module did not receive any frames - at all or since the last segment end -, the method should + * return 0 to the call segment(0.0, end) without calling propagateFrames(). + * This permits the host to check whether a module implements the segment method or not. + * + * \code + + if(this->started) + { + // do what is to be done to finalize the segment description + this->propagateFrames(time, weight, values, size, num); + this->started = false; + } + + if(start) + { + // do what is to be done to initialize the segment description + } + + return 0; + + * \endcode + * + * @param time time of segment start of end + * @param start flag, true for segment start, false for segment end + * @return 0 for ok or a negative error code (to be specified), -1 for an unspecified error + */ + virtual int segment(double time, bool start) { return -1; }; + + /** + * @brief Finalizes processing (optinal) + * + * PiPo module: + * Any implementation of this method requires a propagateFinalize() method call and returns its return value. + * + * PiPo host: + * A terminating receiver module provided by a PiPo host usally simply returns 0. + * + * @param inputEnd end time of the finalized input stream + * @return 0 for ok or a negative error code (to be specified), -1 for an unspecified error + */ + virtual int finalize(double inputEnd) + { + return this->propagateFinalize(inputEnd); + }; + + void streamAttributesChanged(Attr *attr) + { + if (this->parent != NULL) + this->parent->streamAttributesChanged(this, attr); + } + + /** signal error message to be output by the host + */ + void signalError(std::string errorMsg) + { + if (this->parent != NULL) + this->parent->signalError(this, errorMsg); + else + printf("PiPo::signalError (not parent): %s\n", errorMsg.c_str()); + } + + /** signal warning message to be output by the host + */ + void signalWarning(std::string errorMsg) + { + if (this->parent != NULL) + this->parent->signalWarning(this, errorMsg); + else + printf("PiPo::signalWarning (not parent): %s\n", errorMsg.c_str()); + } + + + + /*********************************************** + * + * PiPo Attributes + * + */ +public: + enum Type { Undefined, Bool, Enum, Int, Float, Double, String }; + + // dummy enum used for specialization of templates + enum Enumerate { }; + + // meta-type a la Max : + class Atom + { + private: + PiPo::Type type; + union _data { + const char *str; + double dbl; + int itg; + } data; + public: + Atom(const char *s) { this->type = String; this->data.str = s; } + Atom(double d) { this->type = Double; this->data.dbl = d; } + Atom(int i) { this->type = Int; this->data.itg = i; } + friend bool operator==(Atom &at1, Atom &at2) + { + return ((at1.isNumber() && at2.isNumber() && at1.getDouble() == at2.getDouble()) + || (at1.type == String && at1.type == at2.type && strcmp(at1.getString(), at2.getString()) == 0)); + } + friend bool operator!=(Atom &at1, Atom &at2) + { + return !(at1 == at2); + } + bool isNumber() { return (type == Int || type == Double); } + bool isString() { return type == String; } + PiPo::Type getType() { return type; } + int getInt() { return ((type == Int) ? this->data.itg : ((type == Double) ? (int)(this->data.dbl) : 0)); } + double getDouble() { return ((type == Double) ? this->data.dbl : ((type == Int) ? (double)(this->data.itg) : 0.)); } + const char * getString() { return ((type == String) ? this->data.str : ""); } + }; + + class Attr + { + private: + PiPo *pipo; /**< owner PiPo */ + unsigned int index; + const char *name; /**< attribute name */ + const char *descr; /**< short description */ + enum Type type; + bool changesStream; + + public: + /** + * PiPo attribute base class + */ + Attr(PiPo *pipo, const char *name, const char *descr, const std::type_info *type, bool changesStream) + { + this->pipo = pipo; + this->index = static_cast<unsigned int>(pipo->attrs.size()); + this->name = name; + this->descr = descr; + + if (type == &typeid(bool)) + this->type = Bool; + else if (type == &typeid(enum Enumerate)) + this->type = Enum; + else if (type == &typeid(int)) + this->type = Int; + else if (type == &typeid(float)) + this->type = Float; + else if (type == &typeid(double)) + this->type = Double; + else if (type == &typeid(std::string) || type == &typeid(const char *)) + this->type = String; + else + this->type = Undefined; + + this->changesStream = changesStream; + + pipo->attrs.push_back(this); + }; + + ~Attr(void) { }; + + void setIndex(unsigned int index) { this->index = index; }; + void setName(const char *name) { this->name = name; }; + void setDescr(const char *descr) { this->descr = descr; }; + + unsigned int getIndex(void) { return this->index; }; + const char *getName(void) { return this->name; }; + const char *getDescr(void) { return this->descr; }; + enum Type getType(void) { return this->type; }; + bool doesChangeStream(void) { return this->changesStream; }; + + virtual void clone(Attr *other) = 0; + + virtual unsigned int setSize(unsigned int size) = 0; + virtual unsigned int getSize(void) = 0; + + virtual void set(unsigned int i, int val, bool silently = false) = 0; + virtual void set(unsigned int i, double val, bool silently = false) = 0; + virtual void set(unsigned int i, const char *val, bool silently = false) = 0; + virtual int getInt(unsigned int i) = 0; + virtual double getDbl(unsigned int i) = 0; + virtual const char *getStr(unsigned int i) = 0; + + virtual std::vector<const char *> *getEnumList(void) { return NULL; }; + + void changed(bool silently = false) { if (!silently && this->changesStream) this->pipo->streamAttributesChanged(this); }; + void rename(const char *name) { this->name = name; }; + }; + + /** + * PiPo enumerator attribute base class + */ + class EnumAttr : public Attr + { + struct strCompare : public std::binary_function<const char *, const char *, bool> { + bool operator() (const char *str1, const char *str2) const { return std::strcmp(str1, str2) < 0; } + }; + + std::vector<const char *>enumList; + std::vector<const char *>enumListDoc; + std::map<const char *, unsigned int, strCompare> enumMap; + + public: + EnumAttr(PiPo *pipo, const char *name, const char *descr, const std::type_info *type, bool changesStream) : + Attr(pipo, name, descr, type, changesStream), + enumList(), enumListDoc(), enumMap() + { + }; + + void addEnumItem(const char *item, const char *doc = "undocumented") + { + unsigned int idx = static_cast<unsigned int>(this->enumList.size()); + + this->enumList.push_back(item); + this->enumListDoc.push_back(doc); + this->enumMap[item] = idx; + }; + + std::vector<const char *> *getEnumList(void) + { + return &this->enumList; + }; + + int getEnumIndex(const char *tag) + { + if (tag != NULL && this->enumMap.find(tag) != this->enumMap.end()) + return this->enumMap[tag]; + + return -1; + }; + + const char *getEnumTag(unsigned int idx) + { + if (idx < this->enumList.size()) + return this->enumList[idx]; + + return NULL; + }; + + protected: + int clipEnumIndex(int index) + { + if (index < 0) + index = 0; + else if (index >= static_cast<int>(this->enumList.size())) + index = static_cast<int>(this->enumList.size() - 1); + + return index; + }; + }; + + /** + * @brief att attribute + */ + void addAttr(PiPo *pipo, const char *name, const char *descr, Attr *attr, bool clear = false) + { + if (clear) + this->attrs.clear(); + + /* overwrite index, name, and description */ + attr->setIndex(static_cast<unsigned int>(pipo->attrs.size())); + attr->setName(name); + attr->setDescr(descr); + + /* add to attr list */ + this->attrs.push_back(attr); + }; + + /** + * @brief Gets PiPo attribute by index + * + * @param index attribute index + * @return reference to PiPo attribute (NULL for invalid attribute index) + */ + Attr *getAttr(unsigned int index) + { + if (index < this->attrs.size()) + return this->attrs[index]; + + return NULL; + }; + + /** + * @brief Gets PiPo attribute by name + * + * @param name attribute name + * @return reference to PiPo attribute (NULL for invalid attribute name) + */ + Attr *getAttr(const char *name) + { + for (unsigned int i = 0; i < this->attrs.size(); i++) + { + if (strcasecmp(this->attrs[i]->getName(), name) == 0) + return this->attrs[i]; + } + + return NULL; + }; + + /** + * @brief Gets PiPo attribute by qualified name + * + * @param piponame pipo module name in pipo chain + * @param name attribute name + * @return reference to PiPo attribute (NULL for invalid attribute name) + */ + Attr *getAttr(const char *piponame, const char *name) + { + std::string qname(piponame); + + qname += "."; + qname += name; + + return getAttr(qname.c_str()); + }; + + bool setAttr(unsigned int index, int value, bool silently = false) + { + Attr *attr = getAttr(index); + + if (attr != NULL) + { + attr->set(0, value, silently); + + return true; + } + + return false; + } + + bool setAttr(unsigned int index, int *values, unsigned int numValues, bool silently = false) + { + Attr *attr = getAttr(index); + + if (attr != NULL) + { + unsigned int size = attr->getSize(); + + if (numValues > size) + numValues = size; + + for (unsigned int i = 0; i < numValues; i++) + attr->set(i, values[i], silently); + + return true; + } + + return false; + } + + bool setAttr(unsigned int index, double val, bool silently = false) + { + Attr *attr = getAttr(index); + + if (attr != NULL) + { + attr->set(0, val, silently); + + return true; + } + + return false; + } + + bool setAttr(unsigned int index, double *values, unsigned int numValues, bool silently = false) + { + Attr *attr = getAttr(index); + + if (attr != NULL) + { + unsigned int size = attr->getSize(); + + if (numValues > size) + numValues = size; + + for (unsigned int i = 0; i < numValues; i++) + attr->set(i, values[i], true); + + attr->changed(silently); + + return true; + } + + return false; + } + + /** + * @brief Gets number of attributes + * + * @return number of attributes + */ + unsigned int getNumAttrs(void) + { + return static_cast<unsigned int>(this->attrs.size()); + }; + + /** + * @brief Copies current parent and attributes values + * + * @param other PiPo to clone + */ + void cloneAttrs(PiPo *other) + { + for (unsigned int i = 0; i < other->attrs.size(); i++) + this->attrs[i]->clone(other->attrs[i]); + }; + + /** + * @brief Copies current value(s) of given attribute + * + * @param attr attribute to clone from + */ + void cloneAttr(PiPo::Attr *attr) + { + unsigned int index = attr->getIndex(); + + this->attrs[index]->clone(attr); + }; +}; + + + +/*********************************************** + * + * Scalar Attribute + * + */ +template <typename TYPE> +class PiPoScalarAttr : public PiPo::Attr +{ +private: + TYPE value; + +public: + PiPoScalarAttr(PiPo *pipo, const char *name, const char *descr, bool changesStream, TYPE initVal = (TYPE)0) : + Attr(pipo, name, descr, &typeid(TYPE), changesStream) + { + this->value = initVal; + } + + void set(TYPE value, bool silently = false) { this->value = value; this->changed(silently); }; + TYPE get(void) { return this->value; }; + + void clone(Attr *other) { this->value = (dynamic_cast<PiPoScalarAttr<TYPE> *>(other))->value; }; + + unsigned int setSize(unsigned int size) { return this->getSize(); }; + unsigned int getSize(void) { return 1; }; + + void set(unsigned int i, int val, bool silently = false) { if(i == 0) this->value = (TYPE)val; this->changed(silently); }; + void set(unsigned int i, double val, bool silently = false) { if(i == 0) this->value = (TYPE)val; this->changed(silently); }; + void set(unsigned int i, const char *val, bool silently = false) { }; + + int getInt(unsigned int i = 0) { return (int)this->value; }; + double getDbl(unsigned int i = 0) { return (double)this->value; }; + const char *getStr(unsigned int i = 0) { return NULL; }; +}; + +template <> +class PiPoScalarAttr<const char *> : public PiPo::Attr +{ +private: + const char * value; + +public: + PiPoScalarAttr(PiPo *pipo, const char *name, const char *descr, bool changesStream, const char * initVal = (const char *)0) : + Attr(pipo, name, descr, &typeid(const char *), changesStream) + { + this->value = initVal; + } + + void set(const char * value) { this->value = value; }; + const char *get(void) { return this->value; }; + + void clone(Attr *other) { *this = *(static_cast<PiPoScalarAttr<const char *> *>(other)); }; + + unsigned int setSize(unsigned int size) { return this->getSize(); }; + unsigned int getSize(void) { return 1; }; + + void set(unsigned int i, int val, bool silently = false) { }; + void set(unsigned int i, double val, bool silently = false) { }; + void set(unsigned int i, const char *val, bool silently = false) { if(i == 0) this->value = val; this->changed(silently); }; + + int getInt(unsigned int i = 0) { return 0; }; + double getDbl(unsigned int i = 0) { return 0; }; + const char *getStr(unsigned int i = 0) { return this->value; }; +}; + +template <> +class PiPoScalarAttr<enum PiPo::Enumerate> : public PiPo::EnumAttr +{ +private: + unsigned int value; + +public: + PiPoScalarAttr(PiPo *pipo, const char *name, const char *descr, bool changesStream, unsigned int initVal = NULL) : + EnumAttr(pipo, name, descr, &typeid(enum PiPo::Enumerate), changesStream) + { + this->value = initVal; + }; + + void set(unsigned int value, bool silently = false) { this->value = clipEnumIndex(value); this->changed(silently); }; + void set(const char *value, bool silently = false) { this->value = this->getEnumIndex(value); this->changed(silently); }; + unsigned int get(void) { return this->value; }; + + void clone(Attr *other) { this->value = (dynamic_cast<PiPoScalarAttr<enum PiPo::Enumerate> *>(other))->value; }; + + unsigned int setSize(unsigned int size) { return this->getSize(); }; + unsigned int getSize(void) { return 1; }; + + void set(unsigned int i, int val, bool silently = false) { if(i == 0) this->value = clipEnumIndex((unsigned int)val); this->changed(silently); }; + void set(unsigned int i, double val, bool silently = false) { if(i == 0) this->value = clipEnumIndex((unsigned int)val); this->changed(silently); }; + void set(unsigned int i, const char *val, bool silently = false) { if(i == 0) this->value = getEnumIndex(val); this->changed(silently); }; + + int getInt(unsigned int i = 0) { return (int)this->value; }; + double getDbl(unsigned int i = 0) { return (double)this->value; }; + const char *getStr(unsigned int i = 0) { return this->getEnumTag(this->value); }; +}; + +/*********************************************** + * + * Fixed Size Array Attribute + * + */ +/* waiting for C++11 */ +template< class TYPE, std::size_t SIZE> +class PiPo::AttrArray +{ + TYPE values[SIZE]; + static const int size = SIZE; + +public: + TYPE const& operator [] (unsigned int index) const { return this->values[index]; }; + TYPE& operator [] (unsigned int index) { return &this->values[index]; }; +}; + +template <typename TYPE, unsigned int SIZE> +class PiPoArrayAttr : public PiPo::Attr, public PiPo::AttrArray<TYPE, SIZE> +{ +public: + PiPoArrayAttr(PiPo *pipo, const char *name, const char *descr, bool changesStream, TYPE initVal = (TYPE)0) : + Attr(pipo, name, descr, &typeid(TYPE), changesStream), + PiPo::AttrArray<TYPE, SIZE>() + { + for (unsigned int i = 0; i < SIZE; i++) + (*this)[i] = initVal; + } + void clone(Attr *other) { *(dynamic_cast<PiPo::AttrArray<TYPE, SIZE> *>(this)) = *(dynamic_cast<PiPo::AttrArray<TYPE, SIZE> *>(other)); }; + + unsigned int setSize(unsigned int size) { return this->getSize(); }; + unsigned int getSize(void) { return SIZE; } + + void set(unsigned int i, int val, bool silently = false) + { + if (i < SIZE) + (*this)[i] = (TYPE)val; + + this->changed(silently); + }; + + void set(unsigned int i, double val, bool silently = false) + { + if (i < SIZE) + (*this)[i] = (TYPE)val; + + this->changed(silently); + }; + + void set(unsigned int i, const char *val, bool silently = false) { }; + + int getInt(unsigned int i) + { + if (i >= SIZE) + i = SIZE - 1; + + return (int)(*this)[i]; + }; + + double getDbl(unsigned int i) + { + if (i >= SIZE) + i = SIZE - 1; + + return (double)(*this)[i]; + }; + + const char *getStr(unsigned int i) + { + if (i < SIZE) + i = SIZE - 1; + + return (const char *)(*this)[i]; + }; +}; + +template <unsigned int SIZE> +class PiPoArrayAttr<enum PiPo::Enumerate, SIZE> : public PiPo::EnumAttr, public PiPo::AttrArray<unsigned int, SIZE> +{ +public: + PiPoArrayAttr(PiPo *pipo, const char *name, const char *descr, bool changesStream, unsigned int initVal = NULL) : + EnumAttr(pipo, name, descr, &typeid(enum PiPo::Enumerate), changesStream), + PiPo::AttrArray<unsigned int, SIZE>() + { + for (unsigned int i = 0; i < this->size; i++) + this->value[i] = initVal; + } + + ~PiPoArrayAttr(void) { free(this->value); } + + void clone(Attr *other) { *(dynamic_cast<PiPo::AttrArray<unsigned int, SIZE> *>(this)) = *(dynamic_cast<PiPo::AttrArray<unsigned int, SIZE> *>(other)); }; + + unsigned int setSize(unsigned int size) { return this->getSize(); }; + unsigned int getSize(void) { return SIZE; } + + void set(unsigned int i, int val, bool silently = false) + { + if (i < SIZE) + (*this)[i] = (unsigned int)val; + + this->changed(silently); + }; + + void set(unsigned int i, double val, bool silently = false) + { + if (i < SIZE) + (*this)[i] = (unsigned int)val; + + this->changed(silently); + }; + + void set(unsigned int i, const char *val, bool silently = false) + { + if (i < SIZE) + (*this)[i] = getEnumIndex(val); + + this->changed(silently); + }; + + int getInt(unsigned int i) + { + if (i >= SIZE) + i = SIZE - 1; + + return (int)(*this)[i]; + }; + + double getDbl(unsigned int i) + { + if (i >= SIZE) + i = SIZE - 1; + + return (double)(*this)[i]; + }; + + const char *getStr(unsigned int i) + { + if (i < SIZE) + return this->getEnumTag(this->value[i]); + + return NULL; + }; +}; + +/*********************************************** + * + * Var Size Attribute + * + */ +template <typename TYPE> +class PiPoVarSizeAttr : public PiPo::Attr, public std::vector<TYPE> +{ +public: + PiPoVarSizeAttr(PiPo *pipo, const char *name, const char *descr, bool changesStream, unsigned int size = 0, TYPE initVal = (TYPE)0) : + Attr(pipo, name, descr, &typeid(TYPE), changesStream), + std::vector<TYPE>(size, initVal) + { + } + + void clone(Attr *other) { *(dynamic_cast<std::vector<TYPE> *>(this)) = *(dynamic_cast<std::vector<TYPE> *>(other)); }; + + unsigned int setSize(unsigned int size) { this->resize(size, (TYPE)0); return size; }; + unsigned int getSize(void) { return static_cast<unsigned int>(this->size()); } + + void set(unsigned int i, int val, bool silently = false) + { + if (i >= this->size()) + setSize(i + 1); + + (*this)[i] = (TYPE)val; + + this->changed(silently); + }; + + void set(unsigned int i, double val, bool silently = false) + { + if (i >= this->size()) + setSize(i + 1); + + (*this)[i] = (TYPE)val; + + this->changed(silently); + }; + + void set(unsigned int i, const char *val, bool silently = false) { }; + + int getInt(unsigned int i) + { + if (i >= this->size()) + i = static_cast<unsigned int>(this->size()) - 1; + + return static_cast<int>((*this)[i]); + }; + + double getDbl(unsigned int i) + { + if (i >= this->size()) + i = static_cast<unsigned int>(this->size()) - 1; + + return static_cast<double>((*this)[i]); + }; + + const char *getStr(unsigned int i) { return NULL; }; + + TYPE *getPtr() // return pointer to first data element + { + return &((*this)[0]); + }; +}; + + +template <> +class PiPoVarSizeAttr<enum PiPo::Enumerate> : public PiPo::EnumAttr, public std::vector<unsigned int> +{ +public: + PiPoVarSizeAttr(PiPo *pipo, const char *name, const char *descr, bool changesStream, unsigned int size = 0, unsigned int initVal = NULL) : + EnumAttr(pipo, name, descr, &typeid(enum PiPo::Enumerate), changesStream), + std::vector<unsigned int>(size, 0) + { + for (unsigned int i = 0; i < this->size(); i++) + (*this)[i] = initVal; + }; + + void clone(Attr *other) { *(dynamic_cast<std::vector<unsigned int> *>(this)) = *(dynamic_cast<std::vector<unsigned int> *>(other)); }; + + unsigned int setSize(unsigned int size) { this->resize(size, 0); return size; }; + unsigned int getSize(void) { return static_cast<int>(this->size()); } + + void set(unsigned int i, int val, bool silently = false) + { + if (i >= this->size()) + setSize(i + 1); + + (*this)[i] = (unsigned int)val; + + this->changed(silently); + }; + + void set(unsigned int i, double val, bool silently = false) + { + if (i >= this->size()) + setSize(i + 1); + + (*this)[i] = (unsigned int)val; + + this->changed(silently); + }; + + void set(unsigned int i, const char *val, bool silently = false) + { + if (i >= this->size()) + setSize(i + 1); + + (*this)[i] = getEnumIndex(val); + + this->changed(silently); + }; + + int getInt(unsigned int i) + { + if (i >= this->size()) + i = static_cast<unsigned int>(this->size()) - 1; + + return (int)(*this)[i]; + }; + + double getDbl(unsigned int i) + { + if (i >= this->size()) + i = static_cast<unsigned int>(this->size()) - 1; + + return (double)(*this)[i]; + }; + + const char *getStr(unsigned int i) + { + if (i < this->size()) + return this->getEnumTag((*this)[i]); + + return NULL; + }; +}; + + +template<> +class PiPoVarSizeAttr<PiPo::Atom> : public PiPo::Attr, public std::vector<PiPo::Atom> +{ +public: + PiPoVarSizeAttr(PiPo *pipo, const char *name, const char *descr, bool changesStream, unsigned int size = 0, int initVal = 0) : + Attr(pipo, name, descr, &typeid(const char *), changesStream) + { + for (unsigned int i = 0; i < this->size(); i++) + (*this)[i] = PiPo::Atom(initVal); + }; + + void clone(Attr *other) { *(dynamic_cast<std::vector<PiPo::Atom> *>(this)) = *(dynamic_cast<std::vector<PiPo::Atom> *>(other)); }; + + unsigned int setSize(unsigned int size) { this->resize(size, PiPo::Atom(0)); return size; }; + unsigned int getSize(void) { return static_cast<unsigned int>(this->size()); } + + void set(unsigned int i, int val, bool silently = false) + { + if (i >= this->size()) + setSize(i + 1); + + (*this)[i] = PiPo::Atom(val); + + this->changed(silently); + }; + + void set(unsigned int i, double val, bool silently = false) + { + if (i >= this->size()) + setSize(i + 1); + + (*this)[i] = PiPo::Atom(val); + + this->changed(silently); + }; + + void set(unsigned int i, const char *val, bool silently = false) + { + if (i >= this->size()) + setSize(i + 1); + + (*this)[i] = PiPo::Atom(val); + + this->changed(silently); + }; + + int getInt(unsigned int i) + { + if (i >= this->size()) + i = static_cast<unsigned int>(this->size()) - 1; + + return (*this)[i].getInt(); + }; + + double getDbl(unsigned int i) + { + if (i >= this->size()) + i = static_cast<unsigned int>(this->size()) - 1; + + return (*this)[i].getDouble(); + }; + + const char *getStr(unsigned int i) + { + if (i >= this->size()) + i = static_cast<unsigned int>(this->size()) - 1; + + return (*this)[i].getString(); + }; + + PiPo::Atom *getPtr() // return pointer to first data element + { + return &((*this)[0]); + }; +}; + + +/** EMACS ** + * Local variables: + * mode: c + * c-basic-offset:2 + * End: + */ + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/PiPoParallel.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/PiPoParallel.h new file mode 100644 index 0000000..97392a4 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/PiPoParallel.h @@ -0,0 +1,363 @@ +/** + * @file PiPoParallel.h + * @author Diemo.Schwarz@ircam.fr + * + * @brief PiPo dataflow graph class that encapsulates a parallel section of pipo modules. + * + * @ingroup pipoapi + * + * @copyright + * Copyright (C) 2012–2016 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of mosquitto 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. + */ + +#include <assert.h> //db +#include <stdlib.h> //db +#include "PiPo.h" + +#define PIPO_DEBUG DEBUG*1 + +class PiPoParallel : public PiPo +{ +private: + /** class to merge several parallel pipo data streams, combining columns + */ + class PiPoMerge : public PiPo + { + private: +# define MAX_PAR 64 + int count_; + int numpar_; + PiPoStreamAttributes sa_; // combined stream attributes + int paroffset_[MAX_PAR]; // cumulative column offsets in output array + int parwidth_[MAX_PAR]; // column widths of parallel pipos + int framesize_; // output frame size = width * maxheight + + // working variables for merging of frames + PiPoValue *values_; + int time_; + unsigned int numrows_; + unsigned int numframes_; + + public: + PiPoMerge (PiPo::Parent *parent) + : PiPo(parent), count_(0), numpar_(0), sa_(1024), framesize_(0), values_(NULL) + { +#ifdef DEBUG // clean memory to make possible memory errors more consistent at least + memset(paroffset_, 0, sizeof(*paroffset_) * MAX_PAR); + memset(parwidth_, 0, sizeof(*parwidth_) * MAX_PAR); +#endif + } + + // copy constructor + PiPoMerge (const PiPoMerge &other) + : PiPo(other.parent), count_(other.count_), numpar_(other.numpar_), sa_(other.sa_), framesize_(other.framesize_) + { +#if defined(__GNUC__) && PIPO_DEBUG >= 2 + printf("\n•••••• %s: COPY CONSTRUCTOR\n", __PRETTY_FUNCTION__); //db +#endif + +#ifdef DEBUG // clean memory to make possible memory errors more consistent at least + memset(paroffset_, 0, sizeof(*paroffset_) * MAX_PAR); + memset(parwidth_, 0, sizeof(*parwidth_) * MAX_PAR); +#endif + + memcpy(paroffset_, other.paroffset_, numpar_ * sizeof(int)); + memcpy(parwidth_, other.parwidth_, numpar_ * sizeof(int)); + values_ = (PiPoValue *) malloc(sa_.maxFrames * framesize_ * sizeof(PiPoValue)); + memcpy(values_, other.values_, sa_.maxFrames * framesize_ * sizeof(PiPoValue)); + } + + // assignment operator + PiPoMerge &operator= (const PiPoMerge &other) + { +#if defined(__GNUC__) && PIPO_DEBUG >= 2 + printf("\n•••••• %s: ASSIGNMENT OPERATOR\n", __PRETTY_FUNCTION__); //db +#endif + +#ifdef DEBUG // clean memory to make possible memory errors more consistent at least + memset(paroffset_, 0, sizeof(*paroffset_) * MAX_PAR); + memset(parwidth_, 0, sizeof(*parwidth_) * MAX_PAR); +#endif + + count_ = other.count_; + numpar_ = other.numpar_; + sa_ = other.sa_; + framesize_ = other.framesize_; + + memcpy(paroffset_, other.paroffset_, numpar_ * sizeof(int)); + memcpy(parwidth_, other.parwidth_, numpar_ * sizeof(int)); + values_ = (PiPoValue *) malloc(sa_.maxFrames * framesize_ * sizeof(PiPoValue)); + memcpy(values_, other.values_, sa_.maxFrames * framesize_ * sizeof(PiPoValue)); + + return *this; + } + + // destructor + ~PiPoMerge () + { + free(values_); + } + + public: + void start (size_t numpar) + { // on start, record number of calls to expect from parallel pipos, each received stream call increments count_, when numpar_ is reached, merging has to be performed + numpar_ = (int) numpar; + count_ = 0; + } + +// TODO: signal end of parallel pipos, accomodates for possibly missing calls down the chain + void finish () + { + } + + public: + int streamAttributes (bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int height, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { // collect stream attributes declarations from parallel pipos +#if PIPO_DEBUG >= 1 + printf("PiPoParallel streamAttributes timetags %d rate %f offset %f width %d height %d labels %s varsize %d domain %f maxframes %d\n", + hasTimeTags, rate, offset, width, height, labels ? labels[0] : "n/a", hasVarSize, domain, maxFrames); +#endif + + if (count_ == 0) + { // first parallel pipo defines most stream attributes, we store then here + sa_.hasTimeTags = hasTimeTags; + sa_.rate = rate; + sa_.offset = offset; + sa_.dims[0] = width; + sa_.dims[1] = height; + sa_.numLabels = 0; + sa_.hasVarSize = hasVarSize; + sa_.domain = domain; + sa_.maxFrames = maxFrames; + sa_.concat_labels(labels, width); + + paroffset_[0] = 0; + parwidth_[0] = width; + } + else + { // apply merge rules with following pipos + // columns are concatenated + sa_.concat_labels(labels, width); + sa_.dims[0] += width; + paroffset_[count_] = paroffset_[count_ - 1] + parwidth_[count_ - 1]; + parwidth_[count_] = width; + + //TODO: check maxframes, height, should not differ + //TODO: option to transpose column vectors + } + + if (++count_ == numpar_) + { // last parallel pipo, now reserve memory and pass merged stream attributes onwards + framesize_ = sa_.dims[0] * sa_.dims[1]; + values_ = (PiPoValue *) realloc(values_, sa_.maxFrames * framesize_ * sizeof(PiPoValue)); // alloc space for maxmal block size + + return propagateStreamAttributes(sa_.hasTimeTags, sa_.rate, sa_.offset, sa_.dims[0], sa_.dims[1], sa_.labels, sa_.hasVarSize, sa_.domain, sa_.maxFrames); + } + else + return 0; // continue receiving stream attributes + } + + + int reset () + { + if (++count_ == numpar_) + return this->propagateReset(); + else + return 0; // continue receiving reset + } + + + int frames (double time, double weight, PiPoValue *values, unsigned int size, unsigned int num) + { // collect data from parallel pipos + if (count_ >= numpar_) // bug is still there + { +#ifdef WIN32 + printf("%s: ARGH! count_ %d >= numpar_ %d\n", __FUNCSIG__, count_, numpar_); +#else + printf("%s: ARGH! count_ %d >= numpar_ %d\n", __PRETTY_FUNCTION__, count_, numpar_); +#endif + count_ = numpar_ - 1; + } + //assert(size / parwidth_[count_] == 1); + + int width = parwidth_[count_]; + unsigned int height = size / width; // number of input rows + + if (count_ == 0) + { // first parallel pipo determines time tag, num. rows and frames + time_ = time; + numrows_ = height; + numframes_ = num; + + // clear memory just in case one pipo doesn't output data (FIXME: handle this correctly) + memset(values_, 0, num * framesize_ * sizeof(PiPoValue)); + } + + // copy input data to be kept from parallel pipo to merged values_ + if (num > numframes_) num = numframes_; + if (height > numrows_) height = numrows_; + + for (unsigned int i = 0; i < num; i++) // for all frames present + for (unsigned int k = 0; k < height; k++) // for all rows to be kept + { + //printf("merge::frames %p\n values_ %p + %d + %d + %d,\n values %p + %d,\n size %d\n", + // this, values_, i * framesize_, k * sa_.dims[0], paroffset_[count_], values, i * size, parwidth_[count_] * sizeof(PiPoValue)); + //TODO: zero pad if num rows here: size / parwidth_[count_] < numrows_ + memcpy(values_ + i * framesize_ + k * sa_.dims[0] + paroffset_[count_], + values + i * size + k * width, width * sizeof(PiPoValue)); + } + + if (++count_ == numpar_) // last parallel pipo: pass on to receiver(s) + return propagateFrames(time_, 0 /*weight to disappear*/, values_, numrows_ * sa_.dims[0], numframes_); + else + return 0; // continue receiving frames + } + + + int finalize (double inputEnd) + { + if (count_ == 0) + time_ = inputEnd; + + if (++count_ == numpar_) + return this->propagateFinalize(time_); + else + return 0; // continue receiving finalize + } + }; // end class PiPoMerge + + PiPoMerge merge; + +public: + // constructor + PiPoParallel (PiPo::Parent *parent) + : PiPo(parent), merge(parent) + { } + + //TODO: varargs constructor PiPoParallel (PiPo::Parent *parent, PiPo *pipos ...) + +private: + // copy constructor + PiPoParallel (const PiPoParallel &other) + : PiPo(other), merge(other.merge) + { } + + // assignment operator + const PiPoParallel& operator= (const PiPoParallel &other) + { + parent = other.parent; + merge = other.merge; + + return *this; + } + +public: + // destructor + ~PiPoParallel (void) { } + + + /** @name PiPoParallel setup methods */ + /** @{ */ + + /** Add module @p{pipo} to the data flow graph in parallel. + */ + void add (PiPo *pipo) + { // add to list of receivers of this parallel module, to branch out on input + PiPo::setReceiver(pipo, true); + // then connect module to internal merge module + pipo->setReceiver(&merge); + } + + void add (PiPo &pipo) + { + add(&pipo); + } + + /** @} PiPoParallel setup methods */ + + /** @name overloaded PiPo methods */ + /** @{ */ + + void setParent (PiPo::Parent *parent) + { + this->parent = parent; + + for (unsigned int i = 0; i < receivers.size(); i++) + receivers[i]->setParent(parent); + } + + void setReceiver (PiPo *receiver, bool add = false) + { + merge.setReceiver(receiver, add); + } + + /** @name preparation and processing methods: just notify merge, and let propagate* do the branching */ + /** @{ */ + + /** start stream preparation */ + int streamAttributes (bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int height, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + merge.start(receivers.size()); + return PiPo::propagateStreamAttributes(hasTimeTags, rate, offset, width, height, labels, hasVarSize, domain, maxFrames); + } + + int reset () + { + merge.start(receivers.size()); + return PiPo::propagateReset(); + } + + /** @} end of preparation of processing methods */ + + /** @name processing */ + /** @{ */ + + int frames (double time, double weight, PiPoValue *values, unsigned int size, unsigned int num) + { + merge.start(receivers.size()); + return PiPo::propagateFrames(time, weight, values, size, num); + } + + int finalize (double inputEnd) + { + merge.start(receivers.size()); + return PiPo::propagateFinalize(inputEnd); + } + + /** @} end of processing methods */ + /** @} end of overloaded PiPo methods */ +}; + +/** EMACS ** + * Local variables: + * mode: c + * c-basic-offset:2 + * End: + */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/PiPoSequence.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/PiPoSequence.h new file mode 100644 index 0000000..c92dd88 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/PiPoSequence.h @@ -0,0 +1,263 @@ +/** + * @file PiPoSequence.h + * @author Diemo.Schwarz@ircam.fr + * + * @brief PiPo dataflow graph class that encapsulates a sequence of pipo modules. + * + * @ingroup pipoapi + * + * @copyright + * Copyright (C) 2012–2016 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of mosquitto 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. + */ + +#ifndef _PIPO_SEQUENCE_ +#define _PIPO_SEQUENCE_ + +#include "PiPo.h" + +class PiPoSequence : public PiPo +{ +private: + std::vector<PiPo *> seq_; + +public: + // constructor + PiPoSequence (PiPo::Parent *parent) + : PiPo(parent), seq_() + { } + +#if __cplusplus > 199711L // check for C++11 + /** varargs constructor with a list of pipos that will be connected: + + PiPoSequence (PiPo::Parent *parent, PiPo &pipos ...) + seq(parent, pipo1, pipo2, ...); + + (using C++11 variadic templates) + */ + template<typename ...Args> + PiPoSequence (PiPo::Parent *parent, Args&... pipos) + : PiPo(parent), seq_{&pipos ...} // use C++11 initilizer_list syntax and variadic templates + { + // set parents of all pipos? + connect(NULL); + } +#endif + + // copy constructor + PiPoSequence (const PiPoSequence &other) + : PiPo(other), seq_(other.seq_) + { + connect(NULL); + } + + // assignment operator + const PiPoSequence& operator=(const PiPoSequence &other) + { + parent = other.parent; + seq_ = other.seq_; + connect(NULL); + + return *this; + } + + ~PiPoSequence (void) { } + + + /** @name PiPoSequence setup methods */ + /** @{ */ + + /** append module \p pipo to sequential data flow graph + */ + void add (PiPo *pipo, bool autoconnect = true) + { + seq_.push_back(pipo); + + if (autoconnect && seq_.size() > 1) + seq_[seq_.size() - 2]->setReceiver(pipo); // connect previous to just added pipo + } + + void add (PiPo &pipo, bool autoconnect = true) + { + add(&pipo, autoconnect); + } + + + void clear () + { + for (unsigned int i = 0; i < seq_.size(); i++) + seq_[i] = NULL; + + seq_.clear(); + } + + + /** connect each PiPo in PiPoSequence (from end to start) + + @param receiver is terminating PiPo of the host that finally receives data + */ + bool connect (PiPo *receiver) + { + PiPo *next = getTail(); + + if (next != NULL) + { + next->setReceiver(receiver); + + for (int i = static_cast<int>(seq_.size()) - 2; i >= 0; i--) + { + PiPo *pipo = seq_[i]; + pipo->setReceiver(next); + next = pipo; + } + + return true; + } + + return false; + } + + /** @} PiPoSequence setup methods */ + + /** @name PiPoChain query methods */ + /** @{ */ + + int getSize() const + { + return static_cast<int>(seq_.size()); + } + + PiPo *getHead () const + { + if (seq_.size() > 0) + return seq_[0]; + + return NULL; + } + + PiPo *getTail () const + { + if (seq_.size() > 0) + return seq_[seq_.size() - 1]; + + return NULL; + } + + PiPo *getPiPo (unsigned int index) const + { + //printf("%s(%d) -> %p\n", __PRETTY_FUNCTION__, index, seq_[index]); + + if (index < seq_.size()) + return seq_[index]; + + return NULL; + } + + /** @} PiPoSequence query methods */ + + /** @name overloaded PiPo methods */ + /** @{ */ + + void setParent (PiPo::Parent *parent) + { + this->parent = parent; + + for (unsigned int i = 0; i < seq_.size(); i++) + seq_[i]->setParent(parent); + } + + void setReceiver (PiPo *receiver, bool add = false) + { + PiPo *tail = getTail(); + + if (tail != NULL) + tail->setReceiver(receiver, add); + } + + /** @name preparation of processing */ + /** @{ */ + + /** start stream preparation */ + int streamAttributes (bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int height, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + PiPo *head = getHead(); + + if (head != NULL) + return head->streamAttributes(hasTimeTags, rate, offset, width, height, labels, hasVarSize, domain, maxFrames); + + return -1; + } + + int reset () + { + PiPo *head = getHead(); + + if (head != NULL) + return head->reset(); + + return -1; + } + + /** @} end of preparation of processing methods */ + + /** @name processing */ + /** @{ */ + + int frames (double time, double weight, PiPoValue *values, unsigned int size, unsigned int num) + { + PiPo *head = getHead(); + + if (head != NULL) + return head->frames(time, weight, values, size, num); + + return -1; + } + + int finalize (double inputEnd) + { + PiPo *head = getHead(); + + if (head != NULL) + return head->finalize(inputEnd); + + return -1; + } + + /** @} end of processing methods */ + /** @} end of overloaded PiPo methods */ +}; + +/** EMACS ** + * Local variables: + * mode: c + * c-basic-offset:2 + * End: + */ + +#endif /* _PIPO_SEQUENCE_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/RingBuffer.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/RingBuffer.h new file mode 100644 index 0000000..f5e38f9 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/RingBuffer.h @@ -0,0 +1,121 @@ +/** + * @file RingBuffer.h + * @author Norbert Schnell + * @author Diemo Schwarz + * + * @brief ringbuffer class + * + * @ingroup pipoapi + * + * @copyright + * Copyright (C) 2012–2016 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of mosquitto 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. + */ + +#ifndef _RINGBUFFER_ +#define _RINGBUFFER_ + +template <class T> +class RingBuffer +{ +public: + std::vector<T> vector; + unsigned int width; + unsigned int size; + unsigned int index; + bool filled; + +public: + RingBuffer (void) + : vector() + { + this->width = 1; + this->size = 0; + this->index = 0; + this->filled = false; + }; + + void resize (int width, int size) + { + this->vector.resize(width * size); + this->width = width; + this->size = size; + this->index = 0; + this->filled = false; + }; + + void reset (void) + { + this->index = 0; + this->filled = false; + }; + + int input (T *values, unsigned int num, PiPoValue scale = 1.0) + { + T *ringValues = &this->vector[this->index * this->width]; + + if (num > this->width) + num = this->width; + + /* copy frame */ + if (scale == 1.0) /*TODO: some polymorphism and template magic to avoid this if clause */ + memcpy(ringValues, values, num * sizeof(T)); + else + { + for (unsigned int j = 0; j < num; j++) + ringValues[j] = values[j] * scale; + } + + /* zero pad this values */ + if (num < this->width) + memset(ringValues + num, 0, (this->width - num) * sizeof(T)); + + this->index++; + + if (this->index >= this->size) + { + filled = true; + this->index = 0; + } + + if (this->filled) + return this->size; + else + return this->index; + }; +}; + +/** EMACS ** + * Local variables: + * mode: c + * c-basic-offset:2 + * End: + */ + +#endif /* _RINGBUFFER_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/mimo.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/mimo.h new file mode 100644 index 0000000..ef7020d --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/include/mimo.h @@ -0,0 +1,144 @@ + +#ifndef _MIMO_H_INCLUDED_ +#define _MIMO_H_INCLUDED_ + +#include "PiPo.h" +#include <memory> + +/* interface for a class that holds the mimo module-specific model parameters resulting from training + */ +class mimo_model_data +{ +public: + /** output as json string into out + Throws an exception if string would exceed size. + + @param out string buffer of length \p{size} + @param size size of string buffer + @return returns the out pointer for convenience + + N.B.: the mimo module might be loaded from a dynamic library, so + we can't return a complex object such as std::string that + internatlly uses heap allocations, since the dylib's heap is a + separate one from the main app */ + virtual char *to_json (char *out, int size) throw() = 0; + + /** get model from json string */ + virtual int from_json (const char *json_string) = 0; + + // virtual const int foo() = 0; +}; + +/* + + every mimo module inherits the basic stream description and data + passing methods (streamAttributes() and frames()) from PiPo, but + ignores real-time oriented methods (segment()), and adds iteration + for training. + */ + +class Mimo : public PiPo +{ +public: + // constructor + Mimo (PiPo::Parent *parent, Mimo *receiver = NULL) + : PiPo(parent, receiver) + { + }; + + Mimo (const Mimo &other) + : PiPo(other) + { + } + + /** the PiPo::frames() method performs decoding */ + //virtual int frames (...); + + /** prepare for training + + @param numbuffers number of buffers with training data + @param numtracks number of tracks per input buffer with training data + @param bufsizes array[numbuffers] of numbers of frames for each input buffer + @param streamattr array[numtracks] attributes of input data for each input track + @return 0 for ok or a negative error code (to be specified), -1 for an unspecified error + */ + virtual int setup (int numbuffers, int numtracks, int bufsizes[], const PiPoStreamAttributes *streamattr[]) = 0; + + /** the train method performs one iteration of training. + It is called for each buffer and each input track, receiving the training data sets. + The first iteration receives the original data, further iterations the training output data of previous iterations, + that each iteration can output by calling propagateTrain(). + For multi-modal training (with more than one input track), only the call for the last track may call propagateTrain(). + + @param itercount number of current iteration (starts at zero) + @param bufferindex index of current input buffer (up to numbuffers - 1) + @param trackindex index of current input track (up to numtracks - 1) + @param numframes number of frames in @p{data} + @param data input data in format given by @p{streamattr} + @param timetags pointer to @p{numframes} time tags or NULL when sampled + @param varsize pointer to @p{numframes} of row sizes or NULL when constant size + @return status flag: continue training (> 0), stop training (== 0), error (< 0) + + N.B.: we could replace the constraints on calling sequence by a more complicated input format where pointers to data and attributes of each input track are passed as arrays, that would penalise the vast majority of single-track use cases: + + virtual int train (int itercount, int bufferindex, int numframes[], PiPoValue *data[], double *timetags[], int *varsize[]) = 0; + */ + virtual int train (int itercount, int bufferindex, int trackindex, int numframes, const PiPoValue *data, const double *timetags, const int *varsize) = 0; + + virtual int train (int itercount, int bufferindex, int trackindex, int numframes, const PiPoValue *data, const double starttime, const int *varsize) + { + return train (itercount, bufferindex, trackindex, numframes, data, (const double *) NULL, varsize); + } + + + /** return recommended max number of iterations, or 0 for no limit. + This can be overridden by the user via an attribute + N.B.: The host should ask for maxiter at every iteration, so that a training algorithm can adapt its recommendation to the training progress */ + virtual int maxiter() { return 0; /* unlimited */ } + + /** return error, distance or loss metric from training */ + virtual double getmetric() { return 0; /* whatever */ }; + + /** return trained model parameters */ + virtual mimo_model_data *getmodel () = 0; + + int propagateSetup (int numbuffers, int numtracks, int bufsize[], const PiPoStreamAttributes *streamattr[]) + { + int ret = 0; + + for(unsigned int i = 0; i < this->receivers.size(); i++) + { + ret = dynamic_cast<Mimo *>(this->receivers[i])->setup(numbuffers, 1, bufsize, &streamattr[0]); + + if(ret < 0) + break; + } + + return ret; + } + + int propagateTrain(int itercount, int bufferindex, int trackindex, int numframes, const PiPoValue *data, const double *timetags, const int *varsize) + { + int ret = 0; + + for (unsigned int i = 0; i < this->receivers.size(); i++) + { + ret = dynamic_cast<Mimo *>(this->receivers[i])->train(itercount, bufferindex, trackindex, numframes, data, timetags, varsize); + + if(ret < 0) + break; + } + + return ret; + } +}; + + +/** EMACS ** + * Local variables: + * mode: c + * c-basic-offset:2 + * End: + */ + +#endif // defined _MIMO_H_INCLUDED_ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoBands.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoBands.h new file mode 100644 index 0000000..f367867 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoBands.h @@ -0,0 +1,356 @@ +/** + * @file PiPoBands.h + * @author Norbert.Schnell@ircam.fr + * + * @brief RTA bands PiPo + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012-2014 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_BANDS_ +#define _PIPO_BANDS_ + +#include "PiPo.h" + +extern "C" { +#include "rta_configuration.h" +#include "rta_complex.h" +#include "rta_bands.h" +#include "rta_mel.h" +#include <float.h> +#include <math.h> +} + +#include <vector> +//#include <complex> + +#ifdef WIN32 +static float cabsf(floatcomplex value) +{ + _complex cval = { value.real, value.imag }; + return (float)_cabs(cval); +} +#endif + +class PiPoBands : public PiPo +{ +public: + enum BandsModeE { UndefinedBands = -1, MelBands = 0, HtkMelBands = 1 }; //todo: bark, erb + enum EqualLoudnessModeE { None = 0, Hynek = 1 }; + +private: + std::vector<float> bands; + std::vector<float> weights; + std::vector<unsigned int> bounds; + std::vector<float> bandfreq; // band centre frequency in Hz + std::vector<float> eqlcurve; // equal loudness curve + std::vector<float> power_spectrum; + + enum BandsModeE bandsMode; + enum EqualLoudnessModeE eqlMode; + unsigned int specSize; + bool complex_input; + float sampleRate; + +public: + /** + * @var mode + * "mel" (MEL bands, normalized energy) + * or "htkmel" (HTK-like MEL bands, preserved peak energy) + */ + PiPoScalarAttr<PiPo::Enumerate> mode; + + /** + * @var eqlmode + * "none" (no scaling) + * or "hynek" (Hynek's equal loudness curve) + */ + PiPoScalarAttr<PiPo::Enumerate> eqlmode; + + /** + * @var num + * number of bands + */ + PiPoScalarAttr<int> num; + + /** + * @var log + * enable logarithmic bands + */ + PiPoScalarAttr<bool> log; + + /** + * @var power + * power scaling exponent + */ + PiPoScalarAttr<float> power; + + PiPoBands(Parent *parent, PiPo *receiver = NULL) : + PiPo(parent, receiver), + bands(), weights(), bounds(), bandfreq(), + mode(this, "mode", "Bands Mode", true, MelBands), + eqlmode(this, "eqlmode", "Equal Loudness Curve", true, None), + num(this, "num", "Number Of Bands", true, 24), + log(this, "log", "Logarithmic Bands", false, true), + power(this, "power", "Power Scaling Exponent", false, 1.) + { + this->bandsMode = UndefinedBands; + this->eqlMode = None; + + this->specSize = 0; + this->complex_input = false; + this->sampleRate = 1.0; + + this->mode.addEnumItem("mel", "MEL bands (normalized band energy)"); + this->mode.addEnumItem("htkmel", "HTK like MEL bands (preserved peak energy)"); + + this->eqlmode.addEnumItem("none", "no equal loudness scaling"); + this->eqlmode.addEnumItem("hynek", "Hynek's equal loudness curve"); + } + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + enum BandsModeE bandsMode = (enum BandsModeE)this->mode.get(); + enum EqualLoudnessModeE eqlMode = (enum EqualLoudnessModeE)this->eqlmode.get(); + int numBands = this->num.get(); + int specSize = size; + float sampleRate = 2.0 * domain; + + if (width >= 2) + { + complex_input = true; + power_spectrum.resize(specSize); + } + + if(bandsMode < MelBands) + bandsMode = MelBands; + else if(bandsMode > HtkMelBands) + bandsMode = HtkMelBands; + + if(numBands < 1) + numBands = 1; + + if(specSize < 0) + specSize = 0; + + if(bandsMode != this->bandsMode || eqlMode != this->eqlMode || numBands != this->bands.size() || specSize != this->specSize || sampleRate != this->sampleRate) + { + this->bands.resize(numBands); + this->eqlcurve.resize(numBands); + this->weights.resize(specSize * numBands); + this->bounds.resize(2 * numBands); + this->bandfreq.resize(numBands); + + this->bandsMode = bandsMode; + this->eqlMode = eqlMode; + this->specSize = specSize; + this->sampleRate = sampleRate; + + switch(bandsMode) + { + default: + case MelBands: + { + rta_spectrum_to_mel_bands_weights(&this->weights[0], &this->bounds[0], specSize, + sampleRate, numBands, 0.0, domain, 1.0, + rta_hz_to_mel_slaney, rta_mel_to_hz_slaney, rta_mel_slaney); + + // calculate band centre freqs (TODO: pass up from rta_spectrum_to_mel_bands_weights) + for (int i = 0; i < numBands; i++) + { + double b = (bounds[2 * i] + bounds[2 * i + 1]) / 2.; // take mean as band centre freq + bandfreq[i] = b / (double) specSize * sampleRate / 2. ; // in Hz + } + break; + } + + case HtkMelBands: + { + rta_spectrum_to_mel_bands_weights(&this->weights[0], &this->bounds[0], specSize, + sampleRate, numBands, 0.0, domain, 1.0, + rta_hz_to_mel_htk, rta_mel_to_hz_htk, rta_mel_htk); + + // calculate band centre freqs (TODO: pass up from rta_spectrum_to_mel_bands_weights) + for (int i = 0; i < numBands; i++) + { + double b = (bounds[2 * i] + bounds[2 * i + 1]) / 2.; // take mean as band centre freq + bandfreq[i] = b / (double) specSize * sampleRate / 2. ; // in Hz + } + break; + } + /* + case ERBBands: + rta_spectrum_to_erb_bands_weights(&weights[0], &bounds[0], &bandfreq[0], specSize, + sampleRate, numBands); + break; + */ + } + + switch (this->eqlmode.get()) + { + case Hynek: + + for (int i = 0; i < numBands; i++) + { // Hynek's equal-loudness-curve formula + double fsq = bandfreq[i] * bandfreq[i]; + double ftmp = fsq / (fsq + 1.6e5); + eqlcurve[i] = (ftmp * ftmp) * ((fsq + 1.44e6) / (fsq + 9.61e6)); + } + break; + + default: /* curve will not be applied */ + break; + } + } + +#if (DEBUG * 0) + printf("PiPoBands::streamAttributes timetags %d rate %.0f offset %f width %d size %d " + "labels %s varsize %d domain %f maxframes %d\nrta_real_t size = %d\n", + hasTimeTags, rate, offset, (int) width, (int) size, labels ? labels[0] : "n/a", + (int) hasVarSize, domain, (int) maxFrames, sizeof(rta_real_t)); + static FILE *filtout = fopen("/tmp/melfilter.raw", "w"); + fwrite(&weights[0], weights.size(), sizeof(float), filtout); + static FILE *bout = fopen("/tmp/melbounds.raw", "w"); + fwrite(&bounds[0], bounds.size(), sizeof(int), bout); +#endif + + return this->propagateStreamAttributes(hasTimeTags, rate, offset, numBands, 1, NULL, 0, 0.0, 1); + } + + int frames(double time, double weight, float *values, unsigned int size, unsigned int num) + { + unsigned int numBands = static_cast<int>(this->bands.size()); + bool log = this->log.get(); + float p = this->power.get(); + float *spectrum; + int specsize = size; + + for(unsigned int i = 0; i < num; i++) + { + float scale = 1.0; + + switch(this->bandsMode) + { + default: + case MelBands: + { + scale *= 66519.0 / numBands; + break; + } + case HtkMelBands: + { + break; + } + } + + if (complex_input) + { // convert to power spectrum + specsize = static_cast<int>(power_spectrum.size()); + spectrum = &(power_spectrum[0]); + + for (int i = 0; i < specsize; i++) + spectrum[i] = cabsf(((rta_complex_t *) values)[i]); + +#if (DEBUG * 0) + static FILE *specout = fopen("/tmp/powerspectrum.raw", "w"); + fwrite(spectrum, sizeof(float), specsize, specout); +#endif + } + else + spectrum = values; + + /* calculate MEL bands */ + rta_spectrum_to_bands_abs(&this->bands[0], spectrum, + &this->weights[0], &this->bounds[0], + specsize, numBands); + + /* apply equal loudness curve*/ + if (this->eqlmode.get() != None) + { + for (unsigned int j = 0; j < numBands; j++) + this->bands[j] *= this->eqlcurve[j]; + } + + if(log) + scale *= numBands; + + if(scale != 1.0) + { + for(unsigned int j = 0; j < numBands; j++) + this->bands[j] *= scale; + } + + if(log) + { + const double minLogValue = 1e-48; + const double minLog = -480.0; + + /* calculate log output values */ + for(unsigned int i = 0; i < numBands; i++) + { + float band = this->bands[i]; + + if(band > minLogValue) + this->bands[i] = 10.0 * log10f(band); + else + this->bands[i] = minLog; + } + } + + if (p != 1) + { + for (unsigned int j = 0; j < numBands; j++) + this->bands[j] = powf(this->bands[j], p); + } + + int ret = this->propagateFrames(time, weight, &this->bands[0], numBands, 1); + + if(ret != 0) + return ret; + + values += size; + } + + return 0; + } +}; + +/** EMACS ** + * Local variables: + * mode: c++ + * c-file-style: "stroustrup" + * c-basic-offset:2 + * End: + */ + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoBayesFilter.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoBayesFilter.h new file mode 100644 index 0000000..57e456a --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoBayesFilter.h @@ -0,0 +1,149 @@ +/** + * @file PiPoBayesFilter.h + * @author Norbert.Schnell@ircam.fr + * + * @brief PiPo implementing the Bayesian Filtering of myoelectric signals algorithm + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012-2014 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_BAYESFILTER_ +#define _PIPO_BAYESFILTER_ + +#include "BayesianFilter.h" +#include "PiPo.h" + +extern "C" { +#include "rta_configuration.h" +#include "rta_mean_variance.h" +} + +#include <vector> +using namespace std; + +#define RING_ALLOC_BLOCK 256 + +class PiPoBayesFilter : public PiPo { + BayesianFilter filter; + vector<float> observation; + vector<float> output; + + public: + PiPoScalarAttr<float> logdiffusion; + PiPoScalarAttr<float> logjumprate; + PiPoVarSizeAttr<float> mvc; + + // ------------------------------------ + // -- Deprecated Attributes + PiPoScalarAttr<float> clipping; + PiPoScalarAttr<float> alpha; + PiPoScalarAttr<float> beta; + PiPoScalarAttr<bool> rectification; + // ------------------------------------ + + PiPoBayesFilter(PiPo::Parent *parent, PiPo *receiver = NULL) + : PiPo(parent, receiver), + logdiffusion(this, "logdiffusion", "log diffusion rate", true, -2.), + logjumprate(this, "logjumprate", "log probability of sudden jumps", + true, -5.), + mvc(this, "mvc", "Maximum Value Contraction", true, 1.), + // ------------------------------------ + // -- Deprecated Attributes + clipping(this, "clipping", "clipping [DEPRECATED]", true, 1.), + alpha(this, "alpha", "alpha [DEPRECATED]", true, 0.01), + beta(this, "beta", "beta [DEPRECATED]", true, 0.01), + rectification(this, "rectification", + "signal rectification [DEPRECATED]", true, true) { + // ------------------------------------ + this->filter.diffusion = powf(10., this->logdiffusion.get()); + this->filter.jump_rate = powf(10., this->logjumprate.get()); + this->mvc.setSize(1); + this->mvc.set(0, 1.); + this->filter.mvc[0] = this->mvc.getDbl(0); + this->filter.init(); + }; + + ~PiPoBayesFilter(void){}; + + int streamAttributes(bool hasTimeTags, double rate, double offset, + unsigned int width, unsigned int size, + const char **labels, bool hasVarSize, double domain, + unsigned int maxFrames) { + this->mvc.resize(width, 1.); + this->filter.resize(width); + this->filter.samplerate = rate; + this->filter.diffusion = powf(10., this->logdiffusion.get()); + this->filter.jump_rate = powf(10., this->logjumprate.get()); + for (unsigned int i = 0; i < width; i++) { + this->filter.mvc[i] = this->mvc.getDbl(i); + } + this->filter.init(); + + this->output.resize(width * size * maxFrames); + + return this->propagateStreamAttributes(hasTimeTags, rate, offset, width, + size, labels, 0, 0.0, 1); + }; + + int reset(void) { + this->filter.init(); + return this->propagateReset(); + }; + + int frames(double time, double weight, float *values, unsigned int size, + unsigned int num) { + float *output = &(this->output[0]); + + for (unsigned int i = 0; i < num; i++) { + this->observation.resize(size); + for (unsigned int j = 0; j < size; j++) + this->observation[j] = double(values[j]); + + this->filter.update(observation); + + for (unsigned int j = 0; j < size; j++) + output[j] = float(this->filter.output[j]); + + int ret = this->propagateFrames(time, weight, output, size, 1); + + if (ret != 0) return ret; + + values += size; + output += size; + } + + return 0; + }; +}; + +#endif /* _PIPO_BAYESFILTER_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoBiquad.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoBiquad.h new file mode 100644 index 0000000..38f1ae0 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoBiquad.h @@ -0,0 +1,306 @@ +/** + * @file PiPoBiquad.h + * @author Joseph Larralde + * @date 30.11.2015 + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2015 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_BIQUAD_H_ +#define _PIPO_BIQUAD_H_ + +#define PIPO_BIQUAD_MIN_Q 0.001 + +#ifdef WIN32 +#define M_SQRT1_2 0.70710678118654752440084436210 +#endif + +#include "PiPo.h" + +extern "C" { +#include "rta_configuration.h" +#include "rta_biquad.h" +} + +#include <math.h> +#include <stdlib.h> + +class PiPoBiquad : public PiPo +{ +public: + enum BiquadTypeE { DF1BiquadType = 0, DF2TBiquadType = 1}; + enum FilteringModeE { LowPassFilteringMode = 0, HighPassFilteringMode = 1, ResonantFilteringMode = 2, BandPassFilteringMode = 3, BandStopFilteringMode = 4, AllPassFilteringMode = 5, PeakNotchFilteringMode = 6, LowShelfFilteringMode = 7, HighShelfFilteringMode = 8, RawCoefsFilteringMode = 9}; + enum FrameRateUnitE { FrameUnit = 0, HertzUnit = 1 }; + +private: + BiquadTypeE biquadType;; + FilteringModeE filterMode; + //FrameRateUnitE unit; + + + unsigned int frameWidth; + unsigned int frameHeight; + + float frameRate; + float *outValues; + + float b[3]; /* biquad feed-forward coefficients b0, b1 and b2*/ + float a[2]; /* biquad feed-backward coefficients a1 and a2 */ + float *biquadState; + unsigned int biquadState_nb; /* number of state: 4 for df1 and 2 for df2t */ + + double f0; + double normF0; + + float biquadGain; + float biquadQuality; + float biquadQNormalisation; + +public: + PiPoScalarAttr<float> b0; + PiPoScalarAttr<float> b1; + PiPoScalarAttr<float> b2; + //PiPoScalarAttr<float> a0; // -> a0 is always 1 + PiPoScalarAttr<float> a1; + PiPoScalarAttr<float> a2; + PiPoScalarAttr<PiPo::Enumerate> biquadTypeA; + PiPoScalarAttr<PiPo::Enumerate> filterModeA; + //PiPoScalarAttr<PiPo::Enumerate> unitA; + PiPoScalarAttr<float> gainA; + PiPoScalarAttr<float> frequencyA; + PiPoScalarAttr<float> QA; + + //=================== CONSTRUCTOR ====================// + + PiPoBiquad(Parent *parent, PiPo *receiver = NULL) : + PiPo(parent, receiver), + b0(this, "b0", "b0 biquad coefficient", true, 1.), + b1(this, "b1", "b1 biquad coefficient", true, 0.), + b2(this, "b2", "b2 biquad coefficient", true, 0.), + a1(this, "a1", "a1 biquad coefficient", true, 0.), + a2(this, "a2", "a2 biquad coefficient", true, 0.), + biquadTypeA(this, "biquadtype", "Direct Form 1 or 2T", true, DF1BiquadType), + filterModeA(this, "filtermode", "Filter Mode", true, LowPassFilteringMode), + //unitA(this, "unit", "Framerate Unit", true, FrameUnit), + gainA(this, "gain", "Filter Gain", true, 1.), + frequencyA(this, "frequency", "Filter Relevant Frequency", true, 1000.), + QA(this, "Q", "Filter Quality", true, 0.) + { + + + this->frameWidth = 0; + this->frameHeight = 0; + + this->frameRate = 1.; + this->outValues = NULL; + + this->biquadType = DF1BiquadType; + this->biquadState_nb = 4; + this->biquadGain = 1.; + this->biquadQuality = 0.; + this->biquadQNormalisation = M_SQRT1_2; + + this->filterMode = LowPassFilteringMode; + + this->b[0] = 1.; + this->b[1] = 0.; + this->b[2] = 0.; + this->a[0] = 0.; + this->a[1] = 0.; + this->biquadState = NULL; + + this->biquadTypeA.addEnumItem("DF1", "Direct Form 1"); + this->biquadTypeA.addEnumItem("DF2", "Direct Form 2"); + + this->filterModeA.addEnumItem("lowpass", "Lowpass Filtering Mode"); + this->filterModeA.addEnumItem("highpass", "Highpass Filtering Mode"); + this->filterModeA.addEnumItem("resonant", "Resonant Filtering Mode"); + this->filterModeA.addEnumItem("bandpass", "Bandpass Filtering Mode"); + this->filterModeA.addEnumItem("bandstop", "Bandstop Filtering Mode"); + this->filterModeA.addEnumItem("allpass", "Allpass Filtering Mode"); + this->filterModeA.addEnumItem("peaknotch", "Peaknotch Filtering Mode"); + this->filterModeA.addEnumItem("lowshelf", "Lowshelf Filtering Mode"); + this->filterModeA.addEnumItem("highshelf", "Highshelf Filtering Mode"); + this->filterModeA.addEnumItem("rawcoefs", "Controlled By Raw Coefficients"); + + //this->unitA.addEnumItem("frame", "Raw Frames"); + //this->unitA.addEnumItem("Hz", "Framerate Expressed in Hertz"); + } + + ~PiPoBiquad() + { + free(this->biquadState); + free(this->outValues); + } + + void initBiquadCoefficients() + { + float q = this->biquadQuality; + + if(this->biquadQNormalisation != 1.) { + q *= this->biquadQNormalisation; + } + + rta_biquad_coefs(b, a, (rta_filter_t)filterMode, normF0, q, biquadGain); + } + + void filterFrame(float *frameValues, float *outValues)//, int nFrames) + { + switch(this->biquadType) { + case DF1BiquadType: + for(unsigned int i = 0; i < this->frameHeight; i++) { + for(unsigned int j = 0; j < this->frameWidth; j++) { + outValues[i * this->frameWidth + j] = rta_biquad_df1_stride(frameValues[i * this->frameWidth + j], b, 1, a, 1, &(this->biquadState[j]), this->frameWidth); + } + } + break; + + case DF2TBiquadType: + for(unsigned int i = 0; i < this->frameHeight; i++) { + for(unsigned int j = 0; j < this->frameWidth; j++) { + outValues[i * this->frameWidth + j] = rta_biquad_df2t_stride(frameValues[i * this->frameWidth + j], b, 1, a, 1, &(this->biquadState[j]), this->frameWidth); + } + } + break; + } + } + // additionnal buffer for filter memory ? -> no ! (taken care of by biquadState array) + + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + enum BiquadTypeE biquadType = (enum BiquadTypeE)this->biquadTypeA.get(); + enum FilteringModeE filterMode = (enum FilteringModeE)this->filterModeA.get(); + //enum FrameRateUnitE unit = (enum FrameRateUnitE)this->unitA.get(); + + float gain = this->gainA.get(); + float frequency = this->frequencyA.get(); + float Q = this->QA.get(); + + unsigned int frameWidth = width; + unsigned int frameHeight = size; + + + if(frameWidth != this->frameWidth || frameHeight != this->frameHeight) + { + this->frameWidth = frameWidth; + this->frameHeight = frameHeight; + + this->biquadState = (float *)realloc(this->biquadState, 4 * this->frameWidth * sizeof(float)); + memset(this->biquadState, 0., 4 * this->frameWidth); + this->outValues = (float *)realloc(this->outValues, this->frameWidth * this->frameHeight * sizeof(float)); + } + + if(biquadType != this->biquadType) + { + this->biquadType = biquadType; + if(this->biquadType == DF1BiquadType) { + this->biquadState_nb = 4; + } else { // this->biquadType == DF2TBiquadType + this->biquadState_nb = 2; + } + } + + if(this->filterMode == RawCoefsFilteringMode) + { + float a1 = this->a1.get(); + float a2 = this->a2.get(); + float b0 = this->b0.get(); + float b1 = this->b1.get(); + float b2 = this->b2.get(); + + if(a1 != this->a[0] || a2 != this->a[1] || b0 != this->b[0] || b1 != this->b[1] || b2 != this->b[2]) + { + a[0] = a1; + a[1] = a2; + b[0] = b0; + b[1] = b1; + b[2] = b2; + } + + return this->propagateStreamAttributes(hasTimeTags, rate, offset, width, size, labels, 0, 0.0, 1); + } + + // if not in raw coefs control mode, compute coefs from gain / frequency / quality : + + if(filterMode != this->filterMode || rate != this->frameRate) + { + this->filterMode = filterMode; + this->frameRate = rate; + initBiquadCoefficients(); + } + + //============================ more likely to change ============================// + if(gain != this->biquadGain || frequency != this->f0 || Q != this->biquadQuality) + { + this->biquadQuality = fmax(fmin(Q, 1.), PIPO_BIQUAD_MIN_Q); + this->QA.set(this->biquadQuality, true); + + this->f0 = fmax(fmin(frequency, this->frameRate), 0.); + this->frequencyA.set(this->f0, true); + this->normF0 = this->f0 / this->frameRate; + + this->biquadGain = fmax(gain, 0.); + this->gainA.set(this->biquadGain, true); + + initBiquadCoefficients(); + } + + return this->propagateStreamAttributes(hasTimeTags, rate, offset, width, size, labels, false, 0.0, 1); + } + + int reset() + { + memset(this->biquadState, 0., 4 * this->frameWidth); + return this->propagateReset(); + } + + int frames(double time, double weight, float *values, unsigned int size, unsigned int num) + { + double outputTime = time; + for(unsigned int i = 0; i < num; i++) + { + //outputTime += (1000. / this->frameRate); + filterFrame(values, this->outValues); + int ret = this->propagateFrames(outputTime, weight, this->outValues, this->frameWidth * this->frameHeight, 1); + if(ret != 0) + return ret; + + values += size; + } + return 0; + } + +}; + +#endif /* _PIPO_BIQUAD_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoChop.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoChop.h new file mode 100644 index 0000000..bd39aab --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoChop.h @@ -0,0 +1,246 @@ +/** + * @file PiPoChop.h + * @author Norbert.Schnell@ircam.fr + * + * @brief PiPo equidistant segmentation and temporal modeling + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012-2014 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_CHOP_ +#define _PIPO_CHOP_ + +#include "PiPo.h" +#include "TempMod.h" +#include <vector> +#include <string> + +extern "C" { +#include <float.h> +} + +// keep quiet! +#undef DEBUG + + +class PiPoChop : public PiPo +{ +public: + PiPoScalarAttr<double> offset_; + PiPoScalarAttr<double> chopsize_; + PiPoScalarAttr<bool> enDuration_; + PiPoScalarAttr<bool> enMin_; + PiPoScalarAttr<bool> enMax_; + PiPoScalarAttr<bool> enMean_; + PiPoScalarAttr<bool> enStddev_; + +private: + double nexttime_; + int report_duration_; // caches enDuration_ as index offset, mustn't change while running + TempModArray tempmod_; + std::vector<PiPoValue> outputvalues_; + + // return next chop time or infinity when not chopping + double getnexttime () + { + return chopsize_.get() > 0 ? offset_.get() + chopsize_.get() : DBL_MAX; + } + +public: + PiPoChop (Parent *parent, PiPo *receiver = NULL) + : PiPo(parent, receiver), + tempmod_(), + offset_ (this, "offset", "Time Offset Before Starting Segmentation [ms]", false, 0), + chopsize_(this, "size", "Chop Size [ms] (0 = chop at end)", false, 242), + enDuration_(this, "duration", "Output Segment Duration", true, false), + enMin_ (this, "min", "Calculate Segment Min", true, false), + enMax_ (this, "max", "Calculate Segment Max", true, false), + enMean_ (this, "mean", "Calculate Segment Mean", true, true), // at least one tempmod on + enStddev_(this, "stddev", "Calculate Segment StdDev", true, false) + { + nexttime_ = getnexttime(); + report_duration_ = 0; + } + + ~PiPoChop (void) + { + } + + int streamAttributes (bool hasTimeTags, double rate, double offset, + unsigned int width, unsigned int size, + const char **labels, bool hasVarSize, double domain, + unsigned int maxFrames) + { +#ifdef DEBUG + printf("PiPoChop streamAttributes timetags %d rate %.0f offset %f width %d size %d labels %s " + "varsize %d domain %f maxframes %d\n", + hasTimeTags, rate, offset, (int) width, (int) size, labels ? labels[0] : "n/a", (int) hasVarSize, domain, (int) maxFrames); +#endif + + nexttime_ = getnexttime(); + report_duration_ = (int) enDuration_.get(); + + /* resize temporal models */ + tempmod_.resize(width); + + /* enable temporal models */ //TODO: switch at least one on + tempmod_.enable(enMin_.get(), enMax_.get(), enMean_.get(), enStddev_.get()); + + /* get output size */ + unsigned int outputsize = tempmod_.getNumValues(); + + /* alloc output vector for duration and temporal modelling output */ + outputvalues_.resize(outputsize + report_duration_); + + /* get labels */ + char *mem = new char[(outputsize + report_duration_) * 64]; + char **outlabels = new char*[outputsize + report_duration_]; + + for (unsigned int i = 0; i < outputsize + report_duration_; i++) + outlabels[i] = mem + i * 64; + + if (report_duration_) + snprintf(outlabels[0], 64, "Duration"); + tempmod_.getLabels(labels, width, &outlabels[report_duration_], 64, outputsize); + + int ret = this->propagateStreamAttributes(true, rate, 0.0, outputsize + report_duration_, 1, (const char **) &outlabels[0], false, 0.0, 1); + + delete [] mem; + delete [] outlabels; + + return ret; + } + + int reset (void) + { + nexttime_ = getnexttime(); + tempmod_.reset(); + + return this->propagateReset(); + }; + + + int frames (double time, double weight, PiPoValue *values, unsigned int size, unsigned int num) + { +#ifdef DEBUG + //printf("PiPoChop frames time %f (next %f) size %d num %d\n", time, nexttime_, size, num); +#endif + + int ret = 0; + + if (time >= offset_.get()) + { + // at first crossing of offset, nexttime_ == offset + duration + + if (time >= nexttime_) + { + int outsize = static_cast<int>(outputvalues_.size()); + + if (report_duration_) + //TBD: calculate actual duration quantised to frame hops? + outputvalues_[0] = chopsize_.get(); + + /* get temporal modelling */ + tempmod_.getValues(&outputvalues_[report_duration_], outsize - report_duration_, true); + +#ifdef DEBUG + printf(" segment! time %f at input time %f nexttime_ %f outsize %d\n", + nexttime_ - chopsize_.get(), time, nexttime_, outsize); +#endif + /* report segment at precise last chop time */ + ret = this->propagateFrames(nexttime_ - chopsize_.get(), weight, &outputvalues_[0], outsize, 1); + + if (ret != 0) + return ret; + + nexttime_ += chopsize_.get(); // never called when not chopping + } + + /* feed temporal modelling */ + /* TODO: split frame statistics between segments proportionally wrt to exact segmentation time */ + for (unsigned int i = 0; i < num; i++) + { + tempmod_.input(values, size); + values += size; + } + } + + return 0; + } + + int finalize (double inputend) + { + double duration = chopsize_.get() > 0 ? inputend - (nexttime_ - chopsize_.get()) : inputend - offset_.get(); + +#ifdef DEBUG + printf("PiPoChop finalize time %f duration %f size %ld\n", inputend, duration, outputvalues_.size()); +#endif + + if (1) // want last smaller segment? duration >= chopsize_.get()) + { + /* end of segment (new onset or below off threshold) */ + int outsize = static_cast<int>(outputvalues_.size()); + + if (report_duration_) + // calculate actual duration of last chop + outputvalues_[0] = duration; + + /* get temporal modelling */ + if (outsize > 1) + tempmod_.getValues(&outputvalues_[report_duration_], outsize - report_duration_, true); + + /* report segment */ + return this->propagateFrames(inputend - duration, 0.0, &outputvalues_[0], outsize, 1); + } + + return 0; + } +}; + +/** EMACS ** + * Local variables: + * mode: c++ + * c-basic-offset:2 + * End: + */ + +#endif + +#if CHOP_TEST +int main (int argc, char *argv[]) +{ + + + return 0; +} +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoConst.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoConst.h new file mode 100644 index 0000000..5445451 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoConst.h @@ -0,0 +1,184 @@ +/** + * @file PiPoConst.h + * @author Diemo.Schwarz@ircam.fr + * + * @brief PiPo providing a constant value + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012 by IMTR IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_CONST_ +#define _PIPO_CONST_ + +#define CONST_DEBUG DEBUG*1 + +#include "PiPo.h" + +extern "C" { +#include <stdlib.h> +} + +class PiPoConst : public PiPo +{ +public: + PiPoScalarAttr<float> value; + PiPoScalarAttr<const char *> name; + + PiPoConst (Parent *parent, PiPo *receiver = NULL); + ~PiPoConst (void); + + int streamAttributes (bool hasTimeTags, double rate, double offset, + unsigned int width, unsigned int size, const char **labels, + bool hasVarSize, double domain, unsigned int maxFrames); + int finalize (double inputEnd); + int reset (void); + int frames (double time, double weight, float *values, unsigned int size, unsigned int num); + +private: + int numcols_; + PiPoValue *values_; +}; + + +inline PiPoConst::PiPoConst (Parent *parent, PiPo *receiver) +: PiPo(parent, receiver), + value(this, "value", "value to store for added column", false, 0), + name(this, "name", "name of added column", true, "Constant"), + numcols_(0), values_(NULL) +{} + +inline PiPoConst::~PiPoConst(void) +{ +} + + +/////////////////////////////////////////////////////////////////////////////// +// +// init module +// + +inline int PiPoConst::streamAttributes (bool hasTimeTags, double rate, double offset, + unsigned int width, unsigned int size, + const char **labels, bool hasVarSize, + double domain, unsigned int maxFrames) +{ +#if CONST_DEBUG >= 2 + printf("PiPoConst streamAttributes timetags %d rate %f offset %f width %d size %d labels %s varsize %d domain %f maxframes %d\n", + hasTimeTags, rate, offset, width, size, labels ? labels[0] : "n/a", hasVarSize, domain, maxFrames); + +#endif + +# define MAX_DESCR_NAME 64 + numcols_ = width + 1; + values_ = (PiPoValue *) realloc(values_, maxFrames * size * numcols_ * sizeof(PiPoValue)); // alloc space for maxmal block size + + /* get labels */ + char *mem = new char[numcols_ * MAX_DESCR_NAME]; + char **outlabels = new char*[numcols_]; + + for (int i = 0; i < numcols_; i++) + outlabels[i] = mem + i * MAX_DESCR_NAME; + + // copy input labels plus one more + if (labels != NULL) + memcpy(outlabels, labels, width * sizeof(char *)); + else // no input labels given, invent one + for(unsigned int i = 0; i < width; i++) + outlabels[i] = (char *)"unnamed"; + strncpy(outlabels[numcols_ - 1], name.get(), MAX_DESCR_NAME); + + int ret = this->propagateStreamAttributes(hasTimeTags, rate, offset, numcols_, 1, + (const char **) &outlabels[0], false, domain, 1); + + delete [] mem; + delete [] outlabels; + + return ret; +} + +inline int PiPoConst::finalize (double inputEnd) +{ + //post("PiPoConst finalize %f\n", inputEnd); + return this->propagateFinalize(inputEnd); +}; + + +inline int PiPoConst::reset (void) +{ + //post("PiPoConst reset\n"); + return this->propagateReset(); +}; + + +/////////////////////////////////////////////////////////////////////////////// +// +// compute and output data +// + +inline int PiPoConst::frames (double time, double weight, float *invalues, unsigned int size, unsigned int num) +{ + int status = 0; + int nincols = numcols_ - 1; // num input columns + int ninrows = size / nincols; + float *outvalues = values_; + float constvalue = value.get(); + +#if CONST_DEBUG >= 2 + printf("PiPoConst::frames time %f values %p size %d num %d --> %f\n", + time, invalues, size, num, constvalue); +#endif + + for (unsigned int i = 0; i < num; i++) + { + for (int j = 0; j < ninrows; j++) + { // copy line by line + memcpy(outvalues, invalues, nincols * sizeof(float)); + outvalues[numcols_ - 1] = constvalue; + + outvalues += numcols_; + invalues += nincols; + } + } + + status = propagateFrames(time, weight, values_, ninrows * numcols_, num); + return status; +} + +/** EMACS ** + * Local variables: + * mode: c + * c-basic-offset:2 + * End: + */ + +#endif /* _PIPO_CONST_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoDct.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoDct.h new file mode 100644 index 0000000..e3071d2 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoDct.h @@ -0,0 +1,145 @@ +/** + * @file PiPoDct.h + * @author Norbert.Schnell@ircam.fr + * + * @brief RTA DCT PiPo + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012-2014 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_DCT_ +#define _PIPO_DCT_ + +#include "PiPo.h" + +extern "C" { +#include "rta_configuration.h" +#include "rta_dct.h" +} + +#include <vector> + +class PiPoDct : public PiPo +{ +public: + enum WeightingMode { PlpMode, SlaneyMode, HtkMode, FeacalcMode }; + +private: + std::vector<float> frame; + std::vector<float> weights; + unsigned int inputSize; + enum WeightingMode weightingMode; + +public: + PiPoScalarAttr<int> order; + PiPoScalarAttr<PiPo::Enumerate> weighting; + + PiPoDct(Parent *parent, PiPo *receiver = NULL) : + PiPo(parent, receiver), + frame(), weights(), + weighting(this, "weighting", "DCT Weighting Mode", true, FeacalcMode), + order(this, "order", "DCT Order", true, 12) + { + this->inputSize = 0; + this->weightingMode = FeacalcMode; + + this->weighting.addEnumItem("plp", "plp weighting"); + this->weighting.addEnumItem("slaney", "slaney weighting"); + this->weighting.addEnumItem("htk", "HTK weighting"); + this->weighting.addEnumItem("feacalc", "feacalc weighting"); + } + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + unsigned int order = this->order.get(); + unsigned int inputSize = width * size; + + enum WeightingMode weightingMode = (enum WeightingMode)this->weighting.get(); + if(weightingMode > FeacalcMode) { + weightingMode = FeacalcMode; + } + + if(order != this->frame.size() || inputSize != this->inputSize || weightingMode != this->weightingMode) + { + this->frame.resize(order); + this->weights.resize(inputSize * order); + this->inputSize = inputSize; + + switch(weightingMode) + { + case PlpMode: + rta_dct_weights(&this->weights[0], inputSize, order, rta_dct_plp); + break; + + case SlaneyMode: + rta_dct_weights(&this->weights[0], inputSize, order, rta_dct_slaney); + break; + + case HtkMode: + rta_dct_weights(&this->weights[0], inputSize, order, rta_dct_htk); + break; + + case FeacalcMode: + rta_dct_weights(&this->weights[0], inputSize, order, rta_dct_feacalc); + break; + } + + this->weightingMode = weightingMode; + + //rta_dct_weights(&this->weights[0], inputSize, order, rta_dct_feacalc); + } + + return this->propagateStreamAttributes(hasTimeTags, rate, offset, order, 1, NULL, 0, 0.0, 1); + } + + int frames(double time, double weight, float *values, unsigned int size, unsigned int num) + { + for(unsigned int i = 0; i < num; i++) + { + rta_dct(&this->frame[0], values, &this->weights[0], this->inputSize, + static_cast<unsigned int>(this->frame.size())); + + int ret = this->propagateFrames(time, weight, &this->frame[0], + static_cast<unsigned int>(this->frame.size()), 1); + + if(ret != 0) + return ret; + + values += size; + } + + return 0; + } +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoDelta.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoDelta.h new file mode 100644 index 0000000..bd2c472 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoDelta.h @@ -0,0 +1,203 @@ +/** + * @file PiPoDelta.h + * @author Diemo Schwarz + * + * @brief PiPo calculating delta values on a stream + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2014 by ISMM IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_DELTA_ +#define _PIPO_DELTA_ + +#include "PiPo.h" +#include "RingBuffer.h" + +extern "C" { +#include "rta_configuration.h" +#include "rta_delta.h" +} + +#include <vector> +#include <cstdlib> + +class PiPoDelta : public PiPo +{ + RingBuffer<PiPoValue> buffer; + std::vector<PiPoValue> weights; + std::vector<PiPoValue> frame; + unsigned int filter_size; + unsigned int input_size; + unsigned int missing_inputs; + PiPoValue normalization_factor; + +public: + PiPoScalarAttr<int> filter_size_param; + PiPoScalarAttr<bool> normalize; + + PiPoDelta (Parent *parent, PiPo *receiver = NULL) + : PiPo(parent, receiver), + buffer(), weights(), frame(), + filter_size(0), input_size(0), missing_inputs(0), normalization_factor(1), + filter_size_param(this, "size", "Filter Size", true, 7), + normalize(this, "normalize", "Normalize output", true, true) + { } + + ~PiPoDelta () + { } + + int streamAttributes (bool hasTimeTags, double rate, double offset, + unsigned int width, unsigned int size, + const char **labels, bool hasVarSize, double domain, + unsigned int maxFrames) + { + unsigned int filtsize = filter_size_param.get(); + unsigned int insize = width * size; + + if (filtsize != filter_size || insize != input_size) + { + if (filtsize < 3) + { + //todo: report pipo_error("filter size must be >= 3"); + filtsize = 3; + } + else if ((filtsize & 1) == 0) // even filtersize, must be odd + { + //todo: pipo_error("filter size must be odd: using %d instead of %d", filtsize - 1, filtsize); + filtsize--; + } + + unsigned int filter_delay = filtsize / 2; // center, filter_size is odd + + // ring size is the maximum between filter size and added delays + // (plus the past input to be reoutput) + int ring_size = filtsize > filter_delay + 1 + ? filtsize : filter_delay + 1; + + buffer.resize(insize, ring_size); + frame.resize(insize); + + // weights_vector zero-padded to fit the ring size (before the + // values) and then duplicated to be applied strait to the inputs + // ring buffer, so actual memory size is ring_size * 2 + weights.resize(ring_size * 2); + std::fill(&weights[0], &weights[ring_size - filtsize], 0.); + rta_delta_weights(&weights[ring_size - filtsize], filtsize); + + // duplicate (unroll) weights for contiguous indexing + //C++11: std::copy_n(weights.begin(), filtsize, weights.begin() + filtsize); + for (int i = 0; i < ring_size; i++) + weights[i + ring_size] = weights[i]; + + normalization_factor = rta_delta_normalization_factor(filtsize); + filter_size = filtsize; + input_size = insize; + } + + offset -= 1000.0 * 0.5 * (filtsize - 1) / rate; + + char **dlab = new char*[width]; + const char **newlab = NULL; + + if (labels) + { // prefix labels with "Delta" +# define prefix "Delta" + + for (unsigned int i = 0; i < width; i++) + { + dlab[i] = (char *) malloc(strlen(prefix) + (labels[i] ? strlen(labels[i]) : 0) + 1); + sprintf(dlab[i], prefix "%s", labels[i]); + } + + newlab = (const char **) dlab; + } + + int ret = propagateStreamAttributes(hasTimeTags, rate, offset, insize, + 1, newlab, 0, 0.0, 1); + + if (labels) + for (unsigned int i = 0; i < width; i++) + free(dlab[i]); + delete[] dlab; + return ret; + } + + int reset () + { + buffer.reset(); + return propagateReset(); + }; + + int frames (double time, double weight, float *values, unsigned int size, unsigned int num) + { + int ret = 0; + + for (unsigned int i = 0; i < num; i++) + { + buffer.input(values, size); + + if (buffer.filled) + { + float *wptr = &weights[buffer.size - buffer.index]; + + rta_delta_vector(&frame[0], &buffer.vector[0], buffer.width, wptr, buffer.size); + + if (normalize.get()) + { + for (unsigned int i = 0; i < size; i++) + frame[i] *= normalization_factor; + } + + ret = this->propagateFrames(time, weight, &frame[0], + static_cast<unsigned int>(frame.size()), 1); + } + + if (ret != 0) + return ret; + + values += size; + } + + return 0; + } +}; + + +/** EMACS ** + * Local variables: + * mode: c + * c-basic-offset:2 + * End: + */ + +#endif /* _PIPO_DELTA_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoFft.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoFft.h new file mode 100644 index 0000000..1d71dad --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoFft.h @@ -0,0 +1,496 @@ +/** + * @file PiPoFft.h + * @author Norbert.Schnell@ircam.fr + * + * @brief RTA FFT PiPo + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012-2014 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_FFT_ +#define _PIPO_FFT_ + +#include "PiPo.h" + +extern "C" { +#include "rta_configuration.h" +#include "rta_fft.h" +#include "rta_int.h" +#include <float.h> +#include <math.h> +} + +#define MIN_FFT_SIZE 16 +#define MAX_FFT_SIZE 65536 +#define DB_TO_LIN(x) (exp(0.115129254649702 * x)) + +static const double itur468Coeffs[21][2] = { + {31.5, -29.9}, + {63.0, -23.9}, + {100.0, -19.8}, + {200.0, -13.8}, + {400.0, -7.8}, + {800.0, -1.9}, + {1000.0, 0.0}, + {2000.0, 5.6}, + {3150.0, 9.0}, + {4000.0, 10.5}, + {5000.0, 11.7}, + {6300.0, 12.2}, + {7100.0, 12.0}, + {8000.0, 11.4}, + {9000.0, 10.1}, + {10000.0, 8.1}, + {12500.0, 0.0}, + {14000.0, -5.3}, + {16000.0, -11.7}, + {20000.0, -22.2}, + {31500.0, -42.7} +}; + +#include <vector> + +static int +getClosestItur468Index(double freq) +{ + for(int i = 0; i < 21; i++) + { + if(freq < itur468Coeffs[i][0]) + return i - 1; + } + + return 19; +} + +static double +getItur468Factor(double freq) +{ + int index = getClosestItur468Index(freq); + double levl = 0.0; + + if(index < 0) + { + double freq0 = itur468Coeffs[0][0]; + double levl0 = itur468Coeffs[0][1]; + + levl = levl0 + log2(freq / freq0) * 6.0; + } + else + { + double freq0 = itur468Coeffs[index][0]; + double freq1 = itur468Coeffs[index + 1][0]; + double levl0 = itur468Coeffs[index][1]; + double levl1 = itur468Coeffs[index + 1][1]; + + levl = levl0 + (freq - freq0) * (levl1 - levl0) / (freq1 - freq0); + } + + return DB_TO_LIN(levl); +} + +class PiPoFft : public PiPo +{ +public: + enum OutputMode { ComplexFft, MagnitudeFft, PowerFft, LogPowerFft }; + enum WeightingMode { NoWeighting, AWeighting, BWeighting, CWeighting, DWeighting, Itur468Weighting}; + + std::vector<float> fftFrame; + std::vector<float> fftWeights; + double sampleRate; + int fftSize; + enum OutputMode outputMode; + enum WeightingMode weightingMode; + rta_fft_setup_t *fftSetup; + float fftScale; + +public: + PiPoScalarAttr<int> size; + PiPoScalarAttr<PiPo::Enumerate> mode; + PiPoScalarAttr<bool> norm; + PiPoScalarAttr<PiPo::Enumerate> weighting; + + PiPoFft(Parent *parent, PiPo *receiver = NULL) : + PiPo(parent, receiver), + fftFrame(), + fftWeights(), + size(this, "size", "FFT Size", true, 0), + mode(this, "mode", "FFT Mode", true, PowerFft), + norm(this, "norm", "Normalize FFT", true, true), + weighting(this, "weighting", "FFT Weighting", true, NoWeighting) + { + this->sampleRate = 1.0; + this->fftSize = 0; + this->outputMode = PowerFft; + this->weightingMode = NoWeighting; + this->fftSetup = NULL; + this->fftScale = 1.0; + + this->mode.addEnumItem("complex", "Complex output"); + this->mode.addEnumItem("magnitude", "Magnitude spectrum"); + this->mode.addEnumItem("power", "Power spectrum"); + this->mode.addEnumItem("logpower", "Logarithmic power spectrum"); + + this->weighting.addEnumItem("none", "No weighting"); + this->weighting.addEnumItem("a", "dB-A weighting"); + this->weighting.addEnumItem("b", "dB-B weighting"); + this->weighting.addEnumItem("c", "dB-C weighting"); + this->weighting.addEnumItem("d", "dB-C weighting"); + this->weighting.addEnumItem("itur468", "ITU-R 468 weighting"); + } + + ~PiPoFft(void) + { + if(this->fftSetup != NULL) + rta_fft_setup_delete(this->fftSetup); + } + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + int fftSize = this->size.get(); + enum OutputMode outputMode = (enum OutputMode)this->mode.get(); + bool norm = this->norm.get(); + enum WeightingMode weightingMode = (enum WeightingMode)this->weighting.get(); + int inputSize = width * size; + double sampleRate = (double)size / domain; + int outputSize, outputWidth; + const char *fftColNames[2]; + + if(fftSize <= 0) + fftSize = rta_inextpow2(inputSize); + else if(fftSize > MAX_FFT_SIZE) + fftSize = MAX_FFT_SIZE; + + if(norm) + this->fftScale = 1.0 / fftSize; + else + this->fftScale = 1.0; + + outputSize = fftSize / 2; + + if(outputMode > LogPowerFft) + outputMode = LogPowerFft; + + if(weightingMode > Itur468Weighting) + weightingMode = Itur468Weighting; + + this->sampleRate = sampleRate; + + switch(outputMode) + { + case ComplexFft: + { + fftColNames[0] = "Real"; + fftColNames[1] = "Imag"; + outputWidth = 2; + break; + } + + case MagnitudeFft: + { + fftColNames[0] = "Magnitude"; + outputWidth = 1; + break; + } + + case PowerFft: + { + fftColNames[0] = "Power"; + outputWidth = 1; + break; + } + + case LogPowerFft: + { + fftColNames[0] = "LogPower"; + outputWidth = 1; + break; + } + } + + if(fftSize != this->fftSize || weightingMode != this->weightingMode) + { + float *nyquistMagPtr; + + /* alloc output frame */ + this->fftFrame.resize(fftSize + 2); + this->fftWeights.resize(outputSize + 1); + this->fftSize = fftSize; + + nyquistMagPtr = &this->fftFrame[fftSize]; + this->fftFrame[fftSize + 1] = 0.0; /* zero nyquist phase */ + + double indexToFreq = sampleRate / fftSize; + + switch(weightingMode) + { + case NoWeighting: + { + for(int i = 0; i <= outputSize; i++) + this->fftWeights[i] = 1.0f; + + break; + } + + case AWeighting: + { + static const double weightScale = 1.258953930848941; + + this->fftWeights[0] = 0.0; + + for(int i = 1; i <= outputSize; i++) + { + double freq = indexToFreq * i; + double fsq = freq * freq; + double w = fsq * fsq * 12200.0 * 12200.0 / ((fsq + 20.6 * 20.6) * (fsq + 12200.0 * 12200.0) * sqrt((fsq + 107.7 * 107.7) * (fsq + 737.9 * 737.9))); + this->fftWeights[i] = (float)(w * weightScale); + } + + break; + } + + case BWeighting: + { + static const double weightScale = 1.019724962918924; + + this->fftWeights[0] = 0.0; + + for(int i = 1; i <= outputSize; i++) + { + double freq = indexToFreq * i; + double fsq = freq * freq; + double w = freq * fsq * 12200.0 * 12200 / ((fsq + 20.6 * 20.6) * sqrt(fsq + 158.5 * 158.5) * (fsq + 12200 * 12200)); + this->fftWeights[i] = (float)(w * weightScale); + } + + break; + } + + case CWeighting: + { + static const double weightScale = 1.007146464025963; + + this->fftWeights[0] = 0.0; + + for(int i = 1; i <= outputSize; i++) + { + double freq = indexToFreq * i; + double fsq = freq * freq; + double w = fsq * 12200.0 * 12200.0 / ((fsq + 20.6 * 20.6) * (fsq + 12200.0 * 12200.0)); + this->fftWeights[i] = (float)(w * weightScale); + } + + break; + } + + case DWeighting: + { + static const double weightScale = 0.999730463675085; + + this->fftWeights[0] = 0.0; + + for(int i = 1; i <= outputSize; i++) + { + double freq = indexToFreq * i; + double fsq = freq * freq; + double n1 = 1037918.48 - fsq; + double n2 = 1080768.16 * fsq; + double d1 = 9837328.0 - fsq; + double d2 = 11723776.0 * fsq; + double h = (n1 * n1 + n2) / (d1 * d1 + d2); + double w = 14499.711699348260202 * freq * sqrt(h / ((fsq + 79919.29) * (fsq + 1345600.0))); + this->fftWeights[i] = (float)(w * weightScale); + } + + break; + } + + case Itur468Weighting: + { + this->fftWeights[0] = 0.0; + + for(int i = 1; i <= outputSize; i++) + { + double freq = indexToFreq * i; + this->fftWeights[i] = (float)getItur468Factor(freq); + } + + break; + } + } + + /* setup FFT */ + if(this->fftSetup != NULL) + rta_fft_setup_delete(this->fftSetup); + + rta_fft_real_setup_new(&this->fftSetup, rta_fft_real_to_complex_1d, (float *)&this->fftScale, NULL, inputSize, &this->fftFrame[0], fftSize, nyquistMagPtr); + } + + this->outputMode = outputMode; + this->weightingMode = weightingMode; + + return this->propagateStreamAttributes(0, rate, offset, outputWidth, outputSize + 1, fftColNames, 0, 0.5 * sampleRate, 1); + } + + int frames(double time, double weight, float *values, unsigned int size, unsigned int num) + { + if(this->fftSetup != NULL) + { + float *fftFrame = &this->fftFrame[0]; + unsigned int outputMode = this->outputMode; + int fftSize = this->fftSize; + int outputSize = fftSize / 2; + float *outputFrame; + int outputWidth; + + if(outputMode > LogPowerFft) + outputMode = LogPowerFft; + + for(unsigned int i = 0; i < num; i++) + { + rta_fft_execute(fftFrame, values, size, this->fftSetup); + + switch(outputMode) + { + case ComplexFft: + { + outputWidth = 2; + outputFrame = fftFrame; + + /* apply weighting */ + if(this->weightingMode != NoWeighting) + { + for(int i = 0; i <= outputSize; i++) + { + outputFrame[2 * i] *= this->fftWeights[i]; + outputFrame[2 * i + 1] *= this->fftWeights[i]; + } + } + + break; + } + + case MagnitudeFft: + { + float re, im; + + outputWidth = 1; + outputFrame = &this->fftFrame[outputSize]; + + re = fftFrame[outputSize * 2]; + im = fftFrame[outputSize * 2 + 1]; + outputFrame[outputSize] = sqrtf(re * re + im * im) * this->fftWeights[outputSize]; + + for(int i = outputSize - 1; i > 0; i--) + { + re = fftFrame[i * 2]; + im = fftFrame[i * 2 + 1]; + outputFrame[i] = 2 * sqrtf(re * re + im * im) * this->fftWeights[i]; + } + + re = fftFrame[0]; + im = fftFrame[1]; + outputFrame[i] = sqrtf(re * re + im * im) * this->fftWeights[outputSize]; + + break; + } + + case PowerFft: + { + float re, im; + + outputWidth = 1; + outputFrame = &this->fftFrame[outputSize]; + + re = fftFrame[outputSize * 2] * this->fftWeights[outputSize]; + im = fftFrame[outputSize * 2 + 1] * this->fftWeights[outputSize]; + outputFrame[outputSize] = re * re + im * im; + + for(int i = outputSize - 1; i > 0; i--) + { + re = fftFrame[i * 2] * this->fftWeights[i]; + im = fftFrame[i * 2 + 1] * this->fftWeights[i]; + outputFrame[i] = 4 * (re * re + im * im); + } + + re = fftFrame[0] * this->fftWeights[0]; + im = fftFrame[1] * this->fftWeights[0]; + outputFrame[0] = re * re + im * im; + + break; + } + + case LogPowerFft: + { + const double minLogValue = 1e-48; + const double minLog = -480.0; + float re, im, pow; + + outputWidth = 1; + outputFrame = &this->fftFrame[outputSize]; + + re = fftFrame[outputSize * 2] * this->fftWeights[outputSize]; + im = fftFrame[outputSize * 2 + 1] * this->fftWeights[outputSize]; + pow = re * re + im * im; + + outputFrame[outputSize] = ((pow > minLogValue)? (10.0f * log10f(pow)): minLog); + + for(int i = outputSize - 1; i > 0; i--) + { + re = fftFrame[i * 2] * this->fftWeights[i]; + im = fftFrame[i * 2 + 1] * this->fftWeights[i]; + pow = re * re + im * im; + outputFrame[i] = ((pow > minLogValue)? (10.0f * log10f(pow)): minLog); + } + + re = fftFrame[0] * this->fftWeights[0]; + im = fftFrame[1] * this->fftWeights[0]; + pow = re * re + im * im; + outputFrame[0] = ((pow > minLogValue)? (10.0f * log10f(pow)): minLog); + + break; + } + } + + int ret = this->propagateFrames(time, weight, outputFrame, outputWidth * (outputSize + 1), 1); + + if(ret != 0) + return ret; + + values += size; + } + } + return 0; + } +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoFiniteDif.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoFiniteDif.h new file mode 100644 index 0000000..e0ac7aa --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoFiniteDif.h @@ -0,0 +1,474 @@ +/** + * @file PiPoFiniteDif.h + * @author Gaël Dubus + * + * @brief PiPo calculating various derivative values on a stream using the finite difference method + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2015 by ISMM IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_FINITE_DIF_ +#define _PIPO_FINITE_DIF_ + +#include "PiPo.h" +#include "RingBuffer.h" +#include <sstream> + +extern "C" { + //#include "rta_configuration.h" +#include "finitedifferences.h" +} + +#include <vector> + +class PiPoFiniteDif : public PiPo { + private: + RingBuffer<PiPoValue> buffer; + std::vector<PiPoValue> weights; + std::vector<PiPoValue> frame; + int filter_size; + int input_size; + //unsigned int missing_inputs; + //PiPoValue normalization_factor; + int accuracy_order; + int derivative_order; + FDMethod method; + public: + PiPoScalarAttr<int> filter_size_param; + PiPoScalarAttr<bool> temporalize; + PiPoScalarAttr<int> derivative_order_param; + PiPoScalarAttr<int> accuracy_order_param; + PiPoScalarAttr<float> delta_t; + PiPoScalarAttr<PiPo::Enumerate> fdmethod; + + PiPoFiniteDif (Parent *parent, PiPo *receiver = NULL) + : PiPo(parent, receiver), + buffer(), + weights(), + frame(), + filter_size(0), + input_size(0), + //missing_inputs(0), + //normalization_factor(1), + accuracy_order(1), + derivative_order(1), + method(Backward), + filter_size_param(this, "size", "Filter Size", true, 3), + //normalize(this, "normalize", "Normalize output", true, false), + derivative_order_param(this, "order", "Derivative order", true, 1), + accuracy_order_param(this, "accuracy", "Accuracy order", true, 2), + delta_t(this, "dt", "Sampling period", true, 0.01), + fdmethod(this, "method", "Finite difference method", true, Backward), + temporalize(this, "temporalize", "Take into account the sample rate in the computation", false, false) + { + this->fdmethod.addEnumItem("backward", "Backward FD"); + this->fdmethod.addEnumItem("centered", "Centered FD"); + this->fdmethod.addEnumItem("forward", "Forward FD"); + } + + ~PiPoFiniteDif () + { } + + int streamAttributes (bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames){ + int filtsize = filter_size_param.get(); + int deriv_order = derivative_order_param.get(); + int accur_order = accuracy_order_param.get(); + int insize = width * size; + FDMethod meth = (FDMethod)fdmethod.get(); + std::ostringstream error_message; + int temp; + int filter_delay = 0; + + bool debug = false; + + if (debug) + { + error_message << "In: filter_size = " << filter_size << ", input_size = " << input_size << ", accuracy_order = " << accuracy_order << ", derivative_order = " << derivative_order << ", method = " << method; + signalWarning(error_message.str()); + error_message.str(""); + error_message << "Inner parameters: filtsize = " << filtsize << ", insize = " << insize << ", accur_order = " << accur_order << ", deriv_order = " << deriv_order << ", meth = " << meth; + signalWarning(error_message.str()); + error_message.str(""); + } + //Important parameter change -> reinitialization + if (meth != method || deriv_order != derivative_order || + accur_order != accuracy_order || filtsize != filter_size || + insize != input_size) + { + + //First, check and update method, deriv_order, accur_order, filtsize + //Verifications to perform in all cases + if (deriv_order != derivative_order && deriv_order < 1) + { + signalWarning("derivation order must be >= 1, set to 1"); + deriv_order = 1; + } + + //Verifications depending on the method + switch (meth) + { + case Centered: + //Derivative order has changed + if (deriv_order != derivative_order) + { + if (deriv_order > 6) + { + signalWarning("derivation order must be <= 6 for a centered method, set to 6"); + deriv_order = 6; + } + } + + //Modification by filter size (or by both filter size and accuracy order) (or derivative order has changed) (or method) + if (deriv_order != derivative_order || meth != method || filtsize != filter_size) + { + //New filter size should be odd + if ((filtsize & 1) == 0) + { + error_message << "filter size must be odd: using " << filtsize-1 << " instead of " << filtsize; + signalWarning(error_message.str()); + error_message.str(""); + filtsize--; + } + + //Check that the filter size lies within acceptable bounds + temp = 3 + 2 * ((deriv_order - 1) / 2); + + if (filtsize < temp) + { + error_message << "filter size must be >= " << temp << " for a centered method with derivation order " << deriv_order << ", set to " << temp; + signalWarning(error_message.str()); + error_message.str(""); + filtsize = temp; + } + else + { + temp = 9 - 2 * ((deriv_order - 1) / 4); + + if (filtsize > temp) + { + error_message << "filter size must be <=" << temp << " for a centered method with derivation order " << deriv_order << ", set to " << temp; + signalWarning(error_message.str()); + error_message.str(""); + filtsize = temp; + } + } + + //Update accuracy order + temp = filtersize_to_accuracy(meth, deriv_order, filtsize); + + //If both filter size and accuracy order were provided, check that they are compatible + //if (accur_order != accuracy_order && temp != accur_order){ + if (temp != accur_order) + { + error_message << "accuracy order updated to " << temp; + signalWarning(error_message.str()); + error_message.str(""); + } + + accur_order = temp; + } + //Modification by accuracy order (only) + else + { + //New accuracy order should be even + if ((accur_order & 1) == 1) + { + error_message << "accuracy order must be even for a centered method: using " << accur_order-1 << " instead of " << accur_order; + signalWarning(error_message.str()); + error_message.str(""); + accur_order--; + } + + if (accur_order != accuracy_order) + { + //Check that accuracy order lies within acceptable bounds + if (accur_order < 2) + { + signalWarning("accuracy order must be >= 2, set to 2"); + accur_order = 2; + } + else + { + temp = 8 - ((deriv_order - 1) / 2) * ((deriv_order + 1) / 2); + + if (accur_order > temp) + { + error_message << "accuracy order must be <=" << temp << " for a centered method with derivation order " << deriv_order << ", set to " << temp; + signalWarning(error_message.str()); + error_message.str(""); + accur_order = temp; + } + } + } + + //Update filter size + filtsize = accuracy_to_filtersize(meth, deriv_order, accur_order); + + if (filter_size != filtsize) + { + error_message << "filter size updated to " << filtsize; + signalWarning(error_message.str()); + error_message.str(""); + } + } + break; + + case Forward: + case Backward: + if (deriv_order > 4) + { + signalWarning("derivation order must be <= 4 for a backward or forward method, set to 4"); + deriv_order = 4; + } + + //Modification by filter size (or by both filter size and accuracy order) (or derivative order has changed) + if (deriv_order != derivative_order || meth != method || filtsize != filter_size) + { + //Check that the filter size lies within acceptable bounds + temp = deriv_order + 1; + + if (filtsize < temp) + { + error_message << "filter size must be >= " << temp << " for a backward or forward method with derivation order " << deriv_order << ", set to " << temp; + signalWarning(error_message.str()); + error_message.str(""); + filtsize = temp; + } + else + { + temp = 6 + deriv_order - deriv_order / 4; + + if (filtsize > temp) + { + error_message << "filter size must be <=" << temp << " for a backward or forward method with derivation order " << deriv_order << ", set to " << temp; + signalWarning(error_message.str()); + error_message.str(""); + filtsize = temp; + } + } + + //Update accuracy order + temp = filtersize_to_accuracy(meth, deriv_order, filtsize); + + //If both filter size and accuracy order were provided, check that they are compatible + //if (accur_order != accuracy_order && temp != accur_order){ + if (temp != accur_order) + { + error_message << "accuracy order updated to " << temp; + signalWarning(error_message.str()); + error_message.str(""); + } + + accur_order = temp; + } + //Modification by accuracy order (only) + else + { + if (accur_order != accuracy_order) + { + //Check that accuracy order lies within acceptable bounds + if (accur_order < 1) + { + signalWarning("accuracy order must be >= 1, set to 1"); + accur_order = 1; + } + else + { + temp = 6 - deriv_order / 4; + if (accur_order > temp) + { + error_message << "accuracy order must be <=" << temp << " for a backward or forward method with derivation order " << deriv_order << ", set to " << temp; + signalWarning(error_message.str()); + error_message.str(""); + accur_order = temp; + } + } + + //Update filter size + filtsize = accuracy_to_filtersize(meth, deriv_order, accur_order); + + if (filter_size != filtsize) + { + error_message << "filter size updated to " << filtsize; + signalWarning(error_message.str()); + error_message.str(""); + } + } + } + break; + + default: + signalWarning("unknown method, set to Backward"); + meth = Backward; + break; + } + + // compute filter delay + switch (meth) + { + case Centered: + filter_delay = filtsize/2; + break; + + case Backward: + filter_delay = 0; + break; + + case Forward: + filter_delay = filtsize-1; + break; + + default: + signalError("unknown method"); + break; + } + + // ring size is the maximum between filter size and added delays + // (plus the past input to be reoutput) + int ring_size = filtsize > filter_delay + 1 + ? filtsize + : filter_delay + 1; + + buffer.resize(insize, ring_size); + frame.resize(insize); + + // weights_vector zero-padded to fit the ring size (before the + // values) and then duplicated to be applied strait to the inputs + // ring buffer, so actual memory size is ring_size * 2 + weights.resize(ring_size * 2); + std::fill(&weights[0], &weights[ring_size - filtsize], 0.); + finitedifferences_weights_by_filtersize(&weights[ring_size - filtsize], deriv_order, filtsize, meth); + + // duplicate (unroll) weights for contiguous indexing + //C++11: std::copy_n(weights.begin(), filtsize, weights.begin() + filtsize); + for (int i = 0; i < ring_size; i++) + weights[i + ring_size] = weights[i]; + + //normalization_factor = 1.;//finitedifferences_normalization_factor(filtsize, meth, accur_order) + //update private variables + filter_size = filtsize; + input_size = insize; + accuracy_order = accur_order; + derivative_order = deriv_order; + method = meth; + //update pipo parameters silently + filter_size_param.set(filtsize, true); + accuracy_order_param.set(accur_order, true); + derivative_order_param.set(deriv_order, true); + fdmethod.set(meth, true); + + if (debug) + { + error_message << "Out: filter size = " << filter_size << ", input size = " << input_size << ", accuracy order = " << accuracy_order << ", derivative order = " << derivative_order << ", method = " << method; + signalError(error_message.str()); + error_message.str(""); + } + } + + //offset -= 1000.0 * 0.5 * (filtsize - 1) / rate; + offset -= 1000.0 * filter_delay / rate; + + char **dlab = new char*[width]; + const char **newlab = NULL; + + if (labels) + { // prefix labels with "Delta" +#define prefix "Delta" + + for (unsigned int i = 0; i < width; i++) + { + dlab[i] = (char *) malloc(strlen(prefix) + (labels[i] ? strlen(labels[i]) : 0) + 1); + sprintf(dlab[i], prefix "%s", labels[i]); + } + + newlab = (const char **) dlab; + } + + int ret = propagateStreamAttributes(hasTimeTags, rate, offset, insize, + 1, newlab, 0, 0.0, 1); + + if (labels) + for (unsigned int i = 0; i < width; i++) + + free(dlab[i]); + delete[] dlab; + return ret; + } + + int reset () + { + buffer.reset(); + return propagateReset(); + }; + + int frames (double time, double weight, float *values, unsigned int size, unsigned int num){ + int ret = 0; + + for (unsigned int i = 0; i < num; i++) + { + buffer.input(values, size); + + if (buffer.filled) + { + float *wptr = &weights[buffer.size - buffer.index]; + finitedifferences_vector(&frame[0], &buffer.vector[0], buffer.width, wptr, buffer.size); + + // if (normalize.get()) + // { + // for (int i = 0; i < size; i++) + // frame[i] *= normalization_factor; + // } + + ret = this->propagateFrames(time, weight, &frame[0], + static_cast<unsigned int>(frame.size()), 1); + } + + if (ret != 0) + return ret; + + values += size; + } + + return 0; + } +}; + + +/** EMACS ** + * Local variables: + * mode: c + * c-basic-offset:2 + * End: + */ + +#endif /* _PIPO_FINITE_DIFFERENCE_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoGate.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoGate.h new file mode 100644 index 0000000..dcc5f7f --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoGate.h @@ -0,0 +1,294 @@ +/** + * @file PiPoGate.h + * @author Diemo.Schwarz@ircam.fr + * + * @brief PiPo calculating silence segmentation by on/off threshold gating + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012-2014 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_GATE_ +#define _PIPO_GATE_ + +#include "PiPo.h" + +extern "C" { +#include "rta_configuration.h" +#include "rta_selection.h" +} + +#include "TempMod.h" +#include <vector> +#include <string> + +class PiPoGate : public PiPo +{ + +public: + PiPoScalarAttr<int> colindex; + PiPoScalarAttr<int> numcols; + PiPoScalarAttr<double> threshold; + PiPoScalarAttr<double> offthresh; + PiPoScalarAttr<double> mininter; + PiPoScalarAttr<bool> duration; + PiPoScalarAttr<double> durthresh; + PiPoScalarAttr<double> maxsegsize; + PiPoScalarAttr<bool> enable_min; + PiPoScalarAttr<bool> enable_max; + PiPoScalarAttr<bool> enable_mean; + PiPoScalarAttr<bool> enable_stddev; + +private: + double offset; + double frameperiod; + double onsettime; + bool reportduration; + bool segison; + TempModArray tempmod; + std::vector<PiPoValue> outputvalues; + +public: + PiPoGate (Parent *parent, PiPo *receiver = NULL) + : PiPo(parent, receiver), + tempmod(), outputvalues(), + colindex(this, "colindex", "Index of First Column Used for Onset Calculation", true, 0), + numcols(this, "numcols", "Number of Columns Used for Onset Calculation", true, -1), + duration(this, "duration", "Output Segment Duration", true, false), + threshold(this, "threshold", "Onset Threshold", false, -12), + offthresh(this, "offthresh", "Segment End Threshold", false, -80), + mininter(this, "mininter", "Minimum Onset Interval", false, 50.0), + durthresh(this, "durthresh", "Minumum Segment Duration", false, 0.0), + maxsegsize(this, "maxdur", "Maximum Segment Duration", false, 0.0), + enable_min(this, "min", "Calculate Segment Min", true, false), + enable_max(this, "max", "Calculate Segment Max", true, false), + enable_mean(this, "mean", "Calculate Segment Mean", true, false), + enable_stddev(this, "stddev", "Calculate Segment StdDev", true, false) + { + this->offset = 0.0; + this->frameperiod = 1.; + this->onsettime = 0; + + this->reportduration = false; + this->segison = false; + } + + ~PiPoGate (void) + { } + + int streamAttributes (bool hastimetags, double rate, double offset, + unsigned int width, unsigned int size, const char **labels, + bool hasvarsize, double domain, unsigned int maxframes) + { + int inputsize = width; + + this->frameperiod = 1000.0 / rate; + this->offset = -this->frameperiod; // offset of negative frame period to include signal just before peak + this->onsettime = 0; + this->reportduration = this->duration.get(); + + if (this->reportduration) + { + /* resize temporal models */ + this->tempmod.resize(inputsize); + + /* enable temporal models */ + this->tempmod.enable(this->enable_min.get(), this->enable_max.get(), this->enable_mean.get(), this->enable_stddev.get()); + + /* get output size */ + unsigned int outputsize = this->tempmod.getNumValues(); + + /* alloc output vector for duration and temporal modelling output */ + this->outputvalues.resize(outputsize + 1); + + /* get labels */ + char *mem = new char[outputsize * 64 + 64]; + char **outlabels = new char*[outputsize + 1]; + + for (unsigned int i = 0; i <= outputsize; i++) + outlabels[i] = mem + i * 64; + + snprintf(outlabels[0], 64, "Duration"); + this->tempmod.getLabels(labels, inputsize, &outlabels[1], 64, outputsize); + + int ret = this->propagateStreamAttributes(true, rate, 0.0, outputsize + 1, 1, + (const char **) &outlabels[0], + false, 0.0, 1); + + delete [] mem; + delete [] outlabels; + + return ret; + } + + return this->propagateStreamAttributes(true, rate, 0.0, 0, 0, NULL, false, 0.0, 1); + } + + int reset (void) + { + this->onsettime = 0; + this->segison = false; + + this->tempmod.reset(); + + return this->propagateReset(); + }; + + int frames (double time, double weight, PiPoValue *values, unsigned int size, unsigned int num) + { + double onsetThreshold = this->threshold.get(); + double minimumInterval = this->mininter.get(); + double durationThreshold = this->durthresh.get(); + double offThreshold = this->offthresh.get(); + double maxsize = maxsegsize.get(); + int colindex = this->colindex.get(); + int numcols = this->numcols.get(); + int ret = 0; + bool frameisonset; + //printf("frames at %f size %d num %d\n", time, size, num); + + // clip colindex/size + //TODO: this shouldn't change at runtime, so do this in streamAttributes only + while (colindex < 0 && size > 0) + colindex += size; + + if (numcols <= 0) + numcols = size; + + if (colindex + numcols > (int) size) + numcols = size - colindex; + + for (unsigned int i = 0; i < num; i++) + { // for all frames + /* input frame */ + double energy = 0.0; + unsigned int k = colindex; + for (int j = 0; j < numcols; j++, k++) + { + energy += values[k]; + } + energy /= numcols; + + /* determine if there is an onset */ + if (this->segison) + // within segment, check for max size if given + frameisonset = maxsize > 0 && time >= this->onsettime + maxsize; + else + // within silence, check for onset (but avoid re-trigger) + frameisonset = energy > onsetThreshold && time >= this->onsettime + minimumInterval; + + if (!this->reportduration) + { /* output marker only */ + if (frameisonset) + { /* report immediate onset */ + ret = this->propagateFrames(this->offset + time, weight, NULL, 0, 1); + this->onsettime = time; + } + } + else + { // check for onset and offset (segment begin and end) + double duration = time - this->onsettime; + + // check for segment end + if (this->segison && ((energy < offThreshold && duration >= durationThreshold) + || (maxsize > 0 && time >= this->onsettime + maxsize))) + { // energy below off threshold or max segment size exceeded + int outputsize = static_cast<int>(this->outputvalues.size()); + + this->outputvalues[0] = duration; + + /* get temporal modelling */ + if (outputsize > 1) + this->tempmod.getValues(&this->outputvalues[1], outputsize - 1, true); + + /* report segment */ + ret = this->propagateFrames(this->offset + this->onsettime, weight, &this->outputvalues[0], outputsize, 1); + } + + /* segment on/off (segment has at least one frame) */ + if (frameisonset) + { + this->segison = true; + this->onsettime = time; + } + else if (energy < offThreshold) + this->segison = false; + + /* feed temporal modelling */ + if (this->segison) + this->tempmod.input(values, size); + } + + if (ret != 0) + return ret; + + values += size; + time += this->frameperiod; // increase time for next input frame (if num > 1) + } // end for all frames + + return 0; + } + + int finalize (double inputend) + { + double durationThreshold = this->durthresh.get(); + double duration = inputend - this->onsettime; + //printf("finalize at %f seg %d duration %f\n", inputEnd, segIsOn, duration); + + if (this->segison && duration >= durationThreshold) + { + /* end of segment (new onset or below off threshold) */ + int outputsize = static_cast<int>(this->outputvalues.size()); + + this->outputvalues[0] = duration; + + /* get temporal modelling */ + if (outputsize > 1) + this->tempmod.getValues(&this->outputvalues[1], outputsize - 1, true); + + /* report segment */ + return this->propagateFrames(this->offset + this->onsettime, 0.0, &this->outputvalues[0], outputsize, 1); + } + + return this->propagateFinalize(inputend); + } +}; + +/** EMACS ** + * Local variables: + * mode: c++ + * c-basic-offset:2 + * End: + */ + +#endif + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoLpc.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoLpc.h new file mode 100644 index 0000000..7a27e08 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoLpc.h @@ -0,0 +1,159 @@ +/** + * @file PiPoLpc.h + * @author Joseph Larralde + * @date 02.12.2015 + * + * @brief RTA LPC PiPo + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2015 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_LPC_H_ +#define _PIPO_LPC_H_ + +#include "PiPo.h" + +extern "C" { +#include "rta_lpc.h" +#include <stdlib.h> +} + +/** TMP NOTES : + * input is a signal (1 to N dims, as in biquad) + * outputs are list signals (1 to N lists of size XXX?), each list being the coefs characterizing the corresponding input dim + * parameters are : + * - param1 : lpc_order (nb of coeffs : order 0 -> 1 coef, order 1 -> 2 coefs etc) + * - param2 (are there other params ?) + */ + +class PiPoLpc : public PiPo +{ +//public: +private: + unsigned int frameSize; + //unsigned int nFrames; + float frameRate; + + int ac_size; + float *corr; + float error; + + unsigned int nCoefs; + float *coefs; + float *outValues; + +public: + PiPoScalarAttr<int> nCoefsA; + + //=============== CONSTRUCTOR ===============// + PiPoLpc(Parent *parent, PiPo *receiver = NULL) : + PiPo(parent, receiver), + nCoefsA(this, "ncoefs", "Number Of LPC Coefficients", true, 10) + { + this->frameSize = 0; + //this->nFrames = 0; + this->frameRate = 1.; + + this->nCoefs = 0; + this->coefs = NULL; + this->corr = NULL; + //this->outValues = NULL; + + } + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + unsigned int frameSize = width * size; + //unsigned int nFrames = 1;//size; + unsigned int nCoefs = this->nCoefsA.get(); + + if(rate != this->frameRate) { + this->frameRate = rate; + } + + /* + if(frameSize != this->frameSize) { + this->frameSize = frameSize; + // resize outValues array + this->outValues = (float *)realloc(this->outValues, this->nFrames * this->frameSize * sizeof(float)); + } + */ + + if(frameSize != this->frameSize || nCoefs != this->nCoefs) { + + this->frameSize = frameSize; + this->nCoefs = nCoefs; + + if(this->nCoefs > this->frameSize) { + this->nCoefs = this->frameSize; + } + if(this->nCoefs < 1) { + this->nCoefs = 1; + } + + // resize arrays + this->coefs = (float *)realloc(this->coefs, this->nCoefs * sizeof(float)); + // see rta_lpc : corr and coefs are assumed to be of same size + this->corr = (float *)realloc(this->corr, this->nCoefs * sizeof(float)); + } + + // compute previous framerate from rate, offset and width * size ? -> to be able to output values in Hz ? + // also update dimensions according to nCoefs + return this->propagateStreamAttributes(hasTimeTags, rate, offset, 1, this->nCoefs, NULL, false, 1, 1); + //return this->propagateStreamAttributes(hasTimeTags, rate, offset, width, size, NULL, false, 1, 1); + } + + int frames(double time, double weight, float *values, unsigned int size, unsigned int num) + { + int ret; + for(unsigned int i = 0; i < num; i++) + { + if(this->frameSize > 1) { + rta_lpc(this->coefs, this->nCoefs, &(this->error), this->corr, values, this->frameSize); + ret = this->propagateFrames(time, weight, this->coefs, this->nCoefs, 1); + } else { + this->coefs[0] = 0.; + ret = this->propagateFrames(time, weight, this->coefs, 1, 1); + } + if(ret != 0) + return ret; + + values += size; + } + return 0; + + } + +}; + +#endif /* PiPoLpc_h */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoLpcFormants.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoLpcFormants.h new file mode 100644 index 0000000..8c6d001 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoLpcFormants.h @@ -0,0 +1,212 @@ +/** + * @file PiPoLpcFormants.h + * @author Gabriel Meseguer-Brocal + * @date 18.05.2016 + * + * @brief PiPo computing formants from LPC + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2016 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef PiPoLpcFormants_h +#define PiPoLpcFormants_h + +#include "PiPoSequence.h" +#include "PiPoLpc.h" +#include "bbpr.h" +//#include <lpcformants/rpoly.cpp> +#include <vector> +#include <algorithm> + +using namespace std; + +#define PI 3.14159265 + +class PiPoLpcFormants: public PiPoSequence +{ +private: + class PiPoFormants : public PiPo { + float *outValues; + bool f = false; + + public: + PiPoScalarAttr<int> nForm; + PiPoScalarAttr<bool> bandwidth; + PiPoScalarAttr<int> threshold; // Hz + PiPoScalarAttr<float> sr; + + + PiPoFormants(PiPo::Parent *parent, PiPo *receiver = NULL) : + PiPo(parent, receiver), + nForm(this, "nForm", "Number Of Formants", true, 1), + bandwidth(this, "bandwidth", "Store the bandwidth", true, true), + threshold(this, "threshold", "Threshold (in Hz) for the Lowest Formants", true, 20), + sr(this, "Samplerate", "Sample rate of the audio", true, 44100){ + + } + + ~PiPoFormants() + { + if (f){ + free(outValues); + } + } + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + int nForm = this->nForm.get(); + int bandwidth = this->bandwidth.get(); + int cols = 1; + if (bandwidth) + cols = 2; + outValues = (float *)malloc(cols * nForm * sizeof(float)); + f = true; + + /*const char *FormColNames[cols]; + FormColNames[0] = "FromantFrequency"; + if (bandwidth) + FormColNames[1] = "FormantBandwidth";*/ + const char *FormColNames[2]; + FormColNames[0] = "FromantFrequency"; + if (bandwidth) FormColNames[1] = "FormantBandwidth"; + return this->propagateStreamAttributes(hasTimeTags, rate, offset, cols, nForm, FormColNames, 0, 0.0, 1); + } + + int frames(double time, double weight, float *values, unsigned int size, unsigned int num) + { + int nForm = this->nForm.get(); + int threshold = this->threshold.get(); + int bandwidth = this->bandwidth.get(); + + float sr = this->sr.get(); + + int cols = 1; + if (bandwidth) + cols = 2; + + int n, numr; + n = size - 1; // polynomio order + + double *a, *x, *wr, *wi, quad[2]; + + a = new double [size]; x = new double [size]; wr = new double [size]; wi = new double [size]; + + for (unsigned int i = 0; i < size; i++) + a[i] = *(values+i); + + + + + quad[0] = 2.71828e-1; + quad[1] = 3.14159e-1; + get_quads(a,n,quad,x); + numr = roots(x,n,wr,wi); // number of roots found + vector<double> frqs; + vector<double> bw; + vector<pair<double, double> > matrix; + for (int i = 0; i < numr; i++) { + if (wi[i] >= 0) { + float tmp = (atan2(wi[i], wr[i]) * sr)/ (2.0*PI); + if (tmp > threshold) { + frqs.push_back( tmp ); + + bw.push_back( (-1./2.)*(sr/(2*PI))* log( sqrt( (wr[i] * wr[i]) + (wi[i] * wi[i]) ) ) ); + + // Something the roots of the poly are not precise enough and give values above the unitary circle. As results the bw is negative (log of the absolute value of a complex vector > 1) + if (bw.back() < 0){ + bw.back() = - bw.back(); + } + matrix.push_back(make_pair(frqs.back(), bw.back())); + } + + } + } + + sort (matrix.begin(), matrix.end()); + + for (int i = 0; i < nForm; i++) { + if (matrix.size() > 0) { + *(outValues + i * cols) = matrix[i].first; + if (cols > 1) { + *(outValues + i * cols + 1) = matrix[i].second; + } + }else{ + *(outValues + i * cols) = 0; + if (cols > 1) { + *(outValues + i * cols + 1) = 0; + } + } + } + + delete[] a; delete[]x; delete[]wr; delete[]wi; + + //(double time, double weight, PiPoValue *values, unsigned int size, unsigned int num) + return this->propagateFrames(time, weight, static_cast<PiPoValue *>(outValues), nForm*cols, 1); + } + }; + + + +public: + PiPoLpc lpc; + PiPoFormants formants; + + + PiPoLpcFormants (PiPo::Parent *parent, PiPo *receiver = NULL) + : PiPoSequence(parent), + lpc(parent), formants(parent) + { + this->add(lpc); + this->add(formants); + + this->setReceiver(receiver); + + this->addAttr(this, "nFormants", "Number of formants", &formants.nForm, true); + this->addAttr(this, "threshold", "Threshold (in Hz) for the Lowest Formants", &formants.threshold); + this->addAttr(this, "Bandwidth", "Output or not the bandwidth", &formants.bandwidth); + + this->addAttr(this, "sr", "samplerate of the input signal", &formants.sr); + + lpc.nCoefsA.set(2*formants.nForm.get() + 3); // nCoefsA is two times the expected number of formants + 2 (+1 because the firts coef = 1) + + } + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + lpc.nCoefsA.set(2*formants.nForm.get() + 3, true); + return PiPoSequence::streamAttributes(hasTimeTags, rate, offset, width, size, labels, hasVarSize, domain, maxFrames); + } +}; + + +#endif /* PiPoLpcFormants_h */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMeanStddev.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMeanStddev.h new file mode 100644 index 0000000..5b6618c --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMeanStddev.h @@ -0,0 +1,126 @@ +/** + * @file PiPoMeanStddev.h + * @author Norbert.Schnell@ircam.fr + * + * @brief Mean Stddev Min Max PiPo + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012 by IMTR IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ +#ifndef _PIPO_MEAN_STDDEV_ +#define _PIPO_MEAN_STDDEV_ + +#include "PiPo.h" + +using namespace std; + +class PiPoMeanStddev : public PiPo +{ +private: + float outputFrame[2]; + double sum; + double sumOfSquare; + int num; + +public: + PiPoMeanStddev(PiPo *receiver = NULL) + { + this->sum = 0.0; + this->sumOfSquare = 0.0; + this->num = 0; + + this->receiver = receiver; + } + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + char *msLabels[2]; + + msLabels[0] = "Mean"; + msLabels[1] = "Stddev"; + + return this->propagateStreamAttributes(hasTimeTags, rate, offset, 2, 1, msLabels, 0, 0.0, 1); + } + + int reset(void) + { + this->sum = 0.0; + this->sumOfSquare = 0.0; + this->num = 0; + + return this->propagateReset(); + }; + + int frames(double time, float *values, unsigned int size, unsigned int num) + { + double norm = 1.0 / size; + + for(int i = 0; i < num; i++) + { + double mean = 0.0; + double meanOfSquare = 0.0; + double squareOfmean; + + for(int j = 0; j < size; j++) + { + double x = values[j]; + + mean += x; + meanOfSquare += x * x; + } + + this->sum += sum; + this->sumOfSquare += meanOfSquare; + this->num++; + + mean *= norm; + meanOfSquare *= norm; + squareOfmean = mean * mean; + + this->outputFrame[0] = mean; + + if(meanOfSquare > squareOfmean) + this->outputFrame[1] = sqrt(meanOfSquare - squareOfmean); + else + this->outputFrame[1] = 0.0; + + int ret = this->propagateFrames(time, this->outputFrame, 2, 1); + + if(ret != 0) + return ret; + } + + return 0; + } +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMedian.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMedian.h new file mode 100644 index 0000000..2047b99 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMedian.h @@ -0,0 +1,215 @@ +/** + * @file PiPoMedian.h + * @author Norbert.Schnell@ircam.fr + * + * @brief PiPo calculating a runnning median on a stream + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012-2014 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_MEDIAN_ +#define _PIPO_MEDIAN_ + +#include "PiPo.h" + +extern "C" { +#include "rta_configuration.h" +#include "rta_selection.h" +} + +#include <vector> + +#define RING_ALLOC_BLOCK 256 + +class PiPoMedian : public PiPo +{ + template <class T> + class Ring + { + public: + std::vector<double> time; + std::vector<T> vector; + unsigned int width; + unsigned int capacity; + unsigned int size; + unsigned int index; + + public: + Ring(void) : vector() + { + this->width = 1; + this->capacity = 0; + this->size = 0; + this->index = 0; + }; + + void resize(int width, int size) + { + this->time.resize(size); + this->vector.resize(width * size); + this->width = width; + this->capacity = size; + this->size = 0; + this->index = 0; + }; + + void reset(void) + { + this->size = 0; + this->index = 0; + }; + + int input(double time, T *values, unsigned int num, double &outputTime) + { + float *ringValues = &this->vector[this->index * this->width]; + + this->time[this->index] = time; + + if(num > this->width) + num = this->width; + + /* copy frame */ + memcpy(ringValues, values, num * sizeof(T)); + + /* zero pad this values */ + if(num < this->width) + memset(ringValues + num, 0, (this->width - num) * sizeof(T)); + + this->index++; + + if(this->index >= this->capacity) + { + this->size = this->capacity; + this->index = 0; + } + else if(this->size < this->index) + this->size = this->index; + + if(this->size & 1) + { + int timeIndex = this->index - ((this->size + 1) >> 1); + + if(timeIndex < 0) + timeIndex += this->capacity; + + outputTime = this->time[timeIndex]; + } + else + { + int timeIndexB = this->index - (this->size >> 1) - 1; + int timeIndexA = this->index - (this->size >> 1); + + if(timeIndexB < 0) + timeIndexB += this->capacity; + + if(timeIndexA < 0) + timeIndexA += this->capacity; + + outputTime = 0.5 * (this->time[timeIndexB] + this->time[timeIndexA]); + } + + return this->size; + }; + }; + + Ring<float> buffer; + std::vector<float> temp; + std::vector<float> frame; + unsigned int filterSize; + unsigned int inputSize; + +public: + PiPoScalarAttr<int> size; + + PiPoMedian(Parent *parent, PiPo *receiver = NULL) : + PiPo(parent, receiver), + buffer(), temp(), frame(), + size(this, "size", "Filter Size", true, 7) + { + this->filterSize = 0; + this->inputSize = 0; + } + + ~PiPoMedian(void) + { + } + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + unsigned int filterSize = this->size.get(); + unsigned int inputSize = width * size; + double lag = 1000.0 * 0.5 * (filterSize - 1) / rate; + + if(filterSize != this->filterSize || inputSize != this->inputSize) + { + this->buffer.resize(inputSize, filterSize); + this->temp.resize(inputSize * filterSize); + this->frame.resize(inputSize); + this->filterSize = filterSize; + this->inputSize = inputSize; + } + + return this->propagateStreamAttributes(hasTimeTags, rate, offset - lag, width, size, labels, 0, 0.0, 1); + } + + int reset(void) + { + this->buffer.reset(); + return this->propagateReset(); + }; + + int frames(double time, double weight, float *values, unsigned int size, unsigned int num) + { + for(unsigned int i = 0; i < num; i++) + { + double outputTime; + int filterSize = this->buffer.input(time, values, size, outputTime); + + this->temp = this->buffer.vector; + + for(unsigned int j = 0; j < this->buffer.width; j++) + this->frame[j] = rta_selection_stride(&this->temp[j], this->buffer.width, filterSize, (filterSize - 1) * 0.5); + + int ret = this->propagateFrames(outputTime, weight, &this->frame[0], this->inputSize, 1); + + if(ret != 0) + return ret; + + values += size; + } + + return 0; + } +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMel.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMel.h new file mode 100644 index 0000000..be2b279 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMel.h @@ -0,0 +1,75 @@ +/** + * @file PiPoMel.h + * @author Norbert.Schnell@ircam.fr + * + * @brief RTA MEL bands PiPo + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012-2014 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_MEL_ +#define _PIPO_MEL_ + +#include "PiPoSlice.h" +#include "PiPoFft.h" +#include "PiPoBands.h" + +class PiPoMel: public PiPoSlice +{ +public: + PiPoFft fft; + PiPoBands bands; + + PiPoMel(Parent *parent, PiPo *receiver = NULL) : + PiPoSlice(parent, &this->fft), + fft(parent, &this->bands), + bands(parent, receiver) + { + /* steal attributes from member PiPos */ + this->addAttr(this, "windsize", "FFT Window Size", &this->size, true); + this->addAttr(this, "hopsize", "FFT Hop Size", &this->hop); + this->addAttr(this, "numbands", "Number Of Bands", &bands.num); + this->addAttr(this, "log", "Logarithmic Scale Output", &bands.log); + + /* set internal attributes */ + this->wind.set(PiPoSlice::BlackmanWindow); + this->norm.set(PiPoSlice::PowerNorm); + this->fft.mode.set(PiPoFft::PowerFft); + this->bands.mode.set(PiPoBands::MelBands); + this->bands.log.set(false); + } + + void setReceiver(PiPo *receiver, bool add) { this->bands.setReceiver(receiver, add); }; +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMfcc.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMfcc.h new file mode 100644 index 0000000..dcb43bc --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMfcc.h @@ -0,0 +1,79 @@ +/** + * @file PiPoMfcc.h + * @author Norbert.Schnell@ircam.fr + * + * @brief RTA MFCC PiPo + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012-2014 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_MFCC_ +#define _PIPO_MFCC_ + +#include "PiPoSlice.h" +#include "PiPoFft.h" +#include "PiPoBands.h" +#include "PiPoDct.h" + +class PiPoMfcc : public PiPoSlice +{ +public: + PiPoFft fft; + PiPoBands bands; + PiPoDct dct; + + PiPoMfcc(Parent *parent, PiPo *receiver = NULL) : + PiPoSlice(parent, &this->fft), + fft(parent, &this->bands), + bands(parent, &this->dct), + dct(parent, receiver) + { + /* steal attributes from member PiPos */ + this->addAttr(this, "windsize", "FFT Window Size", &this->size, true); + this->addAttr(this, "hopsize", "FFT Hop Size", &this->hop); + this->addAttr(this, "numbands", "Number Of Bands", &bands.num); + this->addAttr(this, "numcoeffs", "Number Of MFC Coefficients", &dct.order); + + /* set internal attributes */ + this->wind.set(PiPoSlice::BlackmanWindow); + this->norm.set(PiPoSlice::PowerNorm); + this->fft.mode.set(PiPoFft::PowerFft); + this->bands.mode.set(PiPoBands::MelBands); + this->bands.log.set(true); + this->dct.order.set(12); + } + + void setReceiver(PiPo *receiver, bool add) { this->dct.setReceiver(receiver, add); }; +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMinMax.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMinMax.h new file mode 100644 index 0000000..f39b537 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMinMax.h @@ -0,0 +1,115 @@ +/** + * @file PiPoMinMax.h + * @author Norbert.Schnell@ircam.fr + * + * @brief Mean Stddev Min Max PiPo + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012 by IMTR IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_MIN_MAX_ +#define _PIPO_MIN_MAX_ + +#include "PiPo.h" + +class PiPoMinMax : public PiPo +{ +private: + float outputFrame[2]; + double min; + double max; + +public: + PiPoMinMax(PiPo *receiver = NULL) + { + this->min = DBL_MAX; + this->max = -DBL_MAX; + this->receiver = receiver; + } + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + const char *mmLabels[2]; + + mmLabels[0] = "Min"; + mmLabels[1] = "Max"; + + return this->propagateStreamAttributes(hasTimeTags, rate, offset, 2, 1, mmLabels, 0, 0.0, 1); + } + + int reset(void) + { + this->min = DBL_MAX; + this->max = -DBL_MAX; + + return this->propagateReset(); + }; + + int frames(double time, float *values, unsigned int size, unsigned int num) + { + for(unsigned int i = 0; i < num; i++) + { + double min = values[0]; + double max = min; + + for(unsigned int j = 0; j < size; j++) + { + double x = values[j]; + + if(x < min) + min = x; + + if(x > max) + max = x; + } + + if(min < this->min) + this->min = min; + + if(max < this->max) + this->max = max; + + this->outputFrame[0] = min; + this->outputFrame[1] = max; + + int ret = this->propagateFrames(time, this->outputFrame, 2, 1); + + if(ret != 0) + return ret; + } + + return 0; + } +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMoments.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMoments.h new file mode 100644 index 0000000..57f061f --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMoments.h @@ -0,0 +1,240 @@ +/** + * @file PiPoMoments.h + * @author jules.francoise@ircam.fr + * + * @brief PiPo calculating the moments of a vector + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012-2014 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef maxpipo_PiPoMoments_h +#define maxpipo_PiPoMoments_h + +#define MAX_PIPO_MOMENTS_LABELS 128 + +#ifdef WIN32 +#define min(a,b) ((a) < (b) ? (a) : (b)) +#endif + +#include "PiPo.h" +#include <cmath> + +extern "C" { +#include "rta_configuration.h" +#include "rta_moments.h" +} + +using namespace std; + +class PiPoMoments : public PiPo +{ +protected: + vector<float> moments; + double domain; +public: + enum OutputScaling { None, Domain, Normalized }; + PiPoScalarAttr<int> order; + PiPoScalarAttr<PiPo::Enumerate> scaling; + PiPoScalarAttr<bool> std; + + PiPoMoments(Parent *parent, PiPo *receiver = NULL) : + PiPo(parent, receiver), + order(this, "order", "Maximum order of moments", true, 4), + scaling(this, "scaling", "Output Scaling", true, None), + std(this, "std", "Standardized moments for order > 2", true, true) + { + this->scaling.addEnumItem("None", "No Scaling (bins)"); + this->scaling.addEnumItem("Domain", "Domain Scaling"); + this->scaling.addEnumItem("Normalized", "Normalized Moments"); + } + + ~PiPoMoments(void) + { + this->moments.clear(); + } + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + this->domain = domain; + unsigned int maxorder = (unsigned int)this->order.get(); + this->moments.resize(maxorder); + + const char *momentsColNames[MAX_PIPO_MOMENTS_LABELS]; + // Set 4 first moments names + momentsColNames[0] = "Centroid"; + momentsColNames[1] = "Spread"; + momentsColNames[2] = "Skewness"; + momentsColNames[3] = "Kurtosis"; + + unsigned int maxlabel = min((int)maxorder, MAX_PIPO_MOMENTS_LABELS); + for (unsigned int ord=4; ord<maxlabel; ord++) { + momentsColNames[ord] = ""; + } + + return this->propagateStreamAttributes(hasTimeTags, rate, offset, maxorder, 1, momentsColNames, 0, 0.0, 1); + } + + int frames(double time, double weight, float *values, unsigned int size, unsigned int num) + { + float input_sum; + unsigned int maxorder = (unsigned int)this->order.get(); + rta_real_t deviation; + + for(unsigned int i = 0; i < num; i++) + { + if (maxorder >= 1) { + this->moments[0] = rta_weighted_moment_1_indexes(&input_sum, + values, + size); + + if (maxorder >= 2) { + if (input_sum != 0.) { + this->moments[1] = rta_weighted_moment_2_indexes(values, + size, + this->moments[0], + input_sum); + } else { + this->moments[1] = size; + } + + if (maxorder >= 3) { + if (this->std.get()) { // Standardized + deviation = sqrtf(this->moments[1]); + if (input_sum != 0. && deviation != 0.) { + this->moments[2] = rta_std_weighted_moment_3_indexes(values, + size, + this->moments[0], + input_sum, + deviation); + } else { + this->moments[2] = 0.; + } + } else { // Not Standardized + if (input_sum != 0.) { + this->moments[2] = rta_weighted_moment_3_indexes(values, + size, + this->moments[0], + input_sum); + } else { + this->moments[2] = 0.; + } + } + + if (maxorder >= 4) { + if (this->std.get()) { // Standardized + if (input_sum != 0. && deviation != 0.) { + this->moments[3] = rta_std_weighted_moment_4_indexes(values, + size, + this->moments[0], + input_sum, + deviation); + } else { + this->moments[3] = 2.; + } + } else { // Not Standardized + if (input_sum != 0.) { + this->moments[3] = rta_weighted_moment_4_indexes(values, + size, + this->moments[0], + input_sum); + } else { + this->moments[3] = 0.; + } + + } + + for (unsigned int ord=5; ord<=maxorder; ord++) { + if (this->std.get()) { // Standardized + if (input_sum != 0. && deviation != 0.) { + this->moments[ord-1] = rta_std_weighted_moment_indexes(values, + size, + this->moments[0], + input_sum, + deviation, + (rta_real_t)ord); + } else { + if(ord & 1) /* even */ + { + this->moments[ord-1] = 0.; + } + else + { + this->moments[ord-1] = ord; + } + } + } else { // Not Standardized + if (input_sum != 0.) { + this->moments[ord-1] = rta_weighted_moment_indexes(values, + size, + this->moments[0], + input_sum, + (rta_real_t)ord); + } else { + this->moments[ord-1] = size; + } + } + } + } + } + } + } + + enum OutputScaling outputScaling = (enum OutputScaling)this->scaling.get(); + switch (outputScaling) { + case None: + break; + case Domain: + for (unsigned int ord=0; ord<2; ord++) { + this->moments[ord] *= powf(float(domain / (size-1)), float(ord+1)); + } + break; + case Normalized: + for (unsigned int ord=0; ord<maxorder; ord++) { + this->moments[ord] /= powf(float(size-1), float(ord+1)); + } + break; + } + + int ret = this->propagateFrames(time, weight, &moments[0], maxorder, 1); + + if(ret != 0) + return ret; + + values += size; + } + + return 0; + } +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMvavrg.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMvavrg.h new file mode 100644 index 0000000..86b7de1 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoMvavrg.h @@ -0,0 +1,211 @@ +/** + * @file PiPoMvavrg.h + * @author Norbert.Schnell@ircam.fr + * + * @brief PiPo calculating a moving average on a stream + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012-2014 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_MVAVRG_ +#define _PIPO_MVAVRG_ + +#include "PiPo.h" + +extern "C" { +#include "rta_configuration.h" +#include "rta_mean_variance.h" +} + +#include <vector> + +#define RING_ALLOC_BLOCK 256 + +class PiPoMvavrg : public PiPo +{ + template <class T> + class Ring + { + public: + std::vector<double> time; + std::vector<T> vector; + unsigned int width; + unsigned int capacity; + unsigned int size; + unsigned int index; + + public: + Ring(void) : vector() + { + this->width = 1; + this->capacity = 0; + this->size = 0; + this->index = 0; + }; + + void resize(int width, int size) + { + this->time.resize(size); + this->vector.resize(width * size); + this->width = width; + this->capacity = size; + this->size = 0; + this->index = 0; + }; + + void reset(void) + { + this->size = 0; + this->index = 0; + }; + + int input(double time, T *values, unsigned int num, double &outputTime) + { + float *ringValues = &this->vector[this->index * this->width]; + + this->time[this->index] = time; + + if(num > this->width) + num = this->width; + + /* copy frame */ + memcpy(ringValues, values, num * sizeof(T)); + + /* zero pad this values */ + if(num < this->width) + memset(ringValues + num, 0, (this->width - num) * sizeof(T)); + + this->index++; + + if(this->index >= this->capacity) + { + this->size = this->capacity; + this->index = 0; + } + else if(this->size < this->index) + this->size = this->index; + + if(this->size & 1) + { + int timeIndex = this->index - ((this->size + 1) >> 1); + + if(timeIndex < 0) + timeIndex += this->capacity; + + outputTime = this->time[timeIndex]; + } + else + { + int timeIndexB = this->index - (this->size >> 1) - 1; + int timeIndexA = this->index - (this->size >> 1); + + if(timeIndexB < 0) + timeIndexB += this->capacity; + + if(timeIndexA < 0) + timeIndexA += this->capacity; + + outputTime = 0.5 * (this->time[timeIndexB] + this->time[timeIndexA]); + } + + return this->size; + }; + }; + + Ring<float> buffer; + std::vector<float> frame; + unsigned int filterSize; + unsigned int inputSize; + +public: + PiPoScalarAttr<int> size; + + PiPoMvavrg(Parent *parent, PiPo *receiver = NULL) : + PiPo(parent, receiver), + buffer(), frame(), + size(this, "size", "Filter Size", true, 8) + { + this->filterSize = 0; + this->inputSize = 0; + }; + + ~PiPoMvavrg(void) + { + }; + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + unsigned int filterSize = this->size.get(); + unsigned int inputSize = width * size; + double lag = 1000.0 * 0.5 * (filterSize - 1) / rate; + + if(filterSize != this->filterSize || inputSize != this->inputSize) + { + this->buffer.resize(inputSize, filterSize); + this->frame.resize(inputSize); + this->filterSize = filterSize; + this->inputSize = inputSize; + } + + return this->propagateStreamAttributes(hasTimeTags, rate, offset - lag, width, size, labels, 0, 0.0, 1); + }; + + int reset(void) + { + this->buffer.reset(); + return this->propagateReset(); + }; + + int frames(double time, double weight, float *values, unsigned int size, unsigned int num) + { + for(unsigned int i = 0; i < num; i++) + { + double outputTime; + int filterSize = this->buffer.input(time, values, size, outputTime); + + for(unsigned int j = 0; j < this->buffer.width; j++) + this->frame[j] = rta_mean_stride(&this->buffer.vector[j], this->buffer.width, filterSize); + + int ret = this->propagateFrames(outputTime, weight, &this->frame[0], this->inputSize, 1); + + if(ret != 0) + return ret; + + values += size; + } + + return 0; + }; +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoOnseg.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoOnseg.h new file mode 100644 index 0000000..2290d86 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoOnseg.h @@ -0,0 +1,451 @@ +/** + * @file PiPoOnseg.h + * @author Norbert.Schnell@ircam.fr + * + * @brief PiPo calculating a runnning median on a stream + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012-2014 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_ODFSEG_ +#define _PIPO_ODFSEG_ + +#include "PiPo.h" +#include "RingBuffer.h" + +extern "C" { +#include "rta_configuration.h" +#include "rta_selection.h" +} + +#include "TempMod.h" +#include <vector> +#include <string> + +class PiPoOnseg : public PiPo +{ +public: + enum OnsetMode { MeanOnset, MeanSquareOnset, RootMeanSquareOnset, KullbackLeiblerOnset }; + +private: + RingBuffer<PiPoValue> buffer; + std::vector<PiPoValue> temp; + std::vector<PiPoValue> frame; + std::vector<PiPoValue> lastFrame; + unsigned int filterSize; + unsigned int inputSize; + double offset; + double frameperiod; + enum OnsetMode onsetMode; + int segmentFrames; //TBD: unused? + bool lastFrameWasOnset; + double onsetTime; + bool enDuration; + bool segIsOn; + TempModArray tempMod; + std::vector<PiPoValue>outputValues; + +public: + PiPoScalarAttr<int> colindex; + PiPoScalarAttr<int> numcols; + PiPoScalarAttr<int> fltsize; + PiPoScalarAttr<double> threshold; + PiPoScalarAttr<PiPo::Enumerate> onsetmode; + PiPoScalarAttr<double> mininter; + PiPoScalarAttr<bool> startisonset; + PiPoScalarAttr<bool> duration; + PiPoScalarAttr<double> durthresh; + PiPoScalarAttr<double> offthresh; + PiPoScalarAttr<double> maxsegsize; + PiPoScalarAttr<bool> enMin; + PiPoScalarAttr<bool> enMax; + PiPoScalarAttr<bool> enMean; + PiPoScalarAttr<bool> enStddev; + PiPoScalarAttr<bool> odfoutput; + + PiPoOnseg(Parent *parent, PiPo *receiver = NULL) : + PiPo(parent, receiver), + buffer(), temp(), frame(), lastFrame(), tempMod(), outputValues(), + colindex(this, "colindex", "Index of First Column Used for Onset Calculation", true, 0), + numcols(this, "numcols", "Number of Columns Used for Onset Calculation", true, -1), + fltsize(this, "filtersize", "Filter Size", true, 3), + threshold(this, "threshold", "Onset Threshold", false, 5), + onsetmode(this, "odfmode", "Onset Detection Calculation Mode", true, MeanOnset), + mininter(this, "mininter", "Minimum Onset Interval", false, 50.0), + startisonset(this, "startisonset", "Place Marker at Start of Buffer", false, false), + duration(this, "duration", "Output Segment Duration", true, false), + durthresh(this, "durthresh", "Duration Threshold", false, 0.0), + offthresh(this, "offthresh", "Segment End Threshold", false, -80.0), + maxsegsize(this, "maxsize", "Maximum Segment Duration", false, 0.0), + enMin(this, "min", "Calculate Segment Min", true, false), + enMax(this, "max", "Calculate Segment Max", true, false), + enMean(this, "mean", "Calculate Segment Mean", true, false), + enStddev(this, "stddev", "Calculate Segment StdDev", true, false), + odfoutput(this, "odfoutput", "Output only onset detection function", true, false) + { + this->filterSize = 0; + this->inputSize = 0; + + this->offset = 0.0; + this->frameperiod = 1.; + this->onsetMode = MeanOnset; + this->segmentFrames = 0; + this->lastFrameWasOnset = false; + this->onsetTime = -DBL_MAX; + + this->enDuration = false; + this->segIsOn = false; + + this->onsetmode.addEnumItem("mean", "Mean"); + this->onsetmode.addEnumItem("square", "Mean Square"); + this->onsetmode.addEnumItem("rms", "Root Mean Square"); + this->onsetmode.addEnumItem("kullbackleibler", "Kullback Leibler Divergence"); + } + + ~PiPoOnseg(void) + { + } + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + int filterSize = this->fltsize.get(); + enum OnsetMode onsetMode = (enum OnsetMode)this->onsetmode.get(); + int inputSize = width; + + this->frameperiod = 1000.0 / rate; + this->offset = -this->frameperiod; // offset of negative frame period to include signal just before peak + + if(filterSize < 1) + filterSize = 1; + + this->onsetMode = onsetMode; + + /* resize internal buffers */ + this->buffer.resize(inputSize, filterSize); + this->temp.resize(inputSize * filterSize); + this->frame.resize(inputSize); + this->lastFrame.resize(inputSize); + + this->filterSize = filterSize; + this->inputSize = inputSize; + + if (this->startisonset.get()) + { // start with a segment at 0 + this->lastFrameWasOnset = true; + this->onsetTime = -this->offset; // first marker will be at 0 + this->segIsOn = true; + } + else + { + this->lastFrameWasOnset = false; + this->onsetTime = -DBL_MAX; + } + + this->enDuration = this->duration.get() && !this->odfoutput.get(); + + if(this->enDuration) + { + /* resize temporal models */ + this->tempMod.resize(inputSize); + + /* enable temporal models */ + this->tempMod.enable(this->enMin.get(), this->enMax.get(), this->enMean.get(), this->enStddev.get()); + + /* get output size */ + unsigned int outputSize = this->tempMod.getNumValues(); + + /* alloc output vector for duration and temporal modelling output */ + this->outputValues.resize(outputSize + 1); + + /* get labels */ + char *mem = new char[outputSize * 64 + 64]; + char **outLabels = new char*[outputSize + 1]; + + for(unsigned int i = 0; i <= outputSize; i++) + outLabels[i] = mem + i * 64; + + snprintf(outLabels[0], 64, "Duration"); + this->tempMod.getLabels(labels, inputSize, &outLabels[1], 64, outputSize); + + int ret = this->propagateStreamAttributes(true, rate, 0.0, outputSize + 1, 1, (const char **)&outLabels[0], false, 0.0, 1); + + delete [] mem; + delete [] outLabels; + + return ret; + } + + if (this->odfoutput.get()) + { + const char *outlab[1] = { "ODF" }; + return this->propagateStreamAttributes(true, rate, 0.0, 1, 1, outlab, false, 0.0, 1); + } + else + return this->propagateStreamAttributes(true, rate, 0.0, 0, 0, NULL, false, 0.0, 1); + } + + int reset(void) + { + this->buffer.reset(); + + this->segmentFrames = 0; + + if (this->startisonset.get()) + { // start with a segment at 0 + this->lastFrameWasOnset = true; + this->onsetTime = -this->offset; + this->segIsOn = true; + } + else + { + this->lastFrameWasOnset = false; + this->onsetTime = -DBL_MAX; + this->segIsOn = false; + } + + this->tempMod.reset(); + + return this->propagateReset(); + }; + + int frames(double time, double weight, PiPoValue *values, unsigned int size, unsigned int num) + { + double onsetThreshold = this->threshold.get(); + double minimumInterval = this->mininter.get(); + double durationThreshold = this->durthresh.get(); + double offThreshold = this->offthresh.get(); + int colindex = this->colindex.get(); + int numcols = this->numcols.get(); + //printf("frames at %f size %d num %d\n", time, size, num); + + if(size > this->buffer.width) + size = this->buffer.width; //FIXME: values += size at the end of the loop can be wrong + + // clip colindex/size + //TODO: this shouldn't change at runtime, so do this in streamAttributes only + while (colindex < 0 && size > 0) + colindex += size; + + if (numcols <= 0) + numcols = size; + + if (colindex + numcols > size) + numcols = size - colindex; + + for(unsigned int i = 0; i < num; i++) + { // for all frames + PiPoValue scale = 1.0; + double odf = 0.0; + double energy = 0.0; + + /* normalize sum to one for Kullback Leibler divergence */ + if(this->onsetMode == KullbackLeiblerOnset) + { + PiPoValue normSum = 0.0; + + for(int j = 0; j < numcols; j++) + normSum += values[colindex + j]; + + scale = 1.0 / normSum; + } + + /* input frame */ + int filterSize = this->buffer.input(values, size, scale); + this->temp = this->buffer.vector; + + switch(this->onsetMode) + { + case MeanOnset: + { + unsigned int k = colindex; + for(int j = 0; j < numcols; j++, k++) + { + odf += (values[k] - this->lastFrame[k]); + energy += values[k]; + + this->lastFrame[k] = rta_selection_stride(&this->temp[k], size, filterSize, (filterSize - 1) * 0.5); + } + + odf /= numcols; + energy /= numcols; + + break; + } + + case MeanSquareOnset: + case RootMeanSquareOnset: + { + unsigned int k = colindex; + for(int j = 0; j < numcols; j++, k++) + { + double diff = values[k] - this->lastFrame[k]; + + odf += (diff * diff); + energy += values[k] * values[k]; + + this->lastFrame[k] = rta_selection_stride(&this->temp[k], size, filterSize, (filterSize - 1) * 0.5); + } + + odf /= numcols; + energy /= numcols; + + if(this->onsetMode == RootMeanSquareOnset) + { + odf = sqrt(odf); + energy = sqrt(energy); + } + + break; + } + + case KullbackLeiblerOnset: + { + unsigned int k = colindex; + for(int j = 0; j < numcols; j++, k++) + { + if(values[k] != 0.0 && this->lastFrame[k] != 0.0) + odf += log(this->lastFrame[k] / values[k]) * this->lastFrame[k]; + + energy += values[k] * values[k]; + + this->lastFrame[k] = rta_selection_stride(&this->temp[k], size, filterSize, (filterSize - 1) * 0.5); + } + + odf /= numcols; + energy /= numcols; + + break; + } + } + + /* get onset */ + double maxsize = maxsegsize.get(); + bool frameIsOnset = (odf > onsetThreshold && !this->lastFrameWasOnset && time >= this->onsetTime + minimumInterval) + || (maxsize > 0 && (time >= this->onsetTime + maxsize)); // chop unconditionally after maxsize if given + int ret = 0; + + if(!this->enDuration) + { + if (!this->odfoutput.get()) + { /* output marker */ + if(frameIsOnset) + { + /* report immediate onset */ + ret = this->propagateFrames(this->offset + time, weight, NULL, 0, 1); + this->onsetTime = time; + } + } + else + { /* output odf for each frame*/ + PiPoValue odfval = odf; + ret = this->propagateFrames(this->offset + time, weight, &odfval, 1, 1); + } + } + else + { + double duration = time - this->onsetTime; + + if(this->segIsOn && (frameIsOnset || energy < offThreshold) && duration >= durationThreshold) + { + /* end of segment (new onset or energy below off threshold) */ + int outputSize = static_cast<int>(this->outputValues.size()); + + this->outputValues[0] = duration; + + /* get temporal modelling */ + if(outputSize > 1) + this->tempMod.getValues(&this->outputValues[1], outputSize - 1, true); + + /* report segment */ + ret = this->propagateFrames(this->offset + this->onsetTime, weight, &this->outputValues[0], outputSize, 1); + } + + /* segment on/off (segment has at least one frame) */ + if(frameIsOnset) + { + this->segIsOn = true; + this->onsetTime = time; + } + else if(energy < offThreshold) + this->segIsOn = false; + + /* feed temporal modelling */ + if(this->segIsOn) + this->tempMod.input(values, size); + } + + this->lastFrameWasOnset = frameIsOnset; + + if(ret != 0) + return ret; + + values += size; + time += this->frameperiod; // increase time for next input frame (if num > 1) + } // end for all frames + + return 0; + } + + int finalize(double inputEnd) + { + double durationThreshold = this->durthresh.get(); + double duration = inputEnd - this->onsetTime; + //printf("finalize at %f seg %d duration %f\n", inputEnd, segIsOn, duration); + + if(this->segIsOn && duration >= durationThreshold) + { + /* end of segment (new onset or below off threshold) */ + int outputSize = static_cast<int>(this->outputValues.size()); + + this->outputValues[0] = duration; + + /* get temporal modelling */ + if(outputSize > 1) + this->tempMod.getValues(&this->outputValues[1], outputSize - 1, true); + + /* report segment */ + return this->propagateFrames(this->offset + this->onsetTime, 0.0, &this->outputValues[0], outputSize, 1); + } + + return this->propagateFinalize(inputEnd); + } +}; + +/** EMACS ** + * Local variables: + * mode: c++ + * c-basic-offset:2 + * End: + */ + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoPeaks.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoPeaks.h new file mode 100644 index 0000000..2a3dcc5 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoPeaks.h @@ -0,0 +1,284 @@ +/** + * @file PiPoPeaks.h + * + * @brief PiPo estimating local maxima of a vector + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2013-2017 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_PEAKS_ +#define _PIPO_PEAKS_ + +#include "PiPo.h" + +extern "C" { +#include <math.h> +} + +#include <cstdlib> + +#define PIPO_PEAKS_DEBUG 1 +#define ABS_MAX 2147483647.0 +#define DEFAULT_NUM_ALLOC_PEAKS 200 + +typedef struct +{ + float freq; + float amp; +} peak_t; + +static int +peaks_compare_freq(const void *left, const void *right) +{ + peak_t *l = (peak_t *)left; + peak_t *r = (peak_t *)right; + + return (r->freq < l->freq) - (l->freq < r->freq); +} + +static int +peaks_compare_amp(const void *left, const void *right) +{ + peak_t *l = (peak_t *)left; + peak_t *r = (peak_t *)right; + + return (r->amp > l->amp) - (l->amp > r->amp); +} + +class PiPoPeaks : public PiPo +{ +private: + std::vector<float> buffer_; + int domsr; + double peaksRate; + int allocatedPeaksSize; + +public: + PiPoScalarAttr<int> numPeaks; + PiPoScalarAttr<PiPo::Enumerate> keepMode; + PiPoScalarAttr<PiPo::Enumerate> downSampling; + PiPoScalarAttr<double> thresholdWidth; + PiPoScalarAttr<double> thresholdHeight; + PiPoScalarAttr<double> thresholdDev; + PiPoScalarAttr<double> rangeLow; + PiPoScalarAttr<double> rangeHigh; + PiPoScalarAttr<double> domainScale; + + // constructor + PiPoPeaks (Parent *parent, PiPo *receiver = NULL) + : PiPo(parent, receiver), buffer_(), + numPeaks(this, "numpeaks", "Maximum number of peaks to be estimated", true, 16), + keepMode(this, "keep", "keep first or strongest peaks", true, 0), + downSampling(this, "downsampling", "Downsampling Exponent", true, 2), + thresholdWidth(this, "thwidth", "maximum width for peaks (indicates sinusoidality)", true, 0.), + thresholdHeight(this, "thheight", "minimum height for peaks", true, 0.), + thresholdDev(this, "thdev", "maximum deviation from mean value", true, 0.), + rangeLow(this, "rangelow", "minimun of band where to search for peaks", true, 0.), + rangeHigh(this, "rangehigh", "maximum of band where to search for peaks", true, ABS_MAX), + domainScale(this, "domscale", "scaling factor of output peaks (overwrites domain and down)", true, -0.5) + { + + this->keepMode.addEnumItem("strongest", "keep strongest peak"); + this->keepMode.addEnumItem("lowest", "keep first peak"); + + this->downSampling.addEnumItem("none", "No down sampling"); + this->downSampling.addEnumItem("2x", "Down sampling by 2"); + this->downSampling.addEnumItem("4x", "Down sampling by 4"); + this->downSampling.addEnumItem("8x", "Down sampling by 8"); + + this->domsr = 1; + this->allocatedPeaksSize = 0; + } + + ~PiPoPeaks (void) + { + } + + int streamAttributes (bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int height, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { +#if PIPO_PEAKS_DEBUG + printf("PiPoPeaks %p streamAttributes timetags %d rate %f offset %f width %d height %d labels %s varsize %d domain %f maxframes %d\n", + this, hasTimeTags, rate, offset, width, height, labels ? labels[0] : "n/a", hasVarSize, domain, maxFrames); +#endif + + int maxNumPeaks = this->numPeaks.get(); + this->peaksRate = rate; + + const char *peaksColNames[2]; + peaksColNames[0] = "Frequency"; + peaksColNames[1] = "Amplitude"; + + this->allocatedPeaksSize = maxNumPeaks; + if(this->allocatedPeaksSize < DEFAULT_NUM_ALLOC_PEAKS) this->allocatedPeaksSize = DEFAULT_NUM_ALLOC_PEAKS; + this->buffer_.resize(this->allocatedPeaksSize * 2); + + return this->propagateStreamAttributes(true, rate, offset, 2, maxNumPeaks, peaksColNames, 1, 0.0, 1); + } + + int reset (void) + { + return this->propagateReset(); + } + + + int frames (double time, double weight, float *values, unsigned int size, unsigned int num) + { + float *peaks_ptr = &this->buffer_[0]; + int n_found = 0; + double mean = -ABS_MAX; + unsigned int start, end; + unsigned int i, j; + double thresholdDev = this->thresholdDev.get(); + double thresholdHeight = this->thresholdHeight.get(); + double thresholdWidth = this->thresholdWidth.get(); + int maxNumPeaks = this->numPeaks.get(); + double domscale = this->domainScale.get(); + + if(this->domsr != 0) + domscale *= this->peaksRate; + + if(domscale < 0.0) + domscale = -domscale / (double)size; + + start = (unsigned int)floor(this->rangeLow.get() / domscale); + end = (unsigned int)ceil(this->rangeHigh.get() / domscale); + + if(start < 1) + start = 1; + + if(end >= size) + end = size - 1; + + if(thresholdDev > 0.0) + { + mean = 0.0; + + for(i=0, j=0; i < size; i++, j++) + mean += values[j]; + + mean /= size; + } + + for(i = start, j = start; i < end; i++, j++) + { + double center = values[j]; + double left = values[j - 1]; + double right = values[j + 1]; + + if(center >= left && center > right) + { + double a = 0.5 * (right + left) - center; + double b = 0.5 * (right - left); + double frac = -b / (2.0 * a); + double max_amp = (a * frac + b) * frac + center; + double max_index = (double)i + frac; + + if(fabs(max_amp - mean) < thresholdDev) + continue; + + if(thresholdHeight > 0.0 || thresholdWidth > 0.0) + { + double min_right_amp = center; + double min_left_amp = center; + double min_right_index = size; + double min_left_index = 0; + unsigned int k, l; + + thresholdWidth = thresholdWidth / domscale; + + for(k=i+1, l=j+1; k<size-1; k++, l++) + { + if(values[l] <= values[l + 1]) + { + left = values[l - 1]; + center = values[l]; + right = values[l + 1]; + + a = 0.5 * (right + left) - center; + b = 0.5 * (right - left); + frac = -b / (2.0 * a); + min_right_amp = (a * frac + b) * frac + center; + min_right_index = (double)k + frac; + + break; + } + } + + for(k=i-1, l=j-1; k>0; k--, l-=1) + { + if(values[l] <= values[l - 1]) + { + left = values[l - 1]; + center = values[l]; + right = values[l + 1]; + + a = 0.5 * (right + left) - center; + b = 0.5 * (right - left); + frac = -b / (2.0 * a); + min_left_amp = (a * frac + b) * frac + center; + min_left_index = (double)k + frac; + + break; + } + } + + if(max_amp - min_right_amp < thresholdHeight || max_amp - min_left_amp < thresholdHeight) + continue; + + if(min_right_index - min_left_index < thresholdWidth) + continue; + } + + peaks_ptr[2 * n_found] = max_index * domscale; + peaks_ptr[2 * n_found + 1] = max_amp; + n_found++; + + if((this->keepMode.get() == 0 && n_found >= maxNumPeaks) || (this->keepMode.get() == 1 && n_found >= this->allocatedPeaksSize)) + break; + } + } + + if(this->keepMode.get() == 0)// keep strongest + { + qsort((void *)peaks_ptr, n_found, sizeof(peak_t), peaks_compare_amp); + + if(n_found > this->numPeaks.get()) + n_found = maxNumPeaks; + + qsort((void *)peaks_ptr, n_found, sizeof(peak_t), peaks_compare_freq); + } + return propagateFrames(time, 1.0, peaks_ptr, 2*n_found, 1); + } +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoRms.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoRms.h new file mode 100644 index 0000000..ccfbd2e --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoRms.h @@ -0,0 +1,111 @@ +/** + * @file PiPoRms.h + * @author Norbert.Schnell@ircam.fr + * + * @brief Mean Stddev Min Max PiPo + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012 by IMTR IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_RMS_ +#define _PIPO_RMS_ + +#include "PiPo.h" + +using namespace std; + +class PiPoRms : public PiPo +{ +private: + float outputFrame[2]; + double sumOfSquare; + int num; + +public: + PiPoRms(PiPo *receiver = NULL) + { + this->sumOfSquare = 0.0; + this->num = 0; + + this->receiver = receiver; + } + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + char *rmsLabels[1]; + + rmsLabels[0] = "Rms"; + + return this->propagateStreamAttributes(hasTimeTags, rate, offset, 1, 1, rmsLabels, 0, 0.0, 1); + } + + int reset(void) + { + this->sumOfSquare = 0.0; + this->num = 0; + + return this->propagateReset(); + }; + + int frames(double time, float *values, unsigned int size, unsigned int num) + { + double norm = 1.0 / size; + + for(int i = 0; i < num; i++) + { + double meanOfSquare = 0.0; + + for(int j = 0; j < size; j++) + { + double x = values[j]; + meanOfSquare += x * x; + } + + this->sumOfSquare += meanOfSquare; + this->num += num; + + meanOfSquare *= norm; + + this->outputFrame[0] = meanOfSquare; + + int ret = this->propagateFrames(time, this->outputFrame, 2, 1); + + if(ret != 0) + return ret; + } + + return 0; + } +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoScale.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoScale.h new file mode 100644 index 0000000..522de64 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoScale.h @@ -0,0 +1,420 @@ +/** + * @file PiPoScale.h + * @author Norbert.Schnell@ircam.fr + * + * @brief PiPo scale data stream + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012-2014 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_SCALE_ +#define _PIPO_SCALE_ + +#include "PiPo.h" + +#include <math.h> +#include <vector> + +#define defMinLogVal 1e-24f + +class PiPoScale : public PiPo +{ +public: + enum ScaleFun { ScaleLin, ScaleLog, ScaleExp }; + enum CompleteMode { CompleteNot, CompleteRepeatLast, CompleteRepeatAll }; + //static const double defMinLogVal = 1e-24f; + +private: + std::vector<double> extInMin; + std::vector<double> extInMax; + std::vector<double> extOutMin; + std::vector<double> extOutMax; + std::vector<double> inScale; + std::vector<double> inOffset; + std::vector<double> outScale; + std::vector<double> outOffset; + std::vector<float> buffer; + unsigned int frameSize; + enum ScaleFun scaleFunc; + double funcBase; + double minLogVal; + int elemOffset; + int numElems; + int width; + +public: + PiPoVarSizeAttr<double> inMin; + PiPoVarSizeAttr<double> inMax; + PiPoVarSizeAttr<double> outMin; + PiPoVarSizeAttr<double> outMax; + PiPoScalarAttr<bool> clip; + PiPoScalarAttr<PiPo::Enumerate> func; + PiPoScalarAttr<double> base; + PiPoScalarAttr<double> minlog; + PiPoScalarAttr<PiPo::Enumerate> complete; + PiPoScalarAttr<int> colIndex; + PiPoScalarAttr<int> numCols; + + PiPoScale(Parent *parent, PiPo *receiver = NULL) + : PiPo(parent, receiver), inScale(), inOffset(), outScale(), outOffset(), buffer(), + inMin(this, "inmin", "Input Minimum", true), + inMax(this, "inmax", "Input Maximum", true), + outMin(this, "outmin", "Output Minimum", true), + outMax(this, "outmax", "Output Maximum", true), + clip(this, "clip", "Clip Values", false, false), + func(this, "func", "Scaling Function", true, ScaleLin), + base(this, "base", "Scaling Base", true, 1.0), + minlog(this, "minlog", "Minimum Log Value", true, defMinLogVal), + complete(this, "complete", "Complete Min/Max Lists", true, CompleteRepeatLast), + colIndex(this, "colindex", "Index of First Column to Scale (negative values count from end)", true, 0), + numCols(this, "numcols", "Number of Columns to Scale (negative values count from end, 0 means all)", true, 0) + { + this->frameSize = 0; + this->scaleFunc = ScaleLin; + this->funcBase = 1.0; + this->minLogVal = defMinLogVal; + + this->func.addEnumItem("lin", "Linear scaling"); + this->func.addEnumItem("log", "Logarithmic scaling"); + this->func.addEnumItem("exp", "Exponential scaling"); + + this->complete.addEnumItem("zeroone"); + this->complete.addEnumItem("repeatlast"); + this->complete.addEnumItem("repeatall"); + } + +private: + // disable copy constructor and assignment operator + PiPoScale (const PiPoScale &other); + const PiPoScale& operator=(const PiPoScale &other); + +public: + ~PiPoScale(void) + { + } + + void extendVector(PiPoVarSizeAttr<double> &attrVec, std::vector<double> &extVec, unsigned int size, double def, enum CompleteMode mode) + { + unsigned int attrSize = attrVec.getSize(); + unsigned int minSize = size; + + if(minSize > attrSize) + minSize = attrSize; + + extVec.resize(size); + + if(attrSize == 0) + mode = CompleteNot; + + for(unsigned int i = 0; i < minSize; i++) + extVec[i] = attrVec[i]; + + switch(mode) + { + case CompleteNot: + { + for(unsigned int i = minSize; i < size; i++) + extVec[i] = def; + + break; + } + + case CompleteRepeatLast: + { + for(unsigned int i = minSize; i < size; i++) + extVec[i] = attrVec[minSize - 1]; + + break; + } + + case CompleteRepeatAll: + { + for(unsigned int i = minSize; i < size; i++) + extVec[i] = attrVec[i % attrSize]; + } + } + } + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + unsigned int frameSize = width * size; + enum ScaleFun scaleFunc = (enum ScaleFun)this->func.get(); + double funcBase = this->base.get(); + double minLogVal = this->minlog.get(); + enum CompleteMode completeMode = (enum CompleteMode)this->complete.get(); + + // check and normalise column choice: + // neg. values count from end, no wraparound + int colIndex = this->colIndex.get(); + int numCols = this->numCols.get(); + + if (colIndex < 0) + { + colIndex += width; + + if (colIndex < 0) + colIndex = 0; + } + else if (colIndex >= (int)width) + colIndex = width - 1; + + if (numCols <= 0) + { + numCols += width; + + if (numCols <= 0) + numCols = width; + } + + if (colIndex + numCols > (int)width) + numCols = width - colIndex; + + this->elemOffset = colIndex; + this->numElems = numCols; + this->width = width; + + extendVector(this->inMin, this->extInMin, frameSize, 0.0, completeMode); + extendVector(this->inMax, this->extInMax, frameSize, 1.0, completeMode); + extendVector(this->outMin, this->extOutMin, frameSize, 0.0, completeMode); + extendVector(this->outMax, this->extOutMax, frameSize, 1.0, completeMode); + + this->inScale.resize(frameSize); + this->inOffset.resize(frameSize); + this->outScale.resize(frameSize); + this->outOffset.resize(frameSize); + + if(scaleFunc <= ScaleLin) + { + scaleFunc = ScaleLin; + funcBase = 1.0; + } + else + { + if(scaleFunc > ScaleExp) + scaleFunc = ScaleExp; + + if(funcBase == 1.0) + scaleFunc = ScaleLin; + } + + if(minLogVal > 0.0) + this->minLogVal = minLogVal; + else + this->minlog.set(this->minLogVal); + + if(funcBase < this->minLogVal) + funcBase = this->minLogVal; + + switch(scaleFunc) + { + case ScaleLin: + { + for(unsigned int i = 0; i < frameSize; i++) + { + this->inScale[i] = ((this->extOutMax[i] - this->extOutMin[i]) / (this->extInMax[i] - this->extInMin[i])); + this->inOffset[i] = (this->extOutMin[i] - this->extInMin[i] * this->inScale[i]); + } + + break; + } + + case ScaleLog: + { + for(unsigned int i = 0; i < frameSize; i++) + { + this->inScale[i] = (funcBase - 1.) / (this->extInMax[i] - this->extInMin[i]); + this->inOffset[i] = 1.0 - this->extInMin[i] * this->inScale[i]; + this->outScale[i] = (this->extOutMax[i] - this->extOutMin[i]) / log(funcBase); + this->outOffset[i] = this->extOutMin[i]; + } + + break; + } + + case ScaleExp: + { + for(unsigned int i = 0; i < frameSize; i++) + { + this->inScale[i] = log(funcBase) / (this->extInMax[i] - this->extInMin[i]); + this->inOffset[i] = -this->extInMin[i] * this->inScale[i]; + this->outScale[i] = (this->extOutMax[i] - this->extOutMin[i]) / (funcBase - 1.0); + this->outOffset[i] = this->extOutMin[i] - this->outScale[i]; + } + + break; + } + } + + this->scaleFunc = scaleFunc; + this->funcBase = funcBase; + + this->frameSize = frameSize; + this->buffer.resize(frameSize * maxFrames); + + return this->propagateStreamAttributes(hasTimeTags, rate, offset, width, size, labels, hasVarSize, domain, maxFrames); + } + + int frames(double time, double weight, float *values, unsigned int size, unsigned int numframes) + { + float *buffer = &this->buffer[0]; + bool clip = this->clip.get(); + unsigned int numrows = size / this->width; + + if (this->elemOffset > 0 || this->numElems < (int)size) + { /* copy through unscaled values */ + memcpy(buffer, values, numframes * size * sizeof(float)); + } + + if(!clip) + { + switch(this->scaleFunc) + { + case ScaleLin: + for (unsigned int i = 0; i < numframes * numrows; i++) + { + for (unsigned int j = 0, k = this->elemOffset; j < this->numElems; j++, k++) + buffer[k] = values[k] * this->inScale[j] + this->inOffset[j]; + + buffer += this->width; + values += this->width; + } + break; + + case ScaleLog: + for (unsigned int i = 0; i < numframes * numrows; i++) + { + for (unsigned int j = 0, k = this->elemOffset; j < this->numElems; j++, k++) + { + double inVal = values[k] * this->inScale[j] + this->inOffset[j]; + + if(inVal < this->minLogVal) + inVal = this->minLogVal; + + buffer[k] = this->outScale[j] * logf(inVal) + this->outOffset[j]; + } + + buffer += this->width; + values += this->width; + } + break; + + case ScaleExp: + for (unsigned int i = 0; i < numframes * numrows; i++) + { + for (unsigned int j = 0, k = this->elemOffset; j < this->numElems; j++, k++) + buffer[k] = this->outScale[j] * expf(values[k] * this->inScale[j] + this->inOffset[j]) + this->outOffset[j]; + + buffer += this->width; + values += this->width; + } + break; + } + } + else + { /* with clipping on */ + switch(this->scaleFunc) + { + case ScaleLin: + for (unsigned int i = 0; i < numframes * numrows; i++) + { + for (unsigned int j = 0, k = this->elemOffset; j < this->numElems; j++, k++) + { + double f = values[k]; + + if(f <= this->extInMin[j]) + buffer[k] = this->extInMin[j]; + else if(f >= this->extInMax[j]) + buffer[k] = this->extInMax[j]; + else + buffer[k] = f * this->inScale[j] + this->inOffset[j]; + } + + buffer += this->width; + values += this->width; + } + break; + + case ScaleLog: + for (unsigned int i = 0; i < numframes * numrows; i++) + { + for (unsigned int j = 0, k = this->elemOffset; j < this->numElems; j++, k++) + { + double f = values[k]; + + if(f <= this->extInMin[j]) + buffer[k] = this->extInMin[j]; + else if(f >= this->extInMax[j]) + buffer[k] = this->extInMax[j]; + else + buffer[k] = this->outScale[j] * log(values[k] * this->inScale[j] + this->inOffset[j]) + this->outOffset[j]; + } + + buffer += this->width; + values += this->width; + } + break; + + case ScaleExp: + for (unsigned int i = 0; i < numframes * numrows; i++) + { + for (unsigned int j = 0, k = this->elemOffset; j < this->numElems; j++, k++) + { + double f = values[k]; + + if(f <= this->extInMin[j]) + buffer[k] = this->extInMin[j]; + else if(f >= this->extInMax[j]) + buffer[k] = this->extInMax[j]; + else + buffer[k] = this->outScale[j] * exp(values[k] * this->inScale[j] + this->inOffset[j]) + this->outOffset[j]; + } + + buffer += this->width; + values += this->width; + } + break; + } + } + + return this->propagateFrames(time, weight, &this->buffer[0], size, numframes); + } +}; + +/** EMACS ** + * Local variables: + * mode: c + * c-basic-offset:2 + * End: + */ + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoSelect.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoSelect.h new file mode 100644 index 0000000..5c467fd --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoSelect.h @@ -0,0 +1,300 @@ +/** + * @file PiPoSel.h + * @author joseph.larralde@ircam.fr + * @date 05.01.2016 + * + * @brief PiPo allowing the selection of a subset of rows or columns + * in the incoming stream. + * If no match is found for any selected colum, all columns are passed through. + * Idem for rows. + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2016 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_SEL_H_ +#define _PIPO_SEL_H_ + +#include "PiPo.h" + +extern "C" +{ +#include <stdlib.h> +} + +class PiPoSelect : public PiPo +{ +private: + std::vector<PiPo::Atom> _colNames; + std::vector<int> _rowIndices; + std::vector<unsigned int> _usefulColIndices; // sorted and validity-checked indices + std::vector<unsigned int> _usefulRowIndices; // sorted and validity-checked indices + + unsigned int lastNum; + + unsigned int frameWidth; + unsigned int frameHeight; + + unsigned int outWidth; + unsigned int outHeight; + + unsigned int outFrameSize; + + PiPoValue *outValues; + +public: + PiPoVarSizeAttr<PiPo::Atom> colNames; + PiPoVarSizeAttr<int> rowIndices; + + PiPoSelect(Parent *parent, PiPo *receiver = NULL) : + PiPo(parent, receiver), + colNames(this, "cols", "List of Names or Indices of Columns to Select", true, 1), + rowIndices(this, "rows", "List of Indices of Rows to Select", true, 1, 0) + { + this->lastNum = 0; + + this->frameWidth = 0; + this->frameHeight = 0; + this->outWidth = 0; + this->outHeight = 0; + this->outFrameSize = 0; + + this->outValues = (PiPoValue *)malloc(0); + } + + ~PiPoSelect() + { + free(this->outValues); + } + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int height, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + unsigned int cnSize = this->colNames.getSize(); + unsigned int riSize = this->rowIndices.getSize(); + const char *colNames[128]; + + unsigned int frameWidth = width; + unsigned int frameHeight = height; + + //================== check col names changes + bool colNamesChanged = false; + if(cnSize != this->_colNames.size()) + { + colNamesChanged = true; + } + else + { + for(unsigned int i = 0; i < cnSize; i++) + { + if(this->_colNames[i] != this->colNames[i]) + { + colNamesChanged = true; + break; + } + } + } + + //================== check col indices changes + bool rowIndicesChanged = false; + if(riSize != this->_rowIndices.size()) + { + rowIndicesChanged = true; + } + else + { + for(unsigned int i = 0; i < riSize; i++) + { + if(this->_rowIndices[i] != this->rowIndices[i]) + { + rowIndicesChanged = true; + break; + } + } + } + + //=========== check any change in stream attributes and/or PiPo attributes =========// + + if(colNamesChanged || rowIndicesChanged || frameWidth != this->frameWidth || frameHeight != this->frameHeight) + { + /* + for(unsigned int i = 0; i < this->colNames.size(); i++) + { + printf("%s ", this->colNames[i]); + } + printf("\n"); + //*/ + + //copy new col names + this->_colNames.clear(); + for(unsigned int i = 0; i < cnSize; i++) + { + this->_colNames.push_back(this->colNames[i]); + } + + // copy new row indices + this->_rowIndices.clear(); + for(unsigned int i = 0; i < riSize; i++) + { + this->_rowIndices.push_back(this->rowIndices[i]); + } + + // set new input dimensions + this->frameWidth = frameWidth; + this->frameHeight = frameHeight; + + //============== first deal with col indices ================// + + unsigned int cnt = 0; + this->_usefulColIndices.clear(); + for(unsigned int i = 0; i < cnSize; i++) + { + switch(this->_colNames[i].getType()) + { + case Double: + case Int: + { + int res = this->_colNames[i].getInt(); + if(res >= 0 && (unsigned int)res < this->frameWidth) + { + //add res to the indices of valid columns + this->_usefulColIndices.push_back(res); + cnt++; + } + } + break; + + case String: + { + if(labels != NULL) + { + for(unsigned int j = 0; j < this->frameWidth; j++) + { + if(strcmp(this->_colNames[i].getString(), labels[j]) == 0) + { + this->_usefulColIndices.push_back(j); + cnt++; + } + } + } + } + break; + + default: + break; + } + } + /* + printf("selected cols :"); + for(unsigned int i = 0; i < this->_usefulColIndices.size(); i++) + { + printf(" %d", this->_usefulColIndices[i]); + } + printf("\n"); + //*/ + + if(this->_usefulColIndices.size() == 0) // pass all through + { + // fill with all indices + this->_usefulColIndices.resize(this->frameWidth); + for(unsigned int i = 0; i < this->frameWidth; i++) + { + this->_usefulColIndices[i] = i; + } + } + + this->outWidth = static_cast<unsigned int>(this->_usefulColIndices.size()); + // default sorting is ascending order + //std::sort(this->_usefulColIndices.begin(), this->_usefulColIndices.end()); + + //============== now deal with row indices ================// + + this->_usefulRowIndices.clear(); + for(unsigned int i = 0; i < this->_rowIndices.size(); i++) + { + if(this->_rowIndices[i] < (int)(this->frameHeight) && this->_rowIndices[i] >= 0) { + this->_usefulRowIndices.push_back(this->_rowIndices[i]); + } + } + + if(this->_usefulRowIndices.size() == 0) // pass all through + { + // fill with all indices + this->_usefulRowIndices.resize(this->frameHeight); + for(unsigned int i = 0; i < this->frameHeight; i++) + { + this->_usefulRowIndices[i] = i; + } + } + + this->outHeight = static_cast<unsigned int>(this->_usefulRowIndices.size()); + // default sorting is ascending order + //std::sort(this->_usefulRowIndices.begin(), this->_usefulRowIndices.end()); + + this->outFrameSize = this->outWidth * this->outHeight; + } + + for(unsigned int i = 0; i < this->outWidth; i++) + { + colNames[i] = (labels != NULL ? labels[this->_usefulColIndices[i]] : ""); + } + + return this->propagateStreamAttributes(hasTimeTags, rate, offset, this->outWidth, this->outHeight, (labels != NULL ? colNames : NULL), hasVarSize, domain, maxFrames); + } + + int frames(double time, double weight, PiPoValue *values, unsigned int size, unsigned int num) + { + if(num != this->lastNum) { + this->lastNum = num; + this->outValues = (PiPoValue *)realloc(this->outValues, this->outFrameSize * num * sizeof(PiPoValue)); + } + + for(unsigned int n = 0; n < num; n++) + { + unsigned int cnt = 0; + for(unsigned int i = 0; i < this->outHeight; i++) + { + for(unsigned int j = 0; j < this->outWidth; j++) + { + this->outValues[n * this->outFrameSize + cnt] = values[this->_usefulRowIndices[i] * this->frameWidth + this->_usefulColIndices[j]]; + cnt++; + } + } + + values += size; + } + + return this->propagateFrames(time, weight, this->outValues, this->outFrameSize, num); + } +}; + + +#endif /* _PIPO_SEL_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoSlice.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoSlice.h new file mode 100644 index 0000000..081524b --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoSlice.h @@ -0,0 +1,389 @@ +/** + * @file PiPoSlice.h + * @author Norbert.Schnell@ircam.fr + * + * @brief PiPo slicing data stream into windowed frames + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012-2014 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_SLICE_ +#define _PIPO_SLICE_ + +#include "pipo.h" + +#include <math.h> +#include <vector> + +class PiPoSlice : public PiPo +{ +public: + enum WindowTypeE { UndefinedWindow = -1, NoWindow = 0, HannWindow, HammingWindow, BlackmanWindow, BlackmanHarrisWindow, SineWindow, NumWindows }; + enum NormModeE { UndefinedNorm = -1, NoNorm = 0, LinearNorm, PowerNorm }; + +private: + std::vector<float> buffer; + std::vector<float> frame; + std::vector<float> window; + enum WindowTypeE windowType; + enum NormModeE normMode; + double windScale; + + double frameRate; + int inputIndex; + unsigned int inputStride; + unsigned int inputHop; + +public: + PiPoScalarAttr<int> size; + PiPoScalarAttr<int> hop; + PiPoScalarAttr<PiPo::Enumerate> wind; + PiPoScalarAttr<PiPo::Enumerate> norm; + + PiPoSlice(Parent *parent, PiPo *receiver = NULL) : + PiPo(parent, receiver), + buffer(), frame(), window(), + size(this, "size", "Slice Frame Size", true, 2048), + hop(this, "hop", "Slice Hop Size", true, 512), + wind(this, "wind", "Slice Window Type", true, HannWindow), + norm(this, "norm", "Normalize Slice", true, NoNorm) + { + this->windowType = UndefinedWindow; + this->normMode = UndefinedNorm; + this->windScale = 1.0; + + this->inputIndex = 0; + this->inputStride = 0; + this->inputHop = 0; + + this->wind.addEnumItem("none", "No window"); + this->wind.addEnumItem("hann", "Hann window"); + this->wind.addEnumItem("hamming", "Hamming window"); + this->wind.addEnumItem("blackman", "Blackman window"); + this->wind.addEnumItem("blackmanharris", "Blackman-Harris window"); + this->wind.addEnumItem("sine", "Half sine window"); + + this->norm.addEnumItem("none", "No normalization"); + this->norm.addEnumItem("linear", "Linear normalization"); + this->norm.addEnumItem("power", "Power normalization"); + } + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + unsigned int frameSize = this->size.get(); + unsigned int hopSize = this->hop.get(); + enum WindowTypeE windowType = (enum WindowTypeE)this->wind.get(); + enum NormModeE normMode = (enum NormModeE)this->norm.get(); + unsigned int inputStride = width * size; + + if(frameSize < 1) + frameSize = 1; + if(hopSize < 1) + hopSize = 1; + + offset += 500.0 * frameSize / rate; + + this->frameRate = rate; + this->inputStride = inputStride; + this->inputHop = hopSize; + + if(frameSize != this->frame.size()) + { + this->buffer.resize(frameSize); + this->frame.resize(frameSize); + this->window.resize(frameSize); + this->windowType = UndefinedWindow; + this->inputIndex = 0; + } + + if(windowType != this->windowType || normMode != this->normMode) + { + this->windowType = windowType; + + double linNorm, powNorm; + initWindow(&this->window[0], frameSize, windowType, normMode, linNorm, powNorm); + + switch(normMode) + { + default: + case NoNorm: + this->windScale = 1.0; + break; + + case LinearNorm: + this->windScale = linNorm; + break; + + case PowerNorm: + this->windScale = powNorm; + break; + } + } + + return this->propagateStreamAttributes(0, rate / (double)hopSize, offset, 1, frameSize, labels, 0, (double)frameSize / rate, 1); + } + + int reset(void) + { + this->inputIndex = 0; + + return this->propagateReset(); + } + + int frames(double time, double weight, float *values, unsigned int size, unsigned int num) + { + int inputIndex = this->inputIndex; + unsigned int outputSize = static_cast<unsigned int>(this->frame.size()); + NormModeE normMode = (enum NormModeE)this->norm.get(); + int frameIndex = 0; + + while(num > 0) + { + if(inputIndex >= 0) + { + unsigned int inputSpace = outputSize - inputIndex; + unsigned int numInput = num; + + if(numInput > inputSpace) + numInput = inputSpace; + + if(size == 1) + memcpy(&this->buffer[inputIndex], values, numInput * sizeof(float)); + else + { + for(unsigned int i = 0, j = 0; i < numInput; i++, j += size) + this->buffer[inputIndex + i] = values[j]; + } + + inputIndex += numInput; + frameIndex += numInput; + + if(inputIndex == (int)outputSize) + { + int halfWindowSize = outputSize / 2; + double frameTime = time + 1000.0 * (double)(frameIndex - halfWindowSize) / this->frameRate; + int ret; + + if(this->windowType > NoWindow) + { + this->frame = this->buffer; + + /* apply window and normalization */ + for(unsigned int i = 0; i < outputSize; i++) + this->frame[i] *= (this->window[i] * this->windScale); + + ret = this->propagateFrames(frameTime, weight, &this->frame[0], outputSize, 1); + } + else if(normMode > NoNorm) + { + this->frame = this->buffer; + + /* apply normalization */ + for(unsigned int i = 0; i < outputSize; i++) + this->frame[i] *= this->windScale; + + ret = this->propagateFrames(frameTime, weight, &this->frame[0], outputSize, 1); + } + else + ret = this->propagateFrames(frameTime, weight, &this->buffer[0], outputSize, 1); + + if(ret != 0) + return ret; + + int overlap = outputSize - this->inputHop; + + if(overlap > 0) + memmove(&this->buffer[0], &this->buffer[this->inputHop], overlap * sizeof(float)); + + inputIndex = overlap; + } + + values += numInput; + num -= numInput; + } + else + { + unsigned int numDiscard = -inputIndex; + + if(numDiscard > num) + numDiscard = num; + + inputIndex += numDiscard; + values += numDiscard; + num -= numDiscard; + } + } + + this->inputIndex = inputIndex; + + return 0; + } + +private: + static void initHannWindow(float *ptr, unsigned int size, double &linNorm, double &powNorm) + { + double linSum = 0.0; + double powSum = 0.0; + + for(unsigned int i = 0; i < size; i++) + { + double phi = 2.0 * M_PI * (double)i / (double)size; + double f = 0.5 - 0.5 * cos(phi); + + ptr[i] = f; + + linSum += f; + powSum += f * f; + } + + linNorm = size / linSum; + powNorm = sqrt(size / powSum); + } + + static void initHammingWindow(float *ptr, unsigned int size, double &linNorm, double &powNorm) + { + double linSum = 0.0; + double powSum = 0.0; + + for(unsigned int i = 0; i < size; i++) + { + double phi = 2.0 * M_PI * (double)i / (double)size; + double f = 0.54 - 0.46 * cos(phi); + + ptr[i] = f; + + linSum += f; + powSum += f * f; + } + + linNorm = size / linSum; + powNorm = sqrt(size / powSum); + } + + static void initBlackmanWindow(float *ptr, unsigned int size, double &linNorm, double &powNorm) + { + double linSum = 0.0; + double powSum = 0.0; + + for(unsigned int i = 0; i < size; i++) + { + double phi = 2.0 * M_PI * (double)i / (double)size; + double f = 0.42 - 0.5 * cos(phi) + 0.08 * cos(2.0 * phi); + + ptr[i] = f; + + linSum += f; + powSum += f * f; + } + + linNorm = size / linSum; + powNorm = sqrt(size / powSum); + } + + static void initBlackmanHarrisWindow(float *ptr, unsigned int size, double &linNorm, double &powNorm) + { + double linSum = 0.0; + double powSum = 0.0; + double a0 = 0.35875; + double a1 = 0.48829; + double a2 = 0.14128; + double a3 = 0.01168; + + for(unsigned int i = 0; i < size; i++) + { + double phi = 2.0 * M_PI * (double)i / (double)size; + double f = a0 - a1 * cos(phi) + a2 * cos(2.0 * phi) - a3 * cos(3.0 * phi); + + ptr[i] = f; + + linSum += f; + powSum += f * f; + } + + linNorm = size / linSum; + powNorm = sqrt(size / powSum); + } + + static void initSineWindow(float *ptr, unsigned int size, double &linNorm, double &powNorm) + { + double linSum = 0.0; + double powSum = 0.0; + + for(unsigned int i = 0; i < size; i++) + { + double phi = M_PI * (double)i / (double)size; + double f = sin(phi); + + ptr[i] = f; + + linSum += f; + powSum += f * f; + } + + linNorm = size / linSum; + powNorm = sqrt(size / powSum); + } + + static void initWindow(float *ptr, unsigned int size, int window, NormModeE normMode, double &linNorm, double &powNorm) + { + switch(window) + { + default: + case PiPoSlice::NoWindow: + linNorm = powNorm = 1.0; + break; + + case PiPoSlice::HannWindow: + initHannWindow(ptr, size, linNorm, powNorm); + break; + + case PiPoSlice::HammingWindow: + return initHammingWindow(ptr, size, linNorm, powNorm); + break; + + case PiPoSlice::BlackmanWindow: + initBlackmanWindow(ptr, size, linNorm, powNorm); + break; + + case PiPoSlice::BlackmanHarrisWindow: + initBlackmanHarrisWindow(ptr, size, linNorm, powNorm); + break; + + case PiPoSlice::SineWindow: + initSineWindow(ptr, size, linNorm, powNorm); + break; + } + } +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoSum.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoSum.h new file mode 100644 index 0000000..92ad3ae --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/PiPoSum.h @@ -0,0 +1,99 @@ +/** + * @file PiPoSum.h + * @author Norbert.Schnell@ircam.fr + * + * @brief PiPo sum values of data streams + * + * @ingroup pipomodules + * + * @copyright + * Copyright (C) 2012-2014 by IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _PIPO_SUM_ +#define _PIPO_SUM_ + +#include "PiPo.h" + +#include <math.h> +#include <vector> +using namespace std; + +class PiPoSum : public PiPo +{ +private: + bool normSum; + +public: + PiPoScalarAttr<bool> norm; + PiPoScalarAttr<const char *> colname; + + PiPoSum(Parent *parent, PiPo *receiver = NULL) + : PiPo(parent, receiver), + norm(this, "norm", "Normalize Sum With Size", false, false), + colname(this, "colname", "Output Column Name", true, "") + { } + + ~PiPoSum(void) + { } + + int streamAttributes(bool hasTimeTags, double rate, double offset, unsigned int width, unsigned int size, const char **labels, bool hasVarSize, double domain, unsigned int maxFrames) + { + const char *name = colname.get(); + return this->propagateStreamAttributes(hasTimeTags, rate, offset, 1, 1, name ? &name : NULL, 0, 0.0, 1); + } + + int frames(double time, double weight, float *values, unsigned int size, unsigned int num) + { + bool normSum = this->norm.get(); + + for(unsigned int i = 0; i < num; i++) + { + float sum = 0.0; + + for(unsigned int j = 0; j < size; j++) + sum += values[j]; + + if(normSum) + sum /= size; + + int ret = this->propagateFrames(time, weight, &sum, 1, 1); + + if(ret != 0) + return ret; + + values += size; + } + + return 0; + } +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/TempMod.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/TempMod.h new file mode 100644 index 0000000..478fa45 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/TempMod.h @@ -0,0 +1,303 @@ +/** + * @file TempMod.h + * @author Norbert.Schnell@ircam.fr + * + * @brief Temporal modeling util + * + * @copyright + * Copyright (C) 2013 by IMTR IRCAM – Centre Pompidou, Paris, France. + * All rights reserved. + * + * License (BSD 3-clause) + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name of the copyright holder 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. + */ + +#ifndef _TEMP_MOD_ +#define _TEMP_MOD_ + +extern "C" { +#include "rta_configuration.h" +#include "rta_selection.h" + +#include <float.h> +#include <math.h> +} + +class TempMod +{ +public: + enum ValueId { Min, Max, Mean, StdDev, NumIds }; + + bool enabled[NumIds]; + + PiPoValue min; + PiPoValue max; + PiPoValue sum; + PiPoValue sumOfSquare; + + unsigned int num; + + TempMod(void) + { + for(unsigned int i = 0; i < NumIds; i++) + this->enabled[i] = false; + + this->min = FLT_MAX; + this->max = -FLT_MAX; + + this->sum = 0.0; /* init sum */ + this->sumOfSquare = 0.0; /* init sum of squares */ + + this->num = 0; + }; + + void enable(enum ValueId valId, bool enable = true) + { + this->enabled[valId] = enable; + } + + void enable(bool minEn, bool maxEn = false, bool meanEn = false, bool stddevEn = false) + { + this->enabled[Min] = minEn; + this->enabled[Max] = maxEn; + this->enabled[Mean] = meanEn; + this->enabled[StdDev] = stddevEn; + } + + void select(enum ValueId valId) + { + for(unsigned int i = 0; i < NumIds; i++) + this->enabled[i] = (i == (unsigned int)valId); + } + + unsigned int getNumValues(void) + { + int numValues = 0; + + for(unsigned int i = 0; i < NumIds; i++) + numValues += this->enabled[i]; + + return numValues; + } + + void reset(void) + { + this->min = FLT_MAX; + this->max = -FLT_MAX; + + this->sum = 0.0; /* init sum */ + this->sumOfSquare = 0.0; /* init sum of squares */ + + this->num = 0; + }; + + void input(PiPoValue value) + { + if(this->enabled[Min] && value < this->min) + this->min = value; + + if(this->enabled[Max] && value > this->max) + this->max = value; + + if(this->enabled[Mean] || this->enabled[StdDev]) + this->sum += value; + + if(this->enabled[StdDev]) + this->sumOfSquare += (value * value); + + this->num++; + }; + + unsigned int getValues(PiPoValue *values, unsigned int numValues, bool reset = false) + { + if(this->num > 0) + { + unsigned int index = 0; + + if(this->enabled[Min] && index < numValues) + values[index++] = this->min; + + if(this->enabled[Max] && index < numValues) + values[index++] = this->max; + + if((this->enabled[Mean] || this->enabled[StdDev]) && index < numValues) + { + PiPoValue norm = 1.0 / this->num; + PiPoValue mean = this->sum * norm; + + values[index++] = mean; + + if(this->enabled[StdDev] && index < numValues) + { + PiPoValue mean = this->sum * norm; + PiPoValue meanOfSquare = this->sumOfSquare * norm; + PiPoValue squareOfmean = mean * mean; + PiPoValue stddev; + + if(meanOfSquare > squareOfmean) + stddev = sqrt(meanOfSquare - squareOfmean); + else + stddev = 0.0; + + values[index++] = stddev; + } + } + + if(reset) + this->reset(); + + return index; + } + + return 0; + } + + unsigned int getLabels(const char *name, char **labels, unsigned int strLen, unsigned int numLabels) + { + unsigned int index = 0; + + if(name == NULL) + name = ""; + + if(this->enabled[Min] && index < numLabels) + snprintf(labels[index++], strLen, "%sMin", name); + + if(this->enabled[Max] && index < numLabels) + snprintf(labels[index++], strLen, "%sMax", name); + + if(this->enabled[Mean] && index < numLabels) + snprintf(labels[index++], strLen, "%sMean", name); + + if(this->enabled[StdDev] && index < numLabels) + snprintf(labels[index++], strLen, "%sStdDev", name); + + return index; + } +}; + +class TempModArray +{ +public: + std::vector<TempMod> array; + + TempModArray(unsigned int size = 0) : array(size) + { + } + + ~TempModArray(void) + { + } + + void resize(unsigned int size) + { + this->array.resize(size); + } + + void enable(enum TempMod::ValueId valId, bool enable = true) + { + for(std::vector<TempMod>::iterator iter = this->array.begin(); iter != this->array.end(); iter++) + iter->enable(valId, enable); + } + + void enable(bool minEn, bool maxEn = false, bool meanEn = false, bool stddevEn = false) + { + for(std::vector<TempMod>::iterator iter = this->array.begin(); iter != this->array.end(); iter++) + iter->enable(minEn, maxEn, meanEn, stddevEn); + } + + void select(enum TempMod::ValueId valId) + { + for(std::vector<TempMod>::iterator iter = this->array.begin(); iter != this->array.end(); iter++) + iter->select(valId); + } + + unsigned int getNumValues(void) + { + int numValues = 0; + + for(std::vector<TempMod>::iterator iter = this->array.begin(); iter != this->array.end(); iter++) + numValues += iter->getNumValues(); + + return numValues; + } + + void reset(void) + { + for(std::vector<TempMod>::iterator iter = this->array.begin(); iter != this->array.end(); iter++) + iter->reset(); + }; + + void input(PiPoValue *values, unsigned int numValues) + { + std::vector<TempMod>::iterator iter; + unsigned int i; + + for(iter = this->array.begin(), i = 0; iter != this->array.end() && i < numValues; iter++, i++) + iter->input(values[i]); + }; + + unsigned int getValues(PiPoValue *values, unsigned int numValues, bool reset = false) + { + int totalValues = 0; + std::vector<TempMod>::iterator iter; + + for(iter = this->array.begin(); iter != this->array.end() && numValues > 0; iter++) + { + unsigned int num = iter->getValues(values, numValues, reset); + + totalValues += num; + values += num; + numValues -= num; + } + + return totalValues; + } + + unsigned int getLabels(const char **valueNames, unsigned int numValues, char **labels, unsigned int strLen, unsigned int numLabels) + { + unsigned int totalLabels = 0; + std::vector<TempMod>::iterator iter; + unsigned int i; + + for(iter = this->array.begin(), i = 0; iter != this->array.end() && i < numValues; iter++, i++) + { + unsigned int num; + + if(valueNames != NULL) + num = iter->getLabels(valueNames[i], labels, strLen, numLabels); + else + num = iter->getLabels(NULL, labels, strLen, numLabels); + + totalLabels += num; + labels += num; + numLabels -= num; + } + + return totalLabels; + } +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/mimo/mimo_stats.h b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/mimo/mimo_stats.h new file mode 100644 index 0000000..756ea0b --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/pipo/src/modules/mimo/mimo_stats.h @@ -0,0 +1,306 @@ + +#include <string> +#include <sstream> +#include <iostream> +#include <cfloat> +#include <vector> +#include <memory> + +#include "mimo.h" +//#include <picojson.h> + +/* + template <typename Iterable> + Json::Value tojson(Iterable const& cont) { + Json::Value v; + for (auto&& element: cont) { + v.append(element); + } + return v; + } +*/ + +class stats_model_data : public mimo_model_data +{ +public: + std::vector<unsigned long> num; // number of elements present + std::vector<double> mean, std, min, max; + + // helper function for json formatting + template<typename T> + std::string vector2json (std::vector<T> v) + { + std::stringstream ss; + + ss << "["; + for (size_t i = 0; i < v.size(); ++i) + { + if (i != 0) + ss << ","; + ss << v[i]; + } + ss << "]"; + + return ss.str(); + } + + char *to_json (char *out, int n) throw() override + { + std::stringstream ss; + + ss << "{ \"num\": " << vector2json<unsigned long>(num) << "," << std::endl + << " \"min\": " << vector2json<double>(min) << "," << std::endl + << " \"max\": " << vector2json<double>(max) << "," << std::endl + << " \"mean\": " << vector2json<double>(mean) << "," << std::endl + << " \"std\": " << vector2json<double>(std) << "," << std::endl + << "}"; + + std::string ret = ss.str(); + if (ret.size() > n) + throw std::runtime_error("json string too long"); + else + strcpy(out, ret.c_str()); + + return out; + } + + int from_json (const char *json) override + { + // later + return 0; + } +}; + + + +/***************************************************************************** + * + * example mimo module: calculate basic descriptive statistics + * + */ + +class mimo_stats : public Mimo +{ +public: + // constructor + mimo_stats (PiPo::Parent *parent, Mimo *receiver = NULL) + : Mimo(parent, receiver), + distance_(0.0), + alpha(this, "alpha", "Normalization step factor for training iteration", false, 0.1) + { }; + + /** prepare for training, allocate training output data + + @param streamattr attributes of input data + @return 0 for ok or a negative error code (to be specified), -1 for an unspecified error + */ + int setup (int numbuffers, int numtracks, int tracksize[], const PiPoStreamAttributes *streamattr[]) override + { + char astr[1000]; + printf("%s b %d t %d attr:\n%s\n", __PRETTY_FUNCTION__, numbuffers, numtracks, streamattr[0]->to_string(astr, 1000)); + + if (numtracks != 1) + return -1; + + // save for later + numbuffers_ = numbuffers; + stream_ = *streamattr[0]; + bufsize_.assign(tracksize, tracksize + numbuffers); // copy array via pointer iterator + + // set size and fill with 0 + size_ = stream_.dims[0] * stream_.dims[1]; + sum_.assign(size_, 0); + sum2_.assign(size_, 0); + stats_.num.assign(size_, 0); + stats_.mean.resize(size_); + stats_.std.resize(size_); + stats_.min.assign(size_, FLT_MAX); + stats_.max.assign(size_, -FLT_MAX); + + // for the sake of the example: reserve space for training output data when iterating + traindata_.resize(numbuffers_); + for (int i = 0; i < numbuffers_; i++) + traindata_[i].resize(tracksize[i]); + + return propagateSetup(numbuffers, numtracks, tracksize, streamattr); + } + + /** the train method receives the training data set and performs one iteration of training + Each iteration can output transformed input data by calling propagateTrain(). + */ + int train (int itercount, int bufferindex, int trackindex, int numframes, const PiPoValue *indata, const double *timetags, const int *varsize) override + { + const PiPoValue *data = indata; + PiPoValue *outdata; + + printf("%s %d %d %d num %d %p %p %p\n", __PRETTY_FUNCTION__, itercount, bufferindex, trackindex, numframes, data, timetags, varsize); + + if (itercount == 0) + { // for the sake of the example: this mimo module can iterate, but stats are calculated only at first iteration + for (int i = 0; i < numframes; i++) + { + int mtxsize = stream_.hasVarSize ? varsize[i] : size_; + + for (int j = 0; j < mtxsize; j++) + { + PiPoValue val = data[j]; + + stats_.num[j]++; + sum_[j] += val; + sum2_[j] += val * val; + if (val < stats_.min[j]) stats_.min[j] = val; + if (val > stats_.max[j]) stats_.max[j] = val; + } + + data += size_; + } + + // last buffer: finish statistics + if (bufferindex == numbuffers_ - 1) + for (int j = 0; j < size_; j++) + { + stats_.mean[j] = sum_[j] / stats_.num[j]; + stats_.std[j] = sqrt(sum2_[j] / stats_.num[j] - stats_.mean[j] * stats_.mean[j]); + } + } + + // for the sake of the example: when iterating, exponentially approach normalised data: + // multiply by factor attribute alpha, output avg. distance to full normalisation + if (itercount > 0) + { + // check if input track size has changed since setup + if (numframes != bufsize_[bufferindex]) + { + traindata_[bufferindex].resize(numframes); + bufsize_[bufferindex] = numframes; + } + + float factor = alpha.get() * itercount; + data = indata; // indata is always original data, we want to iterate on previous output + outdata = &traindata_[bufferindex][0]; + + for (int i = 0; i < numframes; i++) + { + int mtxsize = stream_.hasVarSize ? varsize[i] : size_; + int j; + double norm; + + for (j = 0; j < mtxsize; j++) + { + if (stats_.std[j] != 0) + norm = (data[j] - stats_.mean[j]) / stats_.std[j]; + else + norm = (data[j] - stats_.mean[j]); + + // banal interpolation + outdata[j] = (1 - factor) * data[j] + factor * norm; + } + + if (i == 0 && mtxsize > 0) printf("normalise %f .. %f -> %f\n", data[j - 1], norm, outdata[j - 1]); + + for (; j < size_; j++) + outdata[j] = 0; + + data += size_; + outdata += size_; + } + + distance_ = 1.0 - factor; + outdata = &traindata_[bufferindex][0]; + } + else // after first iteration, output input data + outdata = (PiPoValue *) indata; + + return propagateTrain(itercount, bufferindex, trackindex, numframes, outdata, timetags, varsize); + } + + /** return trained model parameters */ + stats_model_data *getmodel () override { return &stats_; } + + double getmetric () override { return distance_; } + + int maxiter () override { return 10; } + + + /**************************************************************************** + * decoding: standardise incoming data + */ + + int streamAttributes (bool hasTimeTags, double rate, double offset, + unsigned int width, unsigned int height, + const char **labels, bool hasVarSize, + double domain, unsigned int maxFrames) override + { + // check with training attrs + if (width != stream_.dims[0] || height != stream_.dims[1]) + return -1; + + // make labels + const char **newlabels = NULL; + if (labels) + { + const std::string suffix("Norm"); + newlabels = (const char **) alloca(width * sizeof(char *)); + labelstore_.resize(width); + + for (unsigned int i = 0; i < width; i++) + { + labelstore_[i] = std::string(labels[i]) + suffix; + newlabels[i] = labelstore_[i].c_str(); + } + } + + return propagateStreamAttributes(hasTimeTags, rate, offset, width, height, + newlabels, hasVarSize, domain, maxFrames); + } + + + int frames (double time, double weight, PiPoValue *values, unsigned int size, unsigned int num) override + { + bool ok = 1; + + for (unsigned int i = 0; i < num; i++) + { + PiPoValue norm[size]; + + // normalise + for (unsigned int j = 0; j < size; j++) + if (stats_.std[j] != 0) + norm[j] = (values[j] - stats_.mean[j]) / stats_.std[j]; + else + norm[j] = (values[j] - stats_.mean[j]); + + ok &= propagateFrames(time, weight, norm, size, 1) == 0; + + values += size; + } + + return ok ? 0 : -1; + } + + +private: + // training + PiPoStreamAttributes stream_; + int numbuffers_; + int size_; // matrix size + std::vector<int> bufsize_; // num frames for each buffer + std::vector<double> sum_, sum2_; // sum and sum of squares accumulators + stats_model_data stats_; + std::vector<std::string> labelstore_; + std::vector<std::vector<PiPoValue>> traindata_; + double distance_; + + // decoding +public: + PiPoScalarAttr<float> alpha; + //todo: mode attribute: normalise mean/std or min/max +}; + + +/** EMACS ** + * Local variables: + * mode: c + * c-basic-offset:2 + * End: + */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/third_party/catch/LICENSE_1_0.txt b/examples/ofx/Bitalino_rapidmix/dependencies/third_party/catch/LICENSE_1_0.txt new file mode 100644 index 0000000..127a5bc --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/third_party/catch/LICENSE_1_0.txt @@ -0,0 +1,23 @@ +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/third_party/catch/catch.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/third_party/catch/catch.hpp new file mode 100644 index 0000000..2a09fd1 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/third_party/catch/catch.hpp @@ -0,0 +1,11069 @@ +/* + * Catch v1.7.2 + * Generated: 2017-02-13 15:57:33.350226 + * ---------------------------------------------------------- + * This file has been merged from multiple headers. Please don't edit it directly + * Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved. + * + * Distributed under the Boost Software License, Version 1.0. (See accompanying + * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED +#define TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED + +#define TWOBLUECUBES_CATCH_HPP_INCLUDED + +#ifdef __clang__ +# pragma clang system_header +#elif defined __GNUC__ +# pragma GCC system_header +#endif + +// #included from: internal/catch_suppress_warnings.h + +#ifdef __clang__ +# ifdef __ICC // icpc defines the __clang__ macro +# pragma warning(push) +# pragma warning(disable: 161 1682) +# else // __ICC +# pragma clang diagnostic ignored "-Wglobal-constructors" +# pragma clang diagnostic ignored "-Wvariadic-macros" +# pragma clang diagnostic ignored "-Wc99-extensions" +# pragma clang diagnostic ignored "-Wunused-variable" +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wpadded" +# pragma clang diagnostic ignored "-Wc++98-compat" +# pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +# pragma clang diagnostic ignored "-Wswitch-enum" +# pragma clang diagnostic ignored "-Wcovered-switch-default" +# endif +#elif defined __GNUC__ +# pragma GCC diagnostic ignored "-Wvariadic-macros" +# pragma GCC diagnostic ignored "-Wunused-variable" +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wpadded" +#endif +#if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER) +# define CATCH_IMPL +#endif + +#ifdef CATCH_IMPL +# ifndef CLARA_CONFIG_MAIN +# define CLARA_CONFIG_MAIN_NOT_DEFINED +# define CLARA_CONFIG_MAIN +# endif +#endif + +// #included from: internal/catch_notimplemented_exception.h +#define TWOBLUECUBES_CATCH_NOTIMPLEMENTED_EXCEPTION_H_INCLUDED + +// #included from: catch_common.h +#define TWOBLUECUBES_CATCH_COMMON_H_INCLUDED + +// #included from: catch_compiler_capabilities.h +#define TWOBLUECUBES_CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED + +// Detect a number of compiler features - mostly C++11/14 conformance - by compiler +// The following features are defined: +// +// CATCH_CONFIG_CPP11_NULLPTR : is nullptr supported? +// CATCH_CONFIG_CPP11_NOEXCEPT : is noexcept supported? +// CATCH_CONFIG_CPP11_GENERATED_METHODS : The delete and default keywords for compiler generated methods +// CATCH_CONFIG_CPP11_IS_ENUM : std::is_enum is supported? +// CATCH_CONFIG_CPP11_TUPLE : std::tuple is supported +// CATCH_CONFIG_CPP11_LONG_LONG : is long long supported? +// CATCH_CONFIG_CPP11_OVERRIDE : is override supported? +// CATCH_CONFIG_CPP11_UNIQUE_PTR : is unique_ptr supported (otherwise use auto_ptr) +// CATCH_CONFIG_CPP11_SHUFFLE : is std::shuffle supported? +// CATCH_CONFIG_CPP11_TYPE_TRAITS : are type_traits and enable_if supported? + +// CATCH_CONFIG_CPP11_OR_GREATER : Is C++11 supported? + +// CATCH_CONFIG_VARIADIC_MACROS : are variadic macros supported? +// CATCH_CONFIG_COUNTER : is the __COUNTER__ macro supported? +// CATCH_CONFIG_WINDOWS_SEH : is Windows SEH supported? +// **************** +// Note to maintainers: if new toggles are added please document them +// in configuration.md, too +// **************** + +// In general each macro has a _NO_<feature name> form +// (e.g. CATCH_CONFIG_CPP11_NO_NULLPTR) which disables the feature. +// Many features, at point of detection, define an _INTERNAL_ macro, so they +// can be combined, en-mass, with the _NO_ forms later. + +// All the C++11 features can be disabled with CATCH_CONFIG_NO_CPP11 + +#ifdef __cplusplus + +# if __cplusplus >= 201103L +# define CATCH_CPP11_OR_GREATER +# endif + +# if __cplusplus >= 201402L +# define CATCH_CPP14_OR_GREATER +# endif + +#endif + +#ifdef __clang__ + +# if __has_feature(cxx_nullptr) +# define CATCH_INTERNAL_CONFIG_CPP11_NULLPTR +# endif + +# if __has_feature(cxx_noexcept) +# define CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT +# endif + +# if defined(CATCH_CPP11_OR_GREATER) +# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS _Pragma( "clang diagnostic ignored \"-Wparentheses\"" ) +# endif + +#endif // __clang__ + +//////////////////////////////////////////////////////////////////////////////// +// Borland +#ifdef __BORLANDC__ + +#endif // __BORLANDC__ + +//////////////////////////////////////////////////////////////////////////////// +// EDG +#ifdef __EDG_VERSION__ + +#endif // __EDG_VERSION__ + +//////////////////////////////////////////////////////////////////////////////// +// Digital Mars +#ifdef __DMC__ + +#endif // __DMC__ + +//////////////////////////////////////////////////////////////////////////////// +// GCC +#ifdef __GNUC__ + +# if __GNUC__ == 4 && __GNUC_MINOR__ >= 6 && defined(__GXX_EXPERIMENTAL_CXX0X__) +# define CATCH_INTERNAL_CONFIG_CPP11_NULLPTR +# endif + +# if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS) && defined(CATCH_CPP11_OR_GREATER) +# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS _Pragma( "GCC diagnostic ignored \"-Wparentheses\"" ) +# endif + +// - otherwise more recent versions define __cplusplus >= 201103L +// and will get picked up below + +#endif // __GNUC__ + +//////////////////////////////////////////////////////////////////////////////// +// Visual C++ +#ifdef _MSC_VER + +#define CATCH_INTERNAL_CONFIG_WINDOWS_SEH + +#if (_MSC_VER >= 1600) +# define CATCH_INTERNAL_CONFIG_CPP11_NULLPTR +# define CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR +#endif + +#if (_MSC_VER >= 1900 ) // (VC++ 13 (VS2015)) +#define CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT +#define CATCH_INTERNAL_CONFIG_CPP11_GENERATED_METHODS +#define CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE +#define CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS +#endif + +#endif // _MSC_VER + +//////////////////////////////////////////////////////////////////////////////// + +// Use variadic macros if the compiler supports them +#if ( defined _MSC_VER && _MSC_VER > 1400 && !defined __EDGE__) || \ + ( defined __WAVE__ && __WAVE_HAS_VARIADICS ) || \ + ( defined __GNUC__ && __GNUC__ >= 3 ) || \ + ( !defined __cplusplus && __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L ) + +#define CATCH_INTERNAL_CONFIG_VARIADIC_MACROS + +#endif + +// Use __COUNTER__ if the compiler supports it +#if ( defined _MSC_VER && _MSC_VER >= 1300 ) || \ + ( defined __GNUC__ && __GNUC__ >= 4 && __GNUC_MINOR__ >= 3 ) || \ + ( defined __clang__ && __clang_major__ >= 3 ) + +#define CATCH_INTERNAL_CONFIG_COUNTER + +#endif + +//////////////////////////////////////////////////////////////////////////////// +// C++ language feature support + +// catch all support for C++11 +#if defined(CATCH_CPP11_OR_GREATER) + +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_NULLPTR) +# define CATCH_INTERNAL_CONFIG_CPP11_NULLPTR +# endif + +# ifndef CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT +# define CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT +# endif + +# ifndef CATCH_INTERNAL_CONFIG_CPP11_GENERATED_METHODS +# define CATCH_INTERNAL_CONFIG_CPP11_GENERATED_METHODS +# endif + +# ifndef CATCH_INTERNAL_CONFIG_CPP11_IS_ENUM +# define CATCH_INTERNAL_CONFIG_CPP11_IS_ENUM +# endif + +# ifndef CATCH_INTERNAL_CONFIG_CPP11_TUPLE +# define CATCH_INTERNAL_CONFIG_CPP11_TUPLE +# endif + +# ifndef CATCH_INTERNAL_CONFIG_VARIADIC_MACROS +# define CATCH_INTERNAL_CONFIG_VARIADIC_MACROS +# endif + +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_LONG_LONG) +# define CATCH_INTERNAL_CONFIG_CPP11_LONG_LONG +# endif + +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_OVERRIDE) +# define CATCH_INTERNAL_CONFIG_CPP11_OVERRIDE +# endif +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) +# define CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR +# endif +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE) +# define CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE +# endif +# if !defined(CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS) +# define CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS +# endif + +#endif // __cplusplus >= 201103L + +// Now set the actual defines based on the above + anything the user has configured +#if defined(CATCH_INTERNAL_CONFIG_CPP11_NULLPTR) && !defined(CATCH_CONFIG_CPP11_NO_NULLPTR) && !defined(CATCH_CONFIG_CPP11_NULLPTR) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_NULLPTR +#endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_NOEXCEPT) && !defined(CATCH_CONFIG_CPP11_NO_NOEXCEPT) && !defined(CATCH_CONFIG_CPP11_NOEXCEPT) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_NOEXCEPT +#endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_GENERATED_METHODS) && !defined(CATCH_CONFIG_CPP11_NO_GENERATED_METHODS) && !defined(CATCH_CONFIG_CPP11_GENERATED_METHODS) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_GENERATED_METHODS +#endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_IS_ENUM) && !defined(CATCH_CONFIG_CPP11_NO_IS_ENUM) && !defined(CATCH_CONFIG_CPP11_IS_ENUM) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_IS_ENUM +#endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_TUPLE) && !defined(CATCH_CONFIG_CPP11_NO_TUPLE) && !defined(CATCH_CONFIG_CPP11_TUPLE) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_TUPLE +#endif +#if defined(CATCH_INTERNAL_CONFIG_VARIADIC_MACROS) && !defined(CATCH_CONFIG_NO_VARIADIC_MACROS) && !defined(CATCH_CONFIG_VARIADIC_MACROS) +# define CATCH_CONFIG_VARIADIC_MACROS +#endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_LONG_LONG) && !defined(CATCH_CONFIG_CPP11_NO_LONG_LONG) && !defined(CATCH_CONFIG_CPP11_LONG_LONG) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_LONG_LONG +#endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_OVERRIDE) && !defined(CATCH_CONFIG_CPP11_NO_OVERRIDE) && !defined(CATCH_CONFIG_CPP11_OVERRIDE) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_OVERRIDE +#endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_CPP11_NO_UNIQUE_PTR) && !defined(CATCH_CONFIG_CPP11_UNIQUE_PTR) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_UNIQUE_PTR +#endif +// Use of __COUNTER__ is suppressed if __JETBRAINS_IDE__ is #defined (meaning we're being parsed by a JetBrains IDE for +// analytics) because, at time of writing, __COUNTER__ is not properly handled by it. +// This does not affect compilation +#if defined(CATCH_INTERNAL_CONFIG_COUNTER) && !defined(CATCH_CONFIG_NO_COUNTER) && !defined(CATCH_CONFIG_COUNTER) && !defined(__JETBRAINS_IDE__) +# define CATCH_CONFIG_COUNTER +#endif +#if defined(CATCH_INTERNAL_CONFIG_CPP11_SHUFFLE) && !defined(CATCH_CONFIG_CPP11_NO_SHUFFLE) && !defined(CATCH_CONFIG_CPP11_SHUFFLE) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_SHUFFLE +#endif +# if defined(CATCH_INTERNAL_CONFIG_CPP11_TYPE_TRAITS) && !defined(CATCH_CONFIG_CPP11_NO_TYPE_TRAITS) && !defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) && !defined(CATCH_CONFIG_NO_CPP11) +# define CATCH_CONFIG_CPP11_TYPE_TRAITS +# endif +#if defined(CATCH_INTERNAL_CONFIG_WINDOWS_SEH) && !defined(CATCH_CONFIG_NO_WINDOWS_SEH) && !defined(CATCH_CONFIG_WINDOWS_SEH) +# define CATCH_CONFIG_WINDOWS_SEH +#endif + +#if !defined(CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS) +# define CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS +#endif + +// noexcept support: +#if defined(CATCH_CONFIG_CPP11_NOEXCEPT) && !defined(CATCH_NOEXCEPT) +# define CATCH_NOEXCEPT noexcept +# define CATCH_NOEXCEPT_IS(x) noexcept(x) +#else +# define CATCH_NOEXCEPT throw() +# define CATCH_NOEXCEPT_IS(x) +#endif + +// nullptr support +#ifdef CATCH_CONFIG_CPP11_NULLPTR +# define CATCH_NULL nullptr +#else +# define CATCH_NULL NULL +#endif + +// override support +#ifdef CATCH_CONFIG_CPP11_OVERRIDE +# define CATCH_OVERRIDE override +#else +# define CATCH_OVERRIDE +#endif + +// unique_ptr support +#ifdef CATCH_CONFIG_CPP11_UNIQUE_PTR +# define CATCH_AUTO_PTR( T ) std::unique_ptr<T> +#else +# define CATCH_AUTO_PTR( T ) std::auto_ptr<T> +#endif + +#define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line +#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) +#ifdef CATCH_CONFIG_COUNTER +# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __COUNTER__ ) +#else +# define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ ) +#endif + +#define INTERNAL_CATCH_STRINGIFY2( expr ) #expr +#define INTERNAL_CATCH_STRINGIFY( expr ) INTERNAL_CATCH_STRINGIFY2( expr ) + +#include <sstream> +#include <algorithm> + +namespace Catch { + + struct IConfig; + + struct CaseSensitive { enum Choice { + Yes, + No + }; }; + + class NonCopyable { +#ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS + NonCopyable( NonCopyable const& ) = delete; + NonCopyable( NonCopyable && ) = delete; + NonCopyable& operator = ( NonCopyable const& ) = delete; + NonCopyable& operator = ( NonCopyable && ) = delete; +#else + NonCopyable( NonCopyable const& info ); + NonCopyable& operator = ( NonCopyable const& ); +#endif + + protected: + NonCopyable() {} + virtual ~NonCopyable(); + }; + + class SafeBool { + public: + typedef void (SafeBool::*type)() const; + + static type makeSafe( bool value ) { + return value ? &SafeBool::trueValue : 0; + } + private: + void trueValue() const {} + }; + + template<typename ContainerT> + inline void deleteAll( ContainerT& container ) { + typename ContainerT::const_iterator it = container.begin(); + typename ContainerT::const_iterator itEnd = container.end(); + for(; it != itEnd; ++it ) + delete *it; + } + template<typename AssociativeContainerT> + inline void deleteAllValues( AssociativeContainerT& container ) { + typename AssociativeContainerT::const_iterator it = container.begin(); + typename AssociativeContainerT::const_iterator itEnd = container.end(); + for(; it != itEnd; ++it ) + delete it->second; + } + + bool startsWith( std::string const& s, std::string const& prefix ); + bool startsWith( std::string const& s, char prefix ); + bool endsWith( std::string const& s, std::string const& suffix ); + bool endsWith( std::string const& s, char suffix ); + bool contains( std::string const& s, std::string const& infix ); + void toLowerInPlace( std::string& s ); + std::string toLower( std::string const& s ); + std::string trim( std::string const& str ); + bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ); + + struct pluralise { + pluralise( std::size_t count, std::string const& label ); + + friend std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser ); + + std::size_t m_count; + std::string m_label; + }; + + struct SourceLineInfo { + + SourceLineInfo(); + SourceLineInfo( char const* _file, std::size_t _line ); +# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS + SourceLineInfo(SourceLineInfo const& other) = default; + SourceLineInfo( SourceLineInfo && ) = default; + SourceLineInfo& operator = ( SourceLineInfo const& ) = default; + SourceLineInfo& operator = ( SourceLineInfo && ) = default; +# endif + bool empty() const; + bool operator == ( SourceLineInfo const& other ) const; + bool operator < ( SourceLineInfo const& other ) const; + + char const* file; + std::size_t line; + }; + + std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ); + + // This is just here to avoid compiler warnings with macro constants and boolean literals + inline bool isTrue( bool value ){ return value; } + inline bool alwaysTrue() { return true; } + inline bool alwaysFalse() { return false; } + + void throwLogicError( std::string const& message, SourceLineInfo const& locationInfo ); + + void seedRng( IConfig const& config ); + unsigned int rngSeed(); + + // Use this in variadic streaming macros to allow + // >> +StreamEndStop + // as well as + // >> stuff +StreamEndStop + struct StreamEndStop { + std::string operator+() { + return std::string(); + } + }; + template<typename T> + T const& operator + ( T const& value, StreamEndStop ) { + return value; + } +} + +#define CATCH_INTERNAL_LINEINFO ::Catch::SourceLineInfo( __FILE__, static_cast<std::size_t>( __LINE__ ) ) +#define CATCH_INTERNAL_ERROR( msg ) ::Catch::throwLogicError( msg, CATCH_INTERNAL_LINEINFO ); + +namespace Catch { + + class NotImplementedException : public std::exception + { + public: + NotImplementedException( SourceLineInfo const& lineInfo ); + NotImplementedException( NotImplementedException const& ) {} + + virtual ~NotImplementedException() CATCH_NOEXCEPT {} + + virtual const char* what() const CATCH_NOEXCEPT; + + private: + std::string m_what; + SourceLineInfo m_lineInfo; + }; + +} // end namespace Catch + +/////////////////////////////////////////////////////////////////////////////// +#define CATCH_NOT_IMPLEMENTED throw Catch::NotImplementedException( CATCH_INTERNAL_LINEINFO ) + +// #included from: internal/catch_context.h +#define TWOBLUECUBES_CATCH_CONTEXT_H_INCLUDED + +// #included from: catch_interfaces_generators.h +#define TWOBLUECUBES_CATCH_INTERFACES_GENERATORS_H_INCLUDED + +#include <string> + +namespace Catch { + + struct IGeneratorInfo { + virtual ~IGeneratorInfo(); + virtual bool moveNext() = 0; + virtual std::size_t getCurrentIndex() const = 0; + }; + + struct IGeneratorsForTest { + virtual ~IGeneratorsForTest(); + + virtual IGeneratorInfo& getGeneratorInfo( std::string const& fileInfo, std::size_t size ) = 0; + virtual bool moveNext() = 0; + }; + + IGeneratorsForTest* createGeneratorsForTest(); + +} // end namespace Catch + +// #included from: catch_ptr.hpp +#define TWOBLUECUBES_CATCH_PTR_HPP_INCLUDED + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wpadded" +#endif + +namespace Catch { + + // An intrusive reference counting smart pointer. + // T must implement addRef() and release() methods + // typically implementing the IShared interface + template<typename T> + class Ptr { + public: + Ptr() : m_p( CATCH_NULL ){} + Ptr( T* p ) : m_p( p ){ + if( m_p ) + m_p->addRef(); + } + Ptr( Ptr const& other ) : m_p( other.m_p ){ + if( m_p ) + m_p->addRef(); + } + ~Ptr(){ + if( m_p ) + m_p->release(); + } + void reset() { + if( m_p ) + m_p->release(); + m_p = CATCH_NULL; + } + Ptr& operator = ( T* p ){ + Ptr temp( p ); + swap( temp ); + return *this; + } + Ptr& operator = ( Ptr const& other ){ + Ptr temp( other ); + swap( temp ); + return *this; + } + void swap( Ptr& other ) { std::swap( m_p, other.m_p ); } + T* get() const{ return m_p; } + T& operator*() const { return *m_p; } + T* operator->() const { return m_p; } + bool operator !() const { return m_p == CATCH_NULL; } + operator SafeBool::type() const { return SafeBool::makeSafe( m_p != CATCH_NULL ); } + + private: + T* m_p; + }; + + struct IShared : NonCopyable { + virtual ~IShared(); + virtual void addRef() const = 0; + virtual void release() const = 0; + }; + + template<typename T = IShared> + struct SharedImpl : T { + + SharedImpl() : m_rc( 0 ){} + + virtual void addRef() const { + ++m_rc; + } + virtual void release() const { + if( --m_rc == 0 ) + delete this; + } + + mutable unsigned int m_rc; + }; + +} // end namespace Catch + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +namespace Catch { + + class TestCase; + class Stream; + struct IResultCapture; + struct IRunner; + struct IGeneratorsForTest; + struct IConfig; + + struct IContext + { + virtual ~IContext(); + + virtual IResultCapture* getResultCapture() = 0; + virtual IRunner* getRunner() = 0; + virtual size_t getGeneratorIndex( std::string const& fileInfo, size_t totalSize ) = 0; + virtual bool advanceGeneratorsForCurrentTest() = 0; + virtual Ptr<IConfig const> getConfig() const = 0; + }; + + struct IMutableContext : IContext + { + virtual ~IMutableContext(); + virtual void setResultCapture( IResultCapture* resultCapture ) = 0; + virtual void setRunner( IRunner* runner ) = 0; + virtual void setConfig( Ptr<IConfig const> const& config ) = 0; + }; + + IContext& getCurrentContext(); + IMutableContext& getCurrentMutableContext(); + void cleanUpContext(); + Stream createStream( std::string const& streamName ); + +} + +// #included from: internal/catch_test_registry.hpp +#define TWOBLUECUBES_CATCH_TEST_REGISTRY_HPP_INCLUDED + +// #included from: catch_interfaces_testcase.h +#define TWOBLUECUBES_CATCH_INTERFACES_TESTCASE_H_INCLUDED + +#include <vector> + +namespace Catch { + + class TestSpec; + + struct ITestCase : IShared { + virtual void invoke () const = 0; + protected: + virtual ~ITestCase(); + }; + + class TestCase; + struct IConfig; + + struct ITestCaseRegistry { + virtual ~ITestCaseRegistry(); + virtual std::vector<TestCase> const& getAllTests() const = 0; + virtual std::vector<TestCase> const& getAllTestsSorted( IConfig const& config ) const = 0; + }; + + bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config ); + std::vector<TestCase> filterTests( std::vector<TestCase> const& testCases, TestSpec const& testSpec, IConfig const& config ); + std::vector<TestCase> const& getAllTestCasesSorted( IConfig const& config ); + +} + +namespace Catch { + +template<typename C> +class MethodTestCase : public SharedImpl<ITestCase> { + +public: + MethodTestCase( void (C::*method)() ) : m_method( method ) {} + + virtual void invoke() const { + C obj; + (obj.*m_method)(); + } + +private: + virtual ~MethodTestCase() {} + + void (C::*m_method)(); +}; + +typedef void(*TestFunction)(); + +struct NameAndDesc { + NameAndDesc( const char* _name = "", const char* _description= "" ) + : name( _name ), description( _description ) + {} + + const char* name; + const char* description; +}; + +void registerTestCase + ( ITestCase* testCase, + char const* className, + NameAndDesc const& nameAndDesc, + SourceLineInfo const& lineInfo ); + +struct AutoReg { + + AutoReg + ( TestFunction function, + SourceLineInfo const& lineInfo, + NameAndDesc const& nameAndDesc ); + + template<typename C> + AutoReg + ( void (C::*method)(), + char const* className, + NameAndDesc const& nameAndDesc, + SourceLineInfo const& lineInfo ) { + + registerTestCase + ( new MethodTestCase<C>( method ), + className, + nameAndDesc, + lineInfo ); + } + + ~AutoReg(); + +private: + AutoReg( AutoReg const& ); + void operator= ( AutoReg const& ); +}; + +void registerTestCaseFunction + ( TestFunction function, + SourceLineInfo const& lineInfo, + NameAndDesc const& nameAndDesc ); + +} // end namespace Catch + +#ifdef CATCH_CONFIG_VARIADIC_MACROS + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_TESTCASE2( TestName, ... ) \ + static void TestName(); \ + namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &TestName, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( __VA_ARGS__ ) ); }\ + static void TestName() + #define INTERNAL_CATCH_TESTCASE( ... ) \ + INTERNAL_CATCH_TESTCASE2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), __VA_ARGS__ ) + + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, ... ) \ + namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &QualifiedMethod, "&" #QualifiedMethod, Catch::NameAndDesc( __VA_ARGS__ ), CATCH_INTERNAL_LINEINFO ); } + + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_TEST_CASE_METHOD2( TestName, ClassName, ... )\ + namespace{ \ + struct TestName : ClassName{ \ + void test(); \ + }; \ + Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( &TestName::test, #ClassName, Catch::NameAndDesc( __VA_ARGS__ ), CATCH_INTERNAL_LINEINFO ); \ + } \ + void TestName::test() + #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, ... ) \ + INTERNAL_CATCH_TEST_CASE_METHOD2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), ClassName, __VA_ARGS__ ) + + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_REGISTER_TESTCASE( Function, ... ) \ + Catch::AutoReg( Function, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( __VA_ARGS__ ) ); + +#else + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_TESTCASE2( TestName, Name, Desc ) \ + static void TestName(); \ + namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &TestName, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( Name, Desc ) ); }\ + static void TestName() + #define INTERNAL_CATCH_TESTCASE( Name, Desc ) \ + INTERNAL_CATCH_TESTCASE2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), Name, Desc ) + + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, Name, Desc ) \ + namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &QualifiedMethod, "&" #QualifiedMethod, Catch::NameAndDesc( Name, Desc ), CATCH_INTERNAL_LINEINFO ); } + + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_TEST_CASE_METHOD2( TestCaseName, ClassName, TestName, Desc )\ + namespace{ \ + struct TestCaseName : ClassName{ \ + void test(); \ + }; \ + Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( &TestCaseName::test, #ClassName, Catch::NameAndDesc( TestName, Desc ), CATCH_INTERNAL_LINEINFO ); \ + } \ + void TestCaseName::test() + #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, TestName, Desc )\ + INTERNAL_CATCH_TEST_CASE_METHOD2( INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), ClassName, TestName, Desc ) + + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_REGISTER_TESTCASE( Function, Name, Desc ) \ + Catch::AutoReg( Function, CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( Name, Desc ) ); +#endif + +// #included from: internal/catch_capture.hpp +#define TWOBLUECUBES_CATCH_CAPTURE_HPP_INCLUDED + +// #included from: catch_result_builder.h +#define TWOBLUECUBES_CATCH_RESULT_BUILDER_H_INCLUDED + +// #included from: catch_result_type.h +#define TWOBLUECUBES_CATCH_RESULT_TYPE_H_INCLUDED + +namespace Catch { + + // ResultWas::OfType enum + struct ResultWas { enum OfType { + Unknown = -1, + Ok = 0, + Info = 1, + Warning = 2, + + FailureBit = 0x10, + + ExpressionFailed = FailureBit | 1, + ExplicitFailure = FailureBit | 2, + + Exception = 0x100 | FailureBit, + + ThrewException = Exception | 1, + DidntThrowException = Exception | 2, + + FatalErrorCondition = 0x200 | FailureBit + + }; }; + + inline bool isOk( ResultWas::OfType resultType ) { + return ( resultType & ResultWas::FailureBit ) == 0; + } + inline bool isJustInfo( int flags ) { + return flags == ResultWas::Info; + } + + // ResultDisposition::Flags enum + struct ResultDisposition { enum Flags { + Normal = 0x01, + + ContinueOnFailure = 0x02, // Failures fail test, but execution continues + FalseTest = 0x04, // Prefix expression with ! + SuppressFail = 0x08 // Failures are reported but do not fail the test + }; }; + + inline ResultDisposition::Flags operator | ( ResultDisposition::Flags lhs, ResultDisposition::Flags rhs ) { + return static_cast<ResultDisposition::Flags>( static_cast<int>( lhs ) | static_cast<int>( rhs ) ); + } + + inline bool shouldContinueOnFailure( int flags ) { return ( flags & ResultDisposition::ContinueOnFailure ) != 0; } + inline bool isFalseTest( int flags ) { return ( flags & ResultDisposition::FalseTest ) != 0; } + inline bool shouldSuppressFailure( int flags ) { return ( flags & ResultDisposition::SuppressFail ) != 0; } + +} // end namespace Catch + +// #included from: catch_assertionresult.h +#define TWOBLUECUBES_CATCH_ASSERTIONRESULT_H_INCLUDED + +#include <string> + +namespace Catch { + + struct STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison; + + struct DecomposedExpression + { + virtual ~DecomposedExpression() {} + virtual bool isBinaryExpression() const { + return false; + } + virtual void reconstructExpression( std::string& dest ) const = 0; + + // Only simple binary comparisons can be decomposed. + // If more complex check is required then wrap sub-expressions in parentheses. + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator + ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator - ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator * ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator / ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator % ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && ( T const& ); + template<typename T> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || ( T const& ); + }; + + struct AssertionInfo + { + AssertionInfo() {} + AssertionInfo( std::string const& _macroName, + SourceLineInfo const& _lineInfo, + std::string const& _capturedExpression, + ResultDisposition::Flags _resultDisposition ); + + std::string macroName; + SourceLineInfo lineInfo; + std::string capturedExpression; + ResultDisposition::Flags resultDisposition; + }; + + struct AssertionResultData + { + AssertionResultData() : decomposedExpression( CATCH_NULL ) + , resultType( ResultWas::Unknown ) + , negated( false ) + , parenthesized( false ) {} + + void negate( bool parenthesize ) { + negated = !negated; + parenthesized = parenthesize; + if( resultType == ResultWas::Ok ) + resultType = ResultWas::ExpressionFailed; + else if( resultType == ResultWas::ExpressionFailed ) + resultType = ResultWas::Ok; + } + + std::string const& reconstructExpression() const { + if( decomposedExpression != CATCH_NULL ) { + decomposedExpression->reconstructExpression( reconstructedExpression ); + if( parenthesized ) { + reconstructedExpression.insert( 0, 1, '(' ); + reconstructedExpression.append( 1, ')' ); + } + if( negated ) { + reconstructedExpression.insert( 0, 1, '!' ); + } + decomposedExpression = CATCH_NULL; + } + return reconstructedExpression; + } + + mutable DecomposedExpression const* decomposedExpression; + mutable std::string reconstructedExpression; + std::string message; + ResultWas::OfType resultType; + bool negated; + bool parenthesized; + }; + + class AssertionResult { + public: + AssertionResult(); + AssertionResult( AssertionInfo const& info, AssertionResultData const& data ); + ~AssertionResult(); +# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS + AssertionResult( AssertionResult const& ) = default; + AssertionResult( AssertionResult && ) = default; + AssertionResult& operator = ( AssertionResult const& ) = default; + AssertionResult& operator = ( AssertionResult && ) = default; +# endif + + bool isOk() const; + bool succeeded() const; + ResultWas::OfType getResultType() const; + bool hasExpression() const; + bool hasMessage() const; + std::string getExpression() const; + std::string getExpressionInMacro() const; + bool hasExpandedExpression() const; + std::string getExpandedExpression() const; + std::string getMessage() const; + SourceLineInfo getSourceInfo() const; + std::string getTestMacroName() const; + void discardDecomposedExpression() const; + void expandDecomposedExpression() const; + + protected: + AssertionInfo m_info; + AssertionResultData m_resultData; + }; + +} // end namespace Catch + +// #included from: catch_matchers.hpp +#define TWOBLUECUBES_CATCH_MATCHERS_HPP_INCLUDED + +namespace Catch { +namespace Matchers { + namespace Impl { + + namespace Generic { + template<typename ExpressionT> class AllOf; + template<typename ExpressionT> class AnyOf; + template<typename ExpressionT> class Not; + } + + template<typename ExpressionT> + struct Matcher : SharedImpl<IShared> + { + typedef ExpressionT ExpressionType; + + virtual ~Matcher() {} + virtual Ptr<Matcher> clone() const = 0; + virtual bool match( ExpressionT const& expr ) const = 0; + virtual std::string toString() const = 0; + + Generic::AllOf<ExpressionT> operator && ( Matcher<ExpressionT> const& other ) const; + Generic::AnyOf<ExpressionT> operator || ( Matcher<ExpressionT> const& other ) const; + Generic::Not<ExpressionT> operator ! () const; + }; + + template<typename DerivedT, typename ExpressionT> + struct MatcherImpl : Matcher<ExpressionT> { + + virtual Ptr<Matcher<ExpressionT> > clone() const { + return Ptr<Matcher<ExpressionT> >( new DerivedT( static_cast<DerivedT const&>( *this ) ) ); + } + }; + + namespace Generic { + template<typename ExpressionT> + class Not : public MatcherImpl<Not<ExpressionT>, ExpressionT> { + public: + explicit Not( Matcher<ExpressionT> const& matcher ) : m_matcher(matcher.clone()) {} + Not( Not const& other ) : m_matcher( other.m_matcher ) {} + + virtual bool match( ExpressionT const& expr ) const CATCH_OVERRIDE { + return !m_matcher->match( expr ); + } + + virtual std::string toString() const CATCH_OVERRIDE { + return "not " + m_matcher->toString(); + } + private: + Ptr< Matcher<ExpressionT> > m_matcher; + }; + + template<typename ExpressionT> + class AllOf : public MatcherImpl<AllOf<ExpressionT>, ExpressionT> { + public: + + AllOf() {} + AllOf( AllOf const& other ) : m_matchers( other.m_matchers ) {} + + AllOf& add( Matcher<ExpressionT> const& matcher ) { + m_matchers.push_back( matcher.clone() ); + return *this; + } + virtual bool match( ExpressionT const& expr ) const + { + for( std::size_t i = 0; i < m_matchers.size(); ++i ) + if( !m_matchers[i]->match( expr ) ) + return false; + return true; + } + virtual std::string toString() const { + std::ostringstream oss; + oss << "( "; + for( std::size_t i = 0; i < m_matchers.size(); ++i ) { + if( i != 0 ) + oss << " and "; + oss << m_matchers[i]->toString(); + } + oss << " )"; + return oss.str(); + } + + AllOf operator && ( Matcher<ExpressionT> const& other ) const { + AllOf allOfExpr( *this ); + allOfExpr.add( other ); + return allOfExpr; + } + + private: + std::vector<Ptr<Matcher<ExpressionT> > > m_matchers; + }; + + template<typename ExpressionT> + class AnyOf : public MatcherImpl<AnyOf<ExpressionT>, ExpressionT> { + public: + + AnyOf() {} + AnyOf( AnyOf const& other ) : m_matchers( other.m_matchers ) {} + + AnyOf& add( Matcher<ExpressionT> const& matcher ) { + m_matchers.push_back( matcher.clone() ); + return *this; + } + virtual bool match( ExpressionT const& expr ) const + { + for( std::size_t i = 0; i < m_matchers.size(); ++i ) + if( m_matchers[i]->match( expr ) ) + return true; + return false; + } + virtual std::string toString() const { + std::ostringstream oss; + oss << "( "; + for( std::size_t i = 0; i < m_matchers.size(); ++i ) { + if( i != 0 ) + oss << " or "; + oss << m_matchers[i]->toString(); + } + oss << " )"; + return oss.str(); + } + + AnyOf operator || ( Matcher<ExpressionT> const& other ) const { + AnyOf anyOfExpr( *this ); + anyOfExpr.add( other ); + return anyOfExpr; + } + + private: + std::vector<Ptr<Matcher<ExpressionT> > > m_matchers; + }; + + } // namespace Generic + + template<typename ExpressionT> + Generic::AllOf<ExpressionT> Matcher<ExpressionT>::operator && ( Matcher<ExpressionT> const& other ) const { + Generic::AllOf<ExpressionT> allOfExpr; + allOfExpr.add( *this ); + allOfExpr.add( other ); + return allOfExpr; + } + + template<typename ExpressionT> + Generic::AnyOf<ExpressionT> Matcher<ExpressionT>::operator || ( Matcher<ExpressionT> const& other ) const { + Generic::AnyOf<ExpressionT> anyOfExpr; + anyOfExpr.add( *this ); + anyOfExpr.add( other ); + return anyOfExpr; + } + + template<typename ExpressionT> + Generic::Not<ExpressionT> Matcher<ExpressionT>::operator ! () const { + return Generic::Not<ExpressionT>( *this ); + } + + namespace StdString { + + inline std::string makeString( std::string const& str ) { return str; } + inline std::string makeString( const char* str ) { return str ? std::string( str ) : std::string(); } + + struct CasedString + { + CasedString( std::string const& str, CaseSensitive::Choice caseSensitivity ) + : m_caseSensitivity( caseSensitivity ), + m_str( adjustString( str ) ) + {} + std::string adjustString( std::string const& str ) const { + return m_caseSensitivity == CaseSensitive::No + ? toLower( str ) + : str; + + } + std::string toStringSuffix() const + { + return m_caseSensitivity == CaseSensitive::No + ? " (case insensitive)" + : std::string(); + } + CaseSensitive::Choice m_caseSensitivity; + std::string m_str; + }; + + struct Equals : MatcherImpl<Equals, std::string> { + Equals( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) + : m_data( str, caseSensitivity ) + {} + Equals( Equals const& other ) : m_data( other.m_data ){} + + virtual ~Equals(); + + virtual bool match( std::string const& expr ) const { + return m_data.m_str == m_data.adjustString( expr );; + } + virtual std::string toString() const { + return "equals: \"" + m_data.m_str + '"' + m_data.toStringSuffix(); + } + + CasedString m_data; + }; + + struct Contains : MatcherImpl<Contains, std::string> { + Contains( std::string const& substr, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) + : m_data( substr, caseSensitivity ){} + Contains( Contains const& other ) : m_data( other.m_data ){} + + virtual ~Contains(); + + virtual bool match( std::string const& expr ) const { + return m_data.adjustString( expr ).find( m_data.m_str ) != std::string::npos; + } + virtual std::string toString() const { + return "contains: \"" + m_data.m_str + '"' + m_data.toStringSuffix(); + } + + CasedString m_data; + }; + + struct StartsWith : MatcherImpl<StartsWith, std::string> { + StartsWith( std::string const& substr, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) + : m_data( substr, caseSensitivity ){} + + StartsWith( StartsWith const& other ) : m_data( other.m_data ){} + + virtual ~StartsWith(); + + virtual bool match( std::string const& expr ) const { + return startsWith( m_data.adjustString( expr ), m_data.m_str ); + } + virtual std::string toString() const { + return "starts with: \"" + m_data.m_str + '"' + m_data.toStringSuffix(); + } + + CasedString m_data; + }; + + struct EndsWith : MatcherImpl<EndsWith, std::string> { + EndsWith( std::string const& substr, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) + : m_data( substr, caseSensitivity ){} + EndsWith( EndsWith const& other ) : m_data( other.m_data ){} + + virtual ~EndsWith(); + + virtual bool match( std::string const& expr ) const { + return endsWith( m_data.adjustString( expr ), m_data.m_str ); + } + virtual std::string toString() const { + return "ends with: \"" + m_data.m_str + '"' + m_data.toStringSuffix(); + } + + CasedString m_data; + }; + } // namespace StdString + } // namespace Impl + + // The following functions create the actual matcher objects. + // This allows the types to be inferred + template<typename ExpressionT> + inline Impl::Generic::Not<ExpressionT> Not( Impl::Matcher<ExpressionT> const& m ) { + return Impl::Generic::Not<ExpressionT>( m ); + } + + template<typename ExpressionT> + inline Impl::Generic::AllOf<ExpressionT> AllOf( Impl::Matcher<ExpressionT> const& m1, + Impl::Matcher<ExpressionT> const& m2 ) { + return Impl::Generic::AllOf<ExpressionT>().add( m1 ).add( m2 ); + } + template<typename ExpressionT> + inline Impl::Generic::AllOf<ExpressionT> AllOf( Impl::Matcher<ExpressionT> const& m1, + Impl::Matcher<ExpressionT> const& m2, + Impl::Matcher<ExpressionT> const& m3 ) { + return Impl::Generic::AllOf<ExpressionT>().add( m1 ).add( m2 ).add( m3 ); + } + template<typename ExpressionT> + inline Impl::Generic::AnyOf<ExpressionT> AnyOf( Impl::Matcher<ExpressionT> const& m1, + Impl::Matcher<ExpressionT> const& m2 ) { + return Impl::Generic::AnyOf<ExpressionT>().add( m1 ).add( m2 ); + } + template<typename ExpressionT> + inline Impl::Generic::AnyOf<ExpressionT> AnyOf( Impl::Matcher<ExpressionT> const& m1, + Impl::Matcher<ExpressionT> const& m2, + Impl::Matcher<ExpressionT> const& m3 ) { + return Impl::Generic::AnyOf<ExpressionT>().add( m1 ).add( m2 ).add( m3 ); + } + + inline Impl::StdString::Equals Equals( std::string const& str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) { + return Impl::StdString::Equals( str, caseSensitivity ); + } + inline Impl::StdString::Equals Equals( const char* str, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) { + return Impl::StdString::Equals( Impl::StdString::makeString( str ), caseSensitivity ); + } + inline Impl::StdString::Contains Contains( std::string const& substr, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) { + return Impl::StdString::Contains( substr, caseSensitivity ); + } + inline Impl::StdString::Contains Contains( const char* substr, CaseSensitive::Choice caseSensitivity = CaseSensitive::Yes ) { + return Impl::StdString::Contains( Impl::StdString::makeString( substr ), caseSensitivity ); + } + inline Impl::StdString::StartsWith StartsWith( std::string const& substr ) { + return Impl::StdString::StartsWith( substr ); + } + inline Impl::StdString::StartsWith StartsWith( const char* substr ) { + return Impl::StdString::StartsWith( Impl::StdString::makeString( substr ) ); + } + inline Impl::StdString::EndsWith EndsWith( std::string const& substr ) { + return Impl::StdString::EndsWith( substr ); + } + inline Impl::StdString::EndsWith EndsWith( const char* substr ) { + return Impl::StdString::EndsWith( Impl::StdString::makeString( substr ) ); + } + +} // namespace Matchers + +using namespace Matchers; + +} // namespace Catch + +namespace Catch { + + struct TestFailureException{}; + + template<typename T> class ExpressionLhs; + + struct CopyableStream { + CopyableStream() {} + CopyableStream( CopyableStream const& other ) { + oss << other.oss.str(); + } + CopyableStream& operator=( CopyableStream const& other ) { + oss.str(std::string()); + oss << other.oss.str(); + return *this; + } + std::ostringstream oss; + }; + + class ResultBuilder : public DecomposedExpression { + public: + ResultBuilder( char const* macroName, + SourceLineInfo const& lineInfo, + char const* capturedExpression, + ResultDisposition::Flags resultDisposition, + char const* secondArg = "" ); + + template<typename T> + ExpressionLhs<T const&> operator <= ( T const& operand ); + ExpressionLhs<bool> operator <= ( bool value ); + + template<typename T> + ResultBuilder& operator << ( T const& value ) { + m_stream.oss << value; + return *this; + } + + ResultBuilder& setResultType( ResultWas::OfType result ); + ResultBuilder& setResultType( bool result ); + + void endExpression( DecomposedExpression const& expr ); + + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE; + + AssertionResult build() const; + AssertionResult build( DecomposedExpression const& expr ) const; + + void useActiveException( ResultDisposition::Flags resultDisposition = ResultDisposition::Normal ); + void captureResult( ResultWas::OfType resultType ); + void captureExpression(); + void captureExpectedException( std::string const& expectedMessage ); + void captureExpectedException( Matchers::Impl::Matcher<std::string> const& matcher ); + void handleResult( AssertionResult const& result ); + void react(); + bool shouldDebugBreak() const; + bool allowThrows() const; + + template<typename ArgT, typename MatcherT> + void captureMatch( ArgT const& arg, MatcherT const& matcher, char const* matcherString ); + + private: + AssertionInfo m_assertionInfo; + AssertionResultData m_data; + CopyableStream m_stream; + + bool m_shouldDebugBreak; + bool m_shouldThrow; + }; + +} // namespace Catch + +// Include after due to circular dependency: +// #included from: catch_expression_lhs.hpp +#define TWOBLUECUBES_CATCH_EXPRESSION_LHS_HPP_INCLUDED + +// #included from: catch_evaluate.hpp +#define TWOBLUECUBES_CATCH_EVALUATE_HPP_INCLUDED + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4389) // '==' : signed/unsigned mismatch +#endif + +#include <cstddef> + +namespace Catch { +namespace Internal { + + enum Operator { + IsEqualTo, + IsNotEqualTo, + IsLessThan, + IsGreaterThan, + IsLessThanOrEqualTo, + IsGreaterThanOrEqualTo + }; + + template<Operator Op> struct OperatorTraits { static const char* getName(){ return "*error*"; } }; + template<> struct OperatorTraits<IsEqualTo> { static const char* getName(){ return "=="; } }; + template<> struct OperatorTraits<IsNotEqualTo> { static const char* getName(){ return "!="; } }; + template<> struct OperatorTraits<IsLessThan> { static const char* getName(){ return "<"; } }; + template<> struct OperatorTraits<IsGreaterThan> { static const char* getName(){ return ">"; } }; + template<> struct OperatorTraits<IsLessThanOrEqualTo> { static const char* getName(){ return "<="; } }; + template<> struct OperatorTraits<IsGreaterThanOrEqualTo>{ static const char* getName(){ return ">="; } }; + + template<typename T> + inline T& opCast(T const& t) { return const_cast<T&>(t); } + +// nullptr_t support based on pull request #154 from Konstantin Baumann +#ifdef CATCH_CONFIG_CPP11_NULLPTR + inline std::nullptr_t opCast(std::nullptr_t) { return nullptr; } +#endif // CATCH_CONFIG_CPP11_NULLPTR + + // So the compare overloads can be operator agnostic we convey the operator as a template + // enum, which is used to specialise an Evaluator for doing the comparison. + template<typename T1, typename T2, Operator Op> + class Evaluator{}; + + template<typename T1, typename T2> + struct Evaluator<T1, T2, IsEqualTo> { + static bool evaluate( T1 const& lhs, T2 const& rhs) { + return bool( opCast( lhs ) == opCast( rhs ) ); + } + }; + template<typename T1, typename T2> + struct Evaluator<T1, T2, IsNotEqualTo> { + static bool evaluate( T1 const& lhs, T2 const& rhs ) { + return bool( opCast( lhs ) != opCast( rhs ) ); + } + }; + template<typename T1, typename T2> + struct Evaluator<T1, T2, IsLessThan> { + static bool evaluate( T1 const& lhs, T2 const& rhs ) { + return bool( opCast( lhs ) < opCast( rhs ) ); + } + }; + template<typename T1, typename T2> + struct Evaluator<T1, T2, IsGreaterThan> { + static bool evaluate( T1 const& lhs, T2 const& rhs ) { + return bool( opCast( lhs ) > opCast( rhs ) ); + } + }; + template<typename T1, typename T2> + struct Evaluator<T1, T2, IsGreaterThanOrEqualTo> { + static bool evaluate( T1 const& lhs, T2 const& rhs ) { + return bool( opCast( lhs ) >= opCast( rhs ) ); + } + }; + template<typename T1, typename T2> + struct Evaluator<T1, T2, IsLessThanOrEqualTo> { + static bool evaluate( T1 const& lhs, T2 const& rhs ) { + return bool( opCast( lhs ) <= opCast( rhs ) ); + } + }; + + template<Operator Op, typename T1, typename T2> + bool applyEvaluator( T1 const& lhs, T2 const& rhs ) { + return Evaluator<T1, T2, Op>::evaluate( lhs, rhs ); + } + + // This level of indirection allows us to specialise for integer types + // to avoid signed/ unsigned warnings + + // "base" overload + template<Operator Op, typename T1, typename T2> + bool compare( T1 const& lhs, T2 const& rhs ) { + return Evaluator<T1, T2, Op>::evaluate( lhs, rhs ); + } + + // unsigned X to int + template<Operator Op> bool compare( unsigned int lhs, int rhs ) { + return applyEvaluator<Op>( lhs, static_cast<unsigned int>( rhs ) ); + } + template<Operator Op> bool compare( unsigned long lhs, int rhs ) { + return applyEvaluator<Op>( lhs, static_cast<unsigned int>( rhs ) ); + } + template<Operator Op> bool compare( unsigned char lhs, int rhs ) { + return applyEvaluator<Op>( lhs, static_cast<unsigned int>( rhs ) ); + } + + // unsigned X to long + template<Operator Op> bool compare( unsigned int lhs, long rhs ) { + return applyEvaluator<Op>( lhs, static_cast<unsigned long>( rhs ) ); + } + template<Operator Op> bool compare( unsigned long lhs, long rhs ) { + return applyEvaluator<Op>( lhs, static_cast<unsigned long>( rhs ) ); + } + template<Operator Op> bool compare( unsigned char lhs, long rhs ) { + return applyEvaluator<Op>( lhs, static_cast<unsigned long>( rhs ) ); + } + + // int to unsigned X + template<Operator Op> bool compare( int lhs, unsigned int rhs ) { + return applyEvaluator<Op>( static_cast<unsigned int>( lhs ), rhs ); + } + template<Operator Op> bool compare( int lhs, unsigned long rhs ) { + return applyEvaluator<Op>( static_cast<unsigned int>( lhs ), rhs ); + } + template<Operator Op> bool compare( int lhs, unsigned char rhs ) { + return applyEvaluator<Op>( static_cast<unsigned int>( lhs ), rhs ); + } + + // long to unsigned X + template<Operator Op> bool compare( long lhs, unsigned int rhs ) { + return applyEvaluator<Op>( static_cast<unsigned long>( lhs ), rhs ); + } + template<Operator Op> bool compare( long lhs, unsigned long rhs ) { + return applyEvaluator<Op>( static_cast<unsigned long>( lhs ), rhs ); + } + template<Operator Op> bool compare( long lhs, unsigned char rhs ) { + return applyEvaluator<Op>( static_cast<unsigned long>( lhs ), rhs ); + } + + // pointer to long (when comparing against NULL) + template<Operator Op, typename T> bool compare( long lhs, T* rhs ) { + return Evaluator<T*, T*, Op>::evaluate( reinterpret_cast<T*>( lhs ), rhs ); + } + template<Operator Op, typename T> bool compare( T* lhs, long rhs ) { + return Evaluator<T*, T*, Op>::evaluate( lhs, reinterpret_cast<T*>( rhs ) ); + } + + // pointer to int (when comparing against NULL) + template<Operator Op, typename T> bool compare( int lhs, T* rhs ) { + return Evaluator<T*, T*, Op>::evaluate( reinterpret_cast<T*>( lhs ), rhs ); + } + template<Operator Op, typename T> bool compare( T* lhs, int rhs ) { + return Evaluator<T*, T*, Op>::evaluate( lhs, reinterpret_cast<T*>( rhs ) ); + } + +#ifdef CATCH_CONFIG_CPP11_LONG_LONG + // long long to unsigned X + template<Operator Op> bool compare( long long lhs, unsigned int rhs ) { + return applyEvaluator<Op>( static_cast<unsigned long>( lhs ), rhs ); + } + template<Operator Op> bool compare( long long lhs, unsigned long rhs ) { + return applyEvaluator<Op>( static_cast<unsigned long>( lhs ), rhs ); + } + template<Operator Op> bool compare( long long lhs, unsigned long long rhs ) { + return applyEvaluator<Op>( static_cast<unsigned long>( lhs ), rhs ); + } + template<Operator Op> bool compare( long long lhs, unsigned char rhs ) { + return applyEvaluator<Op>( static_cast<unsigned long>( lhs ), rhs ); + } + + // unsigned long long to X + template<Operator Op> bool compare( unsigned long long lhs, int rhs ) { + return applyEvaluator<Op>( static_cast<long>( lhs ), rhs ); + } + template<Operator Op> bool compare( unsigned long long lhs, long rhs ) { + return applyEvaluator<Op>( static_cast<long>( lhs ), rhs ); + } + template<Operator Op> bool compare( unsigned long long lhs, long long rhs ) { + return applyEvaluator<Op>( static_cast<long>( lhs ), rhs ); + } + template<Operator Op> bool compare( unsigned long long lhs, char rhs ) { + return applyEvaluator<Op>( static_cast<long>( lhs ), rhs ); + } + + // pointer to long long (when comparing against NULL) + template<Operator Op, typename T> bool compare( long long lhs, T* rhs ) { + return Evaluator<T*, T*, Op>::evaluate( reinterpret_cast<T*>( lhs ), rhs ); + } + template<Operator Op, typename T> bool compare( T* lhs, long long rhs ) { + return Evaluator<T*, T*, Op>::evaluate( lhs, reinterpret_cast<T*>( rhs ) ); + } +#endif // CATCH_CONFIG_CPP11_LONG_LONG + +#ifdef CATCH_CONFIG_CPP11_NULLPTR + // pointer to nullptr_t (when comparing against nullptr) + template<Operator Op, typename T> bool compare( std::nullptr_t, T* rhs ) { + return Evaluator<T*, T*, Op>::evaluate( nullptr, rhs ); + } + template<Operator Op, typename T> bool compare( T* lhs, std::nullptr_t ) { + return Evaluator<T*, T*, Op>::evaluate( lhs, nullptr ); + } +#endif // CATCH_CONFIG_CPP11_NULLPTR + +} // end of namespace Internal +} // end of namespace Catch + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +// #included from: catch_tostring.h +#define TWOBLUECUBES_CATCH_TOSTRING_H_INCLUDED + +#include <sstream> +#include <iomanip> +#include <limits> +#include <vector> +#include <cstddef> + +#ifdef __OBJC__ +// #included from: catch_objc_arc.hpp +#define TWOBLUECUBES_CATCH_OBJC_ARC_HPP_INCLUDED + +#import <Foundation/Foundation.h> + +#ifdef __has_feature +#define CATCH_ARC_ENABLED __has_feature(objc_arc) +#else +#define CATCH_ARC_ENABLED 0 +#endif + +void arcSafeRelease( NSObject* obj ); +id performOptionalSelector( id obj, SEL sel ); + +#if !CATCH_ARC_ENABLED +inline void arcSafeRelease( NSObject* obj ) { + [obj release]; +} +inline id performOptionalSelector( id obj, SEL sel ) { + if( [obj respondsToSelector: sel] ) + return [obj performSelector: sel]; + return nil; +} +#define CATCH_UNSAFE_UNRETAINED +#define CATCH_ARC_STRONG +#else +inline void arcSafeRelease( NSObject* ){} +inline id performOptionalSelector( id obj, SEL sel ) { +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" +#endif + if( [obj respondsToSelector: sel] ) + return [obj performSelector: sel]; +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + return nil; +} +#define CATCH_UNSAFE_UNRETAINED __unsafe_unretained +#define CATCH_ARC_STRONG __strong +#endif + +#endif + +#ifdef CATCH_CONFIG_CPP11_TUPLE +#include <tuple> +#endif + +#ifdef CATCH_CONFIG_CPP11_IS_ENUM +#include <type_traits> +#endif + +namespace Catch { + +// Why we're here. +template<typename T> +std::string toString( T const& value ); + +// Built in overloads + +std::string toString( std::string const& value ); +std::string toString( std::wstring const& value ); +std::string toString( const char* const value ); +std::string toString( char* const value ); +std::string toString( const wchar_t* const value ); +std::string toString( wchar_t* const value ); +std::string toString( int value ); +std::string toString( unsigned long value ); +std::string toString( unsigned int value ); +std::string toString( const double value ); +std::string toString( const float value ); +std::string toString( bool value ); +std::string toString( char value ); +std::string toString( signed char value ); +std::string toString( unsigned char value ); + +#ifdef CATCH_CONFIG_CPP11_LONG_LONG +std::string toString( long long value ); +std::string toString( unsigned long long value ); +#endif + +#ifdef CATCH_CONFIG_CPP11_NULLPTR +std::string toString( std::nullptr_t ); +#endif + +#ifdef __OBJC__ + std::string toString( NSString const * const& nsstring ); + std::string toString( NSString * CATCH_ARC_STRONG const& nsstring ); + std::string toString( NSObject* const& nsObject ); +#endif + +namespace Detail { + + extern const std::string unprintableString; + + struct BorgType { + template<typename T> BorgType( T const& ); + }; + + struct TrueType { char sizer[1]; }; + struct FalseType { char sizer[2]; }; + + TrueType& testStreamable( std::ostream& ); + FalseType testStreamable( FalseType ); + + FalseType operator<<( std::ostream const&, BorgType const& ); + + template<typename T> + struct IsStreamInsertable { + static std::ostream &s; + static T const&t; + enum { value = sizeof( testStreamable(s << t) ) == sizeof( TrueType ) }; + }; + +#if defined(CATCH_CONFIG_CPP11_IS_ENUM) + template<typename T, + bool IsEnum = std::is_enum<T>::value + > + struct EnumStringMaker + { + static std::string convert( T const& ) { return unprintableString; } + }; + + template<typename T> + struct EnumStringMaker<T,true> + { + static std::string convert( T const& v ) + { + return ::Catch::toString( + static_cast<typename std::underlying_type<T>::type>(v) + ); + } + }; +#endif + template<bool C> + struct StringMakerBase { +#if defined(CATCH_CONFIG_CPP11_IS_ENUM) + template<typename T> + static std::string convert( T const& v ) + { + return EnumStringMaker<T>::convert( v ); + } +#else + template<typename T> + static std::string convert( T const& ) { return unprintableString; } +#endif + }; + + template<> + struct StringMakerBase<true> { + template<typename T> + static std::string convert( T const& _value ) { + std::ostringstream oss; + oss << _value; + return oss.str(); + } + }; + + std::string rawMemoryToString( const void *object, std::size_t size ); + + template<typename T> + inline std::string rawMemoryToString( const T& object ) { + return rawMemoryToString( &object, sizeof(object) ); + } + +} // end namespace Detail + +template<typename T> +struct StringMaker : + Detail::StringMakerBase<Detail::IsStreamInsertable<T>::value> {}; + +template<typename T> +struct StringMaker<T*> { + template<typename U> + static std::string convert( U* p ) { + if( !p ) + return "NULL"; + else + return Detail::rawMemoryToString( p ); + } +}; + +template<typename R, typename C> +struct StringMaker<R C::*> { + static std::string convert( R C::* p ) { + if( !p ) + return "NULL"; + else + return Detail::rawMemoryToString( p ); + } +}; + +namespace Detail { + template<typename InputIterator> + std::string rangeToString( InputIterator first, InputIterator last ); +} + +//template<typename T, typename Allocator> +//struct StringMaker<std::vector<T, Allocator> > { +// static std::string convert( std::vector<T,Allocator> const& v ) { +// return Detail::rangeToString( v.begin(), v.end() ); +// } +//}; + +template<typename T, typename Allocator> +std::string toString( std::vector<T,Allocator> const& v ) { + return Detail::rangeToString( v.begin(), v.end() ); +} + +#ifdef CATCH_CONFIG_CPP11_TUPLE + +// toString for tuples +namespace TupleDetail { + template< + typename Tuple, + std::size_t N = 0, + bool = (N < std::tuple_size<Tuple>::value) + > + struct ElementPrinter { + static void print( const Tuple& tuple, std::ostream& os ) + { + os << ( N ? ", " : " " ) + << Catch::toString(std::get<N>(tuple)); + ElementPrinter<Tuple,N+1>::print(tuple,os); + } + }; + + template< + typename Tuple, + std::size_t N + > + struct ElementPrinter<Tuple,N,false> { + static void print( const Tuple&, std::ostream& ) {} + }; + +} + +template<typename ...Types> +struct StringMaker<std::tuple<Types...>> { + + static std::string convert( const std::tuple<Types...>& tuple ) + { + std::ostringstream os; + os << '{'; + TupleDetail::ElementPrinter<std::tuple<Types...>>::print( tuple, os ); + os << " }"; + return os.str(); + } +}; +#endif // CATCH_CONFIG_CPP11_TUPLE + +namespace Detail { + template<typename T> + std::string makeString( T const& value ) { + return StringMaker<T>::convert( value ); + } +} // end namespace Detail + +/// \brief converts any type to a string +/// +/// The default template forwards on to ostringstream - except when an +/// ostringstream overload does not exist - in which case it attempts to detect +/// that and writes {?}. +/// Overload (not specialise) this template for custom typs that you don't want +/// to provide an ostream overload for. +template<typename T> +std::string toString( T const& value ) { + return StringMaker<T>::convert( value ); +} + + namespace Detail { + template<typename InputIterator> + std::string rangeToString( InputIterator first, InputIterator last ) { + std::ostringstream oss; + oss << "{ "; + if( first != last ) { + oss << Catch::toString( *first ); + for( ++first ; first != last ; ++first ) + oss << ", " << Catch::toString( *first ); + } + oss << " }"; + return oss.str(); + } +} + +} // end namespace Catch + +namespace Catch { + +template<typename LhsT, Internal::Operator Op, typename RhsT> +class BinaryExpression; + +template<typename ArgT, typename MatcherT> +class MatchExpression; + +// Wraps the LHS of an expression and overloads comparison operators +// for also capturing those and RHS (if any) +template<typename T> +class ExpressionLhs : public DecomposedExpression { +public: + ExpressionLhs( ResultBuilder& rb, T lhs ) : m_rb( rb ), m_lhs( lhs ), m_truthy(false) {} + + template<typename RhsT> + BinaryExpression<T, Internal::IsEqualTo, RhsT const&> + operator == ( RhsT const& rhs ) { + return captureExpression<Internal::IsEqualTo>( rhs ); + } + + template<typename RhsT> + BinaryExpression<T, Internal::IsNotEqualTo, RhsT const&> + operator != ( RhsT const& rhs ) { + return captureExpression<Internal::IsNotEqualTo>( rhs ); + } + + template<typename RhsT> + BinaryExpression<T, Internal::IsLessThan, RhsT const&> + operator < ( RhsT const& rhs ) { + return captureExpression<Internal::IsLessThan>( rhs ); + } + + template<typename RhsT> + BinaryExpression<T, Internal::IsGreaterThan, RhsT const&> + operator > ( RhsT const& rhs ) { + return captureExpression<Internal::IsGreaterThan>( rhs ); + } + + template<typename RhsT> + BinaryExpression<T, Internal::IsLessThanOrEqualTo, RhsT const&> + operator <= ( RhsT const& rhs ) { + return captureExpression<Internal::IsLessThanOrEqualTo>( rhs ); + } + + template<typename RhsT> + BinaryExpression<T, Internal::IsGreaterThanOrEqualTo, RhsT const&> + operator >= ( RhsT const& rhs ) { + return captureExpression<Internal::IsGreaterThanOrEqualTo>( rhs ); + } + + BinaryExpression<T, Internal::IsEqualTo, bool> operator == ( bool rhs ) { + return captureExpression<Internal::IsEqualTo>( rhs ); + } + + BinaryExpression<T, Internal::IsNotEqualTo, bool> operator != ( bool rhs ) { + return captureExpression<Internal::IsNotEqualTo>( rhs ); + } + + void endExpression() { + m_truthy = m_lhs ? true : false; + m_rb + .setResultType( m_truthy ) + .endExpression( *this ); + } + + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE { + dest = Catch::toString( m_truthy ); + } + +private: + template<Internal::Operator Op, typename RhsT> + BinaryExpression<T, Op, RhsT&> captureExpression( RhsT& rhs ) const { + return BinaryExpression<T, Op, RhsT&>( m_rb, m_lhs, rhs ); + } + + template<Internal::Operator Op> + BinaryExpression<T, Op, bool> captureExpression( bool rhs ) const { + return BinaryExpression<T, Op, bool>( m_rb, m_lhs, rhs ); + } + +private: + ResultBuilder& m_rb; + T m_lhs; + bool m_truthy; +}; + +template<typename LhsT, Internal::Operator Op, typename RhsT> +class BinaryExpression : public DecomposedExpression { +public: + BinaryExpression( ResultBuilder& rb, LhsT lhs, RhsT rhs ) + : m_rb( rb ), m_lhs( lhs ), m_rhs( rhs ) {} + + void endExpression() const { + m_rb + .setResultType( Internal::compare<Op>( m_lhs, m_rhs ) ) + .endExpression( *this ); + } + + virtual bool isBinaryExpression() const CATCH_OVERRIDE { + return true; + } + + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE { + std::string lhs = Catch::toString( m_lhs ); + std::string rhs = Catch::toString( m_rhs ); + char delim = lhs.size() + rhs.size() < 40 && + lhs.find('\n') == std::string::npos && + rhs.find('\n') == std::string::npos ? ' ' : '\n'; + dest.reserve( 7 + lhs.size() + rhs.size() ); + // 2 for spaces around operator + // 2 for operator + // 2 for parentheses (conditionally added later) + // 1 for negation (conditionally added later) + dest = lhs; + dest += delim; + dest += Internal::OperatorTraits<Op>::getName(); + dest += delim; + dest += rhs; + } + +private: + ResultBuilder& m_rb; + LhsT m_lhs; + RhsT m_rhs; +}; + +template<typename ArgT, typename MatcherT> +class MatchExpression : public DecomposedExpression { +public: + MatchExpression( ArgT arg, MatcherT matcher, char const* matcherString ) + : m_arg( arg ), m_matcher( matcher ), m_matcherString( matcherString ) {} + + virtual bool isBinaryExpression() const CATCH_OVERRIDE { + return true; + } + + virtual void reconstructExpression( std::string& dest ) const CATCH_OVERRIDE { + std::string matcherAsString = m_matcher.toString(); + dest = Catch::toString( m_arg ); + dest += ' '; + if( matcherAsString == Detail::unprintableString ) + dest += m_matcherString; + else + dest += matcherAsString; + } + +private: + ArgT m_arg; + MatcherT m_matcher; + char const* m_matcherString; +}; + +} // end namespace Catch + + +namespace Catch { + + template<typename T> + inline ExpressionLhs<T const&> ResultBuilder::operator <= ( T const& operand ) { + return ExpressionLhs<T const&>( *this, operand ); + } + + inline ExpressionLhs<bool> ResultBuilder::operator <= ( bool value ) { + return ExpressionLhs<bool>( *this, value ); + } + + template<typename ArgT, typename MatcherT> + inline void ResultBuilder::captureMatch( ArgT const& arg, MatcherT const& matcher, + char const* matcherString ) { + MatchExpression<ArgT const&, MatcherT const&> expr( arg, matcher, matcherString ); + setResultType( matcher.match( arg ) ); + endExpression( expr ); + } + +} // namespace Catch + +// #included from: catch_message.h +#define TWOBLUECUBES_CATCH_MESSAGE_H_INCLUDED + +#include <string> + +namespace Catch { + + struct MessageInfo { + MessageInfo( std::string const& _macroName, + SourceLineInfo const& _lineInfo, + ResultWas::OfType _type ); + + std::string macroName; + SourceLineInfo lineInfo; + ResultWas::OfType type; + std::string message; + unsigned int sequence; + + bool operator == ( MessageInfo const& other ) const { + return sequence == other.sequence; + } + bool operator < ( MessageInfo const& other ) const { + return sequence < other.sequence; + } + private: + static unsigned int globalCount; + }; + + struct MessageBuilder { + MessageBuilder( std::string const& macroName, + SourceLineInfo const& lineInfo, + ResultWas::OfType type ) + : m_info( macroName, lineInfo, type ) + {} + + template<typename T> + MessageBuilder& operator << ( T const& value ) { + m_stream << value; + return *this; + } + + MessageInfo m_info; + std::ostringstream m_stream; + }; + + class ScopedMessage { + public: + ScopedMessage( MessageBuilder const& builder ); + ScopedMessage( ScopedMessage const& other ); + ~ScopedMessage(); + + MessageInfo m_info; + }; + +} // end namespace Catch + +// #included from: catch_interfaces_capture.h +#define TWOBLUECUBES_CATCH_INTERFACES_CAPTURE_H_INCLUDED + +#include <string> + +namespace Catch { + + class TestCase; + class AssertionResult; + struct AssertionInfo; + struct SectionInfo; + struct SectionEndInfo; + struct MessageInfo; + class ScopedMessageBuilder; + struct Counts; + + struct IResultCapture { + + virtual ~IResultCapture(); + + virtual void assertionEnded( AssertionResult const& result ) = 0; + virtual bool sectionStarted( SectionInfo const& sectionInfo, + Counts& assertions ) = 0; + virtual void sectionEnded( SectionEndInfo const& endInfo ) = 0; + virtual void sectionEndedEarly( SectionEndInfo const& endInfo ) = 0; + virtual void pushScopedMessage( MessageInfo const& message ) = 0; + virtual void popScopedMessage( MessageInfo const& message ) = 0; + + virtual std::string getCurrentTestName() const = 0; + virtual const AssertionResult* getLastResult() const = 0; + + virtual void handleFatalErrorCondition( std::string const& message ) = 0; + }; + + IResultCapture& getResultCapture(); +} + +// #included from: catch_debugger.h +#define TWOBLUECUBES_CATCH_DEBUGGER_H_INCLUDED + +// #included from: catch_platform.h +#define TWOBLUECUBES_CATCH_PLATFORM_H_INCLUDED + +#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) +# define CATCH_PLATFORM_MAC +#elif defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +# define CATCH_PLATFORM_IPHONE +#elif defined(linux) || defined(__linux) || defined(__linux__) +# define CATCH_PLATFORM_LINUX +#elif defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) +# define CATCH_PLATFORM_WINDOWS +# if !defined(NOMINMAX) && !defined(CATCH_CONFIG_NO_NOMINMAX) +# define CATCH_DEFINES_NOMINMAX +# endif +# if !defined(WIN32_LEAN_AND_MEAN) && !defined(CATCH_CONFIG_NO_WIN32_LEAN_AND_MEAN) +# define CATCH_DEFINES_WIN32_LEAN_AND_MEAN +# endif +#endif + +#include <string> + +namespace Catch{ + + bool isDebuggerActive(); + void writeToDebugConsole( std::string const& text ); +} + +#ifdef CATCH_PLATFORM_MAC + + // The following code snippet based on: + // http://cocoawithlove.com/2008/03/break-into-debugger.html + #if defined(__ppc64__) || defined(__ppc__) + #define CATCH_TRAP() \ + __asm__("li r0, 20\nsc\nnop\nli r0, 37\nli r4, 2\nsc\nnop\n" \ + : : : "memory","r0","r3","r4" ) + #else + #define CATCH_TRAP() __asm__("int $3\n" : : ) + #endif + +#elif defined(CATCH_PLATFORM_LINUX) + // If we can use inline assembler, do it because this allows us to break + // directly at the location of the failing check instead of breaking inside + // raise() called from it, i.e. one stack frame below. + #if defined(__GNUC__) && (defined(__i386) || defined(__x86_64)) + #define CATCH_TRAP() asm volatile ("int $3") + #else // Fall back to the generic way. + #include <signal.h> + + #define CATCH_TRAP() raise(SIGTRAP) + #endif +#elif defined(_MSC_VER) + #define CATCH_TRAP() __debugbreak() +#elif defined(__MINGW32__) + extern "C" __declspec(dllimport) void __stdcall DebugBreak(); + #define CATCH_TRAP() DebugBreak() +#endif + +#ifdef CATCH_TRAP + #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { CATCH_TRAP(); } +#else + #define CATCH_BREAK_INTO_DEBUGGER() Catch::alwaysTrue(); +#endif + +// #included from: catch_interfaces_runner.h +#define TWOBLUECUBES_CATCH_INTERFACES_RUNNER_H_INCLUDED + +namespace Catch { + class TestCase; + + struct IRunner { + virtual ~IRunner(); + virtual bool aborting() const = 0; + }; +} + +// #included from: catch_type_traits.hpp +#define TWOBLUECUBES_CATCH_TYPE_TRAITS_HPP_INCLUDED + +#if defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) +#include <type_traits> +#endif + +namespace Catch { + +#if defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) + + template <typename T> + using add_lvalue_reference = std::add_lvalue_reference<T>; + + template <typename T> + using add_const = std::add_const<T>; + +#else + + template <typename T> + struct add_const { + typedef const T type; + }; + + template <typename T> + struct add_lvalue_reference { + typedef T& type; + }; + template <typename T> + struct add_lvalue_reference<T&> { + typedef T& type; + }; + // No && overload, because that is C++11, in which case we have + // proper type_traits implementation from the standard library + +#endif + +} + +/////////////////////////////////////////////////////////////////////////////// +// In the event of a failure works out if the debugger needs to be invoked +// and/or an exception thrown and takes appropriate action. +// This needs to be done as a macro so the debugger will stop in the user +// source code rather than in Catch library code +#define INTERNAL_CATCH_REACT( resultBuilder ) \ + if( resultBuilder.shouldDebugBreak() ) CATCH_BREAK_INTO_DEBUGGER(); \ + resultBuilder.react(); + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_TEST( expr, resultDisposition, macroName ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition ); \ + try { \ + CATCH_INTERNAL_SUPPRESS_PARENTHESES_WARNINGS \ + ( __catchResult <= expr ).endExpression(); \ + } \ + catch( ... ) { \ + __catchResult.useActiveException( resultDisposition ); \ + } \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::isTrue( false && static_cast<bool>( !!(expr) ) ) ) // expr here is never evaluated at runtime but it forces the compiler to give it a look + // The double negation silences MSVC's C4800 warning, the static_cast forces short-circuit evaluation if the type has overloaded &&. + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_IF( expr, resultDisposition, macroName ) \ + INTERNAL_CATCH_TEST( expr, resultDisposition, macroName ); \ + if( Catch::getResultCapture().getLastResult()->succeeded() ) + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_ELSE( expr, resultDisposition, macroName ) \ + INTERNAL_CATCH_TEST( expr, resultDisposition, macroName ); \ + if( !Catch::getResultCapture().getLastResult()->succeeded() ) + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_NO_THROW( expr, resultDisposition, macroName ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition ); \ + try { \ + static_cast<void>(expr); \ + __catchResult.captureResult( Catch::ResultWas::Ok ); \ + } \ + catch( ... ) { \ + __catchResult.useActiveException( resultDisposition ); \ + } \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_THROWS( expr, resultDisposition, matcher, macroName ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition, #matcher ); \ + if( __catchResult.allowThrows() ) \ + try { \ + static_cast<void>(expr); \ + __catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \ + } \ + catch( ... ) { \ + __catchResult.captureExpectedException( matcher ); \ + } \ + else \ + __catchResult.captureResult( Catch::ResultWas::Ok ); \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_THROWS_AS( expr, exceptionType, resultDisposition, macroName ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr ", " #exceptionType, resultDisposition ); \ + if( __catchResult.allowThrows() ) \ + try { \ + static_cast<void>(expr); \ + __catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \ + } \ + catch( Catch::add_const<Catch::add_lvalue_reference<exceptionType>::type>::type ) { \ + __catchResult.captureResult( Catch::ResultWas::Ok ); \ + } \ + catch( ... ) { \ + __catchResult.useActiveException( resultDisposition ); \ + } \ + else \ + __catchResult.captureResult( Catch::ResultWas::Ok ); \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) + +/////////////////////////////////////////////////////////////////////////////// +#ifdef CATCH_CONFIG_VARIADIC_MACROS + #define INTERNAL_CATCH_MSG( messageType, resultDisposition, macroName, ... ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, "", resultDisposition ); \ + __catchResult << __VA_ARGS__ + ::Catch::StreamEndStop(); \ + __catchResult.captureResult( messageType ); \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) +#else + #define INTERNAL_CATCH_MSG( messageType, resultDisposition, macroName, log ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, "", resultDisposition ); \ + __catchResult << log + ::Catch::StreamEndStop(); \ + __catchResult.captureResult( messageType ); \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) +#endif + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_INFO( log, macroName ) \ + Catch::ScopedMessage INTERNAL_CATCH_UNIQUE_NAME( scopedMessage ) = Catch::MessageBuilder( macroName, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log; + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CHECK_THAT( arg, matcher, resultDisposition, macroName ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #arg ", " #matcher, resultDisposition ); \ + try { \ + __catchResult.captureMatch( arg, matcher, #matcher ); \ + } catch( ... ) { \ + __catchResult.useActiveException( resultDisposition | Catch::ResultDisposition::ContinueOnFailure ); \ + } \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) + +// #included from: internal/catch_section.h +#define TWOBLUECUBES_CATCH_SECTION_H_INCLUDED + +// #included from: catch_section_info.h +#define TWOBLUECUBES_CATCH_SECTION_INFO_H_INCLUDED + +// #included from: catch_totals.hpp +#define TWOBLUECUBES_CATCH_TOTALS_HPP_INCLUDED + +#include <cstddef> + +namespace Catch { + + struct Counts { + Counts() : passed( 0 ), failed( 0 ), failedButOk( 0 ) {} + + Counts operator - ( Counts const& other ) const { + Counts diff; + diff.passed = passed - other.passed; + diff.failed = failed - other.failed; + diff.failedButOk = failedButOk - other.failedButOk; + return diff; + } + Counts& operator += ( Counts const& other ) { + passed += other.passed; + failed += other.failed; + failedButOk += other.failedButOk; + return *this; + } + + std::size_t total() const { + return passed + failed + failedButOk; + } + bool allPassed() const { + return failed == 0 && failedButOk == 0; + } + bool allOk() const { + return failed == 0; + } + + std::size_t passed; + std::size_t failed; + std::size_t failedButOk; + }; + + struct Totals { + + Totals operator - ( Totals const& other ) const { + Totals diff; + diff.assertions = assertions - other.assertions; + diff.testCases = testCases - other.testCases; + return diff; + } + + Totals delta( Totals const& prevTotals ) const { + Totals diff = *this - prevTotals; + if( diff.assertions.failed > 0 ) + ++diff.testCases.failed; + else if( diff.assertions.failedButOk > 0 ) + ++diff.testCases.failedButOk; + else + ++diff.testCases.passed; + return diff; + } + + Totals& operator += ( Totals const& other ) { + assertions += other.assertions; + testCases += other.testCases; + return *this; + } + + Counts assertions; + Counts testCases; + }; +} + +#include <string> + +namespace Catch { + + struct SectionInfo { + SectionInfo + ( SourceLineInfo const& _lineInfo, + std::string const& _name, + std::string const& _description = std::string() ); + + std::string name; + std::string description; + SourceLineInfo lineInfo; + }; + + struct SectionEndInfo { + SectionEndInfo( SectionInfo const& _sectionInfo, Counts const& _prevAssertions, double _durationInSeconds ) + : sectionInfo( _sectionInfo ), prevAssertions( _prevAssertions ), durationInSeconds( _durationInSeconds ) + {} + + SectionInfo sectionInfo; + Counts prevAssertions; + double durationInSeconds; + }; + +} // end namespace Catch + +// #included from: catch_timer.h +#define TWOBLUECUBES_CATCH_TIMER_H_INCLUDED + +#ifdef CATCH_PLATFORM_WINDOWS +typedef unsigned long long uint64_t; +#else +#include <stdint.h> +#endif + +namespace Catch { + + class Timer { + public: + Timer() : m_ticks( 0 ) {} + void start(); + unsigned int getElapsedMicroseconds() const; + unsigned int getElapsedMilliseconds() const; + double getElapsedSeconds() const; + + private: + uint64_t m_ticks; + }; + +} // namespace Catch + +#include <string> + +namespace Catch { + + class Section : NonCopyable { + public: + Section( SectionInfo const& info ); + ~Section(); + + // This indicates whether the section should be executed or not + operator bool() const; + + private: + SectionInfo m_info; + + std::string m_name; + Counts m_assertions; + bool m_sectionIncluded; + Timer m_timer; + }; + +} // end namespace Catch + +#ifdef CATCH_CONFIG_VARIADIC_MACROS + #define INTERNAL_CATCH_SECTION( ... ) \ + if( Catch::Section const& INTERNAL_CATCH_UNIQUE_NAME( catch_internal_Section ) = Catch::SectionInfo( CATCH_INTERNAL_LINEINFO, __VA_ARGS__ ) ) +#else + #define INTERNAL_CATCH_SECTION( name, desc ) \ + if( Catch::Section const& INTERNAL_CATCH_UNIQUE_NAME( catch_internal_Section ) = Catch::SectionInfo( CATCH_INTERNAL_LINEINFO, name, desc ) ) +#endif + +// #included from: internal/catch_generators.hpp +#define TWOBLUECUBES_CATCH_GENERATORS_HPP_INCLUDED + +#include <iterator> +#include <vector> +#include <string> +#include <stdlib.h> + +namespace Catch { + +template<typename T> +struct IGenerator { + virtual ~IGenerator() {} + virtual T getValue( std::size_t index ) const = 0; + virtual std::size_t size () const = 0; +}; + +template<typename T> +class BetweenGenerator : public IGenerator<T> { +public: + BetweenGenerator( T from, T to ) : m_from( from ), m_to( to ){} + + virtual T getValue( std::size_t index ) const { + return m_from+static_cast<int>( index ); + } + + virtual std::size_t size() const { + return static_cast<std::size_t>( 1+m_to-m_from ); + } + +private: + + T m_from; + T m_to; +}; + +template<typename T> +class ValuesGenerator : public IGenerator<T> { +public: + ValuesGenerator(){} + + void add( T value ) { + m_values.push_back( value ); + } + + virtual T getValue( std::size_t index ) const { + return m_values[index]; + } + + virtual std::size_t size() const { + return m_values.size(); + } + +private: + std::vector<T> m_values; +}; + +template<typename T> +class CompositeGenerator { +public: + CompositeGenerator() : m_totalSize( 0 ) {} + + // *** Move semantics, similar to auto_ptr *** + CompositeGenerator( CompositeGenerator& other ) + : m_fileInfo( other.m_fileInfo ), + m_totalSize( 0 ) + { + move( other ); + } + + CompositeGenerator& setFileInfo( const char* fileInfo ) { + m_fileInfo = fileInfo; + return *this; + } + + ~CompositeGenerator() { + deleteAll( m_composed ); + } + + operator T () const { + size_t overallIndex = getCurrentContext().getGeneratorIndex( m_fileInfo, m_totalSize ); + + typename std::vector<const IGenerator<T>*>::const_iterator it = m_composed.begin(); + typename std::vector<const IGenerator<T>*>::const_iterator itEnd = m_composed.end(); + for( size_t index = 0; it != itEnd; ++it ) + { + const IGenerator<T>* generator = *it; + if( overallIndex >= index && overallIndex < index + generator->size() ) + { + return generator->getValue( overallIndex-index ); + } + index += generator->size(); + } + CATCH_INTERNAL_ERROR( "Indexed past end of generated range" ); + return T(); // Suppress spurious "not all control paths return a value" warning in Visual Studio - if you know how to fix this please do so + } + + void add( const IGenerator<T>* generator ) { + m_totalSize += generator->size(); + m_composed.push_back( generator ); + } + + CompositeGenerator& then( CompositeGenerator& other ) { + move( other ); + return *this; + } + + CompositeGenerator& then( T value ) { + ValuesGenerator<T>* valuesGen = new ValuesGenerator<T>(); + valuesGen->add( value ); + add( valuesGen ); + return *this; + } + +private: + + void move( CompositeGenerator& other ) { + std::copy( other.m_composed.begin(), other.m_composed.end(), std::back_inserter( m_composed ) ); + m_totalSize += other.m_totalSize; + other.m_composed.clear(); + } + + std::vector<const IGenerator<T>*> m_composed; + std::string m_fileInfo; + size_t m_totalSize; +}; + +namespace Generators +{ + template<typename T> + CompositeGenerator<T> between( T from, T to ) { + CompositeGenerator<T> generators; + generators.add( new BetweenGenerator<T>( from, to ) ); + return generators; + } + + template<typename T> + CompositeGenerator<T> values( T val1, T val2 ) { + CompositeGenerator<T> generators; + ValuesGenerator<T>* valuesGen = new ValuesGenerator<T>(); + valuesGen->add( val1 ); + valuesGen->add( val2 ); + generators.add( valuesGen ); + return generators; + } + + template<typename T> + CompositeGenerator<T> values( T val1, T val2, T val3 ){ + CompositeGenerator<T> generators; + ValuesGenerator<T>* valuesGen = new ValuesGenerator<T>(); + valuesGen->add( val1 ); + valuesGen->add( val2 ); + valuesGen->add( val3 ); + generators.add( valuesGen ); + return generators; + } + + template<typename T> + CompositeGenerator<T> values( T val1, T val2, T val3, T val4 ) { + CompositeGenerator<T> generators; + ValuesGenerator<T>* valuesGen = new ValuesGenerator<T>(); + valuesGen->add( val1 ); + valuesGen->add( val2 ); + valuesGen->add( val3 ); + valuesGen->add( val4 ); + generators.add( valuesGen ); + return generators; + } + +} // end namespace Generators + +using namespace Generators; + +} // end namespace Catch + +#define INTERNAL_CATCH_LINESTR2( line ) #line +#define INTERNAL_CATCH_LINESTR( line ) INTERNAL_CATCH_LINESTR2( line ) + +#define INTERNAL_CATCH_GENERATE( expr ) expr.setFileInfo( __FILE__ "(" INTERNAL_CATCH_LINESTR( __LINE__ ) ")" ) + +// #included from: internal/catch_interfaces_exception.h +#define TWOBLUECUBES_CATCH_INTERFACES_EXCEPTION_H_INCLUDED + +#include <string> +#include <vector> + +// #included from: catch_interfaces_registry_hub.h +#define TWOBLUECUBES_CATCH_INTERFACES_REGISTRY_HUB_H_INCLUDED + +#include <string> + +namespace Catch { + + class TestCase; + struct ITestCaseRegistry; + struct IExceptionTranslatorRegistry; + struct IExceptionTranslator; + struct IReporterRegistry; + struct IReporterFactory; + + struct IRegistryHub { + virtual ~IRegistryHub(); + + virtual IReporterRegistry const& getReporterRegistry() const = 0; + virtual ITestCaseRegistry const& getTestCaseRegistry() const = 0; + virtual IExceptionTranslatorRegistry& getExceptionTranslatorRegistry() = 0; + }; + + struct IMutableRegistryHub { + virtual ~IMutableRegistryHub(); + virtual void registerReporter( std::string const& name, Ptr<IReporterFactory> const& factory ) = 0; + virtual void registerListener( Ptr<IReporterFactory> const& factory ) = 0; + virtual void registerTest( TestCase const& testInfo ) = 0; + virtual void registerTranslator( const IExceptionTranslator* translator ) = 0; + }; + + IRegistryHub& getRegistryHub(); + IMutableRegistryHub& getMutableRegistryHub(); + void cleanUp(); + std::string translateActiveException(); + +} + +namespace Catch { + + typedef std::string(*exceptionTranslateFunction)(); + + struct IExceptionTranslator; + typedef std::vector<const IExceptionTranslator*> ExceptionTranslators; + + struct IExceptionTranslator { + virtual ~IExceptionTranslator(); + virtual std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const = 0; + }; + + struct IExceptionTranslatorRegistry { + virtual ~IExceptionTranslatorRegistry(); + + virtual std::string translateActiveException() const = 0; + }; + + class ExceptionTranslatorRegistrar { + template<typename T> + class ExceptionTranslator : public IExceptionTranslator { + public: + + ExceptionTranslator( std::string(*translateFunction)( T& ) ) + : m_translateFunction( translateFunction ) + {} + + virtual std::string translate( ExceptionTranslators::const_iterator it, ExceptionTranslators::const_iterator itEnd ) const CATCH_OVERRIDE { + try { + if( it == itEnd ) + throw; + else + return (*it)->translate( it+1, itEnd ); + } + catch( T& ex ) { + return m_translateFunction( ex ); + } + } + + protected: + std::string(*m_translateFunction)( T& ); + }; + + public: + template<typename T> + ExceptionTranslatorRegistrar( std::string(*translateFunction)( T& ) ) { + getMutableRegistryHub().registerTranslator + ( new ExceptionTranslator<T>( translateFunction ) ); + } + }; +} + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_TRANSLATE_EXCEPTION2( translatorName, signature ) \ + static std::string translatorName( signature ); \ + namespace{ Catch::ExceptionTranslatorRegistrar INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionRegistrar )( &translatorName ); }\ + static std::string translatorName( signature ) + +#define INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION2( INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ), signature ) + +// #included from: internal/catch_approx.hpp +#define TWOBLUECUBES_CATCH_APPROX_HPP_INCLUDED + +#include <cmath> +#include <limits> + +#if defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) +#include <type_traits> +#endif + +namespace Catch { +namespace Detail { + + class Approx { + public: + explicit Approx ( double value ) + : m_epsilon( std::numeric_limits<float>::epsilon()*100 ), + m_scale( 1.0 ), + m_value( value ) + {} + + Approx( Approx const& other ) + : m_epsilon( other.m_epsilon ), + m_scale( other.m_scale ), + m_value( other.m_value ) + {} + + static Approx custom() { + return Approx( 0 ); + } + + Approx operator()( double value ) { + Approx approx( value ); + approx.epsilon( m_epsilon ); + approx.scale( m_scale ); + return approx; + } + +#if defined(CATCH_CONFIG_CPP11_TYPE_TRAITS) + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator == ( const T& lhs, Approx const& rhs ) { + // Thanks to Richard Harris for his help refining this formula + auto lhs_v = double(lhs); + return std::fabs( lhs_v - rhs.m_value ) < rhs.m_epsilon * (rhs.m_scale + (std::max)( std::fabs(lhs_v), std::fabs(rhs.m_value) ) ); + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator == ( Approx const& lhs, const T& rhs ) { + return operator==( rhs, lhs ); + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator != ( T lhs, Approx const& rhs ) { + return !operator==( lhs, rhs ); + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator != ( Approx const& lhs, T rhs ) { + return !operator==( rhs, lhs ); + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator <= ( T lhs, Approx const& rhs ) + { + return double(lhs) < rhs.m_value || lhs == rhs; + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator <= ( Approx const& lhs, T rhs ) + { + return lhs.m_value < double(rhs) || lhs == rhs; + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator >= ( T lhs, Approx const& rhs ) + { + return double(lhs) > rhs.m_value || lhs == rhs; + } + + template <typename T, typename = typename std::enable_if<std::is_constructible<double, T>::value>::type> + friend bool operator >= ( Approx const& lhs, T rhs ) + { + return lhs.m_value > double(rhs) || lhs == rhs; + } +#else + friend bool operator == ( double lhs, Approx const& rhs ) { + // Thanks to Richard Harris for his help refining this formula + return std::fabs( lhs - rhs.m_value ) < rhs.m_epsilon * (rhs.m_scale + (std::max)( std::fabs(lhs), std::fabs(rhs.m_value) ) ); + } + + friend bool operator == ( Approx const& lhs, double rhs ) { + return operator==( rhs, lhs ); + } + + friend bool operator != ( double lhs, Approx const& rhs ) { + return !operator==( lhs, rhs ); + } + + friend bool operator != ( Approx const& lhs, double rhs ) { + return !operator==( rhs, lhs ); + } + + friend bool operator <= ( double lhs, Approx const& rhs ) + { + return lhs < rhs.m_value || lhs == rhs; + } + + friend bool operator <= ( Approx const& lhs, double rhs ) + { + return lhs.m_value < rhs || lhs == rhs; + } + + friend bool operator >= ( double lhs, Approx const& rhs ) + { + return lhs > rhs.m_value || lhs == rhs; + } + + friend bool operator >= ( Approx const& lhs, double rhs ) + { + return lhs.m_value > rhs || lhs == rhs; + } +#endif + + Approx& epsilon( double newEpsilon ) { + m_epsilon = newEpsilon; + return *this; + } + + Approx& scale( double newScale ) { + m_scale = newScale; + return *this; + } + + std::string toString() const { + std::ostringstream oss; + oss << "Approx( " << Catch::toString( m_value ) << " )"; + return oss.str(); + } + + private: + double m_epsilon; + double m_scale; + double m_value; + }; +} + +template<> +inline std::string toString<Detail::Approx>( Detail::Approx const& value ) { + return value.toString(); +} + +} // end namespace Catch + +// #included from: internal/catch_interfaces_tag_alias_registry.h +#define TWOBLUECUBES_CATCH_INTERFACES_TAG_ALIAS_REGISTRY_H_INCLUDED + +// #included from: catch_tag_alias.h +#define TWOBLUECUBES_CATCH_TAG_ALIAS_H_INCLUDED + +#include <string> + +namespace Catch { + + struct TagAlias { + TagAlias( std::string _tag, SourceLineInfo _lineInfo ) : tag( _tag ), lineInfo( _lineInfo ) {} + + std::string tag; + SourceLineInfo lineInfo; + }; + + struct RegistrarForTagAliases { + RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo ); + }; + +} // end namespace Catch + +#define CATCH_REGISTER_TAG_ALIAS( alias, spec ) namespace{ Catch::RegistrarForTagAliases INTERNAL_CATCH_UNIQUE_NAME( AutoRegisterTagAlias )( alias, spec, CATCH_INTERNAL_LINEINFO ); } +// #included from: catch_option.hpp +#define TWOBLUECUBES_CATCH_OPTION_HPP_INCLUDED + +namespace Catch { + + // An optional type + template<typename T> + class Option { + public: + Option() : nullableValue( CATCH_NULL ) {} + Option( T const& _value ) + : nullableValue( new( storage ) T( _value ) ) + {} + Option( Option const& _other ) + : nullableValue( _other ? new( storage ) T( *_other ) : CATCH_NULL ) + {} + + ~Option() { + reset(); + } + + Option& operator= ( Option const& _other ) { + if( &_other != this ) { + reset(); + if( _other ) + nullableValue = new( storage ) T( *_other ); + } + return *this; + } + Option& operator = ( T const& _value ) { + reset(); + nullableValue = new( storage ) T( _value ); + return *this; + } + + void reset() { + if( nullableValue ) + nullableValue->~T(); + nullableValue = CATCH_NULL; + } + + T& operator*() { return *nullableValue; } + T const& operator*() const { return *nullableValue; } + T* operator->() { return nullableValue; } + const T* operator->() const { return nullableValue; } + + T valueOr( T const& defaultValue ) const { + return nullableValue ? *nullableValue : defaultValue; + } + + bool some() const { return nullableValue != CATCH_NULL; } + bool none() const { return nullableValue == CATCH_NULL; } + + bool operator !() const { return nullableValue == CATCH_NULL; } + operator SafeBool::type() const { + return SafeBool::makeSafe( some() ); + } + + private: + T* nullableValue; + char storage[sizeof(T)]; + }; + +} // end namespace Catch + +namespace Catch { + + struct ITagAliasRegistry { + virtual ~ITagAliasRegistry(); + virtual Option<TagAlias> find( std::string const& alias ) const = 0; + virtual std::string expandAliases( std::string const& unexpandedTestSpec ) const = 0; + + static ITagAliasRegistry const& get(); + }; + +} // end namespace Catch + +// These files are included here so the single_include script doesn't put them +// in the conditionally compiled sections +// #included from: internal/catch_test_case_info.h +#define TWOBLUECUBES_CATCH_TEST_CASE_INFO_H_INCLUDED + +#include <string> +#include <set> + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wpadded" +#endif + +namespace Catch { + + struct ITestCase; + + struct TestCaseInfo { + enum SpecialProperties{ + None = 0, + IsHidden = 1 << 1, + ShouldFail = 1 << 2, + MayFail = 1 << 3, + Throws = 1 << 4, + NonPortable = 1 << 5 + }; + + TestCaseInfo( std::string const& _name, + std::string const& _className, + std::string const& _description, + std::set<std::string> const& _tags, + SourceLineInfo const& _lineInfo ); + + TestCaseInfo( TestCaseInfo const& other ); + + friend void setTags( TestCaseInfo& testCaseInfo, std::set<std::string> const& tags ); + + bool isHidden() const; + bool throws() const; + bool okToFail() const; + bool expectedToFail() const; + + std::string name; + std::string className; + std::string description; + std::set<std::string> tags; + std::set<std::string> lcaseTags; + std::string tagsAsString; + SourceLineInfo lineInfo; + SpecialProperties properties; + }; + + class TestCase : public TestCaseInfo { + public: + + TestCase( ITestCase* testCase, TestCaseInfo const& info ); + TestCase( TestCase const& other ); + + TestCase withName( std::string const& _newName ) const; + + void invoke() const; + + TestCaseInfo const& getTestCaseInfo() const; + + void swap( TestCase& other ); + bool operator == ( TestCase const& other ) const; + bool operator < ( TestCase const& other ) const; + TestCase& operator = ( TestCase const& other ); + + private: + Ptr<ITestCase> test; + }; + + TestCase makeTestCase( ITestCase* testCase, + std::string const& className, + std::string const& name, + std::string const& description, + SourceLineInfo const& lineInfo ); +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + + +#ifdef __OBJC__ +// #included from: internal/catch_objc.hpp +#define TWOBLUECUBES_CATCH_OBJC_HPP_INCLUDED + +#import <objc/runtime.h> + +#include <string> + +// NB. Any general catch headers included here must be included +// in catch.hpp first to make sure they are included by the single +// header for non obj-usage + +/////////////////////////////////////////////////////////////////////////////// +// This protocol is really only here for (self) documenting purposes, since +// all its methods are optional. +@protocol OcFixture + +@optional + +-(void) setUp; +-(void) tearDown; + +@end + +namespace Catch { + + class OcMethod : public SharedImpl<ITestCase> { + + public: + OcMethod( Class cls, SEL sel ) : m_cls( cls ), m_sel( sel ) {} + + virtual void invoke() const { + id obj = [[m_cls alloc] init]; + + performOptionalSelector( obj, @selector(setUp) ); + performOptionalSelector( obj, m_sel ); + performOptionalSelector( obj, @selector(tearDown) ); + + arcSafeRelease( obj ); + } + private: + virtual ~OcMethod() {} + + Class m_cls; + SEL m_sel; + }; + + namespace Detail{ + + inline std::string getAnnotation( Class cls, + std::string const& annotationName, + std::string const& testCaseName ) { + NSString* selStr = [[NSString alloc] initWithFormat:@"Catch_%s_%s", annotationName.c_str(), testCaseName.c_str()]; + SEL sel = NSSelectorFromString( selStr ); + arcSafeRelease( selStr ); + id value = performOptionalSelector( cls, sel ); + if( value ) + return [(NSString*)value UTF8String]; + return ""; + } + } + + inline size_t registerTestMethods() { + size_t noTestMethods = 0; + int noClasses = objc_getClassList( CATCH_NULL, 0 ); + + Class* classes = (CATCH_UNSAFE_UNRETAINED Class *)malloc( sizeof(Class) * noClasses); + objc_getClassList( classes, noClasses ); + + for( int c = 0; c < noClasses; c++ ) { + Class cls = classes[c]; + { + u_int count; + Method* methods = class_copyMethodList( cls, &count ); + for( u_int m = 0; m < count ; m++ ) { + SEL selector = method_getName(methods[m]); + std::string methodName = sel_getName(selector); + if( startsWith( methodName, "Catch_TestCase_" ) ) { + std::string testCaseName = methodName.substr( 15 ); + std::string name = Detail::getAnnotation( cls, "Name", testCaseName ); + std::string desc = Detail::getAnnotation( cls, "Description", testCaseName ); + const char* className = class_getName( cls ); + + getMutableRegistryHub().registerTest( makeTestCase( new OcMethod( cls, selector ), className, name.c_str(), desc.c_str(), SourceLineInfo() ) ); + noTestMethods++; + } + } + free(methods); + } + } + return noTestMethods; + } + + namespace Matchers { + namespace Impl { + namespace NSStringMatchers { + + template<typename MatcherT> + struct StringHolder : MatcherImpl<MatcherT, NSString*>{ + StringHolder( NSString* substr ) : m_substr( [substr copy] ){} + StringHolder( StringHolder const& other ) : m_substr( [other.m_substr copy] ){} + StringHolder() { + arcSafeRelease( m_substr ); + } + + NSString* m_substr; + }; + + struct Equals : StringHolder<Equals> { + Equals( NSString* substr ) : StringHolder( substr ){} + + virtual bool match( ExpressionType const& str ) const { + return (str != nil || m_substr == nil ) && + [str isEqualToString:m_substr]; + } + + virtual std::string toString() const { + return "equals string: " + Catch::toString( m_substr ); + } + }; + + struct Contains : StringHolder<Contains> { + Contains( NSString* substr ) : StringHolder( substr ){} + + virtual bool match( ExpressionType const& str ) const { + return (str != nil || m_substr == nil ) && + [str rangeOfString:m_substr].location != NSNotFound; + } + + virtual std::string toString() const { + return "contains string: " + Catch::toString( m_substr ); + } + }; + + struct StartsWith : StringHolder<StartsWith> { + StartsWith( NSString* substr ) : StringHolder( substr ){} + + virtual bool match( ExpressionType const& str ) const { + return (str != nil || m_substr == nil ) && + [str rangeOfString:m_substr].location == 0; + } + + virtual std::string toString() const { + return "starts with: " + Catch::toString( m_substr ); + } + }; + struct EndsWith : StringHolder<EndsWith> { + EndsWith( NSString* substr ) : StringHolder( substr ){} + + virtual bool match( ExpressionType const& str ) const { + return (str != nil || m_substr == nil ) && + [str rangeOfString:m_substr].location == [str length] - [m_substr length]; + } + + virtual std::string toString() const { + return "ends with: " + Catch::toString( m_substr ); + } + }; + + } // namespace NSStringMatchers + } // namespace Impl + + inline Impl::NSStringMatchers::Equals + Equals( NSString* substr ){ return Impl::NSStringMatchers::Equals( substr ); } + + inline Impl::NSStringMatchers::Contains + Contains( NSString* substr ){ return Impl::NSStringMatchers::Contains( substr ); } + + inline Impl::NSStringMatchers::StartsWith + StartsWith( NSString* substr ){ return Impl::NSStringMatchers::StartsWith( substr ); } + + inline Impl::NSStringMatchers::EndsWith + EndsWith( NSString* substr ){ return Impl::NSStringMatchers::EndsWith( substr ); } + + } // namespace Matchers + + using namespace Matchers; + +} // namespace Catch + +/////////////////////////////////////////////////////////////////////////////// +#define OC_TEST_CASE( name, desc )\ ++(NSString*) INTERNAL_CATCH_UNIQUE_NAME( Catch_Name_test ) \ +{\ +return @ name; \ +}\ ++(NSString*) INTERNAL_CATCH_UNIQUE_NAME( Catch_Description_test ) \ +{ \ +return @ desc; \ +} \ +-(void) INTERNAL_CATCH_UNIQUE_NAME( Catch_TestCase_test ) + +#endif + +#ifdef CATCH_IMPL +// #included from: internal/catch_impl.hpp +#define TWOBLUECUBES_CATCH_IMPL_HPP_INCLUDED + +// Collect all the implementation files together here +// These are the equivalent of what would usually be cpp files + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wweak-vtables" +#endif + +// #included from: ../catch_session.hpp +#define TWOBLUECUBES_CATCH_RUNNER_HPP_INCLUDED + +// #included from: internal/catch_commandline.hpp +#define TWOBLUECUBES_CATCH_COMMANDLINE_HPP_INCLUDED + +// #included from: catch_config.hpp +#define TWOBLUECUBES_CATCH_CONFIG_HPP_INCLUDED + +// #included from: catch_test_spec_parser.hpp +#define TWOBLUECUBES_CATCH_TEST_SPEC_PARSER_HPP_INCLUDED + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wpadded" +#endif + +// #included from: catch_test_spec.hpp +#define TWOBLUECUBES_CATCH_TEST_SPEC_HPP_INCLUDED + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wpadded" +#endif + +// #included from: catch_wildcard_pattern.hpp +#define TWOBLUECUBES_CATCH_WILDCARD_PATTERN_HPP_INCLUDED + +#include <stdexcept> + +namespace Catch +{ + class WildcardPattern { + enum WildcardPosition { + NoWildcard = 0, + WildcardAtStart = 1, + WildcardAtEnd = 2, + WildcardAtBothEnds = WildcardAtStart | WildcardAtEnd + }; + + public: + + WildcardPattern( std::string const& pattern, CaseSensitive::Choice caseSensitivity ) + : m_caseSensitivity( caseSensitivity ), + m_wildcard( NoWildcard ), + m_pattern( adjustCase( pattern ) ) + { + if( startsWith( m_pattern, '*' ) ) { + m_pattern = m_pattern.substr( 1 ); + m_wildcard = WildcardAtStart; + } + if( endsWith( m_pattern, '*' ) ) { + m_pattern = m_pattern.substr( 0, m_pattern.size()-1 ); + m_wildcard = static_cast<WildcardPosition>( m_wildcard | WildcardAtEnd ); + } + } + virtual ~WildcardPattern(); + virtual bool matches( std::string const& str ) const { + switch( m_wildcard ) { + case NoWildcard: + return m_pattern == adjustCase( str ); + case WildcardAtStart: + return endsWith( adjustCase( str ), m_pattern ); + case WildcardAtEnd: + return startsWith( adjustCase( str ), m_pattern ); + case WildcardAtBothEnds: + return contains( adjustCase( str ), m_pattern ); + } + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunreachable-code" +#endif + throw std::logic_error( "Unknown enum" ); +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + } + private: + std::string adjustCase( std::string const& str ) const { + return m_caseSensitivity == CaseSensitive::No ? toLower( str ) : str; + } + CaseSensitive::Choice m_caseSensitivity; + WildcardPosition m_wildcard; + std::string m_pattern; + }; +} + +#include <string> +#include <vector> + +namespace Catch { + + class TestSpec { + struct Pattern : SharedImpl<> { + virtual ~Pattern(); + virtual bool matches( TestCaseInfo const& testCase ) const = 0; + }; + class NamePattern : public Pattern { + public: + NamePattern( std::string const& name ) + : m_wildcardPattern( toLower( name ), CaseSensitive::No ) + {} + virtual ~NamePattern(); + virtual bool matches( TestCaseInfo const& testCase ) const { + return m_wildcardPattern.matches( toLower( testCase.name ) ); + } + private: + WildcardPattern m_wildcardPattern; + }; + + class TagPattern : public Pattern { + public: + TagPattern( std::string const& tag ) : m_tag( toLower( tag ) ) {} + virtual ~TagPattern(); + virtual bool matches( TestCaseInfo const& testCase ) const { + return testCase.lcaseTags.find( m_tag ) != testCase.lcaseTags.end(); + } + private: + std::string m_tag; + }; + + class ExcludedPattern : public Pattern { + public: + ExcludedPattern( Ptr<Pattern> const& underlyingPattern ) : m_underlyingPattern( underlyingPattern ) {} + virtual ~ExcludedPattern(); + virtual bool matches( TestCaseInfo const& testCase ) const { return !m_underlyingPattern->matches( testCase ); } + private: + Ptr<Pattern> m_underlyingPattern; + }; + + struct Filter { + std::vector<Ptr<Pattern> > m_patterns; + + bool matches( TestCaseInfo const& testCase ) const { + // All patterns in a filter must match for the filter to be a match + for( std::vector<Ptr<Pattern> >::const_iterator it = m_patterns.begin(), itEnd = m_patterns.end(); it != itEnd; ++it ) { + if( !(*it)->matches( testCase ) ) + return false; + } + return true; + } + }; + + public: + bool hasFilters() const { + return !m_filters.empty(); + } + bool matches( TestCaseInfo const& testCase ) const { + // A TestSpec matches if any filter matches + for( std::vector<Filter>::const_iterator it = m_filters.begin(), itEnd = m_filters.end(); it != itEnd; ++it ) + if( it->matches( testCase ) ) + return true; + return false; + } + + private: + std::vector<Filter> m_filters; + + friend class TestSpecParser; + }; +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +namespace Catch { + + class TestSpecParser { + enum Mode{ None, Name, QuotedName, Tag, EscapedName }; + Mode m_mode; + bool m_exclusion; + std::size_t m_start, m_pos; + std::string m_arg; + std::vector<std::size_t> m_escapeChars; + TestSpec::Filter m_currentFilter; + TestSpec m_testSpec; + ITagAliasRegistry const* m_tagAliases; + + public: + TestSpecParser( ITagAliasRegistry const& tagAliases ) : m_tagAliases( &tagAliases ) {} + + TestSpecParser& parse( std::string const& arg ) { + m_mode = None; + m_exclusion = false; + m_start = std::string::npos; + m_arg = m_tagAliases->expandAliases( arg ); + m_escapeChars.clear(); + for( m_pos = 0; m_pos < m_arg.size(); ++m_pos ) + visitChar( m_arg[m_pos] ); + if( m_mode == Name ) + addPattern<TestSpec::NamePattern>(); + return *this; + } + TestSpec testSpec() { + addFilter(); + return m_testSpec; + } + private: + void visitChar( char c ) { + if( m_mode == None ) { + switch( c ) { + case ' ': return; + case '~': m_exclusion = true; return; + case '[': return startNewMode( Tag, ++m_pos ); + case '"': return startNewMode( QuotedName, ++m_pos ); + case '\\': return escape(); + default: startNewMode( Name, m_pos ); break; + } + } + if( m_mode == Name ) { + if( c == ',' ) { + addPattern<TestSpec::NamePattern>(); + addFilter(); + } + else if( c == '[' ) { + if( subString() == "exclude:" ) + m_exclusion = true; + else + addPattern<TestSpec::NamePattern>(); + startNewMode( Tag, ++m_pos ); + } + else if( c == '\\' ) + escape(); + } + else if( m_mode == EscapedName ) + m_mode = Name; + else if( m_mode == QuotedName && c == '"' ) + addPattern<TestSpec::NamePattern>(); + else if( m_mode == Tag && c == ']' ) + addPattern<TestSpec::TagPattern>(); + } + void startNewMode( Mode mode, std::size_t start ) { + m_mode = mode; + m_start = start; + } + void escape() { + if( m_mode == None ) + m_start = m_pos; + m_mode = EscapedName; + m_escapeChars.push_back( m_pos ); + } + std::string subString() const { return m_arg.substr( m_start, m_pos - m_start ); } + template<typename T> + void addPattern() { + std::string token = subString(); + for( size_t i = 0; i < m_escapeChars.size(); ++i ) + token = token.substr( 0, m_escapeChars[i]-i ) + token.substr( m_escapeChars[i]+1-i ); + m_escapeChars.clear(); + if( startsWith( token, "exclude:" ) ) { + m_exclusion = true; + token = token.substr( 8 ); + } + if( !token.empty() ) { + Ptr<TestSpec::Pattern> pattern = new T( token ); + if( m_exclusion ) + pattern = new TestSpec::ExcludedPattern( pattern ); + m_currentFilter.m_patterns.push_back( pattern ); + } + m_exclusion = false; + m_mode = None; + } + void addFilter() { + if( !m_currentFilter.m_patterns.empty() ) { + m_testSpec.m_filters.push_back( m_currentFilter ); + m_currentFilter = TestSpec::Filter(); + } + } + }; + inline TestSpec parseTestSpec( std::string const& arg ) { + return TestSpecParser( ITagAliasRegistry::get() ).parse( arg ).testSpec(); + } + +} // namespace Catch + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +// #included from: catch_interfaces_config.h +#define TWOBLUECUBES_CATCH_INTERFACES_CONFIG_H_INCLUDED + +#include <iosfwd> +#include <string> +#include <vector> + +namespace Catch { + + struct Verbosity { enum Level { + NoOutput = 0, + Quiet, + Normal + }; }; + + struct WarnAbout { enum What { + Nothing = 0x00, + NoAssertions = 0x01 + }; }; + + struct ShowDurations { enum OrNot { + DefaultForReporter, + Always, + Never + }; }; + struct RunTests { enum InWhatOrder { + InDeclarationOrder, + InLexicographicalOrder, + InRandomOrder + }; }; + struct UseColour { enum YesOrNo { + Auto, + Yes, + No + }; }; + + class TestSpec; + + struct IConfig : IShared { + + virtual ~IConfig(); + + virtual bool allowThrows() const = 0; + virtual std::ostream& stream() const = 0; + virtual std::string name() const = 0; + virtual bool includeSuccessfulResults() const = 0; + virtual bool shouldDebugBreak() const = 0; + virtual bool warnAboutMissingAssertions() const = 0; + virtual int abortAfter() const = 0; + virtual bool showInvisibles() const = 0; + virtual ShowDurations::OrNot showDurations() const = 0; + virtual TestSpec const& testSpec() const = 0; + virtual RunTests::InWhatOrder runOrder() const = 0; + virtual unsigned int rngSeed() const = 0; + virtual UseColour::YesOrNo useColour() const = 0; + virtual std::vector<std::string> const& getSectionsToRun() const = 0; + + }; +} + +// #included from: catch_stream.h +#define TWOBLUECUBES_CATCH_STREAM_H_INCLUDED + +// #included from: catch_streambuf.h +#define TWOBLUECUBES_CATCH_STREAMBUF_H_INCLUDED + +#include <streambuf> + +namespace Catch { + + class StreamBufBase : public std::streambuf { + public: + virtual ~StreamBufBase() CATCH_NOEXCEPT; + }; +} + +#include <streambuf> +#include <ostream> +#include <fstream> +#include <memory> + +namespace Catch { + + std::ostream& cout(); + std::ostream& cerr(); + + struct IStream { + virtual ~IStream() CATCH_NOEXCEPT; + virtual std::ostream& stream() const = 0; + }; + + class FileStream : public IStream { + mutable std::ofstream m_ofs; + public: + FileStream( std::string const& filename ); + virtual ~FileStream() CATCH_NOEXCEPT; + public: // IStream + virtual std::ostream& stream() const CATCH_OVERRIDE; + }; + + class CoutStream : public IStream { + mutable std::ostream m_os; + public: + CoutStream(); + virtual ~CoutStream() CATCH_NOEXCEPT; + + public: // IStream + virtual std::ostream& stream() const CATCH_OVERRIDE; + }; + + class DebugOutStream : public IStream { + CATCH_AUTO_PTR( StreamBufBase ) m_streamBuf; + mutable std::ostream m_os; + public: + DebugOutStream(); + virtual ~DebugOutStream() CATCH_NOEXCEPT; + + public: // IStream + virtual std::ostream& stream() const CATCH_OVERRIDE; + }; +} + +#include <memory> +#include <vector> +#include <string> +#include <stdexcept> + +#ifndef CATCH_CONFIG_CONSOLE_WIDTH +#define CATCH_CONFIG_CONSOLE_WIDTH 80 +#endif + +namespace Catch { + + struct ConfigData { + + ConfigData() + : listTests( false ), + listTags( false ), + listReporters( false ), + listTestNamesOnly( false ), + showSuccessfulTests( false ), + shouldDebugBreak( false ), + noThrow( false ), + showHelp( false ), + showInvisibles( false ), + filenamesAsTags( false ), + abortAfter( -1 ), + rngSeed( 0 ), + verbosity( Verbosity::Normal ), + warnings( WarnAbout::Nothing ), + showDurations( ShowDurations::DefaultForReporter ), + runOrder( RunTests::InDeclarationOrder ), + useColour( UseColour::Auto ) + {} + + bool listTests; + bool listTags; + bool listReporters; + bool listTestNamesOnly; + + bool showSuccessfulTests; + bool shouldDebugBreak; + bool noThrow; + bool showHelp; + bool showInvisibles; + bool filenamesAsTags; + + int abortAfter; + unsigned int rngSeed; + + Verbosity::Level verbosity; + WarnAbout::What warnings; + ShowDurations::OrNot showDurations; + RunTests::InWhatOrder runOrder; + UseColour::YesOrNo useColour; + + std::string outputFilename; + std::string name; + std::string processName; + + std::vector<std::string> reporterNames; + std::vector<std::string> testsOrTags; + std::vector<std::string> sectionsToRun; + }; + + class Config : public SharedImpl<IConfig> { + private: + Config( Config const& other ); + Config& operator = ( Config const& other ); + virtual void dummy(); + public: + + Config() + {} + + Config( ConfigData const& data ) + : m_data( data ), + m_stream( openStream() ) + { + if( !data.testsOrTags.empty() ) { + TestSpecParser parser( ITagAliasRegistry::get() ); + for( std::size_t i = 0; i < data.testsOrTags.size(); ++i ) + parser.parse( data.testsOrTags[i] ); + m_testSpec = parser.testSpec(); + } + } + + virtual ~Config() {} + + std::string const& getFilename() const { + return m_data.outputFilename ; + } + + bool listTests() const { return m_data.listTests; } + bool listTestNamesOnly() const { return m_data.listTestNamesOnly; } + bool listTags() const { return m_data.listTags; } + bool listReporters() const { return m_data.listReporters; } + + std::string getProcessName() const { return m_data.processName; } + + std::vector<std::string> const& getReporterNames() const { return m_data.reporterNames; } + std::vector<std::string> const& getSectionsToRun() const CATCH_OVERRIDE { return m_data.sectionsToRun; } + + virtual TestSpec const& testSpec() const CATCH_OVERRIDE { return m_testSpec; } + + bool showHelp() const { return m_data.showHelp; } + + // IConfig interface + virtual bool allowThrows() const CATCH_OVERRIDE { return !m_data.noThrow; } + virtual std::ostream& stream() const CATCH_OVERRIDE { return m_stream->stream(); } + virtual std::string name() const CATCH_OVERRIDE { return m_data.name.empty() ? m_data.processName : m_data.name; } + virtual bool includeSuccessfulResults() const CATCH_OVERRIDE { return m_data.showSuccessfulTests; } + virtual bool warnAboutMissingAssertions() const CATCH_OVERRIDE { return m_data.warnings & WarnAbout::NoAssertions; } + virtual ShowDurations::OrNot showDurations() const CATCH_OVERRIDE { return m_data.showDurations; } + virtual RunTests::InWhatOrder runOrder() const CATCH_OVERRIDE { return m_data.runOrder; } + virtual unsigned int rngSeed() const CATCH_OVERRIDE { return m_data.rngSeed; } + virtual UseColour::YesOrNo useColour() const CATCH_OVERRIDE { return m_data.useColour; } + virtual bool shouldDebugBreak() const CATCH_OVERRIDE { return m_data.shouldDebugBreak; } + virtual int abortAfter() const CATCH_OVERRIDE { return m_data.abortAfter; } + virtual bool showInvisibles() const CATCH_OVERRIDE { return m_data.showInvisibles; } + + private: + + IStream const* openStream() { + if( m_data.outputFilename.empty() ) + return new CoutStream(); + else if( m_data.outputFilename[0] == '%' ) { + if( m_data.outputFilename == "%debug" ) + return new DebugOutStream(); + else + throw std::domain_error( "Unrecognised stream: " + m_data.outputFilename ); + } + else + return new FileStream( m_data.outputFilename ); + } + ConfigData m_data; + + CATCH_AUTO_PTR( IStream const ) m_stream; + TestSpec m_testSpec; + }; + +} // end namespace Catch + +// #included from: catch_clara.h +#define TWOBLUECUBES_CATCH_CLARA_H_INCLUDED + +// Use Catch's value for console width (store Clara's off to the side, if present) +#ifdef CLARA_CONFIG_CONSOLE_WIDTH +#define CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH CLARA_CONFIG_CONSOLE_WIDTH +#undef CLARA_CONFIG_CONSOLE_WIDTH +#endif +#define CLARA_CONFIG_CONSOLE_WIDTH CATCH_CONFIG_CONSOLE_WIDTH + +// Declare Clara inside the Catch namespace +#define STITCH_CLARA_OPEN_NAMESPACE namespace Catch { +// #included from: ../external/clara.h + +// Version 0.0.2.4 + +// Only use header guard if we are not using an outer namespace +#if !defined(TWOBLUECUBES_CLARA_H_INCLUDED) || defined(STITCH_CLARA_OPEN_NAMESPACE) + +#ifndef STITCH_CLARA_OPEN_NAMESPACE +#define TWOBLUECUBES_CLARA_H_INCLUDED +#define STITCH_CLARA_OPEN_NAMESPACE +#define STITCH_CLARA_CLOSE_NAMESPACE +#else +#define STITCH_CLARA_CLOSE_NAMESPACE } +#endif + +#define STITCH_TBC_TEXT_FORMAT_OPEN_NAMESPACE STITCH_CLARA_OPEN_NAMESPACE + +// ----------- #included from tbc_text_format.h ----------- + +// Only use header guard if we are not using an outer namespace +#if !defined(TBC_TEXT_FORMAT_H_INCLUDED) || defined(STITCH_TBC_TEXT_FORMAT_OUTER_NAMESPACE) +#ifndef STITCH_TBC_TEXT_FORMAT_OUTER_NAMESPACE +#define TBC_TEXT_FORMAT_H_INCLUDED +#endif + +#include <string> +#include <vector> +#include <sstream> +#include <algorithm> + +// Use optional outer namespace +#ifdef STITCH_TBC_TEXT_FORMAT_OUTER_NAMESPACE +namespace STITCH_TBC_TEXT_FORMAT_OUTER_NAMESPACE { +#endif + +namespace Tbc { + +#ifdef TBC_TEXT_FORMAT_CONSOLE_WIDTH + const unsigned int consoleWidth = TBC_TEXT_FORMAT_CONSOLE_WIDTH; +#else + const unsigned int consoleWidth = 80; +#endif + + struct TextAttributes { + TextAttributes() + : initialIndent( std::string::npos ), + indent( 0 ), + width( consoleWidth-1 ), + tabChar( '\t' ) + {} + + TextAttributes& setInitialIndent( std::size_t _value ) { initialIndent = _value; return *this; } + TextAttributes& setIndent( std::size_t _value ) { indent = _value; return *this; } + TextAttributes& setWidth( std::size_t _value ) { width = _value; return *this; } + TextAttributes& setTabChar( char _value ) { tabChar = _value; return *this; } + + std::size_t initialIndent; // indent of first line, or npos + std::size_t indent; // indent of subsequent lines, or all if initialIndent is npos + std::size_t width; // maximum width of text, including indent. Longer text will wrap + char tabChar; // If this char is seen the indent is changed to current pos + }; + + class Text { + public: + Text( std::string const& _str, TextAttributes const& _attr = TextAttributes() ) + : attr( _attr ) + { + std::string wrappableChars = " [({.,/|\\-"; + std::size_t indent = _attr.initialIndent != std::string::npos + ? _attr.initialIndent + : _attr.indent; + std::string remainder = _str; + + while( !remainder.empty() ) { + if( lines.size() >= 1000 ) { + lines.push_back( "... message truncated due to excessive size" ); + return; + } + std::size_t tabPos = std::string::npos; + std::size_t width = (std::min)( remainder.size(), _attr.width - indent ); + std::size_t pos = remainder.find_first_of( '\n' ); + if( pos <= width ) { + width = pos; + } + pos = remainder.find_last_of( _attr.tabChar, width ); + if( pos != std::string::npos ) { + tabPos = pos; + if( remainder[width] == '\n' ) + width--; + remainder = remainder.substr( 0, tabPos ) + remainder.substr( tabPos+1 ); + } + + if( width == remainder.size() ) { + spliceLine( indent, remainder, width ); + } + else if( remainder[width] == '\n' ) { + spliceLine( indent, remainder, width ); + if( width <= 1 || remainder.size() != 1 ) + remainder = remainder.substr( 1 ); + indent = _attr.indent; + } + else { + pos = remainder.find_last_of( wrappableChars, width ); + if( pos != std::string::npos && pos > 0 ) { + spliceLine( indent, remainder, pos ); + if( remainder[0] == ' ' ) + remainder = remainder.substr( 1 ); + } + else { + spliceLine( indent, remainder, width-1 ); + lines.back() += "-"; + } + if( lines.size() == 1 ) + indent = _attr.indent; + if( tabPos != std::string::npos ) + indent += tabPos; + } + } + } + + void spliceLine( std::size_t _indent, std::string& _remainder, std::size_t _pos ) { + lines.push_back( std::string( _indent, ' ' ) + _remainder.substr( 0, _pos ) ); + _remainder = _remainder.substr( _pos ); + } + + typedef std::vector<std::string>::const_iterator const_iterator; + + const_iterator begin() const { return lines.begin(); } + const_iterator end() const { return lines.end(); } + std::string const& last() const { return lines.back(); } + std::size_t size() const { return lines.size(); } + std::string const& operator[]( std::size_t _index ) const { return lines[_index]; } + std::string toString() const { + std::ostringstream oss; + oss << *this; + return oss.str(); + } + + inline friend std::ostream& operator << ( std::ostream& _stream, Text const& _text ) { + for( Text::const_iterator it = _text.begin(), itEnd = _text.end(); + it != itEnd; ++it ) { + if( it != _text.begin() ) + _stream << "\n"; + _stream << *it; + } + return _stream; + } + + private: + std::string str; + TextAttributes attr; + std::vector<std::string> lines; + }; + +} // end namespace Tbc + +#ifdef STITCH_TBC_TEXT_FORMAT_OUTER_NAMESPACE +} // end outer namespace +#endif + +#endif // TBC_TEXT_FORMAT_H_INCLUDED + +// ----------- end of #include from tbc_text_format.h ----------- +// ........... back in clara.h + +#undef STITCH_TBC_TEXT_FORMAT_OPEN_NAMESPACE + +// ----------- #included from clara_compilers.h ----------- + +#ifndef TWOBLUECUBES_CLARA_COMPILERS_H_INCLUDED +#define TWOBLUECUBES_CLARA_COMPILERS_H_INCLUDED + +// Detect a number of compiler features - mostly C++11/14 conformance - by compiler +// The following features are defined: +// +// CLARA_CONFIG_CPP11_NULLPTR : is nullptr supported? +// CLARA_CONFIG_CPP11_NOEXCEPT : is noexcept supported? +// CLARA_CONFIG_CPP11_GENERATED_METHODS : The delete and default keywords for compiler generated methods +// CLARA_CONFIG_CPP11_OVERRIDE : is override supported? +// CLARA_CONFIG_CPP11_UNIQUE_PTR : is unique_ptr supported (otherwise use auto_ptr) + +// CLARA_CONFIG_CPP11_OR_GREATER : Is C++11 supported? + +// CLARA_CONFIG_VARIADIC_MACROS : are variadic macros supported? + +// In general each macro has a _NO_<feature name> form +// (e.g. CLARA_CONFIG_CPP11_NO_NULLPTR) which disables the feature. +// Many features, at point of detection, define an _INTERNAL_ macro, so they +// can be combined, en-mass, with the _NO_ forms later. + +// All the C++11 features can be disabled with CLARA_CONFIG_NO_CPP11 + +#ifdef __clang__ + +#if __has_feature(cxx_nullptr) +#define CLARA_INTERNAL_CONFIG_CPP11_NULLPTR +#endif + +#if __has_feature(cxx_noexcept) +#define CLARA_INTERNAL_CONFIG_CPP11_NOEXCEPT +#endif + +#endif // __clang__ + +//////////////////////////////////////////////////////////////////////////////// +// GCC +#ifdef __GNUC__ + +#if __GNUC__ == 4 && __GNUC_MINOR__ >= 6 && defined(__GXX_EXPERIMENTAL_CXX0X__) +#define CLARA_INTERNAL_CONFIG_CPP11_NULLPTR +#endif + +// - otherwise more recent versions define __cplusplus >= 201103L +// and will get picked up below + +#endif // __GNUC__ + +//////////////////////////////////////////////////////////////////////////////// +// Visual C++ +#ifdef _MSC_VER + +#if (_MSC_VER >= 1600) +#define CLARA_INTERNAL_CONFIG_CPP11_NULLPTR +#define CLARA_INTERNAL_CONFIG_CPP11_UNIQUE_PTR +#endif + +#if (_MSC_VER >= 1900 ) // (VC++ 13 (VS2015)) +#define CLARA_INTERNAL_CONFIG_CPP11_NOEXCEPT +#define CLARA_INTERNAL_CONFIG_CPP11_GENERATED_METHODS +#endif + +#endif // _MSC_VER + +//////////////////////////////////////////////////////////////////////////////// +// C++ language feature support + +// catch all support for C++11 +#if defined(__cplusplus) && __cplusplus >= 201103L + +#define CLARA_CPP11_OR_GREATER + +#if !defined(CLARA_INTERNAL_CONFIG_CPP11_NULLPTR) +#define CLARA_INTERNAL_CONFIG_CPP11_NULLPTR +#endif + +#ifndef CLARA_INTERNAL_CONFIG_CPP11_NOEXCEPT +#define CLARA_INTERNAL_CONFIG_CPP11_NOEXCEPT +#endif + +#ifndef CLARA_INTERNAL_CONFIG_CPP11_GENERATED_METHODS +#define CLARA_INTERNAL_CONFIG_CPP11_GENERATED_METHODS +#endif + +#if !defined(CLARA_INTERNAL_CONFIG_CPP11_OVERRIDE) +#define CLARA_INTERNAL_CONFIG_CPP11_OVERRIDE +#endif +#if !defined(CLARA_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) +#define CLARA_INTERNAL_CONFIG_CPP11_UNIQUE_PTR +#endif + +#endif // __cplusplus >= 201103L + +// Now set the actual defines based on the above + anything the user has configured +#if defined(CLARA_INTERNAL_CONFIG_CPP11_NULLPTR) && !defined(CLARA_CONFIG_CPP11_NO_NULLPTR) && !defined(CLARA_CONFIG_CPP11_NULLPTR) && !defined(CLARA_CONFIG_NO_CPP11) +#define CLARA_CONFIG_CPP11_NULLPTR +#endif +#if defined(CLARA_INTERNAL_CONFIG_CPP11_NOEXCEPT) && !defined(CLARA_CONFIG_CPP11_NO_NOEXCEPT) && !defined(CLARA_CONFIG_CPP11_NOEXCEPT) && !defined(CLARA_CONFIG_NO_CPP11) +#define CLARA_CONFIG_CPP11_NOEXCEPT +#endif +#if defined(CLARA_INTERNAL_CONFIG_CPP11_GENERATED_METHODS) && !defined(CLARA_CONFIG_CPP11_NO_GENERATED_METHODS) && !defined(CLARA_CONFIG_CPP11_GENERATED_METHODS) && !defined(CLARA_CONFIG_NO_CPP11) +#define CLARA_CONFIG_CPP11_GENERATED_METHODS +#endif +#if defined(CLARA_INTERNAL_CONFIG_CPP11_OVERRIDE) && !defined(CLARA_CONFIG_NO_OVERRIDE) && !defined(CLARA_CONFIG_CPP11_OVERRIDE) && !defined(CLARA_CONFIG_NO_CPP11) +#define CLARA_CONFIG_CPP11_OVERRIDE +#endif +#if defined(CLARA_INTERNAL_CONFIG_CPP11_UNIQUE_PTR) && !defined(CLARA_CONFIG_NO_UNIQUE_PTR) && !defined(CLARA_CONFIG_CPP11_UNIQUE_PTR) && !defined(CLARA_CONFIG_NO_CPP11) +#define CLARA_CONFIG_CPP11_UNIQUE_PTR +#endif + +// noexcept support: +#if defined(CLARA_CONFIG_CPP11_NOEXCEPT) && !defined(CLARA_NOEXCEPT) +#define CLARA_NOEXCEPT noexcept +# define CLARA_NOEXCEPT_IS(x) noexcept(x) +#else +#define CLARA_NOEXCEPT throw() +# define CLARA_NOEXCEPT_IS(x) +#endif + +// nullptr support +#ifdef CLARA_CONFIG_CPP11_NULLPTR +#define CLARA_NULL nullptr +#else +#define CLARA_NULL NULL +#endif + +// override support +#ifdef CLARA_CONFIG_CPP11_OVERRIDE +#define CLARA_OVERRIDE override +#else +#define CLARA_OVERRIDE +#endif + +// unique_ptr support +#ifdef CLARA_CONFIG_CPP11_UNIQUE_PTR +# define CLARA_AUTO_PTR( T ) std::unique_ptr<T> +#else +# define CLARA_AUTO_PTR( T ) std::auto_ptr<T> +#endif + +#endif // TWOBLUECUBES_CLARA_COMPILERS_H_INCLUDED + +// ----------- end of #include from clara_compilers.h ----------- +// ........... back in clara.h + +#include <map> +#include <stdexcept> +#include <memory> + +#if defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) +#define CLARA_PLATFORM_WINDOWS +#endif + +// Use optional outer namespace +#ifdef STITCH_CLARA_OPEN_NAMESPACE +STITCH_CLARA_OPEN_NAMESPACE +#endif + +namespace Clara { + + struct UnpositionalTag {}; + + extern UnpositionalTag _; + +#ifdef CLARA_CONFIG_MAIN + UnpositionalTag _; +#endif + + namespace Detail { + +#ifdef CLARA_CONSOLE_WIDTH + const unsigned int consoleWidth = CLARA_CONFIG_CONSOLE_WIDTH; +#else + const unsigned int consoleWidth = 80; +#endif + + using namespace Tbc; + + inline bool startsWith( std::string const& str, std::string const& prefix ) { + return str.size() >= prefix.size() && str.substr( 0, prefix.size() ) == prefix; + } + + template<typename T> struct RemoveConstRef{ typedef T type; }; + template<typename T> struct RemoveConstRef<T&>{ typedef T type; }; + template<typename T> struct RemoveConstRef<T const&>{ typedef T type; }; + template<typename T> struct RemoveConstRef<T const>{ typedef T type; }; + + template<typename T> struct IsBool { static const bool value = false; }; + template<> struct IsBool<bool> { static const bool value = true; }; + + template<typename T> + void convertInto( std::string const& _source, T& _dest ) { + std::stringstream ss; + ss << _source; + ss >> _dest; + if( ss.fail() ) + throw std::runtime_error( "Unable to convert " + _source + " to destination type" ); + } + inline void convertInto( std::string const& _source, std::string& _dest ) { + _dest = _source; + } + char toLowerCh(char c) { + return static_cast<char>( ::tolower( c ) ); + } + inline void convertInto( std::string const& _source, bool& _dest ) { + std::string sourceLC = _source; + std::transform( sourceLC.begin(), sourceLC.end(), sourceLC.begin(), toLowerCh ); + if( sourceLC == "y" || sourceLC == "1" || sourceLC == "true" || sourceLC == "yes" || sourceLC == "on" ) + _dest = true; + else if( sourceLC == "n" || sourceLC == "0" || sourceLC == "false" || sourceLC == "no" || sourceLC == "off" ) + _dest = false; + else + throw std::runtime_error( "Expected a boolean value but did not recognise:\n '" + _source + "'" ); + } + + template<typename ConfigT> + struct IArgFunction { + virtual ~IArgFunction() {} +#ifdef CLARA_CONFIG_CPP11_GENERATED_METHODS + IArgFunction() = default; + IArgFunction( IArgFunction const& ) = default; +#endif + virtual void set( ConfigT& config, std::string const& value ) const = 0; + virtual bool takesArg() const = 0; + virtual IArgFunction* clone() const = 0; + }; + + template<typename ConfigT> + class BoundArgFunction { + public: + BoundArgFunction() : functionObj( CLARA_NULL ) {} + BoundArgFunction( IArgFunction<ConfigT>* _functionObj ) : functionObj( _functionObj ) {} + BoundArgFunction( BoundArgFunction const& other ) : functionObj( other.functionObj ? other.functionObj->clone() : CLARA_NULL ) {} + BoundArgFunction& operator = ( BoundArgFunction const& other ) { + IArgFunction<ConfigT>* newFunctionObj = other.functionObj ? other.functionObj->clone() : CLARA_NULL; + delete functionObj; + functionObj = newFunctionObj; + return *this; + } + ~BoundArgFunction() { delete functionObj; } + + void set( ConfigT& config, std::string const& value ) const { + functionObj->set( config, value ); + } + bool takesArg() const { return functionObj->takesArg(); } + + bool isSet() const { + return functionObj != CLARA_NULL; + } + private: + IArgFunction<ConfigT>* functionObj; + }; + + template<typename C> + struct NullBinder : IArgFunction<C>{ + virtual void set( C&, std::string const& ) const {} + virtual bool takesArg() const { return true; } + virtual IArgFunction<C>* clone() const { return new NullBinder( *this ); } + }; + + template<typename C, typename M> + struct BoundDataMember : IArgFunction<C>{ + BoundDataMember( M C::* _member ) : member( _member ) {} + virtual void set( C& p, std::string const& stringValue ) const { + convertInto( stringValue, p.*member ); + } + virtual bool takesArg() const { return !IsBool<M>::value; } + virtual IArgFunction<C>* clone() const { return new BoundDataMember( *this ); } + M C::* member; + }; + template<typename C, typename M> + struct BoundUnaryMethod : IArgFunction<C>{ + BoundUnaryMethod( void (C::*_member)( M ) ) : member( _member ) {} + virtual void set( C& p, std::string const& stringValue ) const { + typename RemoveConstRef<M>::type value; + convertInto( stringValue, value ); + (p.*member)( value ); + } + virtual bool takesArg() const { return !IsBool<M>::value; } + virtual IArgFunction<C>* clone() const { return new BoundUnaryMethod( *this ); } + void (C::*member)( M ); + }; + template<typename C> + struct BoundNullaryMethod : IArgFunction<C>{ + BoundNullaryMethod( void (C::*_member)() ) : member( _member ) {} + virtual void set( C& p, std::string const& stringValue ) const { + bool value; + convertInto( stringValue, value ); + if( value ) + (p.*member)(); + } + virtual bool takesArg() const { return false; } + virtual IArgFunction<C>* clone() const { return new BoundNullaryMethod( *this ); } + void (C::*member)(); + }; + + template<typename C> + struct BoundUnaryFunction : IArgFunction<C>{ + BoundUnaryFunction( void (*_function)( C& ) ) : function( _function ) {} + virtual void set( C& obj, std::string const& stringValue ) const { + bool value; + convertInto( stringValue, value ); + if( value ) + function( obj ); + } + virtual bool takesArg() const { return false; } + virtual IArgFunction<C>* clone() const { return new BoundUnaryFunction( *this ); } + void (*function)( C& ); + }; + + template<typename C, typename T> + struct BoundBinaryFunction : IArgFunction<C>{ + BoundBinaryFunction( void (*_function)( C&, T ) ) : function( _function ) {} + virtual void set( C& obj, std::string const& stringValue ) const { + typename RemoveConstRef<T>::type value; + convertInto( stringValue, value ); + function( obj, value ); + } + virtual bool takesArg() const { return !IsBool<T>::value; } + virtual IArgFunction<C>* clone() const { return new BoundBinaryFunction( *this ); } + void (*function)( C&, T ); + }; + + } // namespace Detail + + inline std::vector<std::string> argsToVector( int argc, char const* const* const argv ) { + std::vector<std::string> args( static_cast<std::size_t>( argc ) ); + for( std::size_t i = 0; i < static_cast<std::size_t>( argc ); ++i ) + args[i] = argv[i]; + + return args; + } + + class Parser { + enum Mode { None, MaybeShortOpt, SlashOpt, ShortOpt, LongOpt, Positional }; + Mode mode; + std::size_t from; + bool inQuotes; + public: + + struct Token { + enum Type { Positional, ShortOpt, LongOpt }; + Token( Type _type, std::string const& _data ) : type( _type ), data( _data ) {} + Type type; + std::string data; + }; + + Parser() : mode( None ), from( 0 ), inQuotes( false ){} + + void parseIntoTokens( std::vector<std::string> const& args, std::vector<Token>& tokens ) { + const std::string doubleDash = "--"; + for( std::size_t i = 1; i < args.size() && args[i] != doubleDash; ++i ) + parseIntoTokens( args[i], tokens); + } + + void parseIntoTokens( std::string const& arg, std::vector<Token>& tokens ) { + for( std::size_t i = 0; i <= arg.size(); ++i ) { + char c = arg[i]; + if( c == '"' ) + inQuotes = !inQuotes; + mode = handleMode( i, c, arg, tokens ); + } + } + Mode handleMode( std::size_t i, char c, std::string const& arg, std::vector<Token>& tokens ) { + switch( mode ) { + case None: return handleNone( i, c ); + case MaybeShortOpt: return handleMaybeShortOpt( i, c ); + case ShortOpt: + case LongOpt: + case SlashOpt: return handleOpt( i, c, arg, tokens ); + case Positional: return handlePositional( i, c, arg, tokens ); + default: throw std::logic_error( "Unknown mode" ); + } + } + + Mode handleNone( std::size_t i, char c ) { + if( inQuotes ) { + from = i; + return Positional; + } + switch( c ) { + case '-': return MaybeShortOpt; +#ifdef CLARA_PLATFORM_WINDOWS + case '/': from = i+1; return SlashOpt; +#endif + default: from = i; return Positional; + } + } + Mode handleMaybeShortOpt( std::size_t i, char c ) { + switch( c ) { + case '-': from = i+1; return LongOpt; + default: from = i; return ShortOpt; + } + } + Mode handleOpt( std::size_t i, char c, std::string const& arg, std::vector<Token>& tokens ) { + if( std::string( ":=\0", 3 ).find( c ) == std::string::npos ) + return mode; + + std::string optName = arg.substr( from, i-from ); + if( mode == ShortOpt ) + for( std::size_t j = 0; j < optName.size(); ++j ) + tokens.push_back( Token( Token::ShortOpt, optName.substr( j, 1 ) ) ); + else if( mode == SlashOpt && optName.size() == 1 ) + tokens.push_back( Token( Token::ShortOpt, optName ) ); + else + tokens.push_back( Token( Token::LongOpt, optName ) ); + return None; + } + Mode handlePositional( std::size_t i, char c, std::string const& arg, std::vector<Token>& tokens ) { + if( inQuotes || std::string( "\0", 1 ).find( c ) == std::string::npos ) + return mode; + + std::string data = arg.substr( from, i-from ); + tokens.push_back( Token( Token::Positional, data ) ); + return None; + } + }; + + template<typename ConfigT> + struct CommonArgProperties { + CommonArgProperties() {} + CommonArgProperties( Detail::BoundArgFunction<ConfigT> const& _boundField ) : boundField( _boundField ) {} + + Detail::BoundArgFunction<ConfigT> boundField; + std::string description; + std::string detail; + std::string placeholder; // Only value if boundField takes an arg + + bool takesArg() const { + return !placeholder.empty(); + } + void validate() const { + if( !boundField.isSet() ) + throw std::logic_error( "option not bound" ); + } + }; + struct OptionArgProperties { + std::vector<std::string> shortNames; + std::string longName; + + bool hasShortName( std::string const& shortName ) const { + return std::find( shortNames.begin(), shortNames.end(), shortName ) != shortNames.end(); + } + bool hasLongName( std::string const& _longName ) const { + return _longName == longName; + } + }; + struct PositionalArgProperties { + PositionalArgProperties() : position( -1 ) {} + int position; // -1 means non-positional (floating) + + bool isFixedPositional() const { + return position != -1; + } + }; + + template<typename ConfigT> + class CommandLine { + + struct Arg : CommonArgProperties<ConfigT>, OptionArgProperties, PositionalArgProperties { + Arg() {} + Arg( Detail::BoundArgFunction<ConfigT> const& _boundField ) : CommonArgProperties<ConfigT>( _boundField ) {} + + using CommonArgProperties<ConfigT>::placeholder; // !TBD + + std::string dbgName() const { + if( !longName.empty() ) + return "--" + longName; + if( !shortNames.empty() ) + return "-" + shortNames[0]; + return "positional args"; + } + std::string commands() const { + std::ostringstream oss; + bool first = true; + std::vector<std::string>::const_iterator it = shortNames.begin(), itEnd = shortNames.end(); + for(; it != itEnd; ++it ) { + if( first ) + first = false; + else + oss << ", "; + oss << "-" << *it; + } + if( !longName.empty() ) { + if( !first ) + oss << ", "; + oss << "--" << longName; + } + if( !placeholder.empty() ) + oss << " <" << placeholder << ">"; + return oss.str(); + } + }; + + typedef CLARA_AUTO_PTR( Arg ) ArgAutoPtr; + + friend void addOptName( Arg& arg, std::string const& optName ) + { + if( optName.empty() ) + return; + if( Detail::startsWith( optName, "--" ) ) { + if( !arg.longName.empty() ) + throw std::logic_error( "Only one long opt may be specified. '" + + arg.longName + + "' already specified, now attempting to add '" + + optName + "'" ); + arg.longName = optName.substr( 2 ); + } + else if( Detail::startsWith( optName, "-" ) ) + arg.shortNames.push_back( optName.substr( 1 ) ); + else + throw std::logic_error( "option must begin with - or --. Option was: '" + optName + "'" ); + } + friend void setPositionalArg( Arg& arg, int position ) + { + arg.position = position; + } + + class ArgBuilder { + public: + ArgBuilder( Arg* arg ) : m_arg( arg ) {} + + // Bind a non-boolean data member (requires placeholder string) + template<typename C, typename M> + void bind( M C::* field, std::string const& placeholder ) { + m_arg->boundField = new Detail::BoundDataMember<C,M>( field ); + m_arg->placeholder = placeholder; + } + // Bind a boolean data member (no placeholder required) + template<typename C> + void bind( bool C::* field ) { + m_arg->boundField = new Detail::BoundDataMember<C,bool>( field ); + } + + // Bind a method taking a single, non-boolean argument (requires a placeholder string) + template<typename C, typename M> + void bind( void (C::* unaryMethod)( M ), std::string const& placeholder ) { + m_arg->boundField = new Detail::BoundUnaryMethod<C,M>( unaryMethod ); + m_arg->placeholder = placeholder; + } + + // Bind a method taking a single, boolean argument (no placeholder string required) + template<typename C> + void bind( void (C::* unaryMethod)( bool ) ) { + m_arg->boundField = new Detail::BoundUnaryMethod<C,bool>( unaryMethod ); + } + + // Bind a method that takes no arguments (will be called if opt is present) + template<typename C> + void bind( void (C::* nullaryMethod)() ) { + m_arg->boundField = new Detail::BoundNullaryMethod<C>( nullaryMethod ); + } + + // Bind a free function taking a single argument - the object to operate on (no placeholder string required) + template<typename C> + void bind( void (* unaryFunction)( C& ) ) { + m_arg->boundField = new Detail::BoundUnaryFunction<C>( unaryFunction ); + } + + // Bind a free function taking a single argument - the object to operate on (requires a placeholder string) + template<typename C, typename T> + void bind( void (* binaryFunction)( C&, T ), std::string const& placeholder ) { + m_arg->boundField = new Detail::BoundBinaryFunction<C, T>( binaryFunction ); + m_arg->placeholder = placeholder; + } + + ArgBuilder& describe( std::string const& description ) { + m_arg->description = description; + return *this; + } + ArgBuilder& detail( std::string const& detail ) { + m_arg->detail = detail; + return *this; + } + + protected: + Arg* m_arg; + }; + + class OptBuilder : public ArgBuilder { + public: + OptBuilder( Arg* arg ) : ArgBuilder( arg ) {} + OptBuilder( OptBuilder& other ) : ArgBuilder( other ) {} + + OptBuilder& operator[]( std::string const& optName ) { + addOptName( *ArgBuilder::m_arg, optName ); + return *this; + } + }; + + public: + + CommandLine() + : m_boundProcessName( new Detail::NullBinder<ConfigT>() ), + m_highestSpecifiedArgPosition( 0 ), + m_throwOnUnrecognisedTokens( false ) + {} + CommandLine( CommandLine const& other ) + : m_boundProcessName( other.m_boundProcessName ), + m_options ( other.m_options ), + m_positionalArgs( other.m_positionalArgs ), + m_highestSpecifiedArgPosition( other.m_highestSpecifiedArgPosition ), + m_throwOnUnrecognisedTokens( other.m_throwOnUnrecognisedTokens ) + { + if( other.m_floatingArg.get() ) + m_floatingArg.reset( new Arg( *other.m_floatingArg ) ); + } + + CommandLine& setThrowOnUnrecognisedTokens( bool shouldThrow = true ) { + m_throwOnUnrecognisedTokens = shouldThrow; + return *this; + } + + OptBuilder operator[]( std::string const& optName ) { + m_options.push_back( Arg() ); + addOptName( m_options.back(), optName ); + OptBuilder builder( &m_options.back() ); + return builder; + } + + ArgBuilder operator[]( int position ) { + m_positionalArgs.insert( std::make_pair( position, Arg() ) ); + if( position > m_highestSpecifiedArgPosition ) + m_highestSpecifiedArgPosition = position; + setPositionalArg( m_positionalArgs[position], position ); + ArgBuilder builder( &m_positionalArgs[position] ); + return builder; + } + + // Invoke this with the _ instance + ArgBuilder operator[]( UnpositionalTag ) { + if( m_floatingArg.get() ) + throw std::logic_error( "Only one unpositional argument can be added" ); + m_floatingArg.reset( new Arg() ); + ArgBuilder builder( m_floatingArg.get() ); + return builder; + } + + template<typename C, typename M> + void bindProcessName( M C::* field ) { + m_boundProcessName = new Detail::BoundDataMember<C,M>( field ); + } + template<typename C, typename M> + void bindProcessName( void (C::*_unaryMethod)( M ) ) { + m_boundProcessName = new Detail::BoundUnaryMethod<C,M>( _unaryMethod ); + } + + void optUsage( std::ostream& os, std::size_t indent = 0, std::size_t width = Detail::consoleWidth ) const { + typename std::vector<Arg>::const_iterator itBegin = m_options.begin(), itEnd = m_options.end(), it; + std::size_t maxWidth = 0; + for( it = itBegin; it != itEnd; ++it ) + maxWidth = (std::max)( maxWidth, it->commands().size() ); + + for( it = itBegin; it != itEnd; ++it ) { + Detail::Text usage( it->commands(), Detail::TextAttributes() + .setWidth( maxWidth+indent ) + .setIndent( indent ) ); + Detail::Text desc( it->description, Detail::TextAttributes() + .setWidth( width - maxWidth - 3 ) ); + + for( std::size_t i = 0; i < (std::max)( usage.size(), desc.size() ); ++i ) { + std::string usageCol = i < usage.size() ? usage[i] : ""; + os << usageCol; + + if( i < desc.size() && !desc[i].empty() ) + os << std::string( indent + 2 + maxWidth - usageCol.size(), ' ' ) + << desc[i]; + os << "\n"; + } + } + } + std::string optUsage() const { + std::ostringstream oss; + optUsage( oss ); + return oss.str(); + } + + void argSynopsis( std::ostream& os ) const { + for( int i = 1; i <= m_highestSpecifiedArgPosition; ++i ) { + if( i > 1 ) + os << " "; + typename std::map<int, Arg>::const_iterator it = m_positionalArgs.find( i ); + if( it != m_positionalArgs.end() ) + os << "<" << it->second.placeholder << ">"; + else if( m_floatingArg.get() ) + os << "<" << m_floatingArg->placeholder << ">"; + else + throw std::logic_error( "non consecutive positional arguments with no floating args" ); + } + // !TBD No indication of mandatory args + if( m_floatingArg.get() ) { + if( m_highestSpecifiedArgPosition > 1 ) + os << " "; + os << "[<" << m_floatingArg->placeholder << "> ...]"; + } + } + std::string argSynopsis() const { + std::ostringstream oss; + argSynopsis( oss ); + return oss.str(); + } + + void usage( std::ostream& os, std::string const& procName ) const { + validate(); + os << "usage:\n " << procName << " "; + argSynopsis( os ); + if( !m_options.empty() ) { + os << " [options]\n\nwhere options are: \n"; + optUsage( os, 2 ); + } + os << "\n"; + } + std::string usage( std::string const& procName ) const { + std::ostringstream oss; + usage( oss, procName ); + return oss.str(); + } + + ConfigT parse( std::vector<std::string> const& args ) const { + ConfigT config; + parseInto( args, config ); + return config; + } + + std::vector<Parser::Token> parseInto( std::vector<std::string> const& args, ConfigT& config ) const { + std::string processName = args[0]; + std::size_t lastSlash = processName.find_last_of( "/\\" ); + if( lastSlash != std::string::npos ) + processName = processName.substr( lastSlash+1 ); + m_boundProcessName.set( config, processName ); + std::vector<Parser::Token> tokens; + Parser parser; + parser.parseIntoTokens( args, tokens ); + return populate( tokens, config ); + } + + std::vector<Parser::Token> populate( std::vector<Parser::Token> const& tokens, ConfigT& config ) const { + validate(); + std::vector<Parser::Token> unusedTokens = populateOptions( tokens, config ); + unusedTokens = populateFixedArgs( unusedTokens, config ); + unusedTokens = populateFloatingArgs( unusedTokens, config ); + return unusedTokens; + } + + std::vector<Parser::Token> populateOptions( std::vector<Parser::Token> const& tokens, ConfigT& config ) const { + std::vector<Parser::Token> unusedTokens; + std::vector<std::string> errors; + for( std::size_t i = 0; i < tokens.size(); ++i ) { + Parser::Token const& token = tokens[i]; + typename std::vector<Arg>::const_iterator it = m_options.begin(), itEnd = m_options.end(); + for(; it != itEnd; ++it ) { + Arg const& arg = *it; + + try { + if( ( token.type == Parser::Token::ShortOpt && arg.hasShortName( token.data ) ) || + ( token.type == Parser::Token::LongOpt && arg.hasLongName( token.data ) ) ) { + if( arg.takesArg() ) { + if( i == tokens.size()-1 || tokens[i+1].type != Parser::Token::Positional ) + errors.push_back( "Expected argument to option: " + token.data ); + else + arg.boundField.set( config, tokens[++i].data ); + } + else { + arg.boundField.set( config, "true" ); + } + break; + } + } + catch( std::exception& ex ) { + errors.push_back( std::string( ex.what() ) + "\n- while parsing: (" + arg.commands() + ")" ); + } + } + if( it == itEnd ) { + if( token.type == Parser::Token::Positional || !m_throwOnUnrecognisedTokens ) + unusedTokens.push_back( token ); + else if( errors.empty() && m_throwOnUnrecognisedTokens ) + errors.push_back( "unrecognised option: " + token.data ); + } + } + if( !errors.empty() ) { + std::ostringstream oss; + for( std::vector<std::string>::const_iterator it = errors.begin(), itEnd = errors.end(); + it != itEnd; + ++it ) { + if( it != errors.begin() ) + oss << "\n"; + oss << *it; + } + throw std::runtime_error( oss.str() ); + } + return unusedTokens; + } + std::vector<Parser::Token> populateFixedArgs( std::vector<Parser::Token> const& tokens, ConfigT& config ) const { + std::vector<Parser::Token> unusedTokens; + int position = 1; + for( std::size_t i = 0; i < tokens.size(); ++i ) { + Parser::Token const& token = tokens[i]; + typename std::map<int, Arg>::const_iterator it = m_positionalArgs.find( position ); + if( it != m_positionalArgs.end() ) + it->second.boundField.set( config, token.data ); + else + unusedTokens.push_back( token ); + if( token.type == Parser::Token::Positional ) + position++; + } + return unusedTokens; + } + std::vector<Parser::Token> populateFloatingArgs( std::vector<Parser::Token> const& tokens, ConfigT& config ) const { + if( !m_floatingArg.get() ) + return tokens; + std::vector<Parser::Token> unusedTokens; + for( std::size_t i = 0; i < tokens.size(); ++i ) { + Parser::Token const& token = tokens[i]; + if( token.type == Parser::Token::Positional ) + m_floatingArg->boundField.set( config, token.data ); + else + unusedTokens.push_back( token ); + } + return unusedTokens; + } + + void validate() const + { + if( m_options.empty() && m_positionalArgs.empty() && !m_floatingArg.get() ) + throw std::logic_error( "No options or arguments specified" ); + + for( typename std::vector<Arg>::const_iterator it = m_options.begin(), + itEnd = m_options.end(); + it != itEnd; ++it ) + it->validate(); + } + + private: + Detail::BoundArgFunction<ConfigT> m_boundProcessName; + std::vector<Arg> m_options; + std::map<int, Arg> m_positionalArgs; + ArgAutoPtr m_floatingArg; + int m_highestSpecifiedArgPosition; + bool m_throwOnUnrecognisedTokens; + }; + +} // end namespace Clara + +STITCH_CLARA_CLOSE_NAMESPACE +#undef STITCH_CLARA_OPEN_NAMESPACE +#undef STITCH_CLARA_CLOSE_NAMESPACE + +#endif // TWOBLUECUBES_CLARA_H_INCLUDED +#undef STITCH_CLARA_OPEN_NAMESPACE + +// Restore Clara's value for console width, if present +#ifdef CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH +#define CLARA_CONFIG_CONSOLE_WIDTH CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH +#undef CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH +#endif + +#include <fstream> +#include <ctime> + +namespace Catch { + + inline void abortAfterFirst( ConfigData& config ) { config.abortAfter = 1; } + inline void abortAfterX( ConfigData& config, int x ) { + if( x < 1 ) + throw std::runtime_error( "Value after -x or --abortAfter must be greater than zero" ); + config.abortAfter = x; + } + inline void addTestOrTags( ConfigData& config, std::string const& _testSpec ) { config.testsOrTags.push_back( _testSpec ); } + inline void addSectionToRun( ConfigData& config, std::string const& sectionName ) { config.sectionsToRun.push_back( sectionName ); } + inline void addReporterName( ConfigData& config, std::string const& _reporterName ) { config.reporterNames.push_back( _reporterName ); } + + inline void addWarning( ConfigData& config, std::string const& _warning ) { + if( _warning == "NoAssertions" ) + config.warnings = static_cast<WarnAbout::What>( config.warnings | WarnAbout::NoAssertions ); + else + throw std::runtime_error( "Unrecognised warning: '" + _warning + '\'' ); + } + inline void setOrder( ConfigData& config, std::string const& order ) { + if( startsWith( "declared", order ) ) + config.runOrder = RunTests::InDeclarationOrder; + else if( startsWith( "lexical", order ) ) + config.runOrder = RunTests::InLexicographicalOrder; + else if( startsWith( "random", order ) ) + config.runOrder = RunTests::InRandomOrder; + else + throw std::runtime_error( "Unrecognised ordering: '" + order + '\'' ); + } + inline void setRngSeed( ConfigData& config, std::string const& seed ) { + if( seed == "time" ) { + config.rngSeed = static_cast<unsigned int>( std::time(0) ); + } + else { + std::stringstream ss; + ss << seed; + ss >> config.rngSeed; + if( ss.fail() ) + throw std::runtime_error( "Argument to --rng-seed should be the word 'time' or a number" ); + } + } + inline void setVerbosity( ConfigData& config, int level ) { + // !TBD: accept strings? + config.verbosity = static_cast<Verbosity::Level>( level ); + } + inline void setShowDurations( ConfigData& config, bool _showDurations ) { + config.showDurations = _showDurations + ? ShowDurations::Always + : ShowDurations::Never; + } + inline void setUseColour( ConfigData& config, std::string const& value ) { + std::string mode = toLower( value ); + + if( mode == "yes" ) + config.useColour = UseColour::Yes; + else if( mode == "no" ) + config.useColour = UseColour::No; + else if( mode == "auto" ) + config.useColour = UseColour::Auto; + else + throw std::runtime_error( "colour mode must be one of: auto, yes or no" ); + } + inline void forceColour( ConfigData& config ) { + config.useColour = UseColour::Yes; + } + inline void loadTestNamesFromFile( ConfigData& config, std::string const& _filename ) { + std::ifstream f( _filename.c_str() ); + if( !f.is_open() ) + throw std::domain_error( "Unable to load input file: " + _filename ); + + std::string line; + while( std::getline( f, line ) ) { + line = trim(line); + if( !line.empty() && !startsWith( line, '#' ) ) { + if( !startsWith( line, '"' ) ) + line = '"' + line + '"'; + addTestOrTags( config, line + ',' ); + } + } + } + + inline Clara::CommandLine<ConfigData> makeCommandLineParser() { + + using namespace Clara; + CommandLine<ConfigData> cli; + + cli.bindProcessName( &ConfigData::processName ); + + cli["-?"]["-h"]["--help"] + .describe( "display usage information" ) + .bind( &ConfigData::showHelp ); + + cli["-l"]["--list-tests"] + .describe( "list all/matching test cases" ) + .bind( &ConfigData::listTests ); + + cli["-t"]["--list-tags"] + .describe( "list all/matching tags" ) + .bind( &ConfigData::listTags ); + + cli["-s"]["--success"] + .describe( "include successful tests in output" ) + .bind( &ConfigData::showSuccessfulTests ); + + cli["-b"]["--break"] + .describe( "break into debugger on failure" ) + .bind( &ConfigData::shouldDebugBreak ); + + cli["-e"]["--nothrow"] + .describe( "skip exception tests" ) + .bind( &ConfigData::noThrow ); + + cli["-i"]["--invisibles"] + .describe( "show invisibles (tabs, newlines)" ) + .bind( &ConfigData::showInvisibles ); + + cli["-o"]["--out"] + .describe( "output filename" ) + .bind( &ConfigData::outputFilename, "filename" ); + + cli["-r"]["--reporter"] +// .placeholder( "name[:filename]" ) + .describe( "reporter to use (defaults to console)" ) + .bind( &addReporterName, "name" ); + + cli["-n"]["--name"] + .describe( "suite name" ) + .bind( &ConfigData::name, "name" ); + + cli["-a"]["--abort"] + .describe( "abort at first failure" ) + .bind( &abortAfterFirst ); + + cli["-x"]["--abortx"] + .describe( "abort after x failures" ) + .bind( &abortAfterX, "no. failures" ); + + cli["-w"]["--warn"] + .describe( "enable warnings" ) + .bind( &addWarning, "warning name" ); + +// - needs updating if reinstated +// cli.into( &setVerbosity ) +// .describe( "level of verbosity (0=no output)" ) +// .shortOpt( "v") +// .longOpt( "verbosity" ) +// .placeholder( "level" ); + + cli[_] + .describe( "which test or tests to use" ) + .bind( &addTestOrTags, "test name, pattern or tags" ); + + cli["-d"]["--durations"] + .describe( "show test durations" ) + .bind( &setShowDurations, "yes|no" ); + + cli["-f"]["--input-file"] + .describe( "load test names to run from a file" ) + .bind( &loadTestNamesFromFile, "filename" ); + + cli["-#"]["--filenames-as-tags"] + .describe( "adds a tag for the filename" ) + .bind( &ConfigData::filenamesAsTags ); + + cli["-c"]["--section"] + .describe( "specify section to run" ) + .bind( &addSectionToRun, "section name" ); + + // Less common commands which don't have a short form + cli["--list-test-names-only"] + .describe( "list all/matching test cases names only" ) + .bind( &ConfigData::listTestNamesOnly ); + + cli["--list-reporters"] + .describe( "list all reporters" ) + .bind( &ConfigData::listReporters ); + + cli["--order"] + .describe( "test case order (defaults to decl)" ) + .bind( &setOrder, "decl|lex|rand" ); + + cli["--rng-seed"] + .describe( "set a specific seed for random numbers" ) + .bind( &setRngSeed, "'time'|number" ); + + cli["--force-colour"] + .describe( "force colourised output (deprecated)" ) + .bind( &forceColour ); + + cli["--use-colour"] + .describe( "should output be colourised" ) + .bind( &setUseColour, "yes|no" ); + + return cli; + } + +} // end namespace Catch + +// #included from: internal/catch_list.hpp +#define TWOBLUECUBES_CATCH_LIST_HPP_INCLUDED + +// #included from: catch_text.h +#define TWOBLUECUBES_CATCH_TEXT_H_INCLUDED + +#define TBC_TEXT_FORMAT_CONSOLE_WIDTH CATCH_CONFIG_CONSOLE_WIDTH + +#define CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE Catch +// #included from: ../external/tbc_text_format.h +// Only use header guard if we are not using an outer namespace +#ifndef CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE +# ifdef TWOBLUECUBES_TEXT_FORMAT_H_INCLUDED +# ifndef TWOBLUECUBES_TEXT_FORMAT_H_ALREADY_INCLUDED +# define TWOBLUECUBES_TEXT_FORMAT_H_ALREADY_INCLUDED +# endif +# else +# define TWOBLUECUBES_TEXT_FORMAT_H_INCLUDED +# endif +#endif +#ifndef TWOBLUECUBES_TEXT_FORMAT_H_ALREADY_INCLUDED +#include <string> +#include <vector> +#include <sstream> + +// Use optional outer namespace +#ifdef CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE +namespace CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE { +#endif + +namespace Tbc { + +#ifdef TBC_TEXT_FORMAT_CONSOLE_WIDTH + const unsigned int consoleWidth = TBC_TEXT_FORMAT_CONSOLE_WIDTH; +#else + const unsigned int consoleWidth = 80; +#endif + + struct TextAttributes { + TextAttributes() + : initialIndent( std::string::npos ), + indent( 0 ), + width( consoleWidth-1 ) + {} + + TextAttributes& setInitialIndent( std::size_t _value ) { initialIndent = _value; return *this; } + TextAttributes& setIndent( std::size_t _value ) { indent = _value; return *this; } + TextAttributes& setWidth( std::size_t _value ) { width = _value; return *this; } + + std::size_t initialIndent; // indent of first line, or npos + std::size_t indent; // indent of subsequent lines, or all if initialIndent is npos + std::size_t width; // maximum width of text, including indent. Longer text will wrap + }; + + class Text { + public: + Text( std::string const& _str, TextAttributes const& _attr = TextAttributes() ) + : attr( _attr ) + { + const std::string wrappableBeforeChars = "[({<\t"; + const std::string wrappableAfterChars = "])}>-,./|\\"; + const std::string wrappableInsteadOfChars = " \n\r"; + std::string indent = _attr.initialIndent != std::string::npos + ? std::string( _attr.initialIndent, ' ' ) + : std::string( _attr.indent, ' ' ); + + typedef std::string::const_iterator iterator; + iterator it = _str.begin(); + const iterator strEnd = _str.end(); + + while( it != strEnd ) { + + if( lines.size() >= 1000 ) { + lines.push_back( "... message truncated due to excessive size" ); + return; + } + + std::string suffix; + std::size_t width = (std::min)( static_cast<size_t>( strEnd-it ), _attr.width-static_cast<size_t>( indent.size() ) ); + iterator itEnd = it+width; + iterator itNext = _str.end(); + + iterator itNewLine = std::find( it, itEnd, '\n' ); + if( itNewLine != itEnd ) + itEnd = itNewLine; + + if( itEnd != strEnd ) { + bool foundWrapPoint = false; + iterator findIt = itEnd; + do { + if( wrappableAfterChars.find( *findIt ) != std::string::npos && findIt != itEnd ) { + itEnd = findIt+1; + itNext = findIt+1; + foundWrapPoint = true; + } + else if( findIt > it && wrappableBeforeChars.find( *findIt ) != std::string::npos ) { + itEnd = findIt; + itNext = findIt; + foundWrapPoint = true; + } + else if( wrappableInsteadOfChars.find( *findIt ) != std::string::npos ) { + itNext = findIt+1; + itEnd = findIt; + foundWrapPoint = true; + } + if( findIt == it ) + break; + else + --findIt; + } + while( !foundWrapPoint ); + + if( !foundWrapPoint ) { + // No good wrap char, so we'll break mid word and add a hyphen + --itEnd; + itNext = itEnd; + suffix = "-"; + } + else { + while( itEnd > it && wrappableInsteadOfChars.find( *(itEnd-1) ) != std::string::npos ) + --itEnd; + } + } + lines.push_back( indent + std::string( it, itEnd ) + suffix ); + + if( indent.size() != _attr.indent ) + indent = std::string( _attr.indent, ' ' ); + it = itNext; + } + } + + typedef std::vector<std::string>::const_iterator const_iterator; + + const_iterator begin() const { return lines.begin(); } + const_iterator end() const { return lines.end(); } + std::string const& last() const { return lines.back(); } + std::size_t size() const { return lines.size(); } + std::string const& operator[]( std::size_t _index ) const { return lines[_index]; } + std::string toString() const { + std::ostringstream oss; + oss << *this; + return oss.str(); + } + + inline friend std::ostream& operator << ( std::ostream& _stream, Text const& _text ) { + for( Text::const_iterator it = _text.begin(), itEnd = _text.end(); + it != itEnd; ++it ) { + if( it != _text.begin() ) + _stream << "\n"; + _stream << *it; + } + return _stream; + } + + private: + std::string str; + TextAttributes attr; + std::vector<std::string> lines; + }; + +} // end namespace Tbc + +#ifdef CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE +} // end outer namespace +#endif + +#endif // TWOBLUECUBES_TEXT_FORMAT_H_ALREADY_INCLUDED +#undef CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE + +namespace Catch { + using Tbc::Text; + using Tbc::TextAttributes; +} + +// #included from: catch_console_colour.hpp +#define TWOBLUECUBES_CATCH_CONSOLE_COLOUR_HPP_INCLUDED + +namespace Catch { + + struct Colour { + enum Code { + None = 0, + + White, + Red, + Green, + Blue, + Cyan, + Yellow, + Grey, + + Bright = 0x10, + + BrightRed = Bright | Red, + BrightGreen = Bright | Green, + LightGrey = Bright | Grey, + BrightWhite = Bright | White, + + // By intention + FileName = LightGrey, + Warning = Yellow, + ResultError = BrightRed, + ResultSuccess = BrightGreen, + ResultExpectedFailure = Warning, + + Error = BrightRed, + Success = Green, + + OriginalExpression = Cyan, + ReconstructedExpression = Yellow, + + SecondaryText = LightGrey, + Headers = White + }; + + // Use constructed object for RAII guard + Colour( Code _colourCode ); + Colour( Colour const& other ); + ~Colour(); + + // Use static method for one-shot changes + static void use( Code _colourCode ); + + private: + bool m_moved; + }; + + inline std::ostream& operator << ( std::ostream& os, Colour const& ) { return os; } + +} // end namespace Catch + +// #included from: catch_interfaces_reporter.h +#define TWOBLUECUBES_CATCH_INTERFACES_REPORTER_H_INCLUDED + +#include <string> +#include <ostream> +#include <map> + +namespace Catch +{ + struct ReporterConfig { + explicit ReporterConfig( Ptr<IConfig const> const& _fullConfig ) + : m_stream( &_fullConfig->stream() ), m_fullConfig( _fullConfig ) {} + + ReporterConfig( Ptr<IConfig const> const& _fullConfig, std::ostream& _stream ) + : m_stream( &_stream ), m_fullConfig( _fullConfig ) {} + + std::ostream& stream() const { return *m_stream; } + Ptr<IConfig const> fullConfig() const { return m_fullConfig; } + + private: + std::ostream* m_stream; + Ptr<IConfig const> m_fullConfig; + }; + + struct ReporterPreferences { + ReporterPreferences() + : shouldRedirectStdOut( false ) + {} + + bool shouldRedirectStdOut; + }; + + template<typename T> + struct LazyStat : Option<T> { + LazyStat() : used( false ) {} + LazyStat& operator=( T const& _value ) { + Option<T>::operator=( _value ); + used = false; + return *this; + } + void reset() { + Option<T>::reset(); + used = false; + } + bool used; + }; + + struct TestRunInfo { + TestRunInfo( std::string const& _name ) : name( _name ) {} + std::string name; + }; + struct GroupInfo { + GroupInfo( std::string const& _name, + std::size_t _groupIndex, + std::size_t _groupsCount ) + : name( _name ), + groupIndex( _groupIndex ), + groupsCounts( _groupsCount ) + {} + + std::string name; + std::size_t groupIndex; + std::size_t groupsCounts; + }; + + struct AssertionStats { + AssertionStats( AssertionResult const& _assertionResult, + std::vector<MessageInfo> const& _infoMessages, + Totals const& _totals ) + : assertionResult( _assertionResult ), + infoMessages( _infoMessages ), + totals( _totals ) + { + if( assertionResult.hasMessage() ) { + // Copy message into messages list. + // !TBD This should have been done earlier, somewhere + MessageBuilder builder( assertionResult.getTestMacroName(), assertionResult.getSourceInfo(), assertionResult.getResultType() ); + builder << assertionResult.getMessage(); + builder.m_info.message = builder.m_stream.str(); + + infoMessages.push_back( builder.m_info ); + } + } + virtual ~AssertionStats(); + +# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS + AssertionStats( AssertionStats const& ) = default; + AssertionStats( AssertionStats && ) = default; + AssertionStats& operator = ( AssertionStats const& ) = default; + AssertionStats& operator = ( AssertionStats && ) = default; +# endif + + AssertionResult assertionResult; + std::vector<MessageInfo> infoMessages; + Totals totals; + }; + + struct SectionStats { + SectionStats( SectionInfo const& _sectionInfo, + Counts const& _assertions, + double _durationInSeconds, + bool _missingAssertions ) + : sectionInfo( _sectionInfo ), + assertions( _assertions ), + durationInSeconds( _durationInSeconds ), + missingAssertions( _missingAssertions ) + {} + virtual ~SectionStats(); +# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS + SectionStats( SectionStats const& ) = default; + SectionStats( SectionStats && ) = default; + SectionStats& operator = ( SectionStats const& ) = default; + SectionStats& operator = ( SectionStats && ) = default; +# endif + + SectionInfo sectionInfo; + Counts assertions; + double durationInSeconds; + bool missingAssertions; + }; + + struct TestCaseStats { + TestCaseStats( TestCaseInfo const& _testInfo, + Totals const& _totals, + std::string const& _stdOut, + std::string const& _stdErr, + bool _aborting ) + : testInfo( _testInfo ), + totals( _totals ), + stdOut( _stdOut ), + stdErr( _stdErr ), + aborting( _aborting ) + {} + virtual ~TestCaseStats(); + +# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS + TestCaseStats( TestCaseStats const& ) = default; + TestCaseStats( TestCaseStats && ) = default; + TestCaseStats& operator = ( TestCaseStats const& ) = default; + TestCaseStats& operator = ( TestCaseStats && ) = default; +# endif + + TestCaseInfo testInfo; + Totals totals; + std::string stdOut; + std::string stdErr; + bool aborting; + }; + + struct TestGroupStats { + TestGroupStats( GroupInfo const& _groupInfo, + Totals const& _totals, + bool _aborting ) + : groupInfo( _groupInfo ), + totals( _totals ), + aborting( _aborting ) + {} + TestGroupStats( GroupInfo const& _groupInfo ) + : groupInfo( _groupInfo ), + aborting( false ) + {} + virtual ~TestGroupStats(); + +# ifdef CATCH_CONFIG_CPP11_GENERATED_METHODS + TestGroupStats( TestGroupStats const& ) = default; + TestGroupStats( TestGroupStats && ) = default; + TestGroupStats& operator = ( TestGroupStats const& ) = default; + TestGroupStats& operator = ( TestGroupStats && ) = default; +# endif + + GroupInfo groupInfo; + Totals totals; + bool aborting; + }; + + struct TestRunStats { + TestRunStats( TestRunInfo const& _runInfo, + Totals const& _totals, + bool _aborting ) + : runInfo( _runInfo ), + totals( _totals ), + aborting( _aborting ) + {} + virtual ~TestRunStats(); + +# ifndef CATCH_CONFIG_CPP11_GENERATED_METHODS + TestRunStats( TestRunStats const& _other ) + : runInfo( _other.runInfo ), + totals( _other.totals ), + aborting( _other.aborting ) + {} +# else + TestRunStats( TestRunStats const& ) = default; + TestRunStats( TestRunStats && ) = default; + TestRunStats& operator = ( TestRunStats const& ) = default; + TestRunStats& operator = ( TestRunStats && ) = default; +# endif + + TestRunInfo runInfo; + Totals totals; + bool aborting; + }; + + class MultipleReporters; + + struct IStreamingReporter : IShared { + virtual ~IStreamingReporter(); + + // Implementing class must also provide the following static method: + // static std::string getDescription(); + + virtual ReporterPreferences getPreferences() const = 0; + + virtual void noMatchingTestCases( std::string const& spec ) = 0; + + virtual void testRunStarting( TestRunInfo const& testRunInfo ) = 0; + virtual void testGroupStarting( GroupInfo const& groupInfo ) = 0; + + virtual void testCaseStarting( TestCaseInfo const& testInfo ) = 0; + virtual void sectionStarting( SectionInfo const& sectionInfo ) = 0; + + virtual void assertionStarting( AssertionInfo const& assertionInfo ) = 0; + + // The return value indicates if the messages buffer should be cleared: + virtual bool assertionEnded( AssertionStats const& assertionStats ) = 0; + + virtual void sectionEnded( SectionStats const& sectionStats ) = 0; + virtual void testCaseEnded( TestCaseStats const& testCaseStats ) = 0; + virtual void testGroupEnded( TestGroupStats const& testGroupStats ) = 0; + virtual void testRunEnded( TestRunStats const& testRunStats ) = 0; + + virtual void skipTest( TestCaseInfo const& testInfo ) = 0; + + virtual MultipleReporters* tryAsMulti() { return CATCH_NULL; } + }; + + struct IReporterFactory : IShared { + virtual ~IReporterFactory(); + virtual IStreamingReporter* create( ReporterConfig const& config ) const = 0; + virtual std::string getDescription() const = 0; + }; + + struct IReporterRegistry { + typedef std::map<std::string, Ptr<IReporterFactory> > FactoryMap; + typedef std::vector<Ptr<IReporterFactory> > Listeners; + + virtual ~IReporterRegistry(); + virtual IStreamingReporter* create( std::string const& name, Ptr<IConfig const> const& config ) const = 0; + virtual FactoryMap const& getFactories() const = 0; + virtual Listeners const& getListeners() const = 0; + }; + + Ptr<IStreamingReporter> addReporter( Ptr<IStreamingReporter> const& existingReporter, Ptr<IStreamingReporter> const& additionalReporter ); + +} + +#include <limits> +#include <algorithm> + +namespace Catch { + + inline std::size_t listTests( Config const& config ) { + + TestSpec testSpec = config.testSpec(); + if( config.testSpec().hasFilters() ) + Catch::cout() << "Matching test cases:\n"; + else { + Catch::cout() << "All available test cases:\n"; + testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec(); + } + + std::size_t matchedTests = 0; + TextAttributes nameAttr, tagsAttr; + nameAttr.setInitialIndent( 2 ).setIndent( 4 ); + tagsAttr.setIndent( 6 ); + + std::vector<TestCase> matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config ); + for( std::vector<TestCase>::const_iterator it = matchedTestCases.begin(), itEnd = matchedTestCases.end(); + it != itEnd; + ++it ) { + matchedTests++; + TestCaseInfo const& testCaseInfo = it->getTestCaseInfo(); + Colour::Code colour = testCaseInfo.isHidden() + ? Colour::SecondaryText + : Colour::None; + Colour colourGuard( colour ); + + Catch::cout() << Text( testCaseInfo.name, nameAttr ) << std::endl; + if( !testCaseInfo.tags.empty() ) + Catch::cout() << Text( testCaseInfo.tagsAsString, tagsAttr ) << std::endl; + } + + if( !config.testSpec().hasFilters() ) + Catch::cout() << pluralise( matchedTests, "test case" ) << '\n' << std::endl; + else + Catch::cout() << pluralise( matchedTests, "matching test case" ) << '\n' << std::endl; + return matchedTests; + } + + inline std::size_t listTestsNamesOnly( Config const& config ) { + TestSpec testSpec = config.testSpec(); + if( !config.testSpec().hasFilters() ) + testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec(); + std::size_t matchedTests = 0; + std::vector<TestCase> matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config ); + for( std::vector<TestCase>::const_iterator it = matchedTestCases.begin(), itEnd = matchedTestCases.end(); + it != itEnd; + ++it ) { + matchedTests++; + TestCaseInfo const& testCaseInfo = it->getTestCaseInfo(); + if( startsWith( testCaseInfo.name, '#' ) ) + Catch::cout() << '"' << testCaseInfo.name << '"' << std::endl; + else + Catch::cout() << testCaseInfo.name << std::endl; + } + return matchedTests; + } + + struct TagInfo { + TagInfo() : count ( 0 ) {} + void add( std::string const& spelling ) { + ++count; + spellings.insert( spelling ); + } + std::string all() const { + std::string out; + for( std::set<std::string>::const_iterator it = spellings.begin(), itEnd = spellings.end(); + it != itEnd; + ++it ) + out += "[" + *it + "]"; + return out; + } + std::set<std::string> spellings; + std::size_t count; + }; + + inline std::size_t listTags( Config const& config ) { + TestSpec testSpec = config.testSpec(); + if( config.testSpec().hasFilters() ) + Catch::cout() << "Tags for matching test cases:\n"; + else { + Catch::cout() << "All available tags:\n"; + testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec(); + } + + std::map<std::string, TagInfo> tagCounts; + + std::vector<TestCase> matchedTestCases = filterTests( getAllTestCasesSorted( config ), testSpec, config ); + for( std::vector<TestCase>::const_iterator it = matchedTestCases.begin(), itEnd = matchedTestCases.end(); + it != itEnd; + ++it ) { + for( std::set<std::string>::const_iterator tagIt = it->getTestCaseInfo().tags.begin(), + tagItEnd = it->getTestCaseInfo().tags.end(); + tagIt != tagItEnd; + ++tagIt ) { + std::string tagName = *tagIt; + std::string lcaseTagName = toLower( tagName ); + std::map<std::string, TagInfo>::iterator countIt = tagCounts.find( lcaseTagName ); + if( countIt == tagCounts.end() ) + countIt = tagCounts.insert( std::make_pair( lcaseTagName, TagInfo() ) ).first; + countIt->second.add( tagName ); + } + } + + for( std::map<std::string, TagInfo>::const_iterator countIt = tagCounts.begin(), + countItEnd = tagCounts.end(); + countIt != countItEnd; + ++countIt ) { + std::ostringstream oss; + oss << " " << std::setw(2) << countIt->second.count << " "; + Text wrapper( countIt->second.all(), TextAttributes() + .setInitialIndent( 0 ) + .setIndent( oss.str().size() ) + .setWidth( CATCH_CONFIG_CONSOLE_WIDTH-10 ) ); + Catch::cout() << oss.str() << wrapper << '\n'; + } + Catch::cout() << pluralise( tagCounts.size(), "tag" ) << '\n' << std::endl; + return tagCounts.size(); + } + + inline std::size_t listReporters( Config const& /*config*/ ) { + Catch::cout() << "Available reporters:\n"; + IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories(); + IReporterRegistry::FactoryMap::const_iterator itBegin = factories.begin(), itEnd = factories.end(), it; + std::size_t maxNameLen = 0; + for(it = itBegin; it != itEnd; ++it ) + maxNameLen = (std::max)( maxNameLen, it->first.size() ); + + for(it = itBegin; it != itEnd; ++it ) { + Text wrapper( it->second->getDescription(), TextAttributes() + .setInitialIndent( 0 ) + .setIndent( 7+maxNameLen ) + .setWidth( CATCH_CONFIG_CONSOLE_WIDTH - maxNameLen-8 ) ); + Catch::cout() << " " + << it->first + << ':' + << std::string( maxNameLen - it->first.size() + 2, ' ' ) + << wrapper << '\n'; + } + Catch::cout() << std::endl; + return factories.size(); + } + + inline Option<std::size_t> list( Config const& config ) { + Option<std::size_t> listedCount; + if( config.listTests() ) + listedCount = listedCount.valueOr(0) + listTests( config ); + if( config.listTestNamesOnly() ) + listedCount = listedCount.valueOr(0) + listTestsNamesOnly( config ); + if( config.listTags() ) + listedCount = listedCount.valueOr(0) + listTags( config ); + if( config.listReporters() ) + listedCount = listedCount.valueOr(0) + listReporters( config ); + return listedCount; + } + +} // end namespace Catch + +// #included from: internal/catch_run_context.hpp +#define TWOBLUECUBES_CATCH_RUNNER_IMPL_HPP_INCLUDED + +// #included from: catch_test_case_tracker.hpp +#define TWOBLUECUBES_CATCH_TEST_CASE_TRACKER_HPP_INCLUDED + +#include <map> +#include <string> +#include <assert.h> +#include <vector> +#include <iterator> +#include <stdexcept> + +namespace Catch { +namespace TestCaseTracking { + + struct NameAndLocation { + std::string name; + SourceLineInfo location; + + NameAndLocation( std::string const& _name, SourceLineInfo const& _location ) + : name( _name ), + location( _location ) + {} + }; + + struct ITracker : SharedImpl<> { + virtual ~ITracker(); + + // static queries + virtual NameAndLocation const& nameAndLocation() const = 0; + + // dynamic queries + virtual bool isComplete() const = 0; // Successfully completed or failed + virtual bool isSuccessfullyCompleted() const = 0; + virtual bool isOpen() const = 0; // Started but not complete + virtual bool hasChildren() const = 0; + + virtual ITracker& parent() = 0; + + // actions + virtual void close() = 0; // Successfully complete + virtual void fail() = 0; + virtual void markAsNeedingAnotherRun() = 0; + + virtual void addChild( Ptr<ITracker> const& child ) = 0; + virtual ITracker* findChild( NameAndLocation const& nameAndLocation ) = 0; + virtual void openChild() = 0; + + // Debug/ checking + virtual bool isSectionTracker() const = 0; + virtual bool isIndexTracker() const = 0; + }; + + class TrackerContext { + + enum RunState { + NotStarted, + Executing, + CompletedCycle + }; + + Ptr<ITracker> m_rootTracker; + ITracker* m_currentTracker; + RunState m_runState; + + public: + + static TrackerContext& instance() { + static TrackerContext s_instance; + return s_instance; + } + + TrackerContext() + : m_currentTracker( CATCH_NULL ), + m_runState( NotStarted ) + {} + + ITracker& startRun(); + + void endRun() { + m_rootTracker.reset(); + m_currentTracker = CATCH_NULL; + m_runState = NotStarted; + } + + void startCycle() { + m_currentTracker = m_rootTracker.get(); + m_runState = Executing; + } + void completeCycle() { + m_runState = CompletedCycle; + } + + bool completedCycle() const { + return m_runState == CompletedCycle; + } + ITracker& currentTracker() { + return *m_currentTracker; + } + void setCurrentTracker( ITracker* tracker ) { + m_currentTracker = tracker; + } + }; + + class TrackerBase : public ITracker { + protected: + enum CycleState { + NotStarted, + Executing, + ExecutingChildren, + NeedsAnotherRun, + CompletedSuccessfully, + Failed + }; + class TrackerHasName { + NameAndLocation m_nameAndLocation; + public: + TrackerHasName( NameAndLocation const& nameAndLocation ) : m_nameAndLocation( nameAndLocation ) {} + bool operator ()( Ptr<ITracker> const& tracker ) { + return + tracker->nameAndLocation().name == m_nameAndLocation.name && + tracker->nameAndLocation().location == m_nameAndLocation.location; + } + }; + typedef std::vector<Ptr<ITracker> > Children; + NameAndLocation m_nameAndLocation; + TrackerContext& m_ctx; + ITracker* m_parent; + Children m_children; + CycleState m_runState; + public: + TrackerBase( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ) + : m_nameAndLocation( nameAndLocation ), + m_ctx( ctx ), + m_parent( parent ), + m_runState( NotStarted ) + {} + virtual ~TrackerBase(); + + virtual NameAndLocation const& nameAndLocation() const CATCH_OVERRIDE { + return m_nameAndLocation; + } + virtual bool isComplete() const CATCH_OVERRIDE { + return m_runState == CompletedSuccessfully || m_runState == Failed; + } + virtual bool isSuccessfullyCompleted() const CATCH_OVERRIDE { + return m_runState == CompletedSuccessfully; + } + virtual bool isOpen() const CATCH_OVERRIDE { + return m_runState != NotStarted && !isComplete(); + } + virtual bool hasChildren() const CATCH_OVERRIDE { + return !m_children.empty(); + } + + virtual void addChild( Ptr<ITracker> const& child ) CATCH_OVERRIDE { + m_children.push_back( child ); + } + + virtual ITracker* findChild( NameAndLocation const& nameAndLocation ) CATCH_OVERRIDE { + Children::const_iterator it = std::find_if( m_children.begin(), m_children.end(), TrackerHasName( nameAndLocation ) ); + return( it != m_children.end() ) + ? it->get() + : CATCH_NULL; + } + virtual ITracker& parent() CATCH_OVERRIDE { + assert( m_parent ); // Should always be non-null except for root + return *m_parent; + } + + virtual void openChild() CATCH_OVERRIDE { + if( m_runState != ExecutingChildren ) { + m_runState = ExecutingChildren; + if( m_parent ) + m_parent->openChild(); + } + } + + virtual bool isSectionTracker() const CATCH_OVERRIDE { return false; } + virtual bool isIndexTracker() const CATCH_OVERRIDE { return false; } + + void open() { + m_runState = Executing; + moveToThis(); + if( m_parent ) + m_parent->openChild(); + } + + virtual void close() CATCH_OVERRIDE { + + // Close any still open children (e.g. generators) + while( &m_ctx.currentTracker() != this ) + m_ctx.currentTracker().close(); + + switch( m_runState ) { + case NotStarted: + case CompletedSuccessfully: + case Failed: + throw std::logic_error( "Illogical state" ); + + case NeedsAnotherRun: + break;; + + case Executing: + m_runState = CompletedSuccessfully; + break; + case ExecutingChildren: + if( m_children.empty() || m_children.back()->isComplete() ) + m_runState = CompletedSuccessfully; + break; + + default: + throw std::logic_error( "Unexpected state" ); + } + moveToParent(); + m_ctx.completeCycle(); + } + virtual void fail() CATCH_OVERRIDE { + m_runState = Failed; + if( m_parent ) + m_parent->markAsNeedingAnotherRun(); + moveToParent(); + m_ctx.completeCycle(); + } + virtual void markAsNeedingAnotherRun() CATCH_OVERRIDE { + m_runState = NeedsAnotherRun; + } + private: + void moveToParent() { + assert( m_parent ); + m_ctx.setCurrentTracker( m_parent ); + } + void moveToThis() { + m_ctx.setCurrentTracker( this ); + } + }; + + class SectionTracker : public TrackerBase { + std::vector<std::string> m_filters; + public: + SectionTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent ) + : TrackerBase( nameAndLocation, ctx, parent ) + { + if( parent ) { + while( !parent->isSectionTracker() ) + parent = &parent->parent(); + + SectionTracker& parentSection = static_cast<SectionTracker&>( *parent ); + addNextFilters( parentSection.m_filters ); + } + } + virtual ~SectionTracker(); + + virtual bool isSectionTracker() const CATCH_OVERRIDE { return true; } + + static SectionTracker& acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation ) { + SectionTracker* section = CATCH_NULL; + + ITracker& currentTracker = ctx.currentTracker(); + if( ITracker* childTracker = currentTracker.findChild( nameAndLocation ) ) { + assert( childTracker ); + assert( childTracker->isSectionTracker() ); + section = static_cast<SectionTracker*>( childTracker ); + } + else { + section = new SectionTracker( nameAndLocation, ctx, ¤tTracker ); + currentTracker.addChild( section ); + } + if( !ctx.completedCycle() ) + section->tryOpen(); + return *section; + } + + void tryOpen() { + if( !isComplete() && (m_filters.empty() || m_filters[0].empty() || m_filters[0] == m_nameAndLocation.name ) ) + open(); + } + + void addInitialFilters( std::vector<std::string> const& filters ) { + if( !filters.empty() ) { + m_filters.push_back(""); // Root - should never be consulted + m_filters.push_back(""); // Test Case - not a section filter + std::copy( filters.begin(), filters.end(), std::back_inserter( m_filters ) ); + } + } + void addNextFilters( std::vector<std::string> const& filters ) { + if( filters.size() > 1 ) + std::copy( filters.begin()+1, filters.end(), std::back_inserter( m_filters ) ); + } + }; + + class IndexTracker : public TrackerBase { + int m_size; + int m_index; + public: + IndexTracker( NameAndLocation const& nameAndLocation, TrackerContext& ctx, ITracker* parent, int size ) + : TrackerBase( nameAndLocation, ctx, parent ), + m_size( size ), + m_index( -1 ) + {} + virtual ~IndexTracker(); + + virtual bool isIndexTracker() const CATCH_OVERRIDE { return true; } + + static IndexTracker& acquire( TrackerContext& ctx, NameAndLocation const& nameAndLocation, int size ) { + IndexTracker* tracker = CATCH_NULL; + + ITracker& currentTracker = ctx.currentTracker(); + if( ITracker* childTracker = currentTracker.findChild( nameAndLocation ) ) { + assert( childTracker ); + assert( childTracker->isIndexTracker() ); + tracker = static_cast<IndexTracker*>( childTracker ); + } + else { + tracker = new IndexTracker( nameAndLocation, ctx, ¤tTracker, size ); + currentTracker.addChild( tracker ); + } + + if( !ctx.completedCycle() && !tracker->isComplete() ) { + if( tracker->m_runState != ExecutingChildren && tracker->m_runState != NeedsAnotherRun ) + tracker->moveNext(); + tracker->open(); + } + + return *tracker; + } + + int index() const { return m_index; } + + void moveNext() { + m_index++; + m_children.clear(); + } + + virtual void close() CATCH_OVERRIDE { + TrackerBase::close(); + if( m_runState == CompletedSuccessfully && m_index < m_size-1 ) + m_runState = Executing; + } + }; + + inline ITracker& TrackerContext::startRun() { + m_rootTracker = new SectionTracker( NameAndLocation( "{root}", CATCH_INTERNAL_LINEINFO ), *this, CATCH_NULL ); + m_currentTracker = CATCH_NULL; + m_runState = Executing; + return *m_rootTracker; + } + +} // namespace TestCaseTracking + +using TestCaseTracking::ITracker; +using TestCaseTracking::TrackerContext; +using TestCaseTracking::SectionTracker; +using TestCaseTracking::IndexTracker; + +} // namespace Catch + +// #included from: catch_fatal_condition.hpp +#define TWOBLUECUBES_CATCH_FATAL_CONDITION_H_INCLUDED + +namespace Catch { + + // Report the error condition + inline void reportFatal( std::string const& message ) { + IContext& context = Catch::getCurrentContext(); + IResultCapture* resultCapture = context.getResultCapture(); + resultCapture->handleFatalErrorCondition( message ); + } + +} // namespace Catch + +#if defined ( CATCH_PLATFORM_WINDOWS ) ///////////////////////////////////////// +// #included from: catch_windows_h_proxy.h + +#define TWOBLUECUBES_CATCH_WINDOWS_H_PROXY_H_INCLUDED + +#ifdef CATCH_DEFINES_NOMINMAX +# define NOMINMAX +#endif +#ifdef CATCH_DEFINES_WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +#endif + +#ifdef __AFXDLL +#include <AfxWin.h> +#else +#include <windows.h> +#endif + +#ifdef CATCH_DEFINES_NOMINMAX +# undef NOMINMAX +#endif +#ifdef CATCH_DEFINES_WIN32_LEAN_AND_MEAN +# undef WIN32_LEAN_AND_MEAN +#endif + + +# if !defined ( CATCH_CONFIG_WINDOWS_SEH ) + +namespace Catch { + struct FatalConditionHandler { + void reset() {} + }; +} + +# else // CATCH_CONFIG_WINDOWS_SEH is defined + +namespace Catch { + + struct SignalDefs { DWORD id; const char* name; }; + extern SignalDefs signalDefs[]; + // There is no 1-1 mapping between signals and windows exceptions. + // Windows can easily distinguish between SO and SigSegV, + // but SigInt, SigTerm, etc are handled differently. + SignalDefs signalDefs[] = { + { EXCEPTION_ILLEGAL_INSTRUCTION, "SIGILL - Illegal instruction signal" }, + { EXCEPTION_STACK_OVERFLOW, "SIGSEGV - Stack overflow" }, + { EXCEPTION_ACCESS_VIOLATION, "SIGSEGV - Segmentation violation signal" }, + { EXCEPTION_INT_DIVIDE_BY_ZERO, "Divide by zero error" }, + }; + + struct FatalConditionHandler { + + static LONG CALLBACK handleVectoredException(PEXCEPTION_POINTERS ExceptionInfo) { + for (int i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i) { + if (ExceptionInfo->ExceptionRecord->ExceptionCode == signalDefs[i].id) { + reset(); + reportFatal(signalDefs[i].name); + } + } + // If its not an exception we care about, pass it along. + // This stops us from eating debugger breaks etc. + return EXCEPTION_CONTINUE_SEARCH; + } + + FatalConditionHandler() { + isSet = true; + // 32k seems enough for Catch to handle stack overflow, + // but the value was found experimentally, so there is no strong guarantee + guaranteeSize = 32 * 1024; + exceptionHandlerHandle = CATCH_NULL; + // Register as first handler in current chain + exceptionHandlerHandle = AddVectoredExceptionHandler(1, handleVectoredException); + // Pass in guarantee size to be filled + SetThreadStackGuarantee(&guaranteeSize); + } + + static void reset() { + if (isSet) { + // Unregister handler and restore the old guarantee + RemoveVectoredExceptionHandler(exceptionHandlerHandle); + SetThreadStackGuarantee(&guaranteeSize); + exceptionHandlerHandle = CATCH_NULL; + isSet = false; + } + } + + ~FatalConditionHandler() { + reset(); + } + private: + static bool isSet; + static ULONG guaranteeSize; + static PVOID exceptionHandlerHandle; + }; + + bool FatalConditionHandler::isSet = false; + ULONG FatalConditionHandler::guaranteeSize = 0; + PVOID FatalConditionHandler::exceptionHandlerHandle = CATCH_NULL; + +} // namespace Catch + +# endif // CATCH_CONFIG_WINDOWS_SEH + +#else // Not Windows - assumed to be POSIX compatible ////////////////////////// + +#include <signal.h> + +namespace Catch { + + struct SignalDefs { + int id; + const char* name; + }; + extern SignalDefs signalDefs[]; + SignalDefs signalDefs[] = { + { SIGINT, "SIGINT - Terminal interrupt signal" }, + { SIGILL, "SIGILL - Illegal instruction signal" }, + { SIGFPE, "SIGFPE - Floating point error signal" }, + { SIGSEGV, "SIGSEGV - Segmentation violation signal" }, + { SIGTERM, "SIGTERM - Termination request signal" }, + { SIGABRT, "SIGABRT - Abort (abnormal termination) signal" } + }; + + struct FatalConditionHandler { + + static bool isSet; + static struct sigaction oldSigActions [sizeof(signalDefs)/sizeof(SignalDefs)]; + static stack_t oldSigStack; + static char altStackMem[SIGSTKSZ]; + + static void handleSignal( int sig ) { + std::string name = "<unknown signal>"; + for (std::size_t i = 0; i < sizeof(signalDefs) / sizeof(SignalDefs); ++i) { + SignalDefs &def = signalDefs[i]; + if (sig == def.id) { + name = def.name; + break; + } + } + reset(); + reportFatal(name); + raise( sig ); + } + + FatalConditionHandler() { + isSet = true; + stack_t sigStack; + sigStack.ss_sp = altStackMem; + sigStack.ss_size = SIGSTKSZ; + sigStack.ss_flags = 0; + sigaltstack(&sigStack, &oldSigStack); + struct sigaction sa = { 0 }; + + sa.sa_handler = handleSignal; + sa.sa_flags = SA_ONSTACK; + for (std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i) { + sigaction(signalDefs[i].id, &sa, &oldSigActions[i]); + } + } + + ~FatalConditionHandler() { + reset(); + } + static void reset() { + if( isSet ) { + // Set signals back to previous values -- hopefully nobody overwrote them in the meantime + for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) { + sigaction(signalDefs[i].id, &oldSigActions[i], CATCH_NULL); + } + // Return the old stack + sigaltstack(&oldSigStack, CATCH_NULL); + isSet = false; + } + } + }; + + bool FatalConditionHandler::isSet = false; + struct sigaction FatalConditionHandler::oldSigActions[sizeof(signalDefs)/sizeof(SignalDefs)] = {}; + stack_t FatalConditionHandler::oldSigStack = {}; + char FatalConditionHandler::altStackMem[SIGSTKSZ] = {}; + +} // namespace Catch + +#endif // not Windows + +#include <set> +#include <string> + +namespace Catch { + + class StreamRedirect { + + public: + StreamRedirect( std::ostream& stream, std::string& targetString ) + : m_stream( stream ), + m_prevBuf( stream.rdbuf() ), + m_targetString( targetString ) + { + stream.rdbuf( m_oss.rdbuf() ); + } + + ~StreamRedirect() { + m_targetString += m_oss.str(); + m_stream.rdbuf( m_prevBuf ); + } + + private: + std::ostream& m_stream; + std::streambuf* m_prevBuf; + std::ostringstream m_oss; + std::string& m_targetString; + }; + + /////////////////////////////////////////////////////////////////////////// + + class RunContext : public IResultCapture, public IRunner { + + RunContext( RunContext const& ); + void operator =( RunContext const& ); + + public: + + explicit RunContext( Ptr<IConfig const> const& _config, Ptr<IStreamingReporter> const& reporter ) + : m_runInfo( _config->name() ), + m_context( getCurrentMutableContext() ), + m_activeTestCase( CATCH_NULL ), + m_config( _config ), + m_reporter( reporter ) + { + m_context.setRunner( this ); + m_context.setConfig( m_config ); + m_context.setResultCapture( this ); + m_reporter->testRunStarting( m_runInfo ); + } + + virtual ~RunContext() { + m_reporter->testRunEnded( TestRunStats( m_runInfo, m_totals, aborting() ) ); + } + + void testGroupStarting( std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount ) { + m_reporter->testGroupStarting( GroupInfo( testSpec, groupIndex, groupsCount ) ); + } + void testGroupEnded( std::string const& testSpec, Totals const& totals, std::size_t groupIndex, std::size_t groupsCount ) { + m_reporter->testGroupEnded( TestGroupStats( GroupInfo( testSpec, groupIndex, groupsCount ), totals, aborting() ) ); + } + + Totals runTest( TestCase const& testCase ) { + Totals prevTotals = m_totals; + + std::string redirectedCout; + std::string redirectedCerr; + + TestCaseInfo testInfo = testCase.getTestCaseInfo(); + + m_reporter->testCaseStarting( testInfo ); + + m_activeTestCase = &testCase; + + do { + ITracker& rootTracker = m_trackerContext.startRun(); + assert( rootTracker.isSectionTracker() ); + static_cast<SectionTracker&>( rootTracker ).addInitialFilters( m_config->getSectionsToRun() ); + do { + m_trackerContext.startCycle(); + m_testCaseTracker = &SectionTracker::acquire( m_trackerContext, TestCaseTracking::NameAndLocation( testInfo.name, testInfo.lineInfo ) ); + runCurrentTest( redirectedCout, redirectedCerr ); + } + while( !m_testCaseTracker->isSuccessfullyCompleted() && !aborting() ); + } + // !TBD: deprecated - this will be replaced by indexed trackers + while( getCurrentContext().advanceGeneratorsForCurrentTest() && !aborting() ); + + Totals deltaTotals = m_totals.delta( prevTotals ); + if( testInfo.expectedToFail() && deltaTotals.testCases.passed > 0 ) { + deltaTotals.assertions.failed++; + deltaTotals.testCases.passed--; + deltaTotals.testCases.failed++; + } + m_totals.testCases += deltaTotals.testCases; + m_reporter->testCaseEnded( TestCaseStats( testInfo, + deltaTotals, + redirectedCout, + redirectedCerr, + aborting() ) ); + + m_activeTestCase = CATCH_NULL; + m_testCaseTracker = CATCH_NULL; + + return deltaTotals; + } + + Ptr<IConfig const> config() const { + return m_config; + } + + private: // IResultCapture + + virtual void assertionEnded( AssertionResult const& result ) { + if( result.getResultType() == ResultWas::Ok ) { + m_totals.assertions.passed++; + } + else if( !result.isOk() ) { + m_totals.assertions.failed++; + } + + if( m_reporter->assertionEnded( AssertionStats( result, m_messages, m_totals ) ) ) + m_messages.clear(); + + // Reset working state + m_lastAssertionInfo = AssertionInfo( std::string(), m_lastAssertionInfo.lineInfo, "{Unknown expression after the reported line}" , m_lastAssertionInfo.resultDisposition ); + m_lastResult = result; + } + + virtual bool sectionStarted ( + SectionInfo const& sectionInfo, + Counts& assertions + ) + { + ITracker& sectionTracker = SectionTracker::acquire( m_trackerContext, TestCaseTracking::NameAndLocation( sectionInfo.name, sectionInfo.lineInfo ) ); + if( !sectionTracker.isOpen() ) + return false; + m_activeSections.push_back( §ionTracker ); + + m_lastAssertionInfo.lineInfo = sectionInfo.lineInfo; + + m_reporter->sectionStarting( sectionInfo ); + + assertions = m_totals.assertions; + + return true; + } + bool testForMissingAssertions( Counts& assertions ) { + if( assertions.total() != 0 ) + return false; + if( !m_config->warnAboutMissingAssertions() ) + return false; + if( m_trackerContext.currentTracker().hasChildren() ) + return false; + m_totals.assertions.failed++; + assertions.failed++; + return true; + } + + virtual void sectionEnded( SectionEndInfo const& endInfo ) { + Counts assertions = m_totals.assertions - endInfo.prevAssertions; + bool missingAssertions = testForMissingAssertions( assertions ); + + if( !m_activeSections.empty() ) { + m_activeSections.back()->close(); + m_activeSections.pop_back(); + } + + m_reporter->sectionEnded( SectionStats( endInfo.sectionInfo, assertions, endInfo.durationInSeconds, missingAssertions ) ); + m_messages.clear(); + } + + virtual void sectionEndedEarly( SectionEndInfo const& endInfo ) { + if( m_unfinishedSections.empty() ) + m_activeSections.back()->fail(); + else + m_activeSections.back()->close(); + m_activeSections.pop_back(); + + m_unfinishedSections.push_back( endInfo ); + } + + virtual void pushScopedMessage( MessageInfo const& message ) { + m_messages.push_back( message ); + } + + virtual void popScopedMessage( MessageInfo const& message ) { + m_messages.erase( std::remove( m_messages.begin(), m_messages.end(), message ), m_messages.end() ); + } + + virtual std::string getCurrentTestName() const { + return m_activeTestCase + ? m_activeTestCase->getTestCaseInfo().name + : std::string(); + } + + virtual const AssertionResult* getLastResult() const { + return &m_lastResult; + } + + virtual void handleFatalErrorCondition( std::string const& message ) { + ResultBuilder resultBuilder = makeUnexpectedResultBuilder(); + resultBuilder.setResultType( ResultWas::FatalErrorCondition ); + resultBuilder << message; + resultBuilder.captureExpression(); + + handleUnfinishedSections(); + + // Recreate section for test case (as we will lose the one that was in scope) + TestCaseInfo const& testCaseInfo = m_activeTestCase->getTestCaseInfo(); + SectionInfo testCaseSection( testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description ); + + Counts assertions; + assertions.failed = 1; + SectionStats testCaseSectionStats( testCaseSection, assertions, 0, false ); + m_reporter->sectionEnded( testCaseSectionStats ); + + TestCaseInfo testInfo = m_activeTestCase->getTestCaseInfo(); + + Totals deltaTotals; + deltaTotals.testCases.failed = 1; + m_reporter->testCaseEnded( TestCaseStats( testInfo, + deltaTotals, + std::string(), + std::string(), + false ) ); + m_totals.testCases.failed++; + testGroupEnded( std::string(), m_totals, 1, 1 ); + m_reporter->testRunEnded( TestRunStats( m_runInfo, m_totals, false ) ); + } + + public: + // !TBD We need to do this another way! + bool aborting() const { + return m_totals.assertions.failed == static_cast<std::size_t>( m_config->abortAfter() ); + } + + private: + + void runCurrentTest( std::string& redirectedCout, std::string& redirectedCerr ) { + TestCaseInfo const& testCaseInfo = m_activeTestCase->getTestCaseInfo(); + SectionInfo testCaseSection( testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description ); + m_reporter->sectionStarting( testCaseSection ); + Counts prevAssertions = m_totals.assertions; + double duration = 0; + try { + m_lastAssertionInfo = AssertionInfo( "TEST_CASE", testCaseInfo.lineInfo, std::string(), ResultDisposition::Normal ); + + seedRng( *m_config ); + + Timer timer; + timer.start(); + if( m_reporter->getPreferences().shouldRedirectStdOut ) { + StreamRedirect coutRedir( Catch::cout(), redirectedCout ); + StreamRedirect cerrRedir( Catch::cerr(), redirectedCerr ); + invokeActiveTestCase(); + } + else { + invokeActiveTestCase(); + } + duration = timer.getElapsedSeconds(); + } + catch( TestFailureException& ) { + // This just means the test was aborted due to failure + } + catch(...) { + makeUnexpectedResultBuilder().useActiveException(); + } + m_testCaseTracker->close(); + handleUnfinishedSections(); + m_messages.clear(); + + Counts assertions = m_totals.assertions - prevAssertions; + bool missingAssertions = testForMissingAssertions( assertions ); + + if( testCaseInfo.okToFail() ) { + std::swap( assertions.failedButOk, assertions.failed ); + m_totals.assertions.failed -= assertions.failedButOk; + m_totals.assertions.failedButOk += assertions.failedButOk; + } + + SectionStats testCaseSectionStats( testCaseSection, assertions, duration, missingAssertions ); + m_reporter->sectionEnded( testCaseSectionStats ); + } + + void invokeActiveTestCase() { + FatalConditionHandler fatalConditionHandler; // Handle signals + m_activeTestCase->invoke(); + fatalConditionHandler.reset(); + } + + private: + + ResultBuilder makeUnexpectedResultBuilder() const { + return ResultBuilder( m_lastAssertionInfo.macroName.c_str(), + m_lastAssertionInfo.lineInfo, + m_lastAssertionInfo.capturedExpression.c_str(), + m_lastAssertionInfo.resultDisposition ); + } + + void handleUnfinishedSections() { + // If sections ended prematurely due to an exception we stored their + // infos here so we can tear them down outside the unwind process. + for( std::vector<SectionEndInfo>::const_reverse_iterator it = m_unfinishedSections.rbegin(), + itEnd = m_unfinishedSections.rend(); + it != itEnd; + ++it ) + sectionEnded( *it ); + m_unfinishedSections.clear(); + } + + TestRunInfo m_runInfo; + IMutableContext& m_context; + TestCase const* m_activeTestCase; + ITracker* m_testCaseTracker; + ITracker* m_currentSectionTracker; + AssertionResult m_lastResult; + + Ptr<IConfig const> m_config; + Totals m_totals; + Ptr<IStreamingReporter> m_reporter; + std::vector<MessageInfo> m_messages; + AssertionInfo m_lastAssertionInfo; + std::vector<SectionEndInfo> m_unfinishedSections; + std::vector<ITracker*> m_activeSections; + TrackerContext m_trackerContext; + }; + + IResultCapture& getResultCapture() { + if( IResultCapture* capture = getCurrentContext().getResultCapture() ) + return *capture; + else + throw std::logic_error( "No result capture instance" ); + } + +} // end namespace Catch + +// #included from: internal/catch_version.h +#define TWOBLUECUBES_CATCH_VERSION_H_INCLUDED + +namespace Catch { + + // Versioning information + struct Version { + Version( unsigned int _majorVersion, + unsigned int _minorVersion, + unsigned int _patchNumber, + std::string const& _branchName, + unsigned int _buildNumber ); + + unsigned int const majorVersion; + unsigned int const minorVersion; + unsigned int const patchNumber; + + // buildNumber is only used if branchName is not null + std::string const branchName; + unsigned int const buildNumber; + + friend std::ostream& operator << ( std::ostream& os, Version const& version ); + + private: + void operator=( Version const& ); + }; + + extern Version libraryVersion; +} + +#include <fstream> +#include <stdlib.h> +#include <limits> + +namespace Catch { + + Ptr<IStreamingReporter> createReporter( std::string const& reporterName, Ptr<Config> const& config ) { + Ptr<IStreamingReporter> reporter = getRegistryHub().getReporterRegistry().create( reporterName, config.get() ); + if( !reporter ) { + std::ostringstream oss; + oss << "No reporter registered with name: '" << reporterName << "'"; + throw std::domain_error( oss.str() ); + } + return reporter; + } + + Ptr<IStreamingReporter> makeReporter( Ptr<Config> const& config ) { + std::vector<std::string> reporters = config->getReporterNames(); + if( reporters.empty() ) + reporters.push_back( "console" ); + + Ptr<IStreamingReporter> reporter; + for( std::vector<std::string>::const_iterator it = reporters.begin(), itEnd = reporters.end(); + it != itEnd; + ++it ) + reporter = addReporter( reporter, createReporter( *it, config ) ); + return reporter; + } + Ptr<IStreamingReporter> addListeners( Ptr<IConfig const> const& config, Ptr<IStreamingReporter> reporters ) { + IReporterRegistry::Listeners listeners = getRegistryHub().getReporterRegistry().getListeners(); + for( IReporterRegistry::Listeners::const_iterator it = listeners.begin(), itEnd = listeners.end(); + it != itEnd; + ++it ) + reporters = addReporter(reporters, (*it)->create( ReporterConfig( config ) ) ); + return reporters; + } + + Totals runTests( Ptr<Config> const& config ) { + + Ptr<IConfig const> iconfig = config.get(); + + Ptr<IStreamingReporter> reporter = makeReporter( config ); + reporter = addListeners( iconfig, reporter ); + + RunContext context( iconfig, reporter ); + + Totals totals; + + context.testGroupStarting( config->name(), 1, 1 ); + + TestSpec testSpec = config->testSpec(); + if( !testSpec.hasFilters() ) + testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "~[.]" ).testSpec(); // All not hidden tests + + std::vector<TestCase> const& allTestCases = getAllTestCasesSorted( *iconfig ); + for( std::vector<TestCase>::const_iterator it = allTestCases.begin(), itEnd = allTestCases.end(); + it != itEnd; + ++it ) { + if( !context.aborting() && matchTest( *it, testSpec, *iconfig ) ) + totals += context.runTest( *it ); + else + reporter->skipTest( *it ); + } + + context.testGroupEnded( iconfig->name(), totals, 1, 1 ); + return totals; + } + + void applyFilenamesAsTags( IConfig const& config ) { + std::vector<TestCase> const& tests = getAllTestCasesSorted( config ); + for(std::size_t i = 0; i < tests.size(); ++i ) { + TestCase& test = const_cast<TestCase&>( tests[i] ); + std::set<std::string> tags = test.tags; + + std::string filename = test.lineInfo.file; + std::string::size_type lastSlash = filename.find_last_of( "\\/" ); + if( lastSlash != std::string::npos ) + filename = filename.substr( lastSlash+1 ); + + std::string::size_type lastDot = filename.find_last_of( "." ); + if( lastDot != std::string::npos ) + filename = filename.substr( 0, lastDot ); + + tags.insert( "#" + filename ); + setTags( test, tags ); + } + } + + class Session : NonCopyable { + static bool alreadyInstantiated; + + public: + + struct OnUnusedOptions { enum DoWhat { Ignore, Fail }; }; + + Session() + : m_cli( makeCommandLineParser() ) { + if( alreadyInstantiated ) { + std::string msg = "Only one instance of Catch::Session can ever be used"; + Catch::cerr() << msg << std::endl; + throw std::logic_error( msg ); + } + alreadyInstantiated = true; + } + ~Session() { + Catch::cleanUp(); + } + + void showHelp( std::string const& processName ) { + Catch::cout() << "\nCatch v" << libraryVersion << "\n"; + + m_cli.usage( Catch::cout(), processName ); + Catch::cout() << "For more detail usage please see the project docs\n" << std::endl; + } + + int applyCommandLine( int argc, char const* const* const argv, OnUnusedOptions::DoWhat unusedOptionBehaviour = OnUnusedOptions::Fail ) { + try { + m_cli.setThrowOnUnrecognisedTokens( unusedOptionBehaviour == OnUnusedOptions::Fail ); + m_unusedTokens = m_cli.parseInto( Clara::argsToVector( argc, argv ), m_configData ); + if( m_configData.showHelp ) + showHelp( m_configData.processName ); + m_config.reset(); + } + catch( std::exception& ex ) { + { + Colour colourGuard( Colour::Red ); + Catch::cerr() + << "\nError(s) in input:\n" + << Text( ex.what(), TextAttributes().setIndent(2) ) + << "\n\n"; + } + m_cli.usage( Catch::cout(), m_configData.processName ); + return (std::numeric_limits<int>::max)(); + } + return 0; + } + + void useConfigData( ConfigData const& _configData ) { + m_configData = _configData; + m_config.reset(); + } + + int run( int argc, char const* const* const argv ) { + + int returnCode = applyCommandLine( argc, argv ); + if( returnCode == 0 ) + returnCode = run(); + return returnCode; + } + + int run() { + if( m_configData.showHelp ) + return 0; + + try + { + config(); // Force config to be constructed + + seedRng( *m_config ); + + if( m_configData.filenamesAsTags ) + applyFilenamesAsTags( *m_config ); + + // Handle list request + if( Option<std::size_t> listed = list( config() ) ) + return static_cast<int>( *listed ); + + return static_cast<int>( runTests( m_config ).assertions.failed ); + } + catch( std::exception& ex ) { + Catch::cerr() << ex.what() << std::endl; + return (std::numeric_limits<int>::max)(); + } + } + + Clara::CommandLine<ConfigData> const& cli() const { + return m_cli; + } + std::vector<Clara::Parser::Token> const& unusedTokens() const { + return m_unusedTokens; + } + ConfigData& configData() { + return m_configData; + } + Config& config() { + if( !m_config ) + m_config = new Config( m_configData ); + return *m_config; + } + private: + Clara::CommandLine<ConfigData> m_cli; + std::vector<Clara::Parser::Token> m_unusedTokens; + ConfigData m_configData; + Ptr<Config> m_config; + }; + + bool Session::alreadyInstantiated = false; + +} // end namespace Catch + +// #included from: catch_registry_hub.hpp +#define TWOBLUECUBES_CATCH_REGISTRY_HUB_HPP_INCLUDED + +// #included from: catch_test_case_registry_impl.hpp +#define TWOBLUECUBES_CATCH_TEST_CASE_REGISTRY_IMPL_HPP_INCLUDED + +#include <vector> +#include <set> +#include <sstream> +#include <algorithm> + +namespace Catch { + + struct RandomNumberGenerator { + typedef std::ptrdiff_t result_type; + + result_type operator()( result_type n ) const { return std::rand() % n; } + +#ifdef CATCH_CONFIG_CPP11_SHUFFLE + static constexpr result_type min() { return 0; } + static constexpr result_type max() { return 1000000; } + result_type operator()() const { return std::rand() % max(); } +#endif + template<typename V> + static void shuffle( V& vector ) { + RandomNumberGenerator rng; +#ifdef CATCH_CONFIG_CPP11_SHUFFLE + std::shuffle( vector.begin(), vector.end(), rng ); +#else + std::random_shuffle( vector.begin(), vector.end(), rng ); +#endif + } + }; + + inline std::vector<TestCase> sortTests( IConfig const& config, std::vector<TestCase> const& unsortedTestCases ) { + + std::vector<TestCase> sorted = unsortedTestCases; + + switch( config.runOrder() ) { + case RunTests::InLexicographicalOrder: + std::sort( sorted.begin(), sorted.end() ); + break; + case RunTests::InRandomOrder: + { + seedRng( config ); + RandomNumberGenerator::shuffle( sorted ); + } + break; + case RunTests::InDeclarationOrder: + // already in declaration order + break; + } + return sorted; + } + bool matchTest( TestCase const& testCase, TestSpec const& testSpec, IConfig const& config ) { + return testSpec.matches( testCase ) && ( config.allowThrows() || !testCase.throws() ); + } + + void enforceNoDuplicateTestCases( std::vector<TestCase> const& functions ) { + std::set<TestCase> seenFunctions; + for( std::vector<TestCase>::const_iterator it = functions.begin(), itEnd = functions.end(); + it != itEnd; + ++it ) { + std::pair<std::set<TestCase>::const_iterator, bool> prev = seenFunctions.insert( *it ); + if( !prev.second ) { + std::ostringstream ss; + + ss << Colour( Colour::Red ) + << "error: TEST_CASE( \"" << it->name << "\" ) already defined.\n" + << "\tFirst seen at " << prev.first->getTestCaseInfo().lineInfo << '\n' + << "\tRedefined at " << it->getTestCaseInfo().lineInfo << std::endl; + + throw std::runtime_error(ss.str()); + } + } + } + + std::vector<TestCase> filterTests( std::vector<TestCase> const& testCases, TestSpec const& testSpec, IConfig const& config ) { + std::vector<TestCase> filtered; + filtered.reserve( testCases.size() ); + for( std::vector<TestCase>::const_iterator it = testCases.begin(), itEnd = testCases.end(); + it != itEnd; + ++it ) + if( matchTest( *it, testSpec, config ) ) + filtered.push_back( *it ); + return filtered; + } + std::vector<TestCase> const& getAllTestCasesSorted( IConfig const& config ) { + return getRegistryHub().getTestCaseRegistry().getAllTestsSorted( config ); + } + + class TestRegistry : public ITestCaseRegistry { + public: + TestRegistry() + : m_currentSortOrder( RunTests::InDeclarationOrder ), + m_unnamedCount( 0 ) + {} + virtual ~TestRegistry(); + + virtual void registerTest( TestCase const& testCase ) { + std::string name = testCase.getTestCaseInfo().name; + if( name.empty() ) { + std::ostringstream oss; + oss << "Anonymous test case " << ++m_unnamedCount; + return registerTest( testCase.withName( oss.str() ) ); + } + m_functions.push_back( testCase ); + } + + virtual std::vector<TestCase> const& getAllTests() const { + return m_functions; + } + virtual std::vector<TestCase> const& getAllTestsSorted( IConfig const& config ) const { + if( m_sortedFunctions.empty() ) + enforceNoDuplicateTestCases( m_functions ); + + if( m_currentSortOrder != config.runOrder() || m_sortedFunctions.empty() ) { + m_sortedFunctions = sortTests( config, m_functions ); + m_currentSortOrder = config.runOrder(); + } + return m_sortedFunctions; + } + + private: + std::vector<TestCase> m_functions; + mutable RunTests::InWhatOrder m_currentSortOrder; + mutable std::vector<TestCase> m_sortedFunctions; + size_t m_unnamedCount; + std::ios_base::Init m_ostreamInit; // Forces cout/ cerr to be initialised + }; + + /////////////////////////////////////////////////////////////////////////// + + class FreeFunctionTestCase : public SharedImpl<ITestCase> { + public: + + FreeFunctionTestCase( TestFunction fun ) : m_fun( fun ) {} + + virtual void invoke() const { + m_fun(); + } + + private: + virtual ~FreeFunctionTestCase(); + + TestFunction m_fun; + }; + + inline std::string extractClassName( std::string const& classOrQualifiedMethodName ) { + std::string className = classOrQualifiedMethodName; + if( startsWith( className, '&' ) ) + { + std::size_t lastColons = className.rfind( "::" ); + std::size_t penultimateColons = className.rfind( "::", lastColons-1 ); + if( penultimateColons == std::string::npos ) + penultimateColons = 1; + className = className.substr( penultimateColons, lastColons-penultimateColons ); + } + return className; + } + + void registerTestCase + ( ITestCase* testCase, + char const* classOrQualifiedMethodName, + NameAndDesc const& nameAndDesc, + SourceLineInfo const& lineInfo ) { + + getMutableRegistryHub().registerTest + ( makeTestCase + ( testCase, + extractClassName( classOrQualifiedMethodName ), + nameAndDesc.name, + nameAndDesc.description, + lineInfo ) ); + } + void registerTestCaseFunction + ( TestFunction function, + SourceLineInfo const& lineInfo, + NameAndDesc const& nameAndDesc ) { + registerTestCase( new FreeFunctionTestCase( function ), "", nameAndDesc, lineInfo ); + } + + /////////////////////////////////////////////////////////////////////////// + + AutoReg::AutoReg + ( TestFunction function, + SourceLineInfo const& lineInfo, + NameAndDesc const& nameAndDesc ) { + registerTestCaseFunction( function, lineInfo, nameAndDesc ); + } + + AutoReg::~AutoReg() {} + +} // end namespace Catch + +// #included from: catch_reporter_registry.hpp +#define TWOBLUECUBES_CATCH_REPORTER_REGISTRY_HPP_INCLUDED + +#include <map> + +namespace Catch { + + class ReporterRegistry : public IReporterRegistry { + + public: + + virtual ~ReporterRegistry() CATCH_OVERRIDE {} + + virtual IStreamingReporter* create( std::string const& name, Ptr<IConfig const> const& config ) const CATCH_OVERRIDE { + FactoryMap::const_iterator it = m_factories.find( name ); + if( it == m_factories.end() ) + return CATCH_NULL; + return it->second->create( ReporterConfig( config ) ); + } + + void registerReporter( std::string const& name, Ptr<IReporterFactory> const& factory ) { + m_factories.insert( std::make_pair( name, factory ) ); + } + void registerListener( Ptr<IReporterFactory> const& factory ) { + m_listeners.push_back( factory ); + } + + virtual FactoryMap const& getFactories() const CATCH_OVERRIDE { + return m_factories; + } + virtual Listeners const& getListeners() const CATCH_OVERRIDE { + return m_listeners; + } + + private: + FactoryMap m_factories; + Listeners m_listeners; + }; +} + +// #included from: catch_exception_translator_registry.hpp +#define TWOBLUECUBES_CATCH_EXCEPTION_TRANSLATOR_REGISTRY_HPP_INCLUDED + +#ifdef __OBJC__ +#import "Foundation/Foundation.h" +#endif + +namespace Catch { + + class ExceptionTranslatorRegistry : public IExceptionTranslatorRegistry { + public: + ~ExceptionTranslatorRegistry() { + deleteAll( m_translators ); + } + + virtual void registerTranslator( const IExceptionTranslator* translator ) { + m_translators.push_back( translator ); + } + + virtual std::string translateActiveException() const { + try { +#ifdef __OBJC__ + // In Objective-C try objective-c exceptions first + @try { + return tryTranslators(); + } + @catch (NSException *exception) { + return Catch::toString( [exception description] ); + } +#else + return tryTranslators(); +#endif + } + catch( TestFailureException& ) { + throw; + } + catch( std::exception& ex ) { + return ex.what(); + } + catch( std::string& msg ) { + return msg; + } + catch( const char* msg ) { + return msg; + } + catch(...) { + return "Unknown exception"; + } + } + + std::string tryTranslators() const { + if( m_translators.empty() ) + throw; + else + return m_translators[0]->translate( m_translators.begin()+1, m_translators.end() ); + } + + private: + std::vector<const IExceptionTranslator*> m_translators; + }; +} + +namespace Catch { + + namespace { + + class RegistryHub : public IRegistryHub, public IMutableRegistryHub { + + RegistryHub( RegistryHub const& ); + void operator=( RegistryHub const& ); + + public: // IRegistryHub + RegistryHub() { + } + virtual IReporterRegistry const& getReporterRegistry() const CATCH_OVERRIDE { + return m_reporterRegistry; + } + virtual ITestCaseRegistry const& getTestCaseRegistry() const CATCH_OVERRIDE { + return m_testCaseRegistry; + } + virtual IExceptionTranslatorRegistry& getExceptionTranslatorRegistry() CATCH_OVERRIDE { + return m_exceptionTranslatorRegistry; + } + + public: // IMutableRegistryHub + virtual void registerReporter( std::string const& name, Ptr<IReporterFactory> const& factory ) CATCH_OVERRIDE { + m_reporterRegistry.registerReporter( name, factory ); + } + virtual void registerListener( Ptr<IReporterFactory> const& factory ) CATCH_OVERRIDE { + m_reporterRegistry.registerListener( factory ); + } + virtual void registerTest( TestCase const& testInfo ) CATCH_OVERRIDE { + m_testCaseRegistry.registerTest( testInfo ); + } + virtual void registerTranslator( const IExceptionTranslator* translator ) CATCH_OVERRIDE { + m_exceptionTranslatorRegistry.registerTranslator( translator ); + } + + private: + TestRegistry m_testCaseRegistry; + ReporterRegistry m_reporterRegistry; + ExceptionTranslatorRegistry m_exceptionTranslatorRegistry; + }; + + // Single, global, instance + inline RegistryHub*& getTheRegistryHub() { + static RegistryHub* theRegistryHub = CATCH_NULL; + if( !theRegistryHub ) + theRegistryHub = new RegistryHub(); + return theRegistryHub; + } + } + + IRegistryHub& getRegistryHub() { + return *getTheRegistryHub(); + } + IMutableRegistryHub& getMutableRegistryHub() { + return *getTheRegistryHub(); + } + void cleanUp() { + delete getTheRegistryHub(); + getTheRegistryHub() = CATCH_NULL; + cleanUpContext(); + } + std::string translateActiveException() { + return getRegistryHub().getExceptionTranslatorRegistry().translateActiveException(); + } + +} // end namespace Catch + +// #included from: catch_notimplemented_exception.hpp +#define TWOBLUECUBES_CATCH_NOTIMPLEMENTED_EXCEPTION_HPP_INCLUDED + +#include <sstream> + +namespace Catch { + + NotImplementedException::NotImplementedException( SourceLineInfo const& lineInfo ) + : m_lineInfo( lineInfo ) { + std::ostringstream oss; + oss << lineInfo << ": function "; + oss << "not implemented"; + m_what = oss.str(); + } + + const char* NotImplementedException::what() const CATCH_NOEXCEPT { + return m_what.c_str(); + } + +} // end namespace Catch + +// #included from: catch_context_impl.hpp +#define TWOBLUECUBES_CATCH_CONTEXT_IMPL_HPP_INCLUDED + +// #included from: catch_stream.hpp +#define TWOBLUECUBES_CATCH_STREAM_HPP_INCLUDED + +#include <stdexcept> +#include <cstdio> +#include <iostream> + +namespace Catch { + + template<typename WriterF, size_t bufferSize=256> + class StreamBufImpl : public StreamBufBase { + char data[bufferSize]; + WriterF m_writer; + + public: + StreamBufImpl() { + setp( data, data + sizeof(data) ); + } + + ~StreamBufImpl() CATCH_NOEXCEPT { + sync(); + } + + private: + int overflow( int c ) { + sync(); + + if( c != EOF ) { + if( pbase() == epptr() ) + m_writer( std::string( 1, static_cast<char>( c ) ) ); + else + sputc( static_cast<char>( c ) ); + } + return 0; + } + + int sync() { + if( pbase() != pptr() ) { + m_writer( std::string( pbase(), static_cast<std::string::size_type>( pptr() - pbase() ) ) ); + setp( pbase(), epptr() ); + } + return 0; + } + }; + + /////////////////////////////////////////////////////////////////////////// + + FileStream::FileStream( std::string const& filename ) { + m_ofs.open( filename.c_str() ); + if( m_ofs.fail() ) { + std::ostringstream oss; + oss << "Unable to open file: '" << filename << '\''; + throw std::domain_error( oss.str() ); + } + } + + std::ostream& FileStream::stream() const { + return m_ofs; + } + + struct OutputDebugWriter { + + void operator()( std::string const&str ) { + writeToDebugConsole( str ); + } + }; + + DebugOutStream::DebugOutStream() + : m_streamBuf( new StreamBufImpl<OutputDebugWriter>() ), + m_os( m_streamBuf.get() ) + {} + + std::ostream& DebugOutStream::stream() const { + return m_os; + } + + // Store the streambuf from cout up-front because + // cout may get redirected when running tests + CoutStream::CoutStream() + : m_os( Catch::cout().rdbuf() ) + {} + + std::ostream& CoutStream::stream() const { + return m_os; + } + +#ifndef CATCH_CONFIG_NOSTDOUT // If you #define this you must implement these functions + std::ostream& cout() { + return std::cout; + } + std::ostream& cerr() { + return std::cerr; + } +#endif +} + +namespace Catch { + + class Context : public IMutableContext { + + Context() : m_config( CATCH_NULL ), m_runner( CATCH_NULL ), m_resultCapture( CATCH_NULL ) {} + Context( Context const& ); + void operator=( Context const& ); + + public: + virtual ~Context() { + deleteAllValues( m_generatorsByTestName ); + } + + public: // IContext + virtual IResultCapture* getResultCapture() { + return m_resultCapture; + } + virtual IRunner* getRunner() { + return m_runner; + } + virtual size_t getGeneratorIndex( std::string const& fileInfo, size_t totalSize ) { + return getGeneratorsForCurrentTest() + .getGeneratorInfo( fileInfo, totalSize ) + .getCurrentIndex(); + } + virtual bool advanceGeneratorsForCurrentTest() { + IGeneratorsForTest* generators = findGeneratorsForCurrentTest(); + return generators && generators->moveNext(); + } + + virtual Ptr<IConfig const> getConfig() const { + return m_config; + } + + public: // IMutableContext + virtual void setResultCapture( IResultCapture* resultCapture ) { + m_resultCapture = resultCapture; + } + virtual void setRunner( IRunner* runner ) { + m_runner = runner; + } + virtual void setConfig( Ptr<IConfig const> const& config ) { + m_config = config; + } + + friend IMutableContext& getCurrentMutableContext(); + + private: + IGeneratorsForTest* findGeneratorsForCurrentTest() { + std::string testName = getResultCapture()->getCurrentTestName(); + + std::map<std::string, IGeneratorsForTest*>::const_iterator it = + m_generatorsByTestName.find( testName ); + return it != m_generatorsByTestName.end() + ? it->second + : CATCH_NULL; + } + + IGeneratorsForTest& getGeneratorsForCurrentTest() { + IGeneratorsForTest* generators = findGeneratorsForCurrentTest(); + if( !generators ) { + std::string testName = getResultCapture()->getCurrentTestName(); + generators = createGeneratorsForTest(); + m_generatorsByTestName.insert( std::make_pair( testName, generators ) ); + } + return *generators; + } + + private: + Ptr<IConfig const> m_config; + IRunner* m_runner; + IResultCapture* m_resultCapture; + std::map<std::string, IGeneratorsForTest*> m_generatorsByTestName; + }; + + namespace { + Context* currentContext = CATCH_NULL; + } + IMutableContext& getCurrentMutableContext() { + if( !currentContext ) + currentContext = new Context(); + return *currentContext; + } + IContext& getCurrentContext() { + return getCurrentMutableContext(); + } + + void cleanUpContext() { + delete currentContext; + currentContext = CATCH_NULL; + } +} + +// #included from: catch_console_colour_impl.hpp +#define TWOBLUECUBES_CATCH_CONSOLE_COLOUR_IMPL_HPP_INCLUDED + +namespace Catch { + namespace { + + struct IColourImpl { + virtual ~IColourImpl() {} + virtual void use( Colour::Code _colourCode ) = 0; + }; + + struct NoColourImpl : IColourImpl { + void use( Colour::Code ) {} + + static IColourImpl* instance() { + static NoColourImpl s_instance; + return &s_instance; + } + }; + + } // anon namespace +} // namespace Catch + +#if !defined( CATCH_CONFIG_COLOUR_NONE ) && !defined( CATCH_CONFIG_COLOUR_WINDOWS ) && !defined( CATCH_CONFIG_COLOUR_ANSI ) +# ifdef CATCH_PLATFORM_WINDOWS +# define CATCH_CONFIG_COLOUR_WINDOWS +# else +# define CATCH_CONFIG_COLOUR_ANSI +# endif +#endif + +#if defined ( CATCH_CONFIG_COLOUR_WINDOWS ) ///////////////////////////////////////// + +namespace Catch { +namespace { + + class Win32ColourImpl : public IColourImpl { + public: + Win32ColourImpl() : stdoutHandle( GetStdHandle(STD_OUTPUT_HANDLE) ) + { + CONSOLE_SCREEN_BUFFER_INFO csbiInfo; + GetConsoleScreenBufferInfo( stdoutHandle, &csbiInfo ); + originalForegroundAttributes = csbiInfo.wAttributes & ~( BACKGROUND_GREEN | BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_INTENSITY ); + originalBackgroundAttributes = csbiInfo.wAttributes & ~( FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_INTENSITY ); + } + + virtual void use( Colour::Code _colourCode ) { + switch( _colourCode ) { + case Colour::None: return setTextAttribute( originalForegroundAttributes ); + case Colour::White: return setTextAttribute( FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE ); + case Colour::Red: return setTextAttribute( FOREGROUND_RED ); + case Colour::Green: return setTextAttribute( FOREGROUND_GREEN ); + case Colour::Blue: return setTextAttribute( FOREGROUND_BLUE ); + case Colour::Cyan: return setTextAttribute( FOREGROUND_BLUE | FOREGROUND_GREEN ); + case Colour::Yellow: return setTextAttribute( FOREGROUND_RED | FOREGROUND_GREEN ); + case Colour::Grey: return setTextAttribute( 0 ); + + case Colour::LightGrey: return setTextAttribute( FOREGROUND_INTENSITY ); + case Colour::BrightRed: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_RED ); + case Colour::BrightGreen: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN ); + case Colour::BrightWhite: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE ); + + case Colour::Bright: throw std::logic_error( "not a colour" ); + } + } + + private: + void setTextAttribute( WORD _textAttribute ) { + SetConsoleTextAttribute( stdoutHandle, _textAttribute | originalBackgroundAttributes ); + } + HANDLE stdoutHandle; + WORD originalForegroundAttributes; + WORD originalBackgroundAttributes; + }; + + IColourImpl* platformColourInstance() { + static Win32ColourImpl s_instance; + + Ptr<IConfig const> config = getCurrentContext().getConfig(); + UseColour::YesOrNo colourMode = config + ? config->useColour() + : UseColour::Auto; + if( colourMode == UseColour::Auto ) + colourMode = !isDebuggerActive() + ? UseColour::Yes + : UseColour::No; + return colourMode == UseColour::Yes + ? &s_instance + : NoColourImpl::instance(); + } + +} // end anon namespace +} // end namespace Catch + +#elif defined( CATCH_CONFIG_COLOUR_ANSI ) ////////////////////////////////////// + +#include <unistd.h> + +namespace Catch { +namespace { + + // use POSIX/ ANSI console terminal codes + // Thanks to Adam Strzelecki for original contribution + // (http://github.com/nanoant) + // https://github.com/philsquared/Catch/pull/131 + class PosixColourImpl : public IColourImpl { + public: + virtual void use( Colour::Code _colourCode ) { + switch( _colourCode ) { + case Colour::None: + case Colour::White: return setColour( "[0m" ); + case Colour::Red: return setColour( "[0;31m" ); + case Colour::Green: return setColour( "[0;32m" ); + case Colour::Blue: return setColour( "[0;34m" ); + case Colour::Cyan: return setColour( "[0;36m" ); + case Colour::Yellow: return setColour( "[0;33m" ); + case Colour::Grey: return setColour( "[1;30m" ); + + case Colour::LightGrey: return setColour( "[0;37m" ); + case Colour::BrightRed: return setColour( "[1;31m" ); + case Colour::BrightGreen: return setColour( "[1;32m" ); + case Colour::BrightWhite: return setColour( "[1;37m" ); + + case Colour::Bright: throw std::logic_error( "not a colour" ); + } + } + static IColourImpl* instance() { + static PosixColourImpl s_instance; + return &s_instance; + } + + private: + void setColour( const char* _escapeCode ) { + Catch::cout() << '\033' << _escapeCode; + } + }; + + IColourImpl* platformColourInstance() { + Ptr<IConfig const> config = getCurrentContext().getConfig(); + UseColour::YesOrNo colourMode = config + ? config->useColour() + : UseColour::Auto; + if( colourMode == UseColour::Auto ) + colourMode = (!isDebuggerActive() && isatty(STDOUT_FILENO) ) + ? UseColour::Yes + : UseColour::No; + return colourMode == UseColour::Yes + ? PosixColourImpl::instance() + : NoColourImpl::instance(); + } + +} // end anon namespace +} // end namespace Catch + +#else // not Windows or ANSI /////////////////////////////////////////////// + +namespace Catch { + + static IColourImpl* platformColourInstance() { return NoColourImpl::instance(); } + +} // end namespace Catch + +#endif // Windows/ ANSI/ None + +namespace Catch { + + Colour::Colour( Code _colourCode ) : m_moved( false ) { use( _colourCode ); } + Colour::Colour( Colour const& _other ) : m_moved( false ) { const_cast<Colour&>( _other ).m_moved = true; } + Colour::~Colour(){ if( !m_moved ) use( None ); } + + void Colour::use( Code _colourCode ) { + static IColourImpl* impl = platformColourInstance(); + impl->use( _colourCode ); + } + +} // end namespace Catch + +// #included from: catch_generators_impl.hpp +#define TWOBLUECUBES_CATCH_GENERATORS_IMPL_HPP_INCLUDED + +#include <vector> +#include <string> +#include <map> + +namespace Catch { + + struct GeneratorInfo : IGeneratorInfo { + + GeneratorInfo( std::size_t size ) + : m_size( size ), + m_currentIndex( 0 ) + {} + + bool moveNext() { + if( ++m_currentIndex == m_size ) { + m_currentIndex = 0; + return false; + } + return true; + } + + std::size_t getCurrentIndex() const { + return m_currentIndex; + } + + std::size_t m_size; + std::size_t m_currentIndex; + }; + + /////////////////////////////////////////////////////////////////////////// + + class GeneratorsForTest : public IGeneratorsForTest { + + public: + ~GeneratorsForTest() { + deleteAll( m_generatorsInOrder ); + } + + IGeneratorInfo& getGeneratorInfo( std::string const& fileInfo, std::size_t size ) { + std::map<std::string, IGeneratorInfo*>::const_iterator it = m_generatorsByName.find( fileInfo ); + if( it == m_generatorsByName.end() ) { + IGeneratorInfo* info = new GeneratorInfo( size ); + m_generatorsByName.insert( std::make_pair( fileInfo, info ) ); + m_generatorsInOrder.push_back( info ); + return *info; + } + return *it->second; + } + + bool moveNext() { + std::vector<IGeneratorInfo*>::const_iterator it = m_generatorsInOrder.begin(); + std::vector<IGeneratorInfo*>::const_iterator itEnd = m_generatorsInOrder.end(); + for(; it != itEnd; ++it ) { + if( (*it)->moveNext() ) + return true; + } + return false; + } + + private: + std::map<std::string, IGeneratorInfo*> m_generatorsByName; + std::vector<IGeneratorInfo*> m_generatorsInOrder; + }; + + IGeneratorsForTest* createGeneratorsForTest() + { + return new GeneratorsForTest(); + } + +} // end namespace Catch + +// #included from: catch_assertionresult.hpp +#define TWOBLUECUBES_CATCH_ASSERTIONRESULT_HPP_INCLUDED + +namespace Catch { + + AssertionInfo::AssertionInfo( std::string const& _macroName, + SourceLineInfo const& _lineInfo, + std::string const& _capturedExpression, + ResultDisposition::Flags _resultDisposition ) + : macroName( _macroName ), + lineInfo( _lineInfo ), + capturedExpression( _capturedExpression ), + resultDisposition( _resultDisposition ) + {} + + AssertionResult::AssertionResult() {} + + AssertionResult::AssertionResult( AssertionInfo const& info, AssertionResultData const& data ) + : m_info( info ), + m_resultData( data ) + {} + + AssertionResult::~AssertionResult() {} + + // Result was a success + bool AssertionResult::succeeded() const { + return Catch::isOk( m_resultData.resultType ); + } + + // Result was a success, or failure is suppressed + bool AssertionResult::isOk() const { + return Catch::isOk( m_resultData.resultType ) || shouldSuppressFailure( m_info.resultDisposition ); + } + + ResultWas::OfType AssertionResult::getResultType() const { + return m_resultData.resultType; + } + + bool AssertionResult::hasExpression() const { + return !m_info.capturedExpression.empty(); + } + + bool AssertionResult::hasMessage() const { + return !m_resultData.message.empty(); + } + + std::string AssertionResult::getExpression() const { + if( isFalseTest( m_info.resultDisposition ) ) + return '!' + m_info.capturedExpression; + else + return m_info.capturedExpression; + } + std::string AssertionResult::getExpressionInMacro() const { + if( m_info.macroName.empty() ) + return m_info.capturedExpression; + else + return m_info.macroName + "( " + m_info.capturedExpression + " )"; + } + + bool AssertionResult::hasExpandedExpression() const { + return hasExpression() && getExpandedExpression() != getExpression(); + } + + std::string AssertionResult::getExpandedExpression() const { + return m_resultData.reconstructExpression(); + } + + std::string AssertionResult::getMessage() const { + return m_resultData.message; + } + SourceLineInfo AssertionResult::getSourceInfo() const { + return m_info.lineInfo; + } + + std::string AssertionResult::getTestMacroName() const { + return m_info.macroName; + } + + void AssertionResult::discardDecomposedExpression() const { + m_resultData.decomposedExpression = CATCH_NULL; + } + + void AssertionResult::expandDecomposedExpression() const { + m_resultData.reconstructExpression(); + } + +} // end namespace Catch + +// #included from: catch_test_case_info.hpp +#define TWOBLUECUBES_CATCH_TEST_CASE_INFO_HPP_INCLUDED + +#include <cctype> + +namespace Catch { + + inline TestCaseInfo::SpecialProperties parseSpecialTag( std::string const& tag ) { + if( startsWith( tag, '.' ) || + tag == "hide" || + tag == "!hide" ) + return TestCaseInfo::IsHidden; + else if( tag == "!throws" ) + return TestCaseInfo::Throws; + else if( tag == "!shouldfail" ) + return TestCaseInfo::ShouldFail; + else if( tag == "!mayfail" ) + return TestCaseInfo::MayFail; + else if( tag == "!nonportable" ) + return TestCaseInfo::NonPortable; + else + return TestCaseInfo::None; + } + inline bool isReservedTag( std::string const& tag ) { + return parseSpecialTag( tag ) == TestCaseInfo::None && tag.size() > 0 && !std::isalnum( tag[0] ); + } + inline void enforceNotReservedTag( std::string const& tag, SourceLineInfo const& _lineInfo ) { + if( isReservedTag( tag ) ) { + { + Colour colourGuard( Colour::Red ); + Catch::cerr() + << "Tag name [" << tag << "] not allowed.\n" + << "Tag names starting with non alpha-numeric characters are reserved\n"; + } + { + Colour colourGuard( Colour::FileName ); + Catch::cerr() << _lineInfo << std::endl; + } + exit(1); + } + } + + TestCase makeTestCase( ITestCase* _testCase, + std::string const& _className, + std::string const& _name, + std::string const& _descOrTags, + SourceLineInfo const& _lineInfo ) + { + bool isHidden( startsWith( _name, "./" ) ); // Legacy support + + // Parse out tags + std::set<std::string> tags; + std::string desc, tag; + bool inTag = false; + for( std::size_t i = 0; i < _descOrTags.size(); ++i ) { + char c = _descOrTags[i]; + if( !inTag ) { + if( c == '[' ) + inTag = true; + else + desc += c; + } + else { + if( c == ']' ) { + TestCaseInfo::SpecialProperties prop = parseSpecialTag( tag ); + if( prop == TestCaseInfo::IsHidden ) + isHidden = true; + else if( prop == TestCaseInfo::None ) + enforceNotReservedTag( tag, _lineInfo ); + + tags.insert( tag ); + tag.clear(); + inTag = false; + } + else + tag += c; + } + } + if( isHidden ) { + tags.insert( "hide" ); + tags.insert( "." ); + } + + TestCaseInfo info( _name, _className, desc, tags, _lineInfo ); + return TestCase( _testCase, info ); + } + + void setTags( TestCaseInfo& testCaseInfo, std::set<std::string> const& tags ) + { + testCaseInfo.tags = tags; + testCaseInfo.lcaseTags.clear(); + + std::ostringstream oss; + for( std::set<std::string>::const_iterator it = tags.begin(), itEnd = tags.end(); it != itEnd; ++it ) { + oss << '[' << *it << ']'; + std::string lcaseTag = toLower( *it ); + testCaseInfo.properties = static_cast<TestCaseInfo::SpecialProperties>( testCaseInfo.properties | parseSpecialTag( lcaseTag ) ); + testCaseInfo.lcaseTags.insert( lcaseTag ); + } + testCaseInfo.tagsAsString = oss.str(); + } + + TestCaseInfo::TestCaseInfo( std::string const& _name, + std::string const& _className, + std::string const& _description, + std::set<std::string> const& _tags, + SourceLineInfo const& _lineInfo ) + : name( _name ), + className( _className ), + description( _description ), + lineInfo( _lineInfo ), + properties( None ) + { + setTags( *this, _tags ); + } + + TestCaseInfo::TestCaseInfo( TestCaseInfo const& other ) + : name( other.name ), + className( other.className ), + description( other.description ), + tags( other.tags ), + lcaseTags( other.lcaseTags ), + tagsAsString( other.tagsAsString ), + lineInfo( other.lineInfo ), + properties( other.properties ) + {} + + bool TestCaseInfo::isHidden() const { + return ( properties & IsHidden ) != 0; + } + bool TestCaseInfo::throws() const { + return ( properties & Throws ) != 0; + } + bool TestCaseInfo::okToFail() const { + return ( properties & (ShouldFail | MayFail ) ) != 0; + } + bool TestCaseInfo::expectedToFail() const { + return ( properties & (ShouldFail ) ) != 0; + } + + TestCase::TestCase( ITestCase* testCase, TestCaseInfo const& info ) : TestCaseInfo( info ), test( testCase ) {} + + TestCase::TestCase( TestCase const& other ) + : TestCaseInfo( other ), + test( other.test ) + {} + + TestCase TestCase::withName( std::string const& _newName ) const { + TestCase other( *this ); + other.name = _newName; + return other; + } + + void TestCase::swap( TestCase& other ) { + test.swap( other.test ); + name.swap( other.name ); + className.swap( other.className ); + description.swap( other.description ); + tags.swap( other.tags ); + lcaseTags.swap( other.lcaseTags ); + tagsAsString.swap( other.tagsAsString ); + std::swap( TestCaseInfo::properties, static_cast<TestCaseInfo&>( other ).properties ); + std::swap( lineInfo, other.lineInfo ); + } + + void TestCase::invoke() const { + test->invoke(); + } + + bool TestCase::operator == ( TestCase const& other ) const { + return test.get() == other.test.get() && + name == other.name && + className == other.className; + } + + bool TestCase::operator < ( TestCase const& other ) const { + return name < other.name; + } + TestCase& TestCase::operator = ( TestCase const& other ) { + TestCase temp( other ); + swap( temp ); + return *this; + } + + TestCaseInfo const& TestCase::getTestCaseInfo() const + { + return *this; + } + +} // end namespace Catch + +// #included from: catch_version.hpp +#define TWOBLUECUBES_CATCH_VERSION_HPP_INCLUDED + +namespace Catch { + + Version::Version + ( unsigned int _majorVersion, + unsigned int _minorVersion, + unsigned int _patchNumber, + std::string const& _branchName, + unsigned int _buildNumber ) + : majorVersion( _majorVersion ), + minorVersion( _minorVersion ), + patchNumber( _patchNumber ), + branchName( _branchName ), + buildNumber( _buildNumber ) + {} + + std::ostream& operator << ( std::ostream& os, Version const& version ) { + os << version.majorVersion << '.' + << version.minorVersion << '.' + << version.patchNumber; + + if( !version.branchName.empty() ) { + os << '-' << version.branchName + << '.' << version.buildNumber; + } + return os; + } + + Version libraryVersion( 1, 7, 2, "", 0 ); + +} + +// #included from: catch_message.hpp +#define TWOBLUECUBES_CATCH_MESSAGE_HPP_INCLUDED + +namespace Catch { + + MessageInfo::MessageInfo( std::string const& _macroName, + SourceLineInfo const& _lineInfo, + ResultWas::OfType _type ) + : macroName( _macroName ), + lineInfo( _lineInfo ), + type( _type ), + sequence( ++globalCount ) + {} + + // This may need protecting if threading support is added + unsigned int MessageInfo::globalCount = 0; + + //////////////////////////////////////////////////////////////////////////// + + ScopedMessage::ScopedMessage( MessageBuilder const& builder ) + : m_info( builder.m_info ) + { + m_info.message = builder.m_stream.str(); + getResultCapture().pushScopedMessage( m_info ); + } + ScopedMessage::ScopedMessage( ScopedMessage const& other ) + : m_info( other.m_info ) + {} + + ScopedMessage::~ScopedMessage() { + getResultCapture().popScopedMessage( m_info ); + } + +} // end namespace Catch + +// #included from: catch_legacy_reporter_adapter.hpp +#define TWOBLUECUBES_CATCH_LEGACY_REPORTER_ADAPTER_HPP_INCLUDED + +// #included from: catch_legacy_reporter_adapter.h +#define TWOBLUECUBES_CATCH_LEGACY_REPORTER_ADAPTER_H_INCLUDED + +namespace Catch +{ + // Deprecated + struct IReporter : IShared { + virtual ~IReporter(); + + virtual bool shouldRedirectStdout() const = 0; + + virtual void StartTesting() = 0; + virtual void EndTesting( Totals const& totals ) = 0; + virtual void StartGroup( std::string const& groupName ) = 0; + virtual void EndGroup( std::string const& groupName, Totals const& totals ) = 0; + virtual void StartTestCase( TestCaseInfo const& testInfo ) = 0; + virtual void EndTestCase( TestCaseInfo const& testInfo, Totals const& totals, std::string const& stdOut, std::string const& stdErr ) = 0; + virtual void StartSection( std::string const& sectionName, std::string const& description ) = 0; + virtual void EndSection( std::string const& sectionName, Counts const& assertions ) = 0; + virtual void NoAssertionsInSection( std::string const& sectionName ) = 0; + virtual void NoAssertionsInTestCase( std::string const& testName ) = 0; + virtual void Aborted() = 0; + virtual void Result( AssertionResult const& result ) = 0; + }; + + class LegacyReporterAdapter : public SharedImpl<IStreamingReporter> + { + public: + LegacyReporterAdapter( Ptr<IReporter> const& legacyReporter ); + virtual ~LegacyReporterAdapter(); + + virtual ReporterPreferences getPreferences() const; + virtual void noMatchingTestCases( std::string const& ); + virtual void testRunStarting( TestRunInfo const& ); + virtual void testGroupStarting( GroupInfo const& groupInfo ); + virtual void testCaseStarting( TestCaseInfo const& testInfo ); + virtual void sectionStarting( SectionInfo const& sectionInfo ); + virtual void assertionStarting( AssertionInfo const& ); + virtual bool assertionEnded( AssertionStats const& assertionStats ); + virtual void sectionEnded( SectionStats const& sectionStats ); + virtual void testCaseEnded( TestCaseStats const& testCaseStats ); + virtual void testGroupEnded( TestGroupStats const& testGroupStats ); + virtual void testRunEnded( TestRunStats const& testRunStats ); + virtual void skipTest( TestCaseInfo const& ); + + private: + Ptr<IReporter> m_legacyReporter; + }; +} + +namespace Catch +{ + LegacyReporterAdapter::LegacyReporterAdapter( Ptr<IReporter> const& legacyReporter ) + : m_legacyReporter( legacyReporter ) + {} + LegacyReporterAdapter::~LegacyReporterAdapter() {} + + ReporterPreferences LegacyReporterAdapter::getPreferences() const { + ReporterPreferences prefs; + prefs.shouldRedirectStdOut = m_legacyReporter->shouldRedirectStdout(); + return prefs; + } + + void LegacyReporterAdapter::noMatchingTestCases( std::string const& ) {} + void LegacyReporterAdapter::testRunStarting( TestRunInfo const& ) { + m_legacyReporter->StartTesting(); + } + void LegacyReporterAdapter::testGroupStarting( GroupInfo const& groupInfo ) { + m_legacyReporter->StartGroup( groupInfo.name ); + } + void LegacyReporterAdapter::testCaseStarting( TestCaseInfo const& testInfo ) { + m_legacyReporter->StartTestCase( testInfo ); + } + void LegacyReporterAdapter::sectionStarting( SectionInfo const& sectionInfo ) { + m_legacyReporter->StartSection( sectionInfo.name, sectionInfo.description ); + } + void LegacyReporterAdapter::assertionStarting( AssertionInfo const& ) { + // Not on legacy interface + } + + bool LegacyReporterAdapter::assertionEnded( AssertionStats const& assertionStats ) { + if( assertionStats.assertionResult.getResultType() != ResultWas::Ok ) { + for( std::vector<MessageInfo>::const_iterator it = assertionStats.infoMessages.begin(), itEnd = assertionStats.infoMessages.end(); + it != itEnd; + ++it ) { + if( it->type == ResultWas::Info ) { + ResultBuilder rb( it->macroName.c_str(), it->lineInfo, "", ResultDisposition::Normal ); + rb << it->message; + rb.setResultType( ResultWas::Info ); + AssertionResult result = rb.build(); + m_legacyReporter->Result( result ); + } + } + } + m_legacyReporter->Result( assertionStats.assertionResult ); + return true; + } + void LegacyReporterAdapter::sectionEnded( SectionStats const& sectionStats ) { + if( sectionStats.missingAssertions ) + m_legacyReporter->NoAssertionsInSection( sectionStats.sectionInfo.name ); + m_legacyReporter->EndSection( sectionStats.sectionInfo.name, sectionStats.assertions ); + } + void LegacyReporterAdapter::testCaseEnded( TestCaseStats const& testCaseStats ) { + m_legacyReporter->EndTestCase + ( testCaseStats.testInfo, + testCaseStats.totals, + testCaseStats.stdOut, + testCaseStats.stdErr ); + } + void LegacyReporterAdapter::testGroupEnded( TestGroupStats const& testGroupStats ) { + if( testGroupStats.aborting ) + m_legacyReporter->Aborted(); + m_legacyReporter->EndGroup( testGroupStats.groupInfo.name, testGroupStats.totals ); + } + void LegacyReporterAdapter::testRunEnded( TestRunStats const& testRunStats ) { + m_legacyReporter->EndTesting( testRunStats.totals ); + } + void LegacyReporterAdapter::skipTest( TestCaseInfo const& ) { + } +} + +// #included from: catch_timer.hpp + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++11-long-long" +#endif + +#ifdef CATCH_PLATFORM_WINDOWS +#else +#include <sys/time.h> +#endif + +namespace Catch { + + namespace { +#ifdef CATCH_PLATFORM_WINDOWS + uint64_t getCurrentTicks() { + static uint64_t hz=0, hzo=0; + if (!hz) { + QueryPerformanceFrequency( reinterpret_cast<LARGE_INTEGER*>( &hz ) ); + QueryPerformanceCounter( reinterpret_cast<LARGE_INTEGER*>( &hzo ) ); + } + uint64_t t; + QueryPerformanceCounter( reinterpret_cast<LARGE_INTEGER*>( &t ) ); + return ((t-hzo)*1000000)/hz; + } +#else + uint64_t getCurrentTicks() { + timeval t; + gettimeofday(&t,CATCH_NULL); + return static_cast<uint64_t>( t.tv_sec ) * 1000000ull + static_cast<uint64_t>( t.tv_usec ); + } +#endif + } + + void Timer::start() { + m_ticks = getCurrentTicks(); + } + unsigned int Timer::getElapsedMicroseconds() const { + return static_cast<unsigned int>(getCurrentTicks() - m_ticks); + } + unsigned int Timer::getElapsedMilliseconds() const { + return static_cast<unsigned int>(getElapsedMicroseconds()/1000); + } + double Timer::getElapsedSeconds() const { + return getElapsedMicroseconds()/1000000.0; + } + +} // namespace Catch + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif +// #included from: catch_common.hpp +#define TWOBLUECUBES_CATCH_COMMON_HPP_INCLUDED + +#include <cstring> +#include <cctype> + +namespace Catch { + + bool startsWith( std::string const& s, std::string const& prefix ) { + return s.size() >= prefix.size() && std::equal(prefix.begin(), prefix.end(), s.begin()); + } + bool startsWith( std::string const& s, char prefix ) { + return !s.empty() && s[0] == prefix; + } + bool endsWith( std::string const& s, std::string const& suffix ) { + return s.size() >= suffix.size() && std::equal(suffix.rbegin(), suffix.rend(), s.rbegin()); + } + bool endsWith( std::string const& s, char suffix ) { + return !s.empty() && s[s.size()-1] == suffix; + } + bool contains( std::string const& s, std::string const& infix ) { + return s.find( infix ) != std::string::npos; + } + char toLowerCh(char c) { + return static_cast<char>( std::tolower( c ) ); + } + void toLowerInPlace( std::string& s ) { + std::transform( s.begin(), s.end(), s.begin(), toLowerCh ); + } + std::string toLower( std::string const& s ) { + std::string lc = s; + toLowerInPlace( lc ); + return lc; + } + std::string trim( std::string const& str ) { + static char const* whitespaceChars = "\n\r\t "; + std::string::size_type start = str.find_first_not_of( whitespaceChars ); + std::string::size_type end = str.find_last_not_of( whitespaceChars ); + + return start != std::string::npos ? str.substr( start, 1+end-start ) : std::string(); + } + + bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ) { + bool replaced = false; + std::size_t i = str.find( replaceThis ); + while( i != std::string::npos ) { + replaced = true; + str = str.substr( 0, i ) + withThis + str.substr( i+replaceThis.size() ); + if( i < str.size()-withThis.size() ) + i = str.find( replaceThis, i+withThis.size() ); + else + i = std::string::npos; + } + return replaced; + } + + pluralise::pluralise( std::size_t count, std::string const& label ) + : m_count( count ), + m_label( label ) + {} + + std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser ) { + os << pluraliser.m_count << ' ' << pluraliser.m_label; + if( pluraliser.m_count != 1 ) + os << 's'; + return os; + } + + SourceLineInfo::SourceLineInfo() : file(""), line( 0 ){} + SourceLineInfo::SourceLineInfo( char const* _file, std::size_t _line ) + : file( _file ), + line( _line ) + {} + bool SourceLineInfo::empty() const { + return file[0] == '\0'; + } + bool SourceLineInfo::operator == ( SourceLineInfo const& other ) const { + return line == other.line && (file == other.file || std::strcmp(file, other.file) == 0); + } + bool SourceLineInfo::operator < ( SourceLineInfo const& other ) const { + return line < other.line || ( line == other.line && (std::strcmp(file, other.file) < 0)); + } + + void seedRng( IConfig const& config ) { + if( config.rngSeed() != 0 ) + std::srand( config.rngSeed() ); + } + unsigned int rngSeed() { + return getCurrentContext().getConfig()->rngSeed(); + } + + std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ) { +#ifndef __GNUG__ + os << info.file << '(' << info.line << ')'; +#else + os << info.file << ':' << info.line; +#endif + return os; + } + + void throwLogicError( std::string const& message, SourceLineInfo const& locationInfo ) { + std::ostringstream oss; + oss << locationInfo << ": Internal Catch error: '" << message << '\''; + if( alwaysTrue() ) + throw std::logic_error( oss.str() ); + } +} + +// #included from: catch_section.hpp +#define TWOBLUECUBES_CATCH_SECTION_HPP_INCLUDED + +namespace Catch { + + SectionInfo::SectionInfo + ( SourceLineInfo const& _lineInfo, + std::string const& _name, + std::string const& _description ) + : name( _name ), + description( _description ), + lineInfo( _lineInfo ) + {} + + Section::Section( SectionInfo const& info ) + : m_info( info ), + m_sectionIncluded( getResultCapture().sectionStarted( m_info, m_assertions ) ) + { + m_timer.start(); + } + + Section::~Section() { + if( m_sectionIncluded ) { + SectionEndInfo endInfo( m_info, m_assertions, m_timer.getElapsedSeconds() ); + if( std::uncaught_exception() ) + getResultCapture().sectionEndedEarly( endInfo ); + else + getResultCapture().sectionEnded( endInfo ); + } + } + + // This indicates whether the section should be executed or not + Section::operator bool() const { + return m_sectionIncluded; + } + +} // end namespace Catch + +// #included from: catch_debugger.hpp +#define TWOBLUECUBES_CATCH_DEBUGGER_HPP_INCLUDED + +#ifdef CATCH_PLATFORM_MAC + + #include <assert.h> + #include <stdbool.h> + #include <sys/types.h> + #include <unistd.h> + #include <sys/sysctl.h> + + namespace Catch{ + + // The following function is taken directly from the following technical note: + // http://developer.apple.com/library/mac/#qa/qa2004/qa1361.html + + // Returns true if the current process is being debugged (either + // running under the debugger or has a debugger attached post facto). + bool isDebuggerActive(){ + + int mib[4]; + struct kinfo_proc info; + size_t size; + + // Initialize the flags so that, if sysctl fails for some bizarre + // reason, we get a predictable result. + + info.kp_proc.p_flag = 0; + + // Initialize mib, which tells sysctl the info we want, in this case + // we're looking for information about a specific process ID. + + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PID; + mib[3] = getpid(); + + // Call sysctl. + + size = sizeof(info); + if( sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, CATCH_NULL, 0) != 0 ) { + Catch::cerr() << "\n** Call to sysctl failed - unable to determine if debugger is active **\n" << std::endl; + return false; + } + + // We're being debugged if the P_TRACED flag is set. + + return ( (info.kp_proc.p_flag & P_TRACED) != 0 ); + } + } // namespace Catch + +#elif defined(CATCH_PLATFORM_LINUX) + #include <fstream> + #include <string> + + namespace Catch{ + // The standard POSIX way of detecting a debugger is to attempt to + // ptrace() the process, but this needs to be done from a child and not + // this process itself to still allow attaching to this process later + // if wanted, so is rather heavy. Under Linux we have the PID of the + // "debugger" (which doesn't need to be gdb, of course, it could also + // be strace, for example) in /proc/$PID/status, so just get it from + // there instead. + bool isDebuggerActive(){ + std::ifstream in("/proc/self/status"); + for( std::string line; std::getline(in, line); ) { + static const int PREFIX_LEN = 11; + if( line.compare(0, PREFIX_LEN, "TracerPid:\t") == 0 ) { + // We're traced if the PID is not 0 and no other PID starts + // with 0 digit, so it's enough to check for just a single + // character. + return line.length() > PREFIX_LEN && line[PREFIX_LEN] != '0'; + } + } + + return false; + } + } // namespace Catch +#elif defined(_MSC_VER) + extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent(); + namespace Catch { + bool isDebuggerActive() { + return IsDebuggerPresent() != 0; + } + } +#elif defined(__MINGW32__) + extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent(); + namespace Catch { + bool isDebuggerActive() { + return IsDebuggerPresent() != 0; + } + } +#else + namespace Catch { + inline bool isDebuggerActive() { return false; } + } +#endif // Platform + +#ifdef CATCH_PLATFORM_WINDOWS + + namespace Catch { + void writeToDebugConsole( std::string const& text ) { + ::OutputDebugStringA( text.c_str() ); + } + } +#else + namespace Catch { + void writeToDebugConsole( std::string const& text ) { + // !TBD: Need a version for Mac/ XCode and other IDEs + Catch::cout() << text; + } + } +#endif // Platform + +// #included from: catch_tostring.hpp +#define TWOBLUECUBES_CATCH_TOSTRING_HPP_INCLUDED + +namespace Catch { + +namespace Detail { + + const std::string unprintableString = "{?}"; + + namespace { + const int hexThreshold = 255; + + struct Endianness { + enum Arch { Big, Little }; + + static Arch which() { + union _{ + int asInt; + char asChar[sizeof (int)]; + } u; + + u.asInt = 1; + return ( u.asChar[sizeof(int)-1] == 1 ) ? Big : Little; + } + }; + } + + std::string rawMemoryToString( const void *object, std::size_t size ) + { + // Reverse order for little endian architectures + int i = 0, end = static_cast<int>( size ), inc = 1; + if( Endianness::which() == Endianness::Little ) { + i = end-1; + end = inc = -1; + } + + unsigned char const *bytes = static_cast<unsigned char const *>(object); + std::ostringstream os; + os << "0x" << std::setfill('0') << std::hex; + for( ; i != end; i += inc ) + os << std::setw(2) << static_cast<unsigned>(bytes[i]); + return os.str(); + } +} + +std::string toString( std::string const& value ) { + std::string s = value; + if( getCurrentContext().getConfig()->showInvisibles() ) { + for(size_t i = 0; i < s.size(); ++i ) { + std::string subs; + switch( s[i] ) { + case '\n': subs = "\\n"; break; + case '\t': subs = "\\t"; break; + default: break; + } + if( !subs.empty() ) { + s = s.substr( 0, i ) + subs + s.substr( i+1 ); + ++i; + } + } + } + return '"' + s + '"'; +} +std::string toString( std::wstring const& value ) { + + std::string s; + s.reserve( value.size() ); + for(size_t i = 0; i < value.size(); ++i ) + s += value[i] <= 0xff ? static_cast<char>( value[i] ) : '?'; + return Catch::toString( s ); +} + +std::string toString( const char* const value ) { + return value ? Catch::toString( std::string( value ) ) : std::string( "{null string}" ); +} + +std::string toString( char* const value ) { + return Catch::toString( static_cast<const char*>( value ) ); +} + +std::string toString( const wchar_t* const value ) +{ + return value ? Catch::toString( std::wstring(value) ) : std::string( "{null string}" ); +} + +std::string toString( wchar_t* const value ) +{ + return Catch::toString( static_cast<const wchar_t*>( value ) ); +} + +std::string toString( int value ) { + std::ostringstream oss; + oss << value; + if( value > Detail::hexThreshold ) + oss << " (0x" << std::hex << value << ')'; + return oss.str(); +} + +std::string toString( unsigned long value ) { + std::ostringstream oss; + oss << value; + if( value > Detail::hexThreshold ) + oss << " (0x" << std::hex << value << ')'; + return oss.str(); +} + +std::string toString( unsigned int value ) { + return Catch::toString( static_cast<unsigned long>( value ) ); +} + +template<typename T> +std::string fpToString( T value, int precision ) { + std::ostringstream oss; + oss << std::setprecision( precision ) + << std::fixed + << value; + std::string d = oss.str(); + std::size_t i = d.find_last_not_of( '0' ); + if( i != std::string::npos && i != d.size()-1 ) { + if( d[i] == '.' ) + i++; + d = d.substr( 0, i+1 ); + } + return d; +} + +std::string toString( const double value ) { + return fpToString( value, 10 ); +} +std::string toString( const float value ) { + return fpToString( value, 5 ) + 'f'; +} + +std::string toString( bool value ) { + return value ? "true" : "false"; +} + +std::string toString( char value ) { + if ( value == '\r' ) + return "'\\r'"; + if ( value == '\f' ) + return "'\\f'"; + if ( value == '\n' ) + return "'\\n'"; + if ( value == '\t' ) + return "'\\t'"; + if ( '\0' <= value && value < ' ' ) + return toString( static_cast<unsigned int>( value ) ); + char chstr[] = "' '"; + chstr[1] = value; + return chstr; +} + +std::string toString( signed char value ) { + return toString( static_cast<char>( value ) ); +} + +std::string toString( unsigned char value ) { + return toString( static_cast<char>( value ) ); +} + +#ifdef CATCH_CONFIG_CPP11_LONG_LONG +std::string toString( long long value ) { + std::ostringstream oss; + oss << value; + if( value > Detail::hexThreshold ) + oss << " (0x" << std::hex << value << ')'; + return oss.str(); +} +std::string toString( unsigned long long value ) { + std::ostringstream oss; + oss << value; + if( value > Detail::hexThreshold ) + oss << " (0x" << std::hex << value << ')'; + return oss.str(); +} +#endif + +#ifdef CATCH_CONFIG_CPP11_NULLPTR +std::string toString( std::nullptr_t ) { + return "nullptr"; +} +#endif + +#ifdef __OBJC__ + std::string toString( NSString const * const& nsstring ) { + if( !nsstring ) + return "nil"; + return "@" + toString([nsstring UTF8String]); + } + std::string toString( NSString * CATCH_ARC_STRONG const& nsstring ) { + if( !nsstring ) + return "nil"; + return "@" + toString([nsstring UTF8String]); + } + std::string toString( NSObject* const& nsObject ) { + return toString( [nsObject description] ); + } +#endif + +} // end namespace Catch + +// #included from: catch_result_builder.hpp +#define TWOBLUECUBES_CATCH_RESULT_BUILDER_HPP_INCLUDED + +namespace Catch { + + std::string capturedExpressionWithSecondArgument( std::string const& capturedExpression, std::string const& secondArg ) { + return secondArg.empty() || secondArg == "\"\"" + ? capturedExpression + : capturedExpression + ", " + secondArg; + } + ResultBuilder::ResultBuilder( char const* macroName, + SourceLineInfo const& lineInfo, + char const* capturedExpression, + ResultDisposition::Flags resultDisposition, + char const* secondArg ) + : m_assertionInfo( macroName, lineInfo, capturedExpressionWithSecondArgument( capturedExpression, secondArg ), resultDisposition ), + m_shouldDebugBreak( false ), + m_shouldThrow( false ) + {} + + ResultBuilder& ResultBuilder::setResultType( ResultWas::OfType result ) { + m_data.resultType = result; + return *this; + } + ResultBuilder& ResultBuilder::setResultType( bool result ) { + m_data.resultType = result ? ResultWas::Ok : ResultWas::ExpressionFailed; + return *this; + } + + void ResultBuilder::endExpression( DecomposedExpression const& expr ) { + AssertionResult result = build( expr ); + handleResult( result ); + } + + void ResultBuilder::useActiveException( ResultDisposition::Flags resultDisposition ) { + m_assertionInfo.resultDisposition = resultDisposition; + m_stream.oss << Catch::translateActiveException(); + captureResult( ResultWas::ThrewException ); + } + + void ResultBuilder::captureResult( ResultWas::OfType resultType ) { + setResultType( resultType ); + captureExpression(); + } + + void ResultBuilder::captureExpectedException( std::string const& expectedMessage ) { + if( expectedMessage.empty() ) + captureExpectedException( Matchers::Impl::Generic::AllOf<std::string>() ); + else + captureExpectedException( Matchers::Equals( expectedMessage ) ); + } + + void ResultBuilder::captureExpectedException( Matchers::Impl::Matcher<std::string> const& matcher ) { + + assert( !isFalseTest( m_assertionInfo.resultDisposition ) ); + AssertionResultData data = m_data; + data.resultType = ResultWas::Ok; + data.reconstructedExpression = m_assertionInfo.capturedExpression; + + std::string actualMessage = Catch::translateActiveException(); + if( !matcher.match( actualMessage ) ) { + data.resultType = ResultWas::ExpressionFailed; + data.reconstructedExpression = actualMessage; + } + AssertionResult result( m_assertionInfo, data ); + handleResult( result ); + } + + void ResultBuilder::captureExpression() { + AssertionResult result = build(); + handleResult( result ); + } + + void ResultBuilder::handleResult( AssertionResult const& result ) + { + getResultCapture().assertionEnded( result ); + + if( !result.isOk() ) { + if( getCurrentContext().getConfig()->shouldDebugBreak() ) + m_shouldDebugBreak = true; + if( getCurrentContext().getRunner()->aborting() || (m_assertionInfo.resultDisposition & ResultDisposition::Normal) ) + m_shouldThrow = true; + } + } + + void ResultBuilder::react() { + if( m_shouldThrow ) + throw Catch::TestFailureException(); + } + + bool ResultBuilder::shouldDebugBreak() const { return m_shouldDebugBreak; } + bool ResultBuilder::allowThrows() const { return getCurrentContext().getConfig()->allowThrows(); } + + AssertionResult ResultBuilder::build() const + { + return build( *this ); + } + + // CAVEAT: The returned AssertionResult stores a pointer to the argument expr, + // a temporary DecomposedExpression, which in turn holds references to + // operands, possibly temporary as well. + // It should immediately be passed to handleResult; if the expression + // needs to be reported, its string expansion must be composed before + // the temporaries are destroyed. + AssertionResult ResultBuilder::build( DecomposedExpression const& expr ) const + { + assert( m_data.resultType != ResultWas::Unknown ); + AssertionResultData data = m_data; + + // Flip bool results if FalseTest flag is set + if( isFalseTest( m_assertionInfo.resultDisposition ) ) { + data.negate( expr.isBinaryExpression() ); + } + + data.message = m_stream.oss.str(); + data.decomposedExpression = &expr; // for lazy reconstruction + return AssertionResult( m_assertionInfo, data ); + } + + void ResultBuilder::reconstructExpression( std::string& dest ) const { + dest = m_assertionInfo.capturedExpression; + } + +} // end namespace Catch + +// #included from: catch_tag_alias_registry.hpp +#define TWOBLUECUBES_CATCH_TAG_ALIAS_REGISTRY_HPP_INCLUDED + +// #included from: catch_tag_alias_registry.h +#define TWOBLUECUBES_CATCH_TAG_ALIAS_REGISTRY_H_INCLUDED + +#include <map> + +namespace Catch { + + class TagAliasRegistry : public ITagAliasRegistry { + public: + virtual ~TagAliasRegistry(); + virtual Option<TagAlias> find( std::string const& alias ) const; + virtual std::string expandAliases( std::string const& unexpandedTestSpec ) const; + void add( char const* alias, char const* tag, SourceLineInfo const& lineInfo ); + static TagAliasRegistry& get(); + + private: + std::map<std::string, TagAlias> m_registry; + }; + +} // end namespace Catch + +namespace Catch { + + TagAliasRegistry::~TagAliasRegistry() {} + + Option<TagAlias> TagAliasRegistry::find( std::string const& alias ) const { + std::map<std::string, TagAlias>::const_iterator it = m_registry.find( alias ); + if( it != m_registry.end() ) + return it->second; + else + return Option<TagAlias>(); + } + + std::string TagAliasRegistry::expandAliases( std::string const& unexpandedTestSpec ) const { + std::string expandedTestSpec = unexpandedTestSpec; + for( std::map<std::string, TagAlias>::const_iterator it = m_registry.begin(), itEnd = m_registry.end(); + it != itEnd; + ++it ) { + std::size_t pos = expandedTestSpec.find( it->first ); + if( pos != std::string::npos ) { + expandedTestSpec = expandedTestSpec.substr( 0, pos ) + + it->second.tag + + expandedTestSpec.substr( pos + it->first.size() ); + } + } + return expandedTestSpec; + } + + void TagAliasRegistry::add( char const* alias, char const* tag, SourceLineInfo const& lineInfo ) { + + if( !startsWith( alias, "[@" ) || !endsWith( alias, ']' ) ) { + std::ostringstream oss; + oss << "error: tag alias, \"" << alias << "\" is not of the form [@alias name].\n" << lineInfo; + throw std::domain_error( oss.str().c_str() ); + } + if( !m_registry.insert( std::make_pair( alias, TagAlias( tag, lineInfo ) ) ).second ) { + std::ostringstream oss; + oss << "error: tag alias, \"" << alias << "\" already registered.\n" + << "\tFirst seen at " << find(alias)->lineInfo << '\n' + << "\tRedefined at " << lineInfo; + throw std::domain_error( oss.str().c_str() ); + } + } + + TagAliasRegistry& TagAliasRegistry::get() { + static TagAliasRegistry instance; + return instance; + + } + + ITagAliasRegistry::~ITagAliasRegistry() {} + ITagAliasRegistry const& ITagAliasRegistry::get() { return TagAliasRegistry::get(); } + + RegistrarForTagAliases::RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo ) { + try { + TagAliasRegistry::get().add( alias, tag, lineInfo ); + } + catch( std::exception& ex ) { + Colour colourGuard( Colour::Red ); + Catch::cerr() << ex.what() << std::endl; + exit(1); + } + } + +} // end namespace Catch + +// #included from: ../reporters/catch_reporter_multi.hpp +#define TWOBLUECUBES_CATCH_REPORTER_MULTI_HPP_INCLUDED + +namespace Catch { + +class MultipleReporters : public SharedImpl<IStreamingReporter> { + typedef std::vector<Ptr<IStreamingReporter> > Reporters; + Reporters m_reporters; + +public: + void add( Ptr<IStreamingReporter> const& reporter ) { + m_reporters.push_back( reporter ); + } + +public: // IStreamingReporter + + virtual ReporterPreferences getPreferences() const CATCH_OVERRIDE { + return m_reporters[0]->getPreferences(); + } + + virtual void noMatchingTestCases( std::string const& spec ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->noMatchingTestCases( spec ); + } + + virtual void testRunStarting( TestRunInfo const& testRunInfo ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->testRunStarting( testRunInfo ); + } + + virtual void testGroupStarting( GroupInfo const& groupInfo ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->testGroupStarting( groupInfo ); + } + + virtual void testCaseStarting( TestCaseInfo const& testInfo ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->testCaseStarting( testInfo ); + } + + virtual void sectionStarting( SectionInfo const& sectionInfo ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->sectionStarting( sectionInfo ); + } + + virtual void assertionStarting( AssertionInfo const& assertionInfo ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->assertionStarting( assertionInfo ); + } + + // The return value indicates if the messages buffer should be cleared: + virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE { + bool clearBuffer = false; + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + clearBuffer |= (*it)->assertionEnded( assertionStats ); + return clearBuffer; + } + + virtual void sectionEnded( SectionStats const& sectionStats ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->sectionEnded( sectionStats ); + } + + virtual void testCaseEnded( TestCaseStats const& testCaseStats ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->testCaseEnded( testCaseStats ); + } + + virtual void testGroupEnded( TestGroupStats const& testGroupStats ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->testGroupEnded( testGroupStats ); + } + + virtual void testRunEnded( TestRunStats const& testRunStats ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->testRunEnded( testRunStats ); + } + + virtual void skipTest( TestCaseInfo const& testInfo ) CATCH_OVERRIDE { + for( Reporters::const_iterator it = m_reporters.begin(), itEnd = m_reporters.end(); + it != itEnd; + ++it ) + (*it)->skipTest( testInfo ); + } + + virtual MultipleReporters* tryAsMulti() CATCH_OVERRIDE { + return this; + } + +}; + +Ptr<IStreamingReporter> addReporter( Ptr<IStreamingReporter> const& existingReporter, Ptr<IStreamingReporter> const& additionalReporter ) { + Ptr<IStreamingReporter> resultingReporter; + + if( existingReporter ) { + MultipleReporters* multi = existingReporter->tryAsMulti(); + if( !multi ) { + multi = new MultipleReporters; + resultingReporter = Ptr<IStreamingReporter>( multi ); + if( existingReporter ) + multi->add( existingReporter ); + } + else + resultingReporter = existingReporter; + multi->add( additionalReporter ); + } + else + resultingReporter = additionalReporter; + + return resultingReporter; +} + +} // end namespace Catch + +// #included from: ../reporters/catch_reporter_xml.hpp +#define TWOBLUECUBES_CATCH_REPORTER_XML_HPP_INCLUDED + +// #included from: catch_reporter_bases.hpp +#define TWOBLUECUBES_CATCH_REPORTER_BASES_HPP_INCLUDED + +#include <cstring> + +namespace Catch { + + struct StreamingReporterBase : SharedImpl<IStreamingReporter> { + + StreamingReporterBase( ReporterConfig const& _config ) + : m_config( _config.fullConfig() ), + stream( _config.stream() ) + { + m_reporterPrefs.shouldRedirectStdOut = false; + } + + virtual ReporterPreferences getPreferences() const CATCH_OVERRIDE { + return m_reporterPrefs; + } + + virtual ~StreamingReporterBase() CATCH_OVERRIDE; + + virtual void noMatchingTestCases( std::string const& ) CATCH_OVERRIDE {} + + virtual void testRunStarting( TestRunInfo const& _testRunInfo ) CATCH_OVERRIDE { + currentTestRunInfo = _testRunInfo; + } + virtual void testGroupStarting( GroupInfo const& _groupInfo ) CATCH_OVERRIDE { + currentGroupInfo = _groupInfo; + } + + virtual void testCaseStarting( TestCaseInfo const& _testInfo ) CATCH_OVERRIDE { + currentTestCaseInfo = _testInfo; + } + virtual void sectionStarting( SectionInfo const& _sectionInfo ) CATCH_OVERRIDE { + m_sectionStack.push_back( _sectionInfo ); + } + + virtual void sectionEnded( SectionStats const& /* _sectionStats */ ) CATCH_OVERRIDE { + m_sectionStack.pop_back(); + } + virtual void testCaseEnded( TestCaseStats const& /* _testCaseStats */ ) CATCH_OVERRIDE { + currentTestCaseInfo.reset(); + } + virtual void testGroupEnded( TestGroupStats const& /* _testGroupStats */ ) CATCH_OVERRIDE { + currentGroupInfo.reset(); + } + virtual void testRunEnded( TestRunStats const& /* _testRunStats */ ) CATCH_OVERRIDE { + currentTestCaseInfo.reset(); + currentGroupInfo.reset(); + currentTestRunInfo.reset(); + } + + virtual void skipTest( TestCaseInfo const& ) CATCH_OVERRIDE { + // Don't do anything with this by default. + // It can optionally be overridden in the derived class. + } + + Ptr<IConfig const> m_config; + std::ostream& stream; + + LazyStat<TestRunInfo> currentTestRunInfo; + LazyStat<GroupInfo> currentGroupInfo; + LazyStat<TestCaseInfo> currentTestCaseInfo; + + std::vector<SectionInfo> m_sectionStack; + ReporterPreferences m_reporterPrefs; + }; + + struct CumulativeReporterBase : SharedImpl<IStreamingReporter> { + template<typename T, typename ChildNodeT> + struct Node : SharedImpl<> { + explicit Node( T const& _value ) : value( _value ) {} + virtual ~Node() {} + + typedef std::vector<Ptr<ChildNodeT> > ChildNodes; + T value; + ChildNodes children; + }; + struct SectionNode : SharedImpl<> { + explicit SectionNode( SectionStats const& _stats ) : stats( _stats ) {} + virtual ~SectionNode(); + + bool operator == ( SectionNode const& other ) const { + return stats.sectionInfo.lineInfo == other.stats.sectionInfo.lineInfo; + } + bool operator == ( Ptr<SectionNode> const& other ) const { + return operator==( *other ); + } + + SectionStats stats; + typedef std::vector<Ptr<SectionNode> > ChildSections; + typedef std::vector<AssertionStats> Assertions; + ChildSections childSections; + Assertions assertions; + std::string stdOut; + std::string stdErr; + }; + + struct BySectionInfo { + BySectionInfo( SectionInfo const& other ) : m_other( other ) {} + BySectionInfo( BySectionInfo const& other ) : m_other( other.m_other ) {} + bool operator() ( Ptr<SectionNode> const& node ) const { + return node->stats.sectionInfo.lineInfo == m_other.lineInfo; + } + private: + void operator=( BySectionInfo const& ); + SectionInfo const& m_other; + }; + + typedef Node<TestCaseStats, SectionNode> TestCaseNode; + typedef Node<TestGroupStats, TestCaseNode> TestGroupNode; + typedef Node<TestRunStats, TestGroupNode> TestRunNode; + + CumulativeReporterBase( ReporterConfig const& _config ) + : m_config( _config.fullConfig() ), + stream( _config.stream() ) + { + m_reporterPrefs.shouldRedirectStdOut = false; + } + ~CumulativeReporterBase(); + + virtual ReporterPreferences getPreferences() const CATCH_OVERRIDE { + return m_reporterPrefs; + } + + virtual void testRunStarting( TestRunInfo const& ) CATCH_OVERRIDE {} + virtual void testGroupStarting( GroupInfo const& ) CATCH_OVERRIDE {} + + virtual void testCaseStarting( TestCaseInfo const& ) CATCH_OVERRIDE {} + + virtual void sectionStarting( SectionInfo const& sectionInfo ) CATCH_OVERRIDE { + SectionStats incompleteStats( sectionInfo, Counts(), 0, false ); + Ptr<SectionNode> node; + if( m_sectionStack.empty() ) { + if( !m_rootSection ) + m_rootSection = new SectionNode( incompleteStats ); + node = m_rootSection; + } + else { + SectionNode& parentNode = *m_sectionStack.back(); + SectionNode::ChildSections::const_iterator it = + std::find_if( parentNode.childSections.begin(), + parentNode.childSections.end(), + BySectionInfo( sectionInfo ) ); + if( it == parentNode.childSections.end() ) { + node = new SectionNode( incompleteStats ); + parentNode.childSections.push_back( node ); + } + else + node = *it; + } + m_sectionStack.push_back( node ); + m_deepestSection = node; + } + + virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE {} + + virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE { + assert( !m_sectionStack.empty() ); + SectionNode& sectionNode = *m_sectionStack.back(); + sectionNode.assertions.push_back( assertionStats ); + // AssertionResult holds a pointer to a temporary DecomposedExpression, + // which getExpandedExpression() calls to build the expression string. + // Our section stack copy of the assertionResult will likely outlive the + // temporary, so it must be expanded or discarded now to avoid calling + // a destroyed object later. + prepareExpandedExpression( sectionNode.assertions.back().assertionResult ); + return true; + } + virtual void sectionEnded( SectionStats const& sectionStats ) CATCH_OVERRIDE { + assert( !m_sectionStack.empty() ); + SectionNode& node = *m_sectionStack.back(); + node.stats = sectionStats; + m_sectionStack.pop_back(); + } + virtual void testCaseEnded( TestCaseStats const& testCaseStats ) CATCH_OVERRIDE { + Ptr<TestCaseNode> node = new TestCaseNode( testCaseStats ); + assert( m_sectionStack.size() == 0 ); + node->children.push_back( m_rootSection ); + m_testCases.push_back( node ); + m_rootSection.reset(); + + assert( m_deepestSection ); + m_deepestSection->stdOut = testCaseStats.stdOut; + m_deepestSection->stdErr = testCaseStats.stdErr; + } + virtual void testGroupEnded( TestGroupStats const& testGroupStats ) CATCH_OVERRIDE { + Ptr<TestGroupNode> node = new TestGroupNode( testGroupStats ); + node->children.swap( m_testCases ); + m_testGroups.push_back( node ); + } + virtual void testRunEnded( TestRunStats const& testRunStats ) CATCH_OVERRIDE { + Ptr<TestRunNode> node = new TestRunNode( testRunStats ); + node->children.swap( m_testGroups ); + m_testRuns.push_back( node ); + testRunEndedCumulative(); + } + virtual void testRunEndedCumulative() = 0; + + virtual void skipTest( TestCaseInfo const& ) CATCH_OVERRIDE {} + + virtual void prepareExpandedExpression( AssertionResult& result ) const { + if( result.isOk() ) + result.discardDecomposedExpression(); + else + result.expandDecomposedExpression(); + } + + Ptr<IConfig const> m_config; + std::ostream& stream; + std::vector<AssertionStats> m_assertions; + std::vector<std::vector<Ptr<SectionNode> > > m_sections; + std::vector<Ptr<TestCaseNode> > m_testCases; + std::vector<Ptr<TestGroupNode> > m_testGroups; + + std::vector<Ptr<TestRunNode> > m_testRuns; + + Ptr<SectionNode> m_rootSection; + Ptr<SectionNode> m_deepestSection; + std::vector<Ptr<SectionNode> > m_sectionStack; + ReporterPreferences m_reporterPrefs; + + }; + + template<char C> + char const* getLineOfChars() { + static char line[CATCH_CONFIG_CONSOLE_WIDTH] = {0}; + if( !*line ) { + std::memset( line, C, CATCH_CONFIG_CONSOLE_WIDTH-1 ); + line[CATCH_CONFIG_CONSOLE_WIDTH-1] = 0; + } + return line; + } + + struct TestEventListenerBase : StreamingReporterBase { + TestEventListenerBase( ReporterConfig const& _config ) + : StreamingReporterBase( _config ) + {} + + virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE {} + virtual bool assertionEnded( AssertionStats const& ) CATCH_OVERRIDE { + return false; + } + }; + +} // end namespace Catch + +// #included from: ../internal/catch_reporter_registrars.hpp +#define TWOBLUECUBES_CATCH_REPORTER_REGISTRARS_HPP_INCLUDED + +namespace Catch { + + template<typename T> + class LegacyReporterRegistrar { + + class ReporterFactory : public IReporterFactory { + virtual IStreamingReporter* create( ReporterConfig const& config ) const { + return new LegacyReporterAdapter( new T( config ) ); + } + + virtual std::string getDescription() const { + return T::getDescription(); + } + }; + + public: + + LegacyReporterRegistrar( std::string const& name ) { + getMutableRegistryHub().registerReporter( name, new ReporterFactory() ); + } + }; + + template<typename T> + class ReporterRegistrar { + + class ReporterFactory : public SharedImpl<IReporterFactory> { + + // *** Please Note ***: + // - If you end up here looking at a compiler error because it's trying to register + // your custom reporter class be aware that the native reporter interface has changed + // to IStreamingReporter. The "legacy" interface, IReporter, is still supported via + // an adapter. Just use REGISTER_LEGACY_REPORTER to take advantage of the adapter. + // However please consider updating to the new interface as the old one is now + // deprecated and will probably be removed quite soon! + // Please contact me via github if you have any questions at all about this. + // In fact, ideally, please contact me anyway to let me know you've hit this - as I have + // no idea who is actually using custom reporters at all (possibly no-one!). + // The new interface is designed to minimise exposure to interface changes in the future. + virtual IStreamingReporter* create( ReporterConfig const& config ) const { + return new T( config ); + } + + virtual std::string getDescription() const { + return T::getDescription(); + } + }; + + public: + + ReporterRegistrar( std::string const& name ) { + getMutableRegistryHub().registerReporter( name, new ReporterFactory() ); + } + }; + + template<typename T> + class ListenerRegistrar { + + class ListenerFactory : public SharedImpl<IReporterFactory> { + + virtual IStreamingReporter* create( ReporterConfig const& config ) const { + return new T( config ); + } + virtual std::string getDescription() const { + return std::string(); + } + }; + + public: + + ListenerRegistrar() { + getMutableRegistryHub().registerListener( new ListenerFactory() ); + } + }; +} + +#define INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) \ + namespace{ Catch::LegacyReporterRegistrar<reporterType> catch_internal_RegistrarFor##reporterType( name ); } + +#define INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType ) \ + namespace{ Catch::ReporterRegistrar<reporterType> catch_internal_RegistrarFor##reporterType( name ); } + +#define INTERNAL_CATCH_REGISTER_LISTENER( listenerType ) \ + namespace{ Catch::ListenerRegistrar<listenerType> catch_internal_RegistrarFor##listenerType; } + +// #included from: ../internal/catch_xmlwriter.hpp +#define TWOBLUECUBES_CATCH_XMLWRITER_HPP_INCLUDED + +#include <sstream> +#include <string> +#include <vector> +#include <iomanip> + +namespace Catch { + + class XmlEncode { + public: + enum ForWhat { ForTextNodes, ForAttributes }; + + XmlEncode( std::string const& str, ForWhat forWhat = ForTextNodes ) + : m_str( str ), + m_forWhat( forWhat ) + {} + + void encodeTo( std::ostream& os ) const { + + // Apostrophe escaping not necessary if we always use " to write attributes + // (see: http://www.w3.org/TR/xml/#syntax) + + for( std::size_t i = 0; i < m_str.size(); ++ i ) { + char c = m_str[i]; + switch( c ) { + case '<': os << "<"; break; + case '&': os << "&"; break; + + case '>': + // See: http://www.w3.org/TR/xml/#syntax + if( i > 2 && m_str[i-1] == ']' && m_str[i-2] == ']' ) + os << ">"; + else + os << c; + break; + + case '\"': + if( m_forWhat == ForAttributes ) + os << """; + else + os << c; + break; + + default: + // Escape control chars - based on contribution by @espenalb in PR #465 and + // by @mrpi PR #588 + if ( ( c >= 0 && c < '\x09' ) || ( c > '\x0D' && c < '\x20') || c=='\x7F' ) { + // see http://stackoverflow.com/questions/404107/why-are-control-characters-illegal-in-xml-1-0 + os << "\\x" << std::uppercase << std::hex << std::setfill('0') << std::setw(2) + << static_cast<int>( c ); + } + else + os << c; + } + } + } + + friend std::ostream& operator << ( std::ostream& os, XmlEncode const& xmlEncode ) { + xmlEncode.encodeTo( os ); + return os; + } + + private: + std::string m_str; + ForWhat m_forWhat; + }; + + class XmlWriter { + public: + + class ScopedElement { + public: + ScopedElement( XmlWriter* writer ) + : m_writer( writer ) + {} + + ScopedElement( ScopedElement const& other ) + : m_writer( other.m_writer ){ + other.m_writer = CATCH_NULL; + } + + ~ScopedElement() { + if( m_writer ) + m_writer->endElement(); + } + + ScopedElement& writeText( std::string const& text, bool indent = true ) { + m_writer->writeText( text, indent ); + return *this; + } + + template<typename T> + ScopedElement& writeAttribute( std::string const& name, T const& attribute ) { + m_writer->writeAttribute( name, attribute ); + return *this; + } + + private: + mutable XmlWriter* m_writer; + }; + + XmlWriter() + : m_tagIsOpen( false ), + m_needsNewline( false ), + m_os( Catch::cout() ) + { + writeDeclaration(); + } + + XmlWriter( std::ostream& os ) + : m_tagIsOpen( false ), + m_needsNewline( false ), + m_os( os ) + { + writeDeclaration(); + } + + ~XmlWriter() { + while( !m_tags.empty() ) + endElement(); + } + + XmlWriter& startElement( std::string const& name ) { + ensureTagClosed(); + newlineIfNecessary(); + m_os << m_indent << '<' << name; + m_tags.push_back( name ); + m_indent += " "; + m_tagIsOpen = true; + return *this; + } + + ScopedElement scopedElement( std::string const& name ) { + ScopedElement scoped( this ); + startElement( name ); + return scoped; + } + + XmlWriter& endElement() { + newlineIfNecessary(); + m_indent = m_indent.substr( 0, m_indent.size()-2 ); + if( m_tagIsOpen ) { + m_os << "/>"; + m_tagIsOpen = false; + } + else { + m_os << m_indent << "</" << m_tags.back() << ">"; + } + m_os << std::endl; + m_tags.pop_back(); + return *this; + } + + XmlWriter& writeAttribute( std::string const& name, std::string const& attribute ) { + if( !name.empty() && !attribute.empty() ) + m_os << ' ' << name << "=\"" << XmlEncode( attribute, XmlEncode::ForAttributes ) << '"'; + return *this; + } + + XmlWriter& writeAttribute( std::string const& name, bool attribute ) { + m_os << ' ' << name << "=\"" << ( attribute ? "true" : "false" ) << '"'; + return *this; + } + + template<typename T> + XmlWriter& writeAttribute( std::string const& name, T const& attribute ) { + std::ostringstream oss; + oss << attribute; + return writeAttribute( name, oss.str() ); + } + + XmlWriter& writeText( std::string const& text, bool indent = true ) { + if( !text.empty() ){ + bool tagWasOpen = m_tagIsOpen; + ensureTagClosed(); + if( tagWasOpen && indent ) + m_os << m_indent; + m_os << XmlEncode( text ); + m_needsNewline = true; + } + return *this; + } + + XmlWriter& writeComment( std::string const& text ) { + ensureTagClosed(); + m_os << m_indent << "<!--" << text << "-->"; + m_needsNewline = true; + return *this; + } + + void writeStylesheetRef( std::string const& url ) { + m_os << "<?xml-stylesheet type=\"text/xsl\" href=\"" << url << "\"?>\n"; + } + + XmlWriter& writeBlankLine() { + ensureTagClosed(); + m_os << '\n'; + return *this; + } + + void ensureTagClosed() { + if( m_tagIsOpen ) { + m_os << ">" << std::endl; + m_tagIsOpen = false; + } + } + + private: + XmlWriter( XmlWriter const& ); + void operator=( XmlWriter const& ); + + void writeDeclaration() { + m_os << "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"; + } + + void newlineIfNecessary() { + if( m_needsNewline ) { + m_os << std::endl; + m_needsNewline = false; + } + } + + bool m_tagIsOpen; + bool m_needsNewline; + std::vector<std::string> m_tags; + std::string m_indent; + std::ostream& m_os; + }; + +} +// #included from: catch_reenable_warnings.h + +#define TWOBLUECUBES_CATCH_REENABLE_WARNINGS_H_INCLUDED + +#ifdef __clang__ +# ifdef __ICC // icpc defines the __clang__ macro +# pragma warning(pop) +# else +# pragma clang diagnostic pop +# endif +#elif defined __GNUC__ +# pragma GCC diagnostic pop +#endif + + +namespace Catch { + class XmlReporter : public StreamingReporterBase { + public: + XmlReporter( ReporterConfig const& _config ) + : StreamingReporterBase( _config ), + m_xml(_config.stream()), + m_sectionDepth( 0 ) + { + m_reporterPrefs.shouldRedirectStdOut = true; + } + + virtual ~XmlReporter() CATCH_OVERRIDE; + + static std::string getDescription() { + return "Reports test results as an XML document"; + } + + virtual std::string getStylesheetRef() const { + return std::string(); + } + + public: // StreamingReporterBase + + virtual void noMatchingTestCases( std::string const& s ) CATCH_OVERRIDE { + StreamingReporterBase::noMatchingTestCases( s ); + } + + virtual void testRunStarting( TestRunInfo const& testInfo ) CATCH_OVERRIDE { + StreamingReporterBase::testRunStarting( testInfo ); + std::string stylesheetRef = getStylesheetRef(); + if( !stylesheetRef.empty() ) + m_xml.writeStylesheetRef( stylesheetRef ); + m_xml.startElement( "Catch" ); + if( !m_config->name().empty() ) + m_xml.writeAttribute( "name", m_config->name() ); + } + + virtual void testGroupStarting( GroupInfo const& groupInfo ) CATCH_OVERRIDE { + StreamingReporterBase::testGroupStarting( groupInfo ); + m_xml.startElement( "Group" ) + .writeAttribute( "name", groupInfo.name ); + } + + virtual void testCaseStarting( TestCaseInfo const& testInfo ) CATCH_OVERRIDE { + StreamingReporterBase::testCaseStarting(testInfo); + m_xml.startElement( "TestCase" ) + .writeAttribute( "name", trim( testInfo.name ) ) + .writeAttribute( "description", testInfo.description ) + .writeAttribute( "tags", testInfo.tagsAsString ); + + if ( m_config->showDurations() == ShowDurations::Always ) + m_testCaseTimer.start(); + m_xml.ensureTagClosed(); + } + + virtual void sectionStarting( SectionInfo const& sectionInfo ) CATCH_OVERRIDE { + StreamingReporterBase::sectionStarting( sectionInfo ); + if( m_sectionDepth++ > 0 ) { + m_xml.startElement( "Section" ) + .writeAttribute( "name", trim( sectionInfo.name ) ) + .writeAttribute( "description", sectionInfo.description ); + m_xml.ensureTagClosed(); + } + } + + virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE { } + + virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE { + const AssertionResult& assertionResult = assertionStats.assertionResult; + + // Print any info messages in <Info> tags. + if( assertionStats.assertionResult.getResultType() != ResultWas::Ok ) { + for( std::vector<MessageInfo>::const_iterator it = assertionStats.infoMessages.begin(), itEnd = assertionStats.infoMessages.end(); + it != itEnd; + ++it ) { + if( it->type == ResultWas::Info ) { + m_xml.scopedElement( "Info" ) + .writeText( it->message ); + } else if ( it->type == ResultWas::Warning ) { + m_xml.scopedElement( "Warning" ) + .writeText( it->message ); + } + } + } + + // Drop out if result was successful but we're not printing them. + if( !m_config->includeSuccessfulResults() && isOk(assertionResult.getResultType()) ) + return true; + + // Print the expression if there is one. + if( assertionResult.hasExpression() ) { + m_xml.startElement( "Expression" ) + .writeAttribute( "success", assertionResult.succeeded() ) + .writeAttribute( "type", assertionResult.getTestMacroName() ) + .writeAttribute( "filename", assertionResult.getSourceInfo().file ) + .writeAttribute( "line", assertionResult.getSourceInfo().line ); + + m_xml.scopedElement( "Original" ) + .writeText( assertionResult.getExpression() ); + m_xml.scopedElement( "Expanded" ) + .writeText( assertionResult.getExpandedExpression() ); + } + + // And... Print a result applicable to each result type. + switch( assertionResult.getResultType() ) { + case ResultWas::ThrewException: + m_xml.scopedElement( "Exception" ) + .writeAttribute( "filename", assertionResult.getSourceInfo().file ) + .writeAttribute( "line", assertionResult.getSourceInfo().line ) + .writeText( assertionResult.getMessage() ); + break; + case ResultWas::FatalErrorCondition: + m_xml.scopedElement( "FatalErrorCondition" ) + .writeAttribute( "filename", assertionResult.getSourceInfo().file ) + .writeAttribute( "line", assertionResult.getSourceInfo().line ) + .writeText( assertionResult.getMessage() ); + break; + case ResultWas::Info: + m_xml.scopedElement( "Info" ) + .writeText( assertionResult.getMessage() ); + break; + case ResultWas::Warning: + // Warning will already have been written + break; + case ResultWas::ExplicitFailure: + m_xml.scopedElement( "Failure" ) + .writeText( assertionResult.getMessage() ); + break; + default: + break; + } + + if( assertionResult.hasExpression() ) + m_xml.endElement(); + + return true; + } + + virtual void sectionEnded( SectionStats const& sectionStats ) CATCH_OVERRIDE { + StreamingReporterBase::sectionEnded( sectionStats ); + if( --m_sectionDepth > 0 ) { + XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResults" ); + e.writeAttribute( "successes", sectionStats.assertions.passed ); + e.writeAttribute( "failures", sectionStats.assertions.failed ); + e.writeAttribute( "expectedFailures", sectionStats.assertions.failedButOk ); + + if ( m_config->showDurations() == ShowDurations::Always ) + e.writeAttribute( "durationInSeconds", sectionStats.durationInSeconds ); + + m_xml.endElement(); + } + } + + virtual void testCaseEnded( TestCaseStats const& testCaseStats ) CATCH_OVERRIDE { + StreamingReporterBase::testCaseEnded( testCaseStats ); + XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResult" ); + e.writeAttribute( "success", testCaseStats.totals.assertions.allOk() ); + + if ( m_config->showDurations() == ShowDurations::Always ) + e.writeAttribute( "durationInSeconds", m_testCaseTimer.getElapsedSeconds() ); + + if( !testCaseStats.stdOut.empty() ) + m_xml.scopedElement( "StdOut" ).writeText( trim( testCaseStats.stdOut ), false ); + if( !testCaseStats.stdErr.empty() ) + m_xml.scopedElement( "StdErr" ).writeText( trim( testCaseStats.stdErr ), false ); + + m_xml.endElement(); + } + + virtual void testGroupEnded( TestGroupStats const& testGroupStats ) CATCH_OVERRIDE { + StreamingReporterBase::testGroupEnded( testGroupStats ); + // TODO: Check testGroupStats.aborting and act accordingly. + m_xml.scopedElement( "OverallResults" ) + .writeAttribute( "successes", testGroupStats.totals.assertions.passed ) + .writeAttribute( "failures", testGroupStats.totals.assertions.failed ) + .writeAttribute( "expectedFailures", testGroupStats.totals.assertions.failedButOk ); + m_xml.endElement(); + } + + virtual void testRunEnded( TestRunStats const& testRunStats ) CATCH_OVERRIDE { + StreamingReporterBase::testRunEnded( testRunStats ); + m_xml.scopedElement( "OverallResults" ) + .writeAttribute( "successes", testRunStats.totals.assertions.passed ) + .writeAttribute( "failures", testRunStats.totals.assertions.failed ) + .writeAttribute( "expectedFailures", testRunStats.totals.assertions.failedButOk ); + m_xml.endElement(); + } + + private: + Timer m_testCaseTimer; + XmlWriter m_xml; + int m_sectionDepth; + }; + + INTERNAL_CATCH_REGISTER_REPORTER( "xml", XmlReporter ) + +} // end namespace Catch + +// #included from: ../reporters/catch_reporter_junit.hpp +#define TWOBLUECUBES_CATCH_REPORTER_JUNIT_HPP_INCLUDED + +#include <assert.h> + +namespace Catch { + + namespace { + std::string getCurrentTimestamp() { + // Beware, this is not reentrant because of backward compatibility issues + // Also, UTC only, again because of backward compatibility (%z is C++11) + time_t rawtime; + std::time(&rawtime); + const size_t timeStampSize = sizeof("2017-01-16T17:06:45Z"); + +#ifdef _MSC_VER + std::tm timeInfo = {}; + gmtime_s(&timeInfo, &rawtime); +#else + std::tm* timeInfo; + timeInfo = std::gmtime(&rawtime); +#endif + + char timeStamp[timeStampSize]; + const char * const fmt = "%Y-%m-%dT%H:%M:%SZ"; + +#ifdef _MSC_VER + std::strftime(timeStamp, timeStampSize, fmt, &timeInfo); +#else + std::strftime(timeStamp, timeStampSize, fmt, timeInfo); +#endif + return std::string(timeStamp); + } + + } + + class JunitReporter : public CumulativeReporterBase { + public: + JunitReporter( ReporterConfig const& _config ) + : CumulativeReporterBase( _config ), + xml( _config.stream() ) + { + m_reporterPrefs.shouldRedirectStdOut = true; + } + + virtual ~JunitReporter() CATCH_OVERRIDE; + + static std::string getDescription() { + return "Reports test results in an XML format that looks like Ant's junitreport target"; + } + + virtual void noMatchingTestCases( std::string const& /*spec*/ ) CATCH_OVERRIDE {} + + virtual void testRunStarting( TestRunInfo const& runInfo ) CATCH_OVERRIDE { + CumulativeReporterBase::testRunStarting( runInfo ); + xml.startElement( "testsuites" ); + } + + virtual void testGroupStarting( GroupInfo const& groupInfo ) CATCH_OVERRIDE { + suiteTimer.start(); + stdOutForSuite.str(""); + stdErrForSuite.str(""); + unexpectedExceptions = 0; + CumulativeReporterBase::testGroupStarting( groupInfo ); + } + + virtual bool assertionEnded( AssertionStats const& assertionStats ) CATCH_OVERRIDE { + if( assertionStats.assertionResult.getResultType() == ResultWas::ThrewException ) + unexpectedExceptions++; + return CumulativeReporterBase::assertionEnded( assertionStats ); + } + + virtual void testCaseEnded( TestCaseStats const& testCaseStats ) CATCH_OVERRIDE { + stdOutForSuite << testCaseStats.stdOut; + stdErrForSuite << testCaseStats.stdErr; + CumulativeReporterBase::testCaseEnded( testCaseStats ); + } + + virtual void testGroupEnded( TestGroupStats const& testGroupStats ) CATCH_OVERRIDE { + double suiteTime = suiteTimer.getElapsedSeconds(); + CumulativeReporterBase::testGroupEnded( testGroupStats ); + writeGroup( *m_testGroups.back(), suiteTime ); + } + + virtual void testRunEndedCumulative() CATCH_OVERRIDE { + xml.endElement(); + } + + void writeGroup( TestGroupNode const& groupNode, double suiteTime ) { + XmlWriter::ScopedElement e = xml.scopedElement( "testsuite" ); + TestGroupStats const& stats = groupNode.value; + xml.writeAttribute( "name", stats.groupInfo.name ); + xml.writeAttribute( "errors", unexpectedExceptions ); + xml.writeAttribute( "failures", stats.totals.assertions.failed-unexpectedExceptions ); + xml.writeAttribute( "tests", stats.totals.assertions.total() ); + xml.writeAttribute( "hostname", "tbd" ); // !TBD + if( m_config->showDurations() == ShowDurations::Never ) + xml.writeAttribute( "time", "" ); + else + xml.writeAttribute( "time", suiteTime ); + xml.writeAttribute( "timestamp", getCurrentTimestamp() ); + + // Write test cases + for( TestGroupNode::ChildNodes::const_iterator + it = groupNode.children.begin(), itEnd = groupNode.children.end(); + it != itEnd; + ++it ) + writeTestCase( **it ); + + xml.scopedElement( "system-out" ).writeText( trim( stdOutForSuite.str() ), false ); + xml.scopedElement( "system-err" ).writeText( trim( stdErrForSuite.str() ), false ); + } + + void writeTestCase( TestCaseNode const& testCaseNode ) { + TestCaseStats const& stats = testCaseNode.value; + + // All test cases have exactly one section - which represents the + // test case itself. That section may have 0-n nested sections + assert( testCaseNode.children.size() == 1 ); + SectionNode const& rootSection = *testCaseNode.children.front(); + + std::string className = stats.testInfo.className; + + if( className.empty() ) { + if( rootSection.childSections.empty() ) + className = "global"; + } + writeSection( className, "", rootSection ); + } + + void writeSection( std::string const& className, + std::string const& rootName, + SectionNode const& sectionNode ) { + std::string name = trim( sectionNode.stats.sectionInfo.name ); + if( !rootName.empty() ) + name = rootName + '/' + name; + + if( !sectionNode.assertions.empty() || + !sectionNode.stdOut.empty() || + !sectionNode.stdErr.empty() ) { + XmlWriter::ScopedElement e = xml.scopedElement( "testcase" ); + if( className.empty() ) { + xml.writeAttribute( "classname", name ); + xml.writeAttribute( "name", "root" ); + } + else { + xml.writeAttribute( "classname", className ); + xml.writeAttribute( "name", name ); + } + xml.writeAttribute( "time", Catch::toString( sectionNode.stats.durationInSeconds ) ); + + writeAssertions( sectionNode ); + + if( !sectionNode.stdOut.empty() ) + xml.scopedElement( "system-out" ).writeText( trim( sectionNode.stdOut ), false ); + if( !sectionNode.stdErr.empty() ) + xml.scopedElement( "system-err" ).writeText( trim( sectionNode.stdErr ), false ); + } + for( SectionNode::ChildSections::const_iterator + it = sectionNode.childSections.begin(), + itEnd = sectionNode.childSections.end(); + it != itEnd; + ++it ) + if( className.empty() ) + writeSection( name, "", **it ); + else + writeSection( className, name, **it ); + } + + void writeAssertions( SectionNode const& sectionNode ) { + for( SectionNode::Assertions::const_iterator + it = sectionNode.assertions.begin(), itEnd = sectionNode.assertions.end(); + it != itEnd; + ++it ) + writeAssertion( *it ); + } + void writeAssertion( AssertionStats const& stats ) { + AssertionResult const& result = stats.assertionResult; + if( !result.isOk() ) { + std::string elementName; + switch( result.getResultType() ) { + case ResultWas::ThrewException: + case ResultWas::FatalErrorCondition: + elementName = "error"; + break; + case ResultWas::ExplicitFailure: + elementName = "failure"; + break; + case ResultWas::ExpressionFailed: + elementName = "failure"; + break; + case ResultWas::DidntThrowException: + elementName = "failure"; + break; + + // We should never see these here: + case ResultWas::Info: + case ResultWas::Warning: + case ResultWas::Ok: + case ResultWas::Unknown: + case ResultWas::FailureBit: + case ResultWas::Exception: + elementName = "internalError"; + break; + } + + XmlWriter::ScopedElement e = xml.scopedElement( elementName ); + + xml.writeAttribute( "message", result.getExpandedExpression() ); + xml.writeAttribute( "type", result.getTestMacroName() ); + + std::ostringstream oss; + if( !result.getMessage().empty() ) + oss << result.getMessage() << '\n'; + for( std::vector<MessageInfo>::const_iterator + it = stats.infoMessages.begin(), + itEnd = stats.infoMessages.end(); + it != itEnd; + ++it ) + if( it->type == ResultWas::Info ) + oss << it->message << '\n'; + + oss << "at " << result.getSourceInfo(); + xml.writeText( oss.str(), false ); + } + } + + XmlWriter xml; + Timer suiteTimer; + std::ostringstream stdOutForSuite; + std::ostringstream stdErrForSuite; + unsigned int unexpectedExceptions; + }; + + INTERNAL_CATCH_REGISTER_REPORTER( "junit", JunitReporter ) + +} // end namespace Catch + +// #included from: ../reporters/catch_reporter_console.hpp +#define TWOBLUECUBES_CATCH_REPORTER_CONSOLE_HPP_INCLUDED + +namespace Catch { + + struct ConsoleReporter : StreamingReporterBase { + ConsoleReporter( ReporterConfig const& _config ) + : StreamingReporterBase( _config ), + m_headerPrinted( false ) + {} + + virtual ~ConsoleReporter() CATCH_OVERRIDE; + static std::string getDescription() { + return "Reports test results as plain lines of text"; + } + + virtual void noMatchingTestCases( std::string const& spec ) CATCH_OVERRIDE { + stream << "No test cases matched '" << spec << '\'' << std::endl; + } + + virtual void assertionStarting( AssertionInfo const& ) CATCH_OVERRIDE { + } + + virtual bool assertionEnded( AssertionStats const& _assertionStats ) CATCH_OVERRIDE { + AssertionResult const& result = _assertionStats.assertionResult; + + bool printInfoMessages = true; + + // Drop out if result was successful and we're not printing those + if( !m_config->includeSuccessfulResults() && result.isOk() ) { + if( result.getResultType() != ResultWas::Warning ) + return false; + printInfoMessages = false; + } + + lazyPrint(); + + AssertionPrinter printer( stream, _assertionStats, printInfoMessages ); + printer.print(); + stream << std::endl; + return true; + } + + virtual void sectionStarting( SectionInfo const& _sectionInfo ) CATCH_OVERRIDE { + m_headerPrinted = false; + StreamingReporterBase::sectionStarting( _sectionInfo ); + } + virtual void sectionEnded( SectionStats const& _sectionStats ) CATCH_OVERRIDE { + if( _sectionStats.missingAssertions ) { + lazyPrint(); + Colour colour( Colour::ResultError ); + if( m_sectionStack.size() > 1 ) + stream << "\nNo assertions in section"; + else + stream << "\nNo assertions in test case"; + stream << " '" << _sectionStats.sectionInfo.name << "'\n" << std::endl; + } + if( m_headerPrinted ) { + if( m_config->showDurations() == ShowDurations::Always ) + stream << "Completed in " << _sectionStats.durationInSeconds << 's' << std::endl; + m_headerPrinted = false; + } + else { + if( m_config->showDurations() == ShowDurations::Always ) + stream << _sectionStats.sectionInfo.name << " completed in " << _sectionStats.durationInSeconds << 's' << std::endl; + } + StreamingReporterBase::sectionEnded( _sectionStats ); + } + + virtual void testCaseEnded( TestCaseStats const& _testCaseStats ) CATCH_OVERRIDE { + StreamingReporterBase::testCaseEnded( _testCaseStats ); + m_headerPrinted = false; + } + virtual void testGroupEnded( TestGroupStats const& _testGroupStats ) CATCH_OVERRIDE { + if( currentGroupInfo.used ) { + printSummaryDivider(); + stream << "Summary for group '" << _testGroupStats.groupInfo.name << "':\n"; + printTotals( _testGroupStats.totals ); + stream << '\n' << std::endl; + } + StreamingReporterBase::testGroupEnded( _testGroupStats ); + } + virtual void testRunEnded( TestRunStats const& _testRunStats ) CATCH_OVERRIDE { + printTotalsDivider( _testRunStats.totals ); + printTotals( _testRunStats.totals ); + stream << std::endl; + StreamingReporterBase::testRunEnded( _testRunStats ); + } + + private: + + class AssertionPrinter { + void operator= ( AssertionPrinter const& ); + public: + AssertionPrinter( std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages ) + : stream( _stream ), + stats( _stats ), + result( _stats.assertionResult ), + colour( Colour::None ), + message( result.getMessage() ), + messages( _stats.infoMessages ), + printInfoMessages( _printInfoMessages ) + { + switch( result.getResultType() ) { + case ResultWas::Ok: + colour = Colour::Success; + passOrFail = "PASSED"; + //if( result.hasMessage() ) + if( _stats.infoMessages.size() == 1 ) + messageLabel = "with message"; + if( _stats.infoMessages.size() > 1 ) + messageLabel = "with messages"; + break; + case ResultWas::ExpressionFailed: + if( result.isOk() ) { + colour = Colour::Success; + passOrFail = "FAILED - but was ok"; + } + else { + colour = Colour::Error; + passOrFail = "FAILED"; + } + if( _stats.infoMessages.size() == 1 ) + messageLabel = "with message"; + if( _stats.infoMessages.size() > 1 ) + messageLabel = "with messages"; + break; + case ResultWas::ThrewException: + colour = Colour::Error; + passOrFail = "FAILED"; + messageLabel = "due to unexpected exception with message"; + break; + case ResultWas::FatalErrorCondition: + colour = Colour::Error; + passOrFail = "FAILED"; + messageLabel = "due to a fatal error condition"; + break; + case ResultWas::DidntThrowException: + colour = Colour::Error; + passOrFail = "FAILED"; + messageLabel = "because no exception was thrown where one was expected"; + break; + case ResultWas::Info: + messageLabel = "info"; + break; + case ResultWas::Warning: + messageLabel = "warning"; + break; + case ResultWas::ExplicitFailure: + passOrFail = "FAILED"; + colour = Colour::Error; + if( _stats.infoMessages.size() == 1 ) + messageLabel = "explicitly with message"; + if( _stats.infoMessages.size() > 1 ) + messageLabel = "explicitly with messages"; + break; + // These cases are here to prevent compiler warnings + case ResultWas::Unknown: + case ResultWas::FailureBit: + case ResultWas::Exception: + passOrFail = "** internal error **"; + colour = Colour::Error; + break; + } + } + + void print() const { + printSourceInfo(); + if( stats.totals.assertions.total() > 0 ) { + if( result.isOk() ) + stream << '\n'; + printResultType(); + printOriginalExpression(); + printReconstructedExpression(); + } + else { + stream << '\n'; + } + printMessage(); + } + + private: + void printResultType() const { + if( !passOrFail.empty() ) { + Colour colourGuard( colour ); + stream << passOrFail << ":\n"; + } + } + void printOriginalExpression() const { + if( result.hasExpression() ) { + Colour colourGuard( Colour::OriginalExpression ); + stream << " "; + stream << result.getExpressionInMacro(); + stream << '\n'; + } + } + void printReconstructedExpression() const { + if( result.hasExpandedExpression() ) { + stream << "with expansion:\n"; + Colour colourGuard( Colour::ReconstructedExpression ); + stream << Text( result.getExpandedExpression(), TextAttributes().setIndent(2) ) << '\n'; + } + } + void printMessage() const { + if( !messageLabel.empty() ) + stream << messageLabel << ':' << '\n'; + for( std::vector<MessageInfo>::const_iterator it = messages.begin(), itEnd = messages.end(); + it != itEnd; + ++it ) { + // If this assertion is a warning ignore any INFO messages + if( printInfoMessages || it->type != ResultWas::Info ) + stream << Text( it->message, TextAttributes().setIndent(2) ) << '\n'; + } + } + void printSourceInfo() const { + Colour colourGuard( Colour::FileName ); + stream << result.getSourceInfo() << ": "; + } + + std::ostream& stream; + AssertionStats const& stats; + AssertionResult const& result; + Colour::Code colour; + std::string passOrFail; + std::string messageLabel; + std::string message; + std::vector<MessageInfo> messages; + bool printInfoMessages; + }; + + void lazyPrint() { + + if( !currentTestRunInfo.used ) + lazyPrintRunInfo(); + if( !currentGroupInfo.used ) + lazyPrintGroupInfo(); + + if( !m_headerPrinted ) { + printTestCaseAndSectionHeader(); + m_headerPrinted = true; + } + } + void lazyPrintRunInfo() { + stream << '\n' << getLineOfChars<'~'>() << '\n'; + Colour colour( Colour::SecondaryText ); + stream << currentTestRunInfo->name + << " is a Catch v" << libraryVersion << " host application.\n" + << "Run with -? for options\n\n"; + + if( m_config->rngSeed() != 0 ) + stream << "Randomness seeded to: " << m_config->rngSeed() << "\n\n"; + + currentTestRunInfo.used = true; + } + void lazyPrintGroupInfo() { + if( !currentGroupInfo->name.empty() && currentGroupInfo->groupsCounts > 1 ) { + printClosedHeader( "Group: " + currentGroupInfo->name ); + currentGroupInfo.used = true; + } + } + void printTestCaseAndSectionHeader() { + assert( !m_sectionStack.empty() ); + printOpenHeader( currentTestCaseInfo->name ); + + if( m_sectionStack.size() > 1 ) { + Colour colourGuard( Colour::Headers ); + + std::vector<SectionInfo>::const_iterator + it = m_sectionStack.begin()+1, // Skip first section (test case) + itEnd = m_sectionStack.end(); + for( ; it != itEnd; ++it ) + printHeaderString( it->name, 2 ); + } + + SourceLineInfo lineInfo = m_sectionStack.back().lineInfo; + + if( !lineInfo.empty() ){ + stream << getLineOfChars<'-'>() << '\n'; + Colour colourGuard( Colour::FileName ); + stream << lineInfo << '\n'; + } + stream << getLineOfChars<'.'>() << '\n' << std::endl; + } + + void printClosedHeader( std::string const& _name ) { + printOpenHeader( _name ); + stream << getLineOfChars<'.'>() << '\n'; + } + void printOpenHeader( std::string const& _name ) { + stream << getLineOfChars<'-'>() << '\n'; + { + Colour colourGuard( Colour::Headers ); + printHeaderString( _name ); + } + } + + // if string has a : in first line will set indent to follow it on + // subsequent lines + void printHeaderString( std::string const& _string, std::size_t indent = 0 ) { + std::size_t i = _string.find( ": " ); + if( i != std::string::npos ) + i+=2; + else + i = 0; + stream << Text( _string, TextAttributes() + .setIndent( indent+i) + .setInitialIndent( indent ) ) << '\n'; + } + + struct SummaryColumn { + + SummaryColumn( std::string const& _label, Colour::Code _colour ) + : label( _label ), + colour( _colour ) + {} + SummaryColumn addRow( std::size_t count ) { + std::ostringstream oss; + oss << count; + std::string row = oss.str(); + for( std::vector<std::string>::iterator it = rows.begin(); it != rows.end(); ++it ) { + while( it->size() < row.size() ) + *it = ' ' + *it; + while( it->size() > row.size() ) + row = ' ' + row; + } + rows.push_back( row ); + return *this; + } + + std::string label; + Colour::Code colour; + std::vector<std::string> rows; + + }; + + void printTotals( Totals const& totals ) { + if( totals.testCases.total() == 0 ) { + stream << Colour( Colour::Warning ) << "No tests ran\n"; + } + else if( totals.assertions.total() > 0 && totals.testCases.allPassed() ) { + stream << Colour( Colour::ResultSuccess ) << "All tests passed"; + stream << " (" + << pluralise( totals.assertions.passed, "assertion" ) << " in " + << pluralise( totals.testCases.passed, "test case" ) << ')' + << '\n'; + } + else { + + std::vector<SummaryColumn> columns; + columns.push_back( SummaryColumn( "", Colour::None ) + .addRow( totals.testCases.total() ) + .addRow( totals.assertions.total() ) ); + columns.push_back( SummaryColumn( "passed", Colour::Success ) + .addRow( totals.testCases.passed ) + .addRow( totals.assertions.passed ) ); + columns.push_back( SummaryColumn( "failed", Colour::ResultError ) + .addRow( totals.testCases.failed ) + .addRow( totals.assertions.failed ) ); + columns.push_back( SummaryColumn( "failed as expected", Colour::ResultExpectedFailure ) + .addRow( totals.testCases.failedButOk ) + .addRow( totals.assertions.failedButOk ) ); + + printSummaryRow( "test cases", columns, 0 ); + printSummaryRow( "assertions", columns, 1 ); + } + } + void printSummaryRow( std::string const& label, std::vector<SummaryColumn> const& cols, std::size_t row ) { + for( std::vector<SummaryColumn>::const_iterator it = cols.begin(); it != cols.end(); ++it ) { + std::string value = it->rows[row]; + if( it->label.empty() ) { + stream << label << ": "; + if( value != "0" ) + stream << value; + else + stream << Colour( Colour::Warning ) << "- none -"; + } + else if( value != "0" ) { + stream << Colour( Colour::LightGrey ) << " | "; + stream << Colour( it->colour ) + << value << ' ' << it->label; + } + } + stream << '\n'; + } + + static std::size_t makeRatio( std::size_t number, std::size_t total ) { + std::size_t ratio = total > 0 ? CATCH_CONFIG_CONSOLE_WIDTH * number/ total : 0; + return ( ratio == 0 && number > 0 ) ? 1 : ratio; + } + static std::size_t& findMax( std::size_t& i, std::size_t& j, std::size_t& k ) { + if( i > j && i > k ) + return i; + else if( j > k ) + return j; + else + return k; + } + + void printTotalsDivider( Totals const& totals ) { + if( totals.testCases.total() > 0 ) { + std::size_t failedRatio = makeRatio( totals.testCases.failed, totals.testCases.total() ); + std::size_t failedButOkRatio = makeRatio( totals.testCases.failedButOk, totals.testCases.total() ); + std::size_t passedRatio = makeRatio( totals.testCases.passed, totals.testCases.total() ); + while( failedRatio + failedButOkRatio + passedRatio < CATCH_CONFIG_CONSOLE_WIDTH-1 ) + findMax( failedRatio, failedButOkRatio, passedRatio )++; + while( failedRatio + failedButOkRatio + passedRatio > CATCH_CONFIG_CONSOLE_WIDTH-1 ) + findMax( failedRatio, failedButOkRatio, passedRatio )--; + + stream << Colour( Colour::Error ) << std::string( failedRatio, '=' ); + stream << Colour( Colour::ResultExpectedFailure ) << std::string( failedButOkRatio, '=' ); + if( totals.testCases.allPassed() ) + stream << Colour( Colour::ResultSuccess ) << std::string( passedRatio, '=' ); + else + stream << Colour( Colour::Success ) << std::string( passedRatio, '=' ); + } + else { + stream << Colour( Colour::Warning ) << std::string( CATCH_CONFIG_CONSOLE_WIDTH-1, '=' ); + } + stream << '\n'; + } + void printSummaryDivider() { + stream << getLineOfChars<'-'>() << '\n'; + } + + private: + bool m_headerPrinted; + }; + + INTERNAL_CATCH_REGISTER_REPORTER( "console", ConsoleReporter ) + +} // end namespace Catch + +// #included from: ../reporters/catch_reporter_compact.hpp +#define TWOBLUECUBES_CATCH_REPORTER_COMPACT_HPP_INCLUDED + +namespace Catch { + + struct CompactReporter : StreamingReporterBase { + + CompactReporter( ReporterConfig const& _config ) + : StreamingReporterBase( _config ) + {} + + virtual ~CompactReporter(); + + static std::string getDescription() { + return "Reports test results on a single line, suitable for IDEs"; + } + + virtual ReporterPreferences getPreferences() const { + ReporterPreferences prefs; + prefs.shouldRedirectStdOut = false; + return prefs; + } + + virtual void noMatchingTestCases( std::string const& spec ) { + stream << "No test cases matched '" << spec << '\'' << std::endl; + } + + virtual void assertionStarting( AssertionInfo const& ) { + } + + virtual bool assertionEnded( AssertionStats const& _assertionStats ) { + AssertionResult const& result = _assertionStats.assertionResult; + + bool printInfoMessages = true; + + // Drop out if result was successful and we're not printing those + if( !m_config->includeSuccessfulResults() && result.isOk() ) { + if( result.getResultType() != ResultWas::Warning ) + return false; + printInfoMessages = false; + } + + AssertionPrinter printer( stream, _assertionStats, printInfoMessages ); + printer.print(); + + stream << std::endl; + return true; + } + + virtual void testRunEnded( TestRunStats const& _testRunStats ) { + printTotals( _testRunStats.totals ); + stream << '\n' << std::endl; + StreamingReporterBase::testRunEnded( _testRunStats ); + } + + private: + class AssertionPrinter { + void operator= ( AssertionPrinter const& ); + public: + AssertionPrinter( std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages ) + : stream( _stream ) + , stats( _stats ) + , result( _stats.assertionResult ) + , messages( _stats.infoMessages ) + , itMessage( _stats.infoMessages.begin() ) + , printInfoMessages( _printInfoMessages ) + {} + + void print() { + printSourceInfo(); + + itMessage = messages.begin(); + + switch( result.getResultType() ) { + case ResultWas::Ok: + printResultType( Colour::ResultSuccess, passedString() ); + printOriginalExpression(); + printReconstructedExpression(); + if ( ! result.hasExpression() ) + printRemainingMessages( Colour::None ); + else + printRemainingMessages(); + break; + case ResultWas::ExpressionFailed: + if( result.isOk() ) + printResultType( Colour::ResultSuccess, failedString() + std::string( " - but was ok" ) ); + else + printResultType( Colour::Error, failedString() ); + printOriginalExpression(); + printReconstructedExpression(); + printRemainingMessages(); + break; + case ResultWas::ThrewException: + printResultType( Colour::Error, failedString() ); + printIssue( "unexpected exception with message:" ); + printMessage(); + printExpressionWas(); + printRemainingMessages(); + break; + case ResultWas::FatalErrorCondition: + printResultType( Colour::Error, failedString() ); + printIssue( "fatal error condition with message:" ); + printMessage(); + printExpressionWas(); + printRemainingMessages(); + break; + case ResultWas::DidntThrowException: + printResultType( Colour::Error, failedString() ); + printIssue( "expected exception, got none" ); + printExpressionWas(); + printRemainingMessages(); + break; + case ResultWas::Info: + printResultType( Colour::None, "info" ); + printMessage(); + printRemainingMessages(); + break; + case ResultWas::Warning: + printResultType( Colour::None, "warning" ); + printMessage(); + printRemainingMessages(); + break; + case ResultWas::ExplicitFailure: + printResultType( Colour::Error, failedString() ); + printIssue( "explicitly" ); + printRemainingMessages( Colour::None ); + break; + // These cases are here to prevent compiler warnings + case ResultWas::Unknown: + case ResultWas::FailureBit: + case ResultWas::Exception: + printResultType( Colour::Error, "** internal error **" ); + break; + } + } + + private: + // Colour::LightGrey + + static Colour::Code dimColour() { return Colour::FileName; } + +#ifdef CATCH_PLATFORM_MAC + static const char* failedString() { return "FAILED"; } + static const char* passedString() { return "PASSED"; } +#else + static const char* failedString() { return "failed"; } + static const char* passedString() { return "passed"; } +#endif + + void printSourceInfo() const { + Colour colourGuard( Colour::FileName ); + stream << result.getSourceInfo() << ':'; + } + + void printResultType( Colour::Code colour, std::string passOrFail ) const { + if( !passOrFail.empty() ) { + { + Colour colourGuard( colour ); + stream << ' ' << passOrFail; + } + stream << ':'; + } + } + + void printIssue( std::string issue ) const { + stream << ' ' << issue; + } + + void printExpressionWas() { + if( result.hasExpression() ) { + stream << ';'; + { + Colour colour( dimColour() ); + stream << " expression was:"; + } + printOriginalExpression(); + } + } + + void printOriginalExpression() const { + if( result.hasExpression() ) { + stream << ' ' << result.getExpression(); + } + } + + void printReconstructedExpression() const { + if( result.hasExpandedExpression() ) { + { + Colour colour( dimColour() ); + stream << " for: "; + } + stream << result.getExpandedExpression(); + } + } + + void printMessage() { + if ( itMessage != messages.end() ) { + stream << " '" << itMessage->message << '\''; + ++itMessage; + } + } + + void printRemainingMessages( Colour::Code colour = dimColour() ) { + if ( itMessage == messages.end() ) + return; + + // using messages.end() directly yields compilation error: + std::vector<MessageInfo>::const_iterator itEnd = messages.end(); + const std::size_t N = static_cast<std::size_t>( std::distance( itMessage, itEnd ) ); + + { + Colour colourGuard( colour ); + stream << " with " << pluralise( N, "message" ) << ':'; + } + + for(; itMessage != itEnd; ) { + // If this assertion is a warning ignore any INFO messages + if( printInfoMessages || itMessage->type != ResultWas::Info ) { + stream << " '" << itMessage->message << '\''; + if ( ++itMessage != itEnd ) { + Colour colourGuard( dimColour() ); + stream << " and"; + } + } + } + } + + private: + std::ostream& stream; + AssertionStats const& stats; + AssertionResult const& result; + std::vector<MessageInfo> messages; + std::vector<MessageInfo>::const_iterator itMessage; + bool printInfoMessages; + }; + + // Colour, message variants: + // - white: No tests ran. + // - red: Failed [both/all] N test cases, failed [both/all] M assertions. + // - white: Passed [both/all] N test cases (no assertions). + // - red: Failed N tests cases, failed M assertions. + // - green: Passed [both/all] N tests cases with M assertions. + + std::string bothOrAll( std::size_t count ) const { + return count == 1 ? std::string() : count == 2 ? "both " : "all " ; + } + + void printTotals( const Totals& totals ) const { + if( totals.testCases.total() == 0 ) { + stream << "No tests ran."; + } + else if( totals.testCases.failed == totals.testCases.total() ) { + Colour colour( Colour::ResultError ); + const std::string qualify_assertions_failed = + totals.assertions.failed == totals.assertions.total() ? + bothOrAll( totals.assertions.failed ) : std::string(); + stream << + "Failed " << bothOrAll( totals.testCases.failed ) + << pluralise( totals.testCases.failed, "test case" ) << ", " + "failed " << qualify_assertions_failed << + pluralise( totals.assertions.failed, "assertion" ) << '.'; + } + else if( totals.assertions.total() == 0 ) { + stream << + "Passed " << bothOrAll( totals.testCases.total() ) + << pluralise( totals.testCases.total(), "test case" ) + << " (no assertions)."; + } + else if( totals.assertions.failed ) { + Colour colour( Colour::ResultError ); + stream << + "Failed " << pluralise( totals.testCases.failed, "test case" ) << ", " + "failed " << pluralise( totals.assertions.failed, "assertion" ) << '.'; + } + else { + Colour colour( Colour::ResultSuccess ); + stream << + "Passed " << bothOrAll( totals.testCases.passed ) + << pluralise( totals.testCases.passed, "test case" ) << + " with " << pluralise( totals.assertions.passed, "assertion" ) << '.'; + } + } + }; + + INTERNAL_CATCH_REGISTER_REPORTER( "compact", CompactReporter ) + +} // end namespace Catch + +namespace Catch { + // These are all here to avoid warnings about not having any out of line + // virtual methods + NonCopyable::~NonCopyable() {} + IShared::~IShared() {} + IStream::~IStream() CATCH_NOEXCEPT {} + FileStream::~FileStream() CATCH_NOEXCEPT {} + CoutStream::~CoutStream() CATCH_NOEXCEPT {} + DebugOutStream::~DebugOutStream() CATCH_NOEXCEPT {} + StreamBufBase::~StreamBufBase() CATCH_NOEXCEPT {} + IContext::~IContext() {} + IResultCapture::~IResultCapture() {} + ITestCase::~ITestCase() {} + ITestCaseRegistry::~ITestCaseRegistry() {} + IRegistryHub::~IRegistryHub() {} + IMutableRegistryHub::~IMutableRegistryHub() {} + IExceptionTranslator::~IExceptionTranslator() {} + IExceptionTranslatorRegistry::~IExceptionTranslatorRegistry() {} + IReporter::~IReporter() {} + IReporterFactory::~IReporterFactory() {} + IReporterRegistry::~IReporterRegistry() {} + IStreamingReporter::~IStreamingReporter() {} + AssertionStats::~AssertionStats() {} + SectionStats::~SectionStats() {} + TestCaseStats::~TestCaseStats() {} + TestGroupStats::~TestGroupStats() {} + TestRunStats::~TestRunStats() {} + CumulativeReporterBase::SectionNode::~SectionNode() {} + CumulativeReporterBase::~CumulativeReporterBase() {} + + StreamingReporterBase::~StreamingReporterBase() {} + ConsoleReporter::~ConsoleReporter() {} + CompactReporter::~CompactReporter() {} + IRunner::~IRunner() {} + IMutableContext::~IMutableContext() {} + IConfig::~IConfig() {} + XmlReporter::~XmlReporter() {} + JunitReporter::~JunitReporter() {} + TestRegistry::~TestRegistry() {} + FreeFunctionTestCase::~FreeFunctionTestCase() {} + IGeneratorInfo::~IGeneratorInfo() {} + IGeneratorsForTest::~IGeneratorsForTest() {} + WildcardPattern::~WildcardPattern() {} + TestSpec::Pattern::~Pattern() {} + TestSpec::NamePattern::~NamePattern() {} + TestSpec::TagPattern::~TagPattern() {} + TestSpec::ExcludedPattern::~ExcludedPattern() {} + + Matchers::Impl::StdString::Equals::~Equals() {} + Matchers::Impl::StdString::Contains::~Contains() {} + Matchers::Impl::StdString::StartsWith::~StartsWith() {} + Matchers::Impl::StdString::EndsWith::~EndsWith() {} + + void Config::dummy() {} + + namespace TestCaseTracking { + ITracker::~ITracker() {} + TrackerBase::~TrackerBase() {} + SectionTracker::~SectionTracker() {} + IndexTracker::~IndexTracker() {} + } +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#endif + +#ifdef CATCH_CONFIG_MAIN +// #included from: internal/catch_default_main.hpp +#define TWOBLUECUBES_CATCH_DEFAULT_MAIN_HPP_INCLUDED + +#ifndef __OBJC__ + +// Standard C/C++ main entry point +int main (int argc, char * argv[]) { + int result = Catch::Session().run( argc, argv ); + return ( result < 0xff ? result : 0xff ); +} + +#else // __OBJC__ + +// Objective-C entry point +int main (int argc, char * const argv[]) { +#if !CATCH_ARC_ENABLED + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; +#endif + + Catch::registerTestMethods(); + int result = Catch::Session().run( argc, (char* const*)argv ); + +#if !CATCH_ARC_ENABLED + [pool drain]; +#endif + + return ( result < 0xff ? result : 0xff ); +} + +#endif // __OBJC__ + +#endif + +#ifdef CLARA_CONFIG_MAIN_NOT_DEFINED +# undef CLARA_CONFIG_MAIN +#endif + +////// + +// If this config identifier is defined then all CATCH macros are prefixed with CATCH_ +#ifdef CATCH_CONFIG_PREFIX_ALL + +#define CATCH_REQUIRE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::Normal, "CATCH_REQUIRE" ) +#define CATCH_REQUIRE_FALSE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, "CATCH_REQUIRE_FALSE" ) + +#define CATCH_REQUIRE_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::Normal, "", "CATCH_REQUIRE_THROWS" ) +#define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, Catch::ResultDisposition::Normal, "CATCH_REQUIRE_THROWS_AS" ) +#define CATCH_REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::Normal, matcher, "CATCH_REQUIRE_THROWS_WITH" ) +#define CATCH_REQUIRE_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, Catch::ResultDisposition::Normal, "CATCH_REQUIRE_NOTHROW" ) + +#define CATCH_CHECK( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK" ) +#define CATCH_CHECK_FALSE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, "CATCH_CHECK_FALSE" ) +#define CATCH_CHECKED_IF( expr ) INTERNAL_CATCH_IF( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECKED_IF" ) +#define CATCH_CHECKED_ELSE( expr ) INTERNAL_CATCH_ELSE( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECKED_ELSE" ) +#define CATCH_CHECK_NOFAIL( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, "CATCH_CHECK_NOFAIL" ) + +#define CATCH_CHECK_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, "", "CATCH_CHECK_THROWS" ) +#define CATCH_CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THROWS_AS" ) +#define CATCH_CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, matcher, "CATCH_CHECK_THROWS_WITH" ) +#define CATCH_CHECK_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_NOTHROW" ) + +#define CATCH_CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THAT" ) +#define CATCH_REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::Normal, "CATCH_REQUIRE_THAT" ) + +#define CATCH_INFO( msg ) INTERNAL_CATCH_INFO( msg, "CATCH_INFO" ) +#define CATCH_WARN( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, "CATCH_WARN", msg ) +#define CATCH_SCOPED_INFO( msg ) INTERNAL_CATCH_INFO( msg, "CATCH_INFO" ) +#define CATCH_CAPTURE( msg ) INTERNAL_CATCH_INFO( #msg " := " << msg, "CATCH_CAPTURE" ) +#define CATCH_SCOPED_CAPTURE( msg ) INTERNAL_CATCH_INFO( #msg " := " << msg, "CATCH_CAPTURE" ) + +#ifdef CATCH_CONFIG_VARIADIC_MACROS + #define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ ) + #define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ ) + #define CATCH_METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ ) + #define CATCH_REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ ) + #define CATCH_SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ ) + #define CATCH_FAIL( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "CATCH_FAIL", __VA_ARGS__ ) + #define CATCH_SUCCEED( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "CATCH_SUCCEED", __VA_ARGS__ ) +#else + #define CATCH_TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description ) + #define CATCH_TEST_CASE_METHOD( className, name, description ) INTERNAL_CATCH_TEST_CASE_METHOD( className, name, description ) + #define CATCH_METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description ) + #define CATCH_REGISTER_TEST_CASE( function, name, description ) INTERNAL_CATCH_REGISTER_TESTCASE( function, name, description ) + #define CATCH_SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description ) + #define CATCH_FAIL( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "CATCH_FAIL", msg ) + #define CATCH_SUCCEED( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "CATCH_SUCCEED", msg ) +#endif +#define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE( "", "" ) + +#define CATCH_REGISTER_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType ) +#define CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) + +#define CATCH_GENERATE( expr) INTERNAL_CATCH_GENERATE( expr ) + +// "BDD-style" convenience wrappers +#ifdef CATCH_CONFIG_VARIADIC_MACROS +#define CATCH_SCENARIO( ... ) CATCH_TEST_CASE( "Scenario: " __VA_ARGS__ ) +#define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ ) +#else +#define CATCH_SCENARIO( name, tags ) CATCH_TEST_CASE( "Scenario: " name, tags ) +#define CATCH_SCENARIO_METHOD( className, name, tags ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " name, tags ) +#endif +#define CATCH_GIVEN( desc ) CATCH_SECTION( std::string( "Given: ") + desc, "" ) +#define CATCH_WHEN( desc ) CATCH_SECTION( std::string( " When: ") + desc, "" ) +#define CATCH_AND_WHEN( desc ) CATCH_SECTION( std::string( " And: ") + desc, "" ) +#define CATCH_THEN( desc ) CATCH_SECTION( std::string( " Then: ") + desc, "" ) +#define CATCH_AND_THEN( desc ) CATCH_SECTION( std::string( " And: ") + desc, "" ) + +// If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required +#else + +#define REQUIRE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::Normal, "REQUIRE" ) +#define REQUIRE_FALSE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, "REQUIRE_FALSE" ) + +#define REQUIRE_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::Normal, "", "REQUIRE_THROWS" ) +#define REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, Catch::ResultDisposition::Normal, "REQUIRE_THROWS_AS" ) +#define REQUIRE_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::Normal, matcher, "REQUIRE_THROWS_WITH" ) +#define REQUIRE_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, Catch::ResultDisposition::Normal, "REQUIRE_NOTHROW" ) + +#define CHECK( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure, "CHECK" ) +#define CHECK_FALSE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, "CHECK_FALSE" ) +#define CHECKED_IF( expr ) INTERNAL_CATCH_IF( expr, Catch::ResultDisposition::ContinueOnFailure, "CHECKED_IF" ) +#define CHECKED_ELSE( expr ) INTERNAL_CATCH_ELSE( expr, Catch::ResultDisposition::ContinueOnFailure, "CHECKED_ELSE" ) +#define CHECK_NOFAIL( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, "CHECK_NOFAIL" ) + +#define CHECK_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, "", "CHECK_THROWS" ) +#define CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, Catch::ResultDisposition::ContinueOnFailure, "CHECK_THROWS_AS" ) +#define CHECK_THROWS_WITH( expr, matcher ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, matcher, "CHECK_THROWS_WITH" ) +#define CHECK_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, Catch::ResultDisposition::ContinueOnFailure, "CHECK_NOTHROW" ) + +#define CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::ContinueOnFailure, "CHECK_THAT" ) +#define REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::Normal, "REQUIRE_THAT" ) + +#define INFO( msg ) INTERNAL_CATCH_INFO( msg, "INFO" ) +#define WARN( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, "WARN", msg ) +#define SCOPED_INFO( msg ) INTERNAL_CATCH_INFO( msg, "INFO" ) +#define CAPTURE( msg ) INTERNAL_CATCH_INFO( #msg " := " << msg, "CAPTURE" ) +#define SCOPED_CAPTURE( msg ) INTERNAL_CATCH_INFO( #msg " := " << msg, "CAPTURE" ) + +#ifdef CATCH_CONFIG_VARIADIC_MACROS + #define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ ) + #define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ ) + #define METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ ) + #define REGISTER_TEST_CASE( Function, ... ) INTERNAL_CATCH_REGISTER_TESTCASE( Function, __VA_ARGS__ ) + #define SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ ) + #define FAIL( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "FAIL", __VA_ARGS__ ) + #define SUCCEED( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "SUCCEED", __VA_ARGS__ ) +#else + #define TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description ) + #define TEST_CASE_METHOD( className, name, description ) INTERNAL_CATCH_TEST_CASE_METHOD( className, name, description ) + #define METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description ) + #define REGISTER_TEST_CASE( method, name, description ) INTERNAL_CATCH_REGISTER_TESTCASE( method, name, description ) + #define SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description ) + #define FAIL( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "FAIL", msg ) + #define SUCCEED( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "SUCCEED", msg ) +#endif +#define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE( "", "" ) + +#define REGISTER_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType ) +#define REGISTER_LEGACY_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) + +#define GENERATE( expr) INTERNAL_CATCH_GENERATE( expr ) + +#endif + +#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) + +// "BDD-style" convenience wrappers +#ifdef CATCH_CONFIG_VARIADIC_MACROS +#define SCENARIO( ... ) TEST_CASE( "Scenario: " __VA_ARGS__ ) +#define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ ) +#else +#define SCENARIO( name, tags ) TEST_CASE( "Scenario: " name, tags ) +#define SCENARIO_METHOD( className, name, tags ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " name, tags ) +#endif +#define GIVEN( desc ) SECTION( std::string(" Given: ") + desc, "" ) +#define WHEN( desc ) SECTION( std::string(" When: ") + desc, "" ) +#define AND_WHEN( desc ) SECTION( std::string("And when: ") + desc, "" ) +#define THEN( desc ) SECTION( std::string(" Then: ") + desc, "" ) +#define AND_THEN( desc ) SECTION( std::string(" And: ") + desc, "" ) + +using Catch::Detail::Approx; + +#endif // TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/third_party/json/json-forwards.h b/examples/ofx/Bitalino_rapidmix/dependencies/third_party/json/json-forwards.h new file mode 100644 index 0000000..65e8dfb --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/third_party/json/json-forwards.h @@ -0,0 +1,324 @@ +/// Json-cpp amalgated forward header (http://jsoncpp.sourceforge.net/). +/// It is intended to be used with #include "json/json-forwards.h" +/// This header provides forward declaration for all JsonCpp types. + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + +/* +The JsonCpp library's source code, including accompanying documentation, +tests and demonstration applications, are licensed under the following +conditions... + +The author (Baptiste Lepilleur) explicitly disclaims copyright in all +jurisdictions which recognize such a disclaimer. In such jurisdictions, +this software is released into the Public Domain. + +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is +released under the terms of the MIT License (see below). + +In jurisdictions which recognize Public Domain property, the user of this +software may choose to accept it either as 1) Public Domain, 2) under the +conditions of the MIT License (see below), or 3) under the terms of dual +Public Domain/MIT License conditions described here, as they choose. + +The MIT License is about as close to Public Domain as a license can get, and is +described in clear, concise terms at: + + http://en.wikipedia.org/wiki/MIT_License + +The full text of the MIT License follows: + +======================================================================== +Copyright (c) 2007-2010 Baptiste Lepilleur + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +======================================================================== +(END LICENSE TEXT) + +The MIT license is compatible with both the GPL and commercial +software, affording one all of the rights of Public Domain with the +minor nuisance of being required to keep the above copyright notice +and license text in the source code. Note also that by accepting the +Public Domain "license" you can re-license your copy using whatever +license you like. + +*/ + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + + + + + +#ifndef JSON_FORWARD_AMALGATED_H_INCLUDED +# define JSON_FORWARD_AMALGATED_H_INCLUDED +/// If defined, indicates that the source file is amalgated +/// to prevent private header inclusion. +#define JSON_IS_AMALGAMATION + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/config.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_CONFIG_H_INCLUDED +#define JSON_CONFIG_H_INCLUDED +#include <stddef.h> +#include <string> //typedef String +#include <stdint.h> //typedef int64_t, uint64_t + +/// If defined, indicates that json library is embedded in CppTL library. +//# define JSON_IN_CPPTL 1 + +/// If defined, indicates that json may leverage CppTL library +//# define JSON_USE_CPPTL 1 +/// If defined, indicates that cpptl vector based map should be used instead of +/// std::map +/// as Value container. +//# define JSON_USE_CPPTL_SMALLMAP 1 + +// If non-zero, the library uses exceptions to report bad input instead of C +// assertion macros. The default is to use exceptions. +#ifndef JSON_USE_EXCEPTION +#define JSON_USE_EXCEPTION 1 +#endif + +/// If defined, indicates that the source file is amalgated +/// to prevent private header inclusion. +/// Remarks: it is automatically defined in the generated amalgated header. +// #define JSON_IS_AMALGAMATION + +#ifdef JSON_IN_CPPTL +#include <cpptl/config.h> +#ifndef JSON_USE_CPPTL +#define JSON_USE_CPPTL 1 +#endif +#endif + +#ifdef JSON_IN_CPPTL +#define JSON_API CPPTL_API +#elif defined(JSON_DLL_BUILD) +#if defined(_MSC_VER) || defined(__MINGW32__) +#define JSON_API __declspec(dllexport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#endif // if defined(_MSC_VER) +#elif defined(JSON_DLL) +#if defined(_MSC_VER) || defined(__MINGW32__) +#define JSON_API __declspec(dllimport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#endif // if defined(_MSC_VER) +#endif // ifdef JSON_IN_CPPTL +#if !defined(JSON_API) +#define JSON_API +#endif + +// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for +// integer +// Storages, and 64 bits integer support is disabled. +// #define JSON_NO_INT64 1 + +#if defined(_MSC_VER) // MSVC +# if _MSC_VER <= 1200 // MSVC 6 + // Microsoft Visual Studio 6 only support conversion from __int64 to double + // (no conversion from unsigned __int64). +# define JSON_USE_INT64_DOUBLE_CONVERSION 1 + // Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255' + // characters in the debug information) + // All projects I've ever seen with VS6 were using this globally (not bothering + // with pragma push/pop). +# pragma warning(disable : 4786) +# endif // MSVC 6 + +# if _MSC_VER >= 1500 // MSVC 2008 + /// Indicates that the following function is deprecated. +# define JSONCPP_DEPRECATED(message) __declspec(deprecated(message)) +# endif + +#endif // defined(_MSC_VER) + +// In c++11 the override keyword allows you to explicity define that a function +// is intended to override the base-class version. This makes the code more +// managable and fixes a set of common hard-to-find bugs. +#if __cplusplus >= 201103L +# define JSONCPP_OVERRIDE override +#elif defined(_MSC_VER) && _MSC_VER > 1600 +# define JSONCPP_OVERRIDE override +#else +# define JSONCPP_OVERRIDE +#endif + +#ifndef JSON_HAS_RVALUE_REFERENCES + +#if defined(_MSC_VER) && _MSC_VER >= 1600 // MSVC >= 2010 +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // MSVC >= 2010 + +#ifdef __clang__ +#if __has_feature(cxx_rvalue_references) +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // has_feature + +#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) +#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L) +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // GXX_EXPERIMENTAL + +#endif // __clang__ || __GNUC__ + +#endif // not defined JSON_HAS_RVALUE_REFERENCES + +#ifndef JSON_HAS_RVALUE_REFERENCES +#define JSON_HAS_RVALUE_REFERENCES 0 +#endif + +#ifdef __clang__ +#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) +# if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +# define JSONCPP_DEPRECATED(message) __attribute__ ((deprecated(message))) +# elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) +# define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__)) +# endif // GNUC version +#endif // __clang__ || __GNUC__ + +#if !defined(JSONCPP_DEPRECATED) +#define JSONCPP_DEPRECATED(message) +#endif // if !defined(JSONCPP_DEPRECATED) + +#if __GNUC__ >= 6 +# define JSON_USE_INT64_DOUBLE_CONVERSION 1 +#endif + +#if !defined(JSON_IS_AMALGAMATION) + +# include "version.h" + +# if JSONCPP_USING_SECURE_MEMORY +# include "allocator.h" //typedef Allocator +# endif + +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { +typedef int Int; +typedef unsigned int UInt; +#if defined(JSON_NO_INT64) +typedef int LargestInt; +typedef unsigned int LargestUInt; +#undef JSON_HAS_INT64 +#else // if defined(JSON_NO_INT64) +// For Microsoft Visual use specific types as long long is not supported +#if defined(_MSC_VER) // Microsoft Visual Studio +typedef __int64 Int64; +typedef unsigned __int64 UInt64; +#else // if defined(_MSC_VER) // Other platforms, use long long +typedef int64_t Int64; +typedef uint64_t UInt64; +#endif // if defined(_MSC_VER) +typedef Int64 LargestInt; +typedef UInt64 LargestUInt; +#define JSON_HAS_INT64 +#endif // if defined(JSON_NO_INT64) +#if JSONCPP_USING_SECURE_MEMORY +#define JSONCPP_STRING std::basic_string<char, std::char_traits<char>, Json::SecureAllocator<char> > +#define JSONCPP_OSTRINGSTREAM std::basic_ostringstream<char, std::char_traits<char>, Json::SecureAllocator<char> > +#define JSONCPP_OSTREAM std::basic_ostream<char, std::char_traits<char>> +#define JSONCPP_ISTRINGSTREAM std::basic_istringstream<char, std::char_traits<char>, Json::SecureAllocator<char> > +#define JSONCPP_ISTREAM std::istream +#else +#define JSONCPP_STRING std::string +#define JSONCPP_OSTRINGSTREAM std::ostringstream +#define JSONCPP_OSTREAM std::ostream +#define JSONCPP_ISTRINGSTREAM std::istringstream +#define JSONCPP_ISTREAM std::istream +#endif // if JSONCPP_USING_SECURE_MEMORY +} // end namespace Json + +#endif // JSON_CONFIG_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/config.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/forwards.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_FORWARDS_H_INCLUDED +#define JSON_FORWARDS_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "config.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +// writer.h +class FastWriter; +class StyledWriter; + +// reader.h +class Reader; + +// features.h +class Features; + +// value.h +typedef unsigned int ArrayIndex; +class StaticString; +class Path; +class PathArgument; +class Value; +class ValueIteratorBase; +class ValueIterator; +class ValueConstIterator; + +} // namespace Json + +#endif // JSON_FORWARDS_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/forwards.h +// ////////////////////////////////////////////////////////////////////// + + + + + +#endif //ifndef JSON_FORWARD_AMALGATED_H_INCLUDED diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/third_party/json/json.h b/examples/ofx/Bitalino_rapidmix/dependencies/third_party/json/json.h new file mode 100644 index 0000000..de79502 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/third_party/json/json.h @@ -0,0 +1,2140 @@ +/// Json-cpp amalgated header (http://jsoncpp.sourceforge.net/). +/// It is intended to be used with #include "json/json.h" + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + +/* +The JsonCpp library's source code, including accompanying documentation, +tests and demonstration applications, are licensed under the following +conditions... + +The author (Baptiste Lepilleur) explicitly disclaims copyright in all +jurisdictions which recognize such a disclaimer. In such jurisdictions, +this software is released into the Public Domain. + +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is +released under the terms of the MIT License (see below). + +In jurisdictions which recognize Public Domain property, the user of this +software may choose to accept it either as 1) Public Domain, 2) under the +conditions of the MIT License (see below), or 3) under the terms of dual +Public Domain/MIT License conditions described here, as they choose. + +The MIT License is about as close to Public Domain as a license can get, and is +described in clear, concise terms at: + + http://en.wikipedia.org/wiki/MIT_License + +The full text of the MIT License follows: + +======================================================================== +Copyright (c) 2007-2010 Baptiste Lepilleur + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +======================================================================== +(END LICENSE TEXT) + +The MIT license is compatible with both the GPL and commercial +software, affording one all of the rights of Public Domain with the +minor nuisance of being required to keep the above copyright notice +and license text in the source code. Note also that by accepting the +Public Domain "license" you can re-license your copy using whatever +license you like. + +*/ + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + + + + + +#ifndef JSON_AMALGATED_H_INCLUDED +# define JSON_AMALGATED_H_INCLUDED +/// If defined, indicates that the source file is amalgated +/// to prevent private header inclusion. +#define JSON_IS_AMALGAMATION + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/version.h +// ////////////////////////////////////////////////////////////////////// + +// DO NOT EDIT. This file (and "version") is generated by CMake. +// Run CMake configure step to update it. +#ifndef JSON_VERSION_H_INCLUDED +# define JSON_VERSION_H_INCLUDED + +# define JSONCPP_VERSION_STRING "1.7.7" +# define JSONCPP_VERSION_MAJOR 1 +# define JSONCPP_VERSION_MINOR 7 +# define JSONCPP_VERSION_PATCH 7 +# define JSONCPP_VERSION_QUALIFIER +# define JSONCPP_VERSION_HEXA ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | (JSONCPP_VERSION_PATCH << 8)) + +#ifdef JSONCPP_USING_SECURE_MEMORY +#undef JSONCPP_USING_SECURE_MEMORY +#endif +#define JSONCPP_USING_SECURE_MEMORY 0 +// If non-zero, the library zeroes any memory that it has allocated before +// it frees its memory. + +#endif // JSON_VERSION_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/version.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/config.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_CONFIG_H_INCLUDED +#define JSON_CONFIG_H_INCLUDED +#include <stddef.h> +#include <string> //typedef String +#include <stdint.h> //typedef int64_t, uint64_t + +/// If defined, indicates that json library is embedded in CppTL library. +//# define JSON_IN_CPPTL 1 + +/// If defined, indicates that json may leverage CppTL library +//# define JSON_USE_CPPTL 1 +/// If defined, indicates that cpptl vector based map should be used instead of +/// std::map +/// as Value container. +//# define JSON_USE_CPPTL_SMALLMAP 1 + +// If non-zero, the library uses exceptions to report bad input instead of C +// assertion macros. The default is to use exceptions. +#ifndef JSON_USE_EXCEPTION +#define JSON_USE_EXCEPTION 1 +#endif + +/// If defined, indicates that the source file is amalgated +/// to prevent private header inclusion. +/// Remarks: it is automatically defined in the generated amalgated header. +// #define JSON_IS_AMALGAMATION + +#ifdef JSON_IN_CPPTL +#include <cpptl/config.h> +#ifndef JSON_USE_CPPTL +#define JSON_USE_CPPTL 1 +#endif +#endif + +#ifdef JSON_IN_CPPTL +#define JSON_API CPPTL_API +#elif defined(JSON_DLL_BUILD) +#if defined(_MSC_VER) || defined(__MINGW32__) +#define JSON_API __declspec(dllexport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#endif // if defined(_MSC_VER) +#elif defined(JSON_DLL) +#if defined(_MSC_VER) || defined(__MINGW32__) +#define JSON_API __declspec(dllimport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#endif // if defined(_MSC_VER) +#endif // ifdef JSON_IN_CPPTL +#if !defined(JSON_API) +#define JSON_API +#endif + +// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for +// integer +// Storages, and 64 bits integer support is disabled. +// #define JSON_NO_INT64 1 + +#if defined(_MSC_VER) // MSVC +# if _MSC_VER <= 1200 // MSVC 6 + // Microsoft Visual Studio 6 only support conversion from __int64 to double + // (no conversion from unsigned __int64). +# define JSON_USE_INT64_DOUBLE_CONVERSION 1 + // Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255' + // characters in the debug information) + // All projects I've ever seen with VS6 were using this globally (not bothering + // with pragma push/pop). +# pragma warning(disable : 4786) +# endif // MSVC 6 + +# if _MSC_VER >= 1500 // MSVC 2008 + /// Indicates that the following function is deprecated. +# define JSONCPP_DEPRECATED(message) __declspec(deprecated(message)) +# endif + +#endif // defined(_MSC_VER) + +// In c++11 the override keyword allows you to explicity define that a function +// is intended to override the base-class version. This makes the code more +// managable and fixes a set of common hard-to-find bugs. +#if __cplusplus >= 201103L +# define JSONCPP_OVERRIDE override +#elif defined(_MSC_VER) && _MSC_VER > 1600 +# define JSONCPP_OVERRIDE override +#else +# define JSONCPP_OVERRIDE +#endif + +#ifndef JSON_HAS_RVALUE_REFERENCES + +#if defined(_MSC_VER) && _MSC_VER >= 1600 // MSVC >= 2010 +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // MSVC >= 2010 + +#ifdef __clang__ +#if __has_feature(cxx_rvalue_references) +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // has_feature + +#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) +#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L) +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // GXX_EXPERIMENTAL + +#endif // __clang__ || __GNUC__ + +#endif // not defined JSON_HAS_RVALUE_REFERENCES + +#ifndef JSON_HAS_RVALUE_REFERENCES +#define JSON_HAS_RVALUE_REFERENCES 0 +#endif + +#ifdef __clang__ +#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) +# if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +# define JSONCPP_DEPRECATED(message) __attribute__ ((deprecated(message))) +# elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) +# define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__)) +# endif // GNUC version +#endif // __clang__ || __GNUC__ + +#if !defined(JSONCPP_DEPRECATED) +#define JSONCPP_DEPRECATED(message) +#endif // if !defined(JSONCPP_DEPRECATED) + +#if __GNUC__ >= 6 +# define JSON_USE_INT64_DOUBLE_CONVERSION 1 +#endif + +#if !defined(JSON_IS_AMALGAMATION) + +# include "version.h" + +# if JSONCPP_USING_SECURE_MEMORY +# include "allocator.h" //typedef Allocator +# endif + +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { +typedef int Int; +typedef unsigned int UInt; +#if defined(JSON_NO_INT64) +typedef int LargestInt; +typedef unsigned int LargestUInt; +#undef JSON_HAS_INT64 +#else // if defined(JSON_NO_INT64) +// For Microsoft Visual use specific types as long long is not supported +#if defined(_MSC_VER) // Microsoft Visual Studio +typedef __int64 Int64; +typedef unsigned __int64 UInt64; +#else // if defined(_MSC_VER) // Other platforms, use long long +typedef int64_t Int64; +typedef uint64_t UInt64; +#endif // if defined(_MSC_VER) +typedef Int64 LargestInt; +typedef UInt64 LargestUInt; +#define JSON_HAS_INT64 +#endif // if defined(JSON_NO_INT64) +#if JSONCPP_USING_SECURE_MEMORY +#define JSONCPP_STRING std::basic_string<char, std::char_traits<char>, Json::SecureAllocator<char> > +#define JSONCPP_OSTRINGSTREAM std::basic_ostringstream<char, std::char_traits<char>, Json::SecureAllocator<char> > +#define JSONCPP_OSTREAM std::basic_ostream<char, std::char_traits<char>> +#define JSONCPP_ISTRINGSTREAM std::basic_istringstream<char, std::char_traits<char>, Json::SecureAllocator<char> > +#define JSONCPP_ISTREAM std::istream +#else +#define JSONCPP_STRING std::string +#define JSONCPP_OSTRINGSTREAM std::ostringstream +#define JSONCPP_OSTREAM std::ostream +#define JSONCPP_ISTRINGSTREAM std::istringstream +#define JSONCPP_ISTREAM std::istream +#endif // if JSONCPP_USING_SECURE_MEMORY +} // end namespace Json + +#endif // JSON_CONFIG_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/config.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/forwards.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_FORWARDS_H_INCLUDED +#define JSON_FORWARDS_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "config.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +// writer.h +class FastWriter; +class StyledWriter; + +// reader.h +class Reader; + +// features.h +class Features; + +// value.h +typedef unsigned int ArrayIndex; +class StaticString; +class Path; +class PathArgument; +class Value; +class ValueIteratorBase; +class ValueIterator; +class ValueConstIterator; + +} // namespace Json + +#endif // JSON_FORWARDS_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/forwards.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/features.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_FEATURES_H_INCLUDED +#define CPPTL_JSON_FEATURES_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "forwards.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +/** \brief Configuration passed to reader and writer. + * This configuration object can be used to force the Reader or Writer + * to behave in a standard conforming way. + */ +class JSON_API Features { +public: + /** \brief A configuration that allows all features and assumes all strings + * are UTF-8. + * - C & C++ comments are allowed + * - Root object can be any JSON value + * - Assumes Value strings are encoded in UTF-8 + */ + static Features all(); + + /** \brief A configuration that is strictly compatible with the JSON + * specification. + * - Comments are forbidden. + * - Root object must be either an array or an object value. + * - Assumes Value strings are encoded in UTF-8 + */ + static Features strictMode(); + + /** \brief Initialize the configuration like JsonConfig::allFeatures; + */ + Features(); + + /// \c true if comments are allowed. Default: \c true. + bool allowComments_; + + /// \c true if root must be either an array or an object value. Default: \c + /// false. + bool strictRoot_; + + /// \c true if dropped null placeholders are allowed. Default: \c false. + bool allowDroppedNullPlaceholders_; + + /// \c true if numeric object key are allowed. Default: \c false. + bool allowNumericKeys_; +}; + +} // namespace Json + +#endif // CPPTL_JSON_FEATURES_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/features.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/value.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_H_INCLUDED +#define CPPTL_JSON_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "forwards.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <string> +#include <vector> +#include <exception> + +#ifndef JSON_USE_CPPTL_SMALLMAP +#include <map> +#else +#include <cpptl/smallmap.h> +#endif +#ifdef JSON_USE_CPPTL +#include <cpptl/forwards.h> +#endif + +//Conditional NORETURN attribute on the throw functions would: +// a) suppress false positives from static code analysis +// b) possibly improve optimization opportunities. +#if !defined(JSONCPP_NORETURN) +# if defined(_MSC_VER) +# define JSONCPP_NORETURN __declspec(noreturn) +# elif defined(__GNUC__) +# define JSONCPP_NORETURN __attribute__ ((__noreturn__)) +# else +# define JSONCPP_NORETURN +# endif +#endif + +// Disable warning C4251: <data member>: <type> needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +/** \brief JSON (JavaScript Object Notation). + */ +namespace Json { + +/** Base class for all exceptions we throw. + * + * We use nothing but these internally. Of course, STL can throw others. + */ +class JSON_API Exception : public std::exception { +public: + Exception(JSONCPP_STRING const& msg); + ~Exception() throw() JSONCPP_OVERRIDE; + char const* what() const throw() JSONCPP_OVERRIDE; +protected: + JSONCPP_STRING msg_; +}; + +/** Exceptions which the user cannot easily avoid. + * + * E.g. out-of-memory (when we use malloc), stack-overflow, malicious input + * + * \remark derived from Json::Exception + */ +class JSON_API RuntimeError : public Exception { +public: + RuntimeError(JSONCPP_STRING const& msg); +}; + +/** Exceptions thrown by JSON_ASSERT/JSON_FAIL macros. + * + * These are precondition-violations (user bugs) and internal errors (our bugs). + * + * \remark derived from Json::Exception + */ +class JSON_API LogicError : public Exception { +public: + LogicError(JSONCPP_STRING const& msg); +}; + +/// used internally +JSONCPP_NORETURN void throwRuntimeError(JSONCPP_STRING const& msg); +/// used internally +JSONCPP_NORETURN void throwLogicError(JSONCPP_STRING const& msg); + +/** \brief Type of the value held by a Value object. + */ +enum ValueType { + nullValue = 0, ///< 'null' value + intValue, ///< signed integer value + uintValue, ///< unsigned integer value + realValue, ///< double value + stringValue, ///< UTF-8 string value + booleanValue, ///< bool value + arrayValue, ///< array value (ordered list) + objectValue ///< object value (collection of name/value pairs). +}; + +enum CommentPlacement { + commentBefore = 0, ///< a comment placed on the line before a value + commentAfterOnSameLine, ///< a comment just after a value on the same line + commentAfter, ///< a comment on the line after a value (only make sense for + /// root value) + numberOfCommentPlacement +}; + +//# ifdef JSON_USE_CPPTL +// typedef CppTL::AnyEnumerator<const char *> EnumMemberNames; +// typedef CppTL::AnyEnumerator<const Value &> EnumValues; +//# endif + +/** \brief Lightweight wrapper to tag static string. + * + * Value constructor and objectValue member assignement takes advantage of the + * StaticString and avoid the cost of string duplication when storing the + * string or the member name. + * + * Example of usage: + * \code + * Json::Value aValue( StaticString("some text") ); + * Json::Value object; + * static const StaticString code("code"); + * object[code] = 1234; + * \endcode + */ +class JSON_API StaticString { +public: + explicit StaticString(const char* czstring) : c_str_(czstring) {} + + operator const char*() const { return c_str_; } + + const char* c_str() const { return c_str_; } + +private: + const char* c_str_; +}; + +/** \brief Represents a <a HREF="http://www.json.org">JSON</a> value. + * + * This class is a discriminated union wrapper that can represents a: + * - signed integer [range: Value::minInt - Value::maxInt] + * - unsigned integer (range: 0 - Value::maxUInt) + * - double + * - UTF-8 string + * - boolean + * - 'null' + * - an ordered list of Value + * - collection of name/value pairs (javascript object) + * + * The type of the held value is represented by a #ValueType and + * can be obtained using type(). + * + * Values of an #objectValue or #arrayValue can be accessed using operator[]() + * methods. + * Non-const methods will automatically create the a #nullValue element + * if it does not exist. + * The sequence of an #arrayValue will be automatically resized and initialized + * with #nullValue. resize() can be used to enlarge or truncate an #arrayValue. + * + * The get() methods can be used to obtain default value in the case the + * required element does not exist. + * + * It is possible to iterate over the list of a #objectValue values using + * the getMemberNames() method. + * + * \note #Value string-length fit in size_t, but keys must be < 2^30. + * (The reason is an implementation detail.) A #CharReader will raise an + * exception if a bound is exceeded to avoid security holes in your app, + * but the Value API does *not* check bounds. That is the responsibility + * of the caller. + */ +class JSON_API Value { + friend class ValueIteratorBase; +public: + typedef std::vector<JSONCPP_STRING> Members; + typedef ValueIterator iterator; + typedef ValueConstIterator const_iterator; + typedef Json::UInt UInt; + typedef Json::Int Int; +#if defined(JSON_HAS_INT64) + typedef Json::UInt64 UInt64; + typedef Json::Int64 Int64; +#endif // defined(JSON_HAS_INT64) + typedef Json::LargestInt LargestInt; + typedef Json::LargestUInt LargestUInt; + typedef Json::ArrayIndex ArrayIndex; + + static const Value& null; ///< We regret this reference to a global instance; prefer the simpler Value(). + static const Value& nullRef; ///< just a kludge for binary-compatibility; same as null + static Value const& nullSingleton(); ///< Prefer this to null or nullRef. + + /// Minimum signed integer value that can be stored in a Json::Value. + static const LargestInt minLargestInt; + /// Maximum signed integer value that can be stored in a Json::Value. + static const LargestInt maxLargestInt; + /// Maximum unsigned integer value that can be stored in a Json::Value. + static const LargestUInt maxLargestUInt; + + /// Minimum signed int value that can be stored in a Json::Value. + static const Int minInt; + /// Maximum signed int value that can be stored in a Json::Value. + static const Int maxInt; + /// Maximum unsigned int value that can be stored in a Json::Value. + static const UInt maxUInt; + +#if defined(JSON_HAS_INT64) + /// Minimum signed 64 bits int value that can be stored in a Json::Value. + static const Int64 minInt64; + /// Maximum signed 64 bits int value that can be stored in a Json::Value. + static const Int64 maxInt64; + /// Maximum unsigned 64 bits int value that can be stored in a Json::Value. + static const UInt64 maxUInt64; +#endif // defined(JSON_HAS_INT64) + +private: +#ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION + class CZString { + public: + enum DuplicationPolicy { + noDuplication = 0, + duplicate, + duplicateOnCopy + }; + CZString(ArrayIndex index); + CZString(char const* str, unsigned length, DuplicationPolicy allocate); + CZString(CZString const& other); +#if JSON_HAS_RVALUE_REFERENCES + CZString(CZString&& other); +#endif + ~CZString(); + CZString& operator=(CZString other); + bool operator<(CZString const& other) const; + bool operator==(CZString const& other) const; + ArrayIndex index() const; + //const char* c_str() const; ///< \deprecated + char const* data() const; + unsigned length() const; + bool isStaticString() const; + + private: + void swap(CZString& other); + + struct StringStorage { + unsigned policy_: 2; + unsigned length_: 30; // 1GB max + }; + + char const* cstr_; // actually, a prefixed string, unless policy is noDup + union { + ArrayIndex index_; + StringStorage storage_; + }; + }; + +public: +#ifndef JSON_USE_CPPTL_SMALLMAP + typedef std::map<CZString, Value> ObjectValues; +#else + typedef CppTL::SmallMap<CZString, Value> ObjectValues; +#endif // ifndef JSON_USE_CPPTL_SMALLMAP +#endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION + +public: + /** \brief Create a default Value of the given type. + + This is a very useful constructor. + To create an empty array, pass arrayValue. + To create an empty object, pass objectValue. + Another Value can then be set to this one by assignment. +This is useful since clear() and resize() will not alter types. + + Examples: +\code +Json::Value null_value; // null +Json::Value arr_value(Json::arrayValue); // [] +Json::Value obj_value(Json::objectValue); // {} +\endcode + */ + Value(ValueType type = nullValue); + Value(Int value); + Value(UInt value); +#if defined(JSON_HAS_INT64) + Value(Int64 value); + Value(UInt64 value); +#endif // if defined(JSON_HAS_INT64) + Value(double value); + Value(const char* value); ///< Copy til first 0. (NULL causes to seg-fault.) + Value(const char* begin, const char* end); ///< Copy all, incl zeroes. + /** \brief Constructs a value from a static string. + + * Like other value string constructor but do not duplicate the string for + * internal storage. The given string must remain alive after the call to this + * constructor. + * \note This works only for null-terminated strings. (We cannot change the + * size of this class, so we have nowhere to store the length, + * which might be computed later for various operations.) + * + * Example of usage: + * \code + * static StaticString foo("some text"); + * Json::Value aValue(foo); + * \endcode + */ + Value(const StaticString& value); + Value(const JSONCPP_STRING& value); ///< Copy data() til size(). Embedded zeroes too. +#ifdef JSON_USE_CPPTL + Value(const CppTL::ConstString& value); +#endif + Value(bool value); + /// Deep copy. + Value(const Value& other); +#if JSON_HAS_RVALUE_REFERENCES + /// Move constructor + Value(Value&& other); +#endif + ~Value(); + + /// Deep copy, then swap(other). + /// \note Over-write existing comments. To preserve comments, use #swapPayload(). + Value& operator=(Value other); + /// Swap everything. + void swap(Value& other); + /// Swap values but leave comments and source offsets in place. + void swapPayload(Value& other); + + ValueType type() const; + + /// Compare payload only, not comments etc. + bool operator<(const Value& other) const; + bool operator<=(const Value& other) const; + bool operator>=(const Value& other) const; + bool operator>(const Value& other) const; + bool operator==(const Value& other) const; + bool operator!=(const Value& other) const; + int compare(const Value& other) const; + + const char* asCString() const; ///< Embedded zeroes could cause you trouble! +#if JSONCPP_USING_SECURE_MEMORY + unsigned getCStringLength() const; //Allows you to understand the length of the CString +#endif + JSONCPP_STRING asString() const; ///< Embedded zeroes are possible. + /** Get raw char* of string-value. + * \return false if !string. (Seg-fault if str or end are NULL.) + */ + bool getString( + char const** begin, char const** end) const; +#ifdef JSON_USE_CPPTL + CppTL::ConstString asConstString() const; +#endif + Int asInt() const; + UInt asUInt() const; +#if defined(JSON_HAS_INT64) + Int64 asInt64() const; + UInt64 asUInt64() const; +#endif // if defined(JSON_HAS_INT64) + LargestInt asLargestInt() const; + LargestUInt asLargestUInt() const; + float asFloat() const; + double asDouble() const; + bool asBool() const; + + bool isNull() const; + bool isBool() const; + bool isInt() const; + bool isInt64() const; + bool isUInt() const; + bool isUInt64() const; + bool isIntegral() const; + bool isDouble() const; + bool isNumeric() const; + bool isString() const; + bool isArray() const; + bool isObject() const; + + bool isConvertibleTo(ValueType other) const; + + /// Number of values in array or object + ArrayIndex size() const; + + /// \brief Return true if empty array, empty object, or null; + /// otherwise, false. + bool empty() const; + + /// Return isNull() + bool operator!() const; + + /// Remove all object members and array elements. + /// \pre type() is arrayValue, objectValue, or nullValue + /// \post type() is unchanged + void clear(); + + /// Resize the array to size elements. + /// New elements are initialized to null. + /// May only be called on nullValue or arrayValue. + /// \pre type() is arrayValue or nullValue + /// \post type() is arrayValue + void resize(ArrayIndex size); + + /// Access an array element (zero based index ). + /// If the array contains less than index element, then null value are + /// inserted + /// in the array so that its size is index+1. + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + Value& operator[](ArrayIndex index); + + /// Access an array element (zero based index ). + /// If the array contains less than index element, then null value are + /// inserted + /// in the array so that its size is index+1. + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + Value& operator[](int index); + + /// Access an array element (zero based index ) + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + const Value& operator[](ArrayIndex index) const; + + /// Access an array element (zero based index ) + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + const Value& operator[](int index) const; + + /// If the array contains at least index+1 elements, returns the element + /// value, + /// otherwise returns defaultValue. + Value get(ArrayIndex index, const Value& defaultValue) const; + /// Return true if index < size(). + bool isValidIndex(ArrayIndex index) const; + /// \brief Append value to array at the end. + /// + /// Equivalent to jsonvalue[jsonvalue.size()] = value; + Value& append(const Value& value); + + /// Access an object value by name, create a null member if it does not exist. + /// \note Because of our implementation, keys are limited to 2^30 -1 chars. + /// Exceeding that will cause an exception. + Value& operator[](const char* key); + /// Access an object value by name, returns null if there is no member with + /// that name. + const Value& operator[](const char* key) const; + /// Access an object value by name, create a null member if it does not exist. + /// \param key may contain embedded nulls. + Value& operator[](const JSONCPP_STRING& key); + /// Access an object value by name, returns null if there is no member with + /// that name. + /// \param key may contain embedded nulls. + const Value& operator[](const JSONCPP_STRING& key) const; + /** \brief Access an object value by name, create a null member if it does not + exist. + + * If the object has no entry for that name, then the member name used to store + * the new entry is not duplicated. + * Example of use: + * \code + * Json::Value object; + * static const StaticString code("code"); + * object[code] = 1234; + * \endcode + */ + Value& operator[](const StaticString& key); +#ifdef JSON_USE_CPPTL + /// Access an object value by name, create a null member if it does not exist. + Value& operator[](const CppTL::ConstString& key); + /// Access an object value by name, returns null if there is no member with + /// that name. + const Value& operator[](const CppTL::ConstString& key) const; +#endif + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + Value get(const char* key, const Value& defaultValue) const; + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + /// \note key may contain embedded nulls. + Value get(const char* begin, const char* end, const Value& defaultValue) const; + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + /// \param key may contain embedded nulls. + Value get(const JSONCPP_STRING& key, const Value& defaultValue) const; +#ifdef JSON_USE_CPPTL + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + Value get(const CppTL::ConstString& key, const Value& defaultValue) const; +#endif + /// Most general and efficient version of isMember()const, get()const, + /// and operator[]const + /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 + Value const* find(char const* begin, char const* end) const; + /// Most general and efficient version of object-mutators. + /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 + /// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue. + Value const* demand(char const* begin, char const* end); + /// \brief Remove and return the named member. + /// + /// Do nothing if it did not exist. + /// \return the removed Value, or null. + /// \pre type() is objectValue or nullValue + /// \post type() is unchanged + /// \deprecated + Value removeMember(const char* key); + /// Same as removeMember(const char*) + /// \param key may contain embedded nulls. + /// \deprecated + Value removeMember(const JSONCPP_STRING& key); + /// Same as removeMember(const char* begin, const char* end, Value* removed), + /// but 'key' is null-terminated. + bool removeMember(const char* key, Value* removed); + /** \brief Remove the named map member. + + Update 'removed' iff removed. + \param key may contain embedded nulls. + \return true iff removed (no exceptions) + */ + bool removeMember(JSONCPP_STRING const& key, Value* removed); + /// Same as removeMember(JSONCPP_STRING const& key, Value* removed) + bool removeMember(const char* begin, const char* end, Value* removed); + /** \brief Remove the indexed array element. + + O(n) expensive operations. + Update 'removed' iff removed. + \return true iff removed (no exceptions) + */ + bool removeIndex(ArrayIndex i, Value* removed); + + /// Return true if the object has a member named key. + /// \note 'key' must be null-terminated. + bool isMember(const char* key) const; + /// Return true if the object has a member named key. + /// \param key may contain embedded nulls. + bool isMember(const JSONCPP_STRING& key) const; + /// Same as isMember(JSONCPP_STRING const& key)const + bool isMember(const char* begin, const char* end) const; +#ifdef JSON_USE_CPPTL + /// Return true if the object has a member named key. + bool isMember(const CppTL::ConstString& key) const; +#endif + + /// \brief Return a list of the member names. + /// + /// If null, return an empty list. + /// \pre type() is objectValue or nullValue + /// \post if type() was nullValue, it remains nullValue + Members getMemberNames() const; + + //# ifdef JSON_USE_CPPTL + // EnumMemberNames enumMemberNames() const; + // EnumValues enumValues() const; + //# endif + + /// \deprecated Always pass len. + JSONCPP_DEPRECATED("Use setComment(JSONCPP_STRING const&) instead.") + void setComment(const char* comment, CommentPlacement placement); + /// Comments must be //... or /* ... */ + void setComment(const char* comment, size_t len, CommentPlacement placement); + /// Comments must be //... or /* ... */ + void setComment(const JSONCPP_STRING& comment, CommentPlacement placement); + bool hasComment(CommentPlacement placement) const; + /// Include delimiters and embedded newlines. + JSONCPP_STRING getComment(CommentPlacement placement) const; + + JSONCPP_STRING toStyledString() const; + + const_iterator begin() const; + const_iterator end() const; + + iterator begin(); + iterator end(); + + // Accessors for the [start, limit) range of bytes within the JSON text from + // which this value was parsed, if any. + void setOffsetStart(ptrdiff_t start); + void setOffsetLimit(ptrdiff_t limit); + ptrdiff_t getOffsetStart() const; + ptrdiff_t getOffsetLimit() const; + +private: + void initBasic(ValueType type, bool allocated = false); + + Value& resolveReference(const char* key); + Value& resolveReference(const char* key, const char* end); + + struct CommentInfo { + CommentInfo(); + ~CommentInfo(); + + void setComment(const char* text, size_t len); + + char* comment_; + }; + + // struct MemberNamesTransform + //{ + // typedef const char *result_type; + // const char *operator()( const CZString &name ) const + // { + // return name.c_str(); + // } + //}; + + union ValueHolder { + LargestInt int_; + LargestUInt uint_; + double real_; + bool bool_; + char* string_; // actually ptr to unsigned, followed by str, unless !allocated_ + ObjectValues* map_; + } value_; + ValueType type_ : 8; + unsigned int allocated_ : 1; // Notes: if declared as bool, bitfield is useless. + // If not allocated_, string_ must be null-terminated. + CommentInfo* comments_; + + // [start, limit) byte offsets in the source JSON text from which this Value + // was extracted. + ptrdiff_t start_; + ptrdiff_t limit_; +}; + +/** \brief Experimental and untested: represents an element of the "path" to + * access a node. + */ +class JSON_API PathArgument { +public: + friend class Path; + + PathArgument(); + PathArgument(ArrayIndex index); + PathArgument(const char* key); + PathArgument(const JSONCPP_STRING& key); + +private: + enum Kind { + kindNone = 0, + kindIndex, + kindKey + }; + JSONCPP_STRING key_; + ArrayIndex index_; + Kind kind_; +}; + +/** \brief Experimental and untested: represents a "path" to access a node. + * + * Syntax: + * - "." => root node + * - ".[n]" => elements at index 'n' of root node (an array value) + * - ".name" => member named 'name' of root node (an object value) + * - ".name1.name2.name3" + * - ".[0][1][2].name1[3]" + * - ".%" => member name is provided as parameter + * - ".[%]" => index is provied as parameter + */ +class JSON_API Path { +public: + Path(const JSONCPP_STRING& path, + const PathArgument& a1 = PathArgument(), + const PathArgument& a2 = PathArgument(), + const PathArgument& a3 = PathArgument(), + const PathArgument& a4 = PathArgument(), + const PathArgument& a5 = PathArgument()); + + const Value& resolve(const Value& root) const; + Value resolve(const Value& root, const Value& defaultValue) const; + /// Creates the "path" to access the specified node and returns a reference on + /// the node. + Value& make(Value& root) const; + +private: + typedef std::vector<const PathArgument*> InArgs; + typedef std::vector<PathArgument> Args; + + void makePath(const JSONCPP_STRING& path, const InArgs& in); + void addPathInArg(const JSONCPP_STRING& path, + const InArgs& in, + InArgs::const_iterator& itInArg, + PathArgument::Kind kind); + void invalidPath(const JSONCPP_STRING& path, int location); + + Args args_; +}; + +/** \brief base class for Value iterators. + * + */ +class JSON_API ValueIteratorBase { +public: + typedef std::bidirectional_iterator_tag iterator_category; + typedef unsigned int size_t; + typedef int difference_type; + typedef ValueIteratorBase SelfType; + + bool operator==(const SelfType& other) const { return isEqual(other); } + + bool operator!=(const SelfType& other) const { return !isEqual(other); } + + difference_type operator-(const SelfType& other) const { + return other.computeDistance(*this); + } + + /// Return either the index or the member name of the referenced value as a + /// Value. + Value key() const; + + /// Return the index of the referenced Value, or -1 if it is not an arrayValue. + UInt index() const; + + /// Return the member name of the referenced Value, or "" if it is not an + /// objectValue. + /// \note Avoid `c_str()` on result, as embedded zeroes are possible. + JSONCPP_STRING name() const; + + /// Return the member name of the referenced Value. "" if it is not an + /// objectValue. + /// \deprecated This cannot be used for UTF-8 strings, since there can be embedded nulls. + JSONCPP_DEPRECATED("Use `key = name();` instead.") + char const* memberName() const; + /// Return the member name of the referenced Value, or NULL if it is not an + /// objectValue. + /// \note Better version than memberName(). Allows embedded nulls. + char const* memberName(char const** end) const; + +protected: + Value& deref() const; + + void increment(); + + void decrement(); + + difference_type computeDistance(const SelfType& other) const; + + bool isEqual(const SelfType& other) const; + + void copy(const SelfType& other); + +private: + Value::ObjectValues::iterator current_; + // Indicates that iterator is for a null value. + bool isNull_; + +public: + // For some reason, BORLAND needs these at the end, rather + // than earlier. No idea why. + ValueIteratorBase(); + explicit ValueIteratorBase(const Value::ObjectValues::iterator& current); +}; + +/** \brief const iterator for object and array value. + * + */ +class JSON_API ValueConstIterator : public ValueIteratorBase { + friend class Value; + +public: + typedef const Value value_type; + //typedef unsigned int size_t; + //typedef int difference_type; + typedef const Value& reference; + typedef const Value* pointer; + typedef ValueConstIterator SelfType; + + ValueConstIterator(); + ValueConstIterator(ValueIterator const& other); + +private: +/*! \internal Use by Value to create an iterator. + */ + explicit ValueConstIterator(const Value::ObjectValues::iterator& current); +public: + SelfType& operator=(const ValueIteratorBase& other); + + SelfType operator++(int) { + SelfType temp(*this); + ++*this; + return temp; + } + + SelfType operator--(int) { + SelfType temp(*this); + --*this; + return temp; + } + + SelfType& operator--() { + decrement(); + return *this; + } + + SelfType& operator++() { + increment(); + return *this; + } + + reference operator*() const { return deref(); } + + pointer operator->() const { return &deref(); } +}; + +/** \brief Iterator for object and array value. + */ +class JSON_API ValueIterator : public ValueIteratorBase { + friend class Value; + +public: + typedef Value value_type; + typedef unsigned int size_t; + typedef int difference_type; + typedef Value& reference; + typedef Value* pointer; + typedef ValueIterator SelfType; + + ValueIterator(); + explicit ValueIterator(const ValueConstIterator& other); + ValueIterator(const ValueIterator& other); + +private: +/*! \internal Use by Value to create an iterator. + */ + explicit ValueIterator(const Value::ObjectValues::iterator& current); +public: + SelfType& operator=(const SelfType& other); + + SelfType operator++(int) { + SelfType temp(*this); + ++*this; + return temp; + } + + SelfType operator--(int) { + SelfType temp(*this); + --*this; + return temp; + } + + SelfType& operator--() { + decrement(); + return *this; + } + + SelfType& operator++() { + increment(); + return *this; + } + + reference operator*() const { return deref(); } + + pointer operator->() const { return &deref(); } +}; + +} // namespace Json + + +namespace std { +/// Specialize std::swap() for Json::Value. +template<> +inline void swap(Json::Value& a, Json::Value& b) { a.swap(b); } +} + + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // CPPTL_JSON_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/value.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/reader.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_READER_H_INCLUDED +#define CPPTL_JSON_READER_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "features.h" +#include "value.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <deque> +#include <iosfwd> +#include <stack> +#include <string> +#include <istream> + +// Disable warning C4251: <data member>: <type> needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +namespace Json { + +/** \brief Unserialize a <a HREF="http://www.json.org">JSON</a> document into a + *Value. + * + * \deprecated Use CharReader and CharReaderBuilder. + */ +class JSON_API Reader { +public: + typedef char Char; + typedef const Char* Location; + + /** \brief An error tagged with where in the JSON text it was encountered. + * + * The offsets give the [start, limit) range of bytes within the text. Note + * that this is bytes, not codepoints. + * + */ + struct StructuredError { + ptrdiff_t offset_start; + ptrdiff_t offset_limit; + JSONCPP_STRING message; + }; + + /** \brief Constructs a Reader allowing all features + * for parsing. + */ + Reader(); + + /** \brief Constructs a Reader allowing the specified feature set + * for parsing. + */ + Reader(const Features& features); + + /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a> + * document. + * \param document UTF-8 encoded string containing the document to read. + * \param root [out] Contains the root value of the document if it was + * successfully parsed. + * \param collectComments \c true to collect comment and allow writing them + * back during + * serialization, \c false to discard comments. + * This parameter is ignored if + * Features::allowComments_ + * is \c false. + * \return \c true if the document was successfully parsed, \c false if an + * error occurred. + */ + bool + parse(const std::string& document, Value& root, bool collectComments = true); + + /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a> + document. + * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the + document to read. + * \param endDoc Pointer on the end of the UTF-8 encoded string of the + document to read. + * Must be >= beginDoc. + * \param root [out] Contains the root value of the document if it was + * successfully parsed. + * \param collectComments \c true to collect comment and allow writing them + back during + * serialization, \c false to discard comments. + * This parameter is ignored if + Features::allowComments_ + * is \c false. + * \return \c true if the document was successfully parsed, \c false if an + error occurred. + */ + bool parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments = true); + + /// \brief Parse from input stream. + /// \see Json::operator>>(std::istream&, Json::Value&). + bool parse(JSONCPP_ISTREAM& is, Value& root, bool collectComments = true); + + /** \brief Returns a user friendly string that list errors in the parsed + * document. + * \return Formatted error message with the list of errors with their location + * in + * the parsed document. An empty string is returned if no error + * occurred + * during parsing. + * \deprecated Use getFormattedErrorMessages() instead (typo fix). + */ + JSONCPP_DEPRECATED("Use getFormattedErrorMessages() instead.") + JSONCPP_STRING getFormatedErrorMessages() const; + + /** \brief Returns a user friendly string that list errors in the parsed + * document. + * \return Formatted error message with the list of errors with their location + * in + * the parsed document. An empty string is returned if no error + * occurred + * during parsing. + */ + JSONCPP_STRING getFormattedErrorMessages() const; + + /** \brief Returns a vector of structured erros encounted while parsing. + * \return A (possibly empty) vector of StructuredError objects. Currently + * only one error can be returned, but the caller should tolerate + * multiple + * errors. This can occur if the parser recovers from a non-fatal + * parse error and then encounters additional errors. + */ + std::vector<StructuredError> getStructuredErrors() const; + + /** \brief Add a semantic error message. + * \param value JSON Value location associated with the error + * \param message The error message. + * \return \c true if the error was successfully added, \c false if the + * Value offset exceeds the document size. + */ + bool pushError(const Value& value, const JSONCPP_STRING& message); + + /** \brief Add a semantic error message with extra context. + * \param value JSON Value location associated with the error + * \param message The error message. + * \param extra Additional JSON Value location to contextualize the error + * \return \c true if the error was successfully added, \c false if either + * Value offset exceeds the document size. + */ + bool pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra); + + /** \brief Return whether there are any errors. + * \return \c true if there are no errors to report \c false if + * errors have occurred. + */ + bool good() const; + +private: + enum TokenType { + tokenEndOfStream = 0, + tokenObjectBegin, + tokenObjectEnd, + tokenArrayBegin, + tokenArrayEnd, + tokenString, + tokenNumber, + tokenTrue, + tokenFalse, + tokenNull, + tokenArraySeparator, + tokenMemberSeparator, + tokenComment, + tokenError + }; + + class Token { + public: + TokenType type_; + Location start_; + Location end_; + }; + + class ErrorInfo { + public: + Token token_; + JSONCPP_STRING message_; + Location extra_; + }; + + typedef std::deque<ErrorInfo> Errors; + + bool readToken(Token& token); + void skipSpaces(); + bool match(Location pattern, int patternLength); + bool readComment(); + bool readCStyleComment(); + bool readCppStyleComment(); + bool readString(); + void readNumber(); + bool readValue(); + bool readObject(Token& token); + bool readArray(Token& token); + bool decodeNumber(Token& token); + bool decodeNumber(Token& token, Value& decoded); + bool decodeString(Token& token); + bool decodeString(Token& token, JSONCPP_STRING& decoded); + bool decodeDouble(Token& token); + bool decodeDouble(Token& token, Value& decoded); + bool decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool addError(const JSONCPP_STRING& message, Token& token, Location extra = 0); + bool recoverFromError(TokenType skipUntilToken); + bool addErrorAndRecover(const JSONCPP_STRING& message, + Token& token, + TokenType skipUntilToken); + void skipUntilSpace(); + Value& currentValue(); + Char getNextChar(); + void + getLocationLineAndColumn(Location location, int& line, int& column) const; + JSONCPP_STRING getLocationLineAndColumn(Location location) const; + void addComment(Location begin, Location end, CommentPlacement placement); + void skipCommentTokens(Token& token); + + typedef std::stack<Value*> Nodes; + Nodes nodes_; + Errors errors_; + JSONCPP_STRING document_; + Location begin_; + Location end_; + Location current_; + Location lastValueEnd_; + Value* lastValue_; + JSONCPP_STRING commentsBefore_; + Features features_; + bool collectComments_; +}; // Reader + +/** Interface for reading JSON from a char array. + */ +class JSON_API CharReader { +public: + virtual ~CharReader() {} + /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a> + document. + * The document must be a UTF-8 encoded string containing the document to read. + * + * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of the + document to read. + * \param endDoc Pointer on the end of the UTF-8 encoded string of the + document to read. + * Must be >= beginDoc. + * \param root [out] Contains the root value of the document if it was + * successfully parsed. + * \param errs [out] Formatted error messages (if not NULL) + * a user friendly string that lists errors in the parsed + * document. + * \return \c true if the document was successfully parsed, \c false if an + error occurred. + */ + virtual bool parse( + char const* beginDoc, char const* endDoc, + Value* root, JSONCPP_STRING* errs) = 0; + + class JSON_API Factory { + public: + virtual ~Factory() {} + /** \brief Allocate a CharReader via operator new(). + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + virtual CharReader* newCharReader() const = 0; + }; // Factory +}; // CharReader + +/** \brief Build a CharReader implementation. + +Usage: +\code + using namespace Json; + CharReaderBuilder builder; + builder["collectComments"] = false; + Value value; + JSONCPP_STRING errs; + bool ok = parseFromStream(builder, std::cin, &value, &errs); +\endcode +*/ +class JSON_API CharReaderBuilder : public CharReader::Factory { +public: + // Note: We use a Json::Value so that we can add data-members to this class + // without a major version bump. + /** Configuration of this builder. + These are case-sensitive. + Available settings (case-sensitive): + - `"collectComments": false or true` + - true to collect comment and allow writing them + back during serialization, false to discard comments. + This parameter is ignored if allowComments is false. + - `"allowComments": false or true` + - true if comments are allowed. + - `"strictRoot": false or true` + - true if root must be either an array or an object value + - `"allowDroppedNullPlaceholders": false or true` + - true if dropped null placeholders are allowed. (See StreamWriterBuilder.) + - `"allowNumericKeys": false or true` + - true if numeric object keys are allowed. + - `"allowSingleQuotes": false or true` + - true if '' are allowed for strings (both keys and values) + - `"stackLimit": integer` + - Exceeding stackLimit (recursive depth of `readValue()`) will + cause an exception. + - This is a security issue (seg-faults caused by deeply nested JSON), + so the default is low. + - `"failIfExtra": false or true` + - If true, `parse()` returns false when extra non-whitespace trails + the JSON value in the input string. + - `"rejectDupKeys": false or true` + - If true, `parse()` returns false when a key is duplicated within an object. + - `"allowSpecialFloats": false or true` + - If true, special float values (NaNs and infinities) are allowed + and their values are lossfree restorable. + + You can examine 'settings_` yourself + to see the defaults. You can also write and read them just like any + JSON Value. + \sa setDefaults() + */ + Json::Value settings_; + + CharReaderBuilder(); + ~CharReaderBuilder() JSONCPP_OVERRIDE; + + CharReader* newCharReader() const JSONCPP_OVERRIDE; + + /** \return true if 'settings' are legal and consistent; + * otherwise, indicate bad settings via 'invalid'. + */ + bool validate(Json::Value* invalid) const; + + /** A simple way to update a specific setting. + */ + Value& operator[](JSONCPP_STRING key); + + /** Called by ctor, but you can use this to reset settings_. + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_reader.cpp CharReaderBuilderDefaults + */ + static void setDefaults(Json::Value* settings); + /** Same as old Features::strictMode(). + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_reader.cpp CharReaderBuilderStrictMode + */ + static void strictMode(Json::Value* settings); +}; + +/** Consume entire stream and use its begin/end. + * Someday we might have a real StreamReader, but for now this + * is convenient. + */ +bool JSON_API parseFromStream( + CharReader::Factory const&, + JSONCPP_ISTREAM&, + Value* root, std::string* errs); + +/** \brief Read from 'sin' into 'root'. + + Always keep comments from the input JSON. + + This can be used to read a file into a particular sub-object. + For example: + \code + Json::Value root; + cin >> root["dir"]["file"]; + cout << root; + \endcode + Result: + \verbatim + { + "dir": { + "file": { + // The input stream JSON would be nested here. + } + } + } + \endverbatim + \throw std::exception on parse error. + \see Json::operator<<() +*/ +JSON_API JSONCPP_ISTREAM& operator>>(JSONCPP_ISTREAM&, Value&); + +} // namespace Json + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // CPPTL_JSON_READER_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/reader.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/writer.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_WRITER_H_INCLUDED +#define JSON_WRITER_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "value.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <vector> +#include <string> +#include <ostream> + +// Disable warning C4251: <data member>: <type> needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +namespace Json { + +class Value; + +/** + +Usage: +\code + using namespace Json; + void writeToStdout(StreamWriter::Factory const& factory, Value const& value) { + std::unique_ptr<StreamWriter> const writer( + factory.newStreamWriter()); + writer->write(value, &std::cout); + std::cout << std::endl; // add lf and flush + } +\endcode +*/ +class JSON_API StreamWriter { +protected: + JSONCPP_OSTREAM* sout_; // not owned; will not delete +public: + StreamWriter(); + virtual ~StreamWriter(); + /** Write Value into document as configured in sub-class. + Do not take ownership of sout, but maintain a reference during function. + \pre sout != NULL + \return zero on success (For now, we always return zero, so check the stream instead.) + \throw std::exception possibly, depending on configuration + */ + virtual int write(Value const& root, JSONCPP_OSTREAM* sout) = 0; + + /** \brief A simple abstract factory. + */ + class JSON_API Factory { + public: + virtual ~Factory(); + /** \brief Allocate a CharReader via operator new(). + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + virtual StreamWriter* newStreamWriter() const = 0; + }; // Factory +}; // StreamWriter + +/** \brief Write into stringstream, then return string, for convenience. + * A StreamWriter will be created from the factory, used, and then deleted. + */ +JSONCPP_STRING JSON_API writeString(StreamWriter::Factory const& factory, Value const& root); + + +/** \brief Build a StreamWriter implementation. + +Usage: +\code + using namespace Json; + Value value = ...; + StreamWriterBuilder builder; + builder["commentStyle"] = "None"; + builder["indentation"] = " "; // or whatever you like + std::unique_ptr<Json::StreamWriter> writer( + builder.newStreamWriter()); + writer->write(value, &std::cout); + std::cout << std::endl; // add lf and flush +\endcode +*/ +class JSON_API StreamWriterBuilder : public StreamWriter::Factory { +public: + // Note: We use a Json::Value so that we can add data-members to this class + // without a major version bump. + /** Configuration of this builder. + Available settings (case-sensitive): + - "commentStyle": "None" or "All" + - "indentation": "<anything>" + - "enableYAMLCompatibility": false or true + - slightly change the whitespace around colons + - "dropNullPlaceholders": false or true + - Drop the "null" string from the writer's output for nullValues. + Strictly speaking, this is not valid JSON. But when the output is being + fed to a browser's Javascript, it makes for smaller output and the + browser can handle the output just fine. + - "useSpecialFloats": false or true + - If true, outputs non-finite floating point values in the following way: + NaN values as "NaN", positive infinity as "Infinity", and negative infinity + as "-Infinity". + + You can examine 'settings_` yourself + to see the defaults. You can also write and read them just like any + JSON Value. + \sa setDefaults() + */ + Json::Value settings_; + + StreamWriterBuilder(); + ~StreamWriterBuilder() JSONCPP_OVERRIDE; + + /** + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + StreamWriter* newStreamWriter() const JSONCPP_OVERRIDE; + + /** \return true if 'settings' are legal and consistent; + * otherwise, indicate bad settings via 'invalid'. + */ + bool validate(Json::Value* invalid) const; + /** A simple way to update a specific setting. + */ + Value& operator[](JSONCPP_STRING key); + + /** Called by ctor, but you can use this to reset settings_. + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_writer.cpp StreamWriterBuilderDefaults + */ + static void setDefaults(Json::Value* settings); +}; + +/** \brief Abstract class for writers. + * \deprecated Use StreamWriter. (And really, this is an implementation detail.) + */ +class JSON_API Writer { +public: + virtual ~Writer(); + + virtual JSONCPP_STRING write(const Value& root) = 0; +}; + +/** \brief Outputs a Value in <a HREF="http://www.json.org">JSON</a> format + *without formatting (not human friendly). + * + * The JSON document is written in a single line. It is not intended for 'human' + *consumption, + * but may be usefull to support feature such as RPC where bandwith is limited. + * \sa Reader, Value + * \deprecated Use StreamWriterBuilder. + */ +class JSON_API FastWriter : public Writer { + +public: + FastWriter(); + ~FastWriter() JSONCPP_OVERRIDE {} + + void enableYAMLCompatibility(); + + /** \brief Drop the "null" string from the writer's output for nullValues. + * Strictly speaking, this is not valid JSON. But when the output is being + * fed to a browser's Javascript, it makes for smaller output and the + * browser can handle the output just fine. + */ + void dropNullPlaceholders(); + + void omitEndingLineFeed(); + +public: // overridden from Writer + JSONCPP_STRING write(const Value& root) JSONCPP_OVERRIDE; + +private: + void writeValue(const Value& value); + + JSONCPP_STRING document_; + bool yamlCompatiblityEnabled_; + bool dropNullPlaceholders_; + bool omitEndingLineFeed_; +}; + +/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a + *human friendly way. + * + * The rules for line break and indent are as follow: + * - Object value: + * - if empty then print {} without indent and line break + * - if not empty the print '{', line break & indent, print one value per + *line + * and then unindent and line break and print '}'. + * - Array value: + * - if empty then print [] without indent and line break + * - if the array contains no object value, empty array or some other value + *types, + * and all the values fit on one lines, then print the array on a single + *line. + * - otherwise, it the values do not fit on one line, or the array contains + * object or non empty array, then print one value per line. + * + * If the Value have comments then they are outputed according to their + *#CommentPlacement. + * + * \sa Reader, Value, Value::setComment() + * \deprecated Use StreamWriterBuilder. + */ +class JSON_API StyledWriter : public Writer { +public: + StyledWriter(); + ~StyledWriter() JSONCPP_OVERRIDE {} + +public: // overridden from Writer + /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format. + * \param root Value to serialize. + * \return String containing the JSON document that represents the root value. + */ + JSONCPP_STRING write(const Value& root) JSONCPP_OVERRIDE; + +private: + void writeValue(const Value& value); + void writeArrayValue(const Value& value); + bool isMultineArray(const Value& value); + void pushValue(const JSONCPP_STRING& value); + void writeIndent(); + void writeWithIndent(const JSONCPP_STRING& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(const Value& root); + void writeCommentAfterValueOnSameLine(const Value& root); + bool hasCommentForValue(const Value& value); + static JSONCPP_STRING normalizeEOL(const JSONCPP_STRING& text); + + typedef std::vector<JSONCPP_STRING> ChildValues; + + ChildValues childValues_; + JSONCPP_STRING document_; + JSONCPP_STRING indentString_; + unsigned int rightMargin_; + unsigned int indentSize_; + bool addChildValues_; +}; + +/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a + human friendly way, + to a stream rather than to a string. + * + * The rules for line break and indent are as follow: + * - Object value: + * - if empty then print {} without indent and line break + * - if not empty the print '{', line break & indent, print one value per + line + * and then unindent and line break and print '}'. + * - Array value: + * - if empty then print [] without indent and line break + * - if the array contains no object value, empty array or some other value + types, + * and all the values fit on one lines, then print the array on a single + line. + * - otherwise, it the values do not fit on one line, or the array contains + * object or non empty array, then print one value per line. + * + * If the Value have comments then they are outputed according to their + #CommentPlacement. + * + * \param indentation Each level will be indented by this amount extra. + * \sa Reader, Value, Value::setComment() + * \deprecated Use StreamWriterBuilder. + */ +class JSON_API StyledStreamWriter { +public: + StyledStreamWriter(JSONCPP_STRING indentation = "\t"); + ~StyledStreamWriter() {} + +public: + /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format. + * \param out Stream to write to. (Can be ostringstream, e.g.) + * \param root Value to serialize. + * \note There is no point in deriving from Writer, since write() should not + * return a value. + */ + void write(JSONCPP_OSTREAM& out, const Value& root); + +private: + void writeValue(const Value& value); + void writeArrayValue(const Value& value); + bool isMultineArray(const Value& value); + void pushValue(const JSONCPP_STRING& value); + void writeIndent(); + void writeWithIndent(const JSONCPP_STRING& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(const Value& root); + void writeCommentAfterValueOnSameLine(const Value& root); + bool hasCommentForValue(const Value& value); + static JSONCPP_STRING normalizeEOL(const JSONCPP_STRING& text); + + typedef std::vector<JSONCPP_STRING> ChildValues; + + ChildValues childValues_; + JSONCPP_OSTREAM* document_; + JSONCPP_STRING indentString_; + unsigned int rightMargin_; + JSONCPP_STRING indentation_; + bool addChildValues_ : 1; + bool indented_ : 1; +}; + +#if defined(JSON_HAS_INT64) +JSONCPP_STRING JSON_API valueToString(Int value); +JSONCPP_STRING JSON_API valueToString(UInt value); +#endif // if defined(JSON_HAS_INT64) +JSONCPP_STRING JSON_API valueToString(LargestInt value); +JSONCPP_STRING JSON_API valueToString(LargestUInt value); +JSONCPP_STRING JSON_API valueToString(double value); +JSONCPP_STRING JSON_API valueToString(bool value); +JSONCPP_STRING JSON_API valueToQuotedString(const char* value); + +/// \brief Output using the StyledStreamWriter. +/// \see Json::operator>>() +JSON_API JSONCPP_OSTREAM& operator<<(JSONCPP_OSTREAM&, const Value& root); + +} // namespace Json + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // JSON_WRITER_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/writer.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: include/json/assertions.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_ASSERTIONS_H_INCLUDED +#define CPPTL_JSON_ASSERTIONS_H_INCLUDED + +#include <stdlib.h> +#include <sstream> + +#if !defined(JSON_IS_AMALGAMATION) +#include "config.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +/** It should not be possible for a maliciously designed file to + * cause an abort() or seg-fault, so these macros are used only + * for pre-condition violations and internal logic errors. + */ +#if JSON_USE_EXCEPTION + +// @todo <= add detail about condition in exception +# define JSON_ASSERT(condition) \ + {if (!(condition)) {Json::throwLogicError( "assert json failed" );}} + +# define JSON_FAIL_MESSAGE(message) \ + { \ + JSONCPP_OSTRINGSTREAM oss; oss << message; \ + Json::throwLogicError(oss.str()); \ + abort(); \ + } + +#else // JSON_USE_EXCEPTION + +# define JSON_ASSERT(condition) assert(condition) + +// The call to assert() will show the failure message in debug builds. In +// release builds we abort, for a core-dump or debugger. +# define JSON_FAIL_MESSAGE(message) \ + { \ + JSONCPP_OSTRINGSTREAM oss; oss << message; \ + assert(false && oss.str().c_str()); \ + abort(); \ + } + + +#endif + +#define JSON_ASSERT_MESSAGE(condition, message) \ + if (!(condition)) { \ + JSON_FAIL_MESSAGE(message); \ + } + +#endif // CPPTL_JSON_ASSERTIONS_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: include/json/assertions.h +// ////////////////////////////////////////////////////////////////////// + + + + + +#endif //ifndef JSON_AMALGATED_H_INCLUDED diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/third_party/jsoncpp.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/third_party/jsoncpp.cpp new file mode 100644 index 0000000..6ec7dde --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/third_party/jsoncpp.cpp @@ -0,0 +1,5290 @@ +/// Json-cpp amalgated source (http://jsoncpp.sourceforge.net/). +/// It is intended to be used with #include "json/json.h" + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + +/* +The JsonCpp library's source code, including accompanying documentation, +tests and demonstration applications, are licensed under the following +conditions... + +The author (Baptiste Lepilleur) explicitly disclaims copyright in all +jurisdictions which recognize such a disclaimer. In such jurisdictions, +this software is released into the Public Domain. + +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is +released under the terms of the MIT License (see below). + +In jurisdictions which recognize Public Domain property, the user of this +software may choose to accept it either as 1) Public Domain, 2) under the +conditions of the MIT License (see below), or 3) under the terms of dual +Public Domain/MIT License conditions described here, as they choose. + +The MIT License is about as close to Public Domain as a license can get, and is +described in clear, concise terms at: + + http://en.wikipedia.org/wiki/MIT_License + +The full text of the MIT License follows: + +======================================================================== +Copyright (c) 2007-2010 Baptiste Lepilleur + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +======================================================================== +(END LICENSE TEXT) + +The MIT license is compatible with both the GPL and commercial +software, affording one all of the rights of Public Domain with the +minor nuisance of being required to keep the above copyright notice +and license text in the source code. Note also that by accepting the +Public Domain "license" you can re-license your copy using whatever +license you like. + +*/ + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: LICENSE +// ////////////////////////////////////////////////////////////////////// + + + + + + +#include "json/json.h" + +#ifndef JSON_IS_AMALGAMATION +#error "Compile with -I PATH_TO_JSON_DIRECTORY" +#endif + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_tool.h +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED +#define LIB_JSONCPP_JSON_TOOL_H_INCLUDED + +#ifndef NO_LOCALE_SUPPORT +#include <clocale> +#endif + +/* This header provides common string manipulation support, such as UTF-8, + * portable conversion from/to string... + * + * It is an internal header that must not be exposed. + */ + +namespace Json { +static char getDecimalPoint() { +#ifdef NO_LOCALE_SUPPORT + return '\0'; +#else + struct lconv* lc = localeconv(); + return lc ? *(lc->decimal_point) : '\0'; +#endif +} + +/// Converts a unicode code-point to UTF-8. +static inline JSONCPP_STRING codePointToUTF8(unsigned int cp) { + JSONCPP_STRING result; + + // based on description from http://en.wikipedia.org/wiki/UTF-8 + + if (cp <= 0x7f) { + result.resize(1); + result[0] = static_cast<char>(cp); + } else if (cp <= 0x7FF) { + result.resize(2); + result[1] = static_cast<char>(0x80 | (0x3f & cp)); + result[0] = static_cast<char>(0xC0 | (0x1f & (cp >> 6))); + } else if (cp <= 0xFFFF) { + result.resize(3); + result[2] = static_cast<char>(0x80 | (0x3f & cp)); + result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 6))); + result[0] = static_cast<char>(0xE0 | (0xf & (cp >> 12))); + } else if (cp <= 0x10FFFF) { + result.resize(4); + result[3] = static_cast<char>(0x80 | (0x3f & cp)); + result[2] = static_cast<char>(0x80 | (0x3f & (cp >> 6))); + result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 12))); + result[0] = static_cast<char>(0xF0 | (0x7 & (cp >> 18))); + } + + return result; +} + +/// Returns true if ch is a control character (in range [1,31]). +static inline bool isControlCharacter(char ch) { return ch > 0 && ch <= 0x1F; } + +enum { + /// Constant that specify the size of the buffer that must be passed to + /// uintToString. + uintToStringBufferSize = 3 * sizeof(LargestUInt) + 1 +}; + +// Defines a char buffer for use with uintToString(). +typedef char UIntToStringBuffer[uintToStringBufferSize]; + +/** Converts an unsigned integer to string. + * @param value Unsigned interger to convert to string + * @param current Input/Output string buffer. + * Must have at least uintToStringBufferSize chars free. + */ +static inline void uintToString(LargestUInt value, char*& current) { + *--current = 0; + do { + *--current = static_cast<char>(value % 10U + static_cast<unsigned>('0')); + value /= 10; + } while (value != 0); +} + +/** Change ',' to '.' everywhere in buffer. + * + * We had a sophisticated way, but it did not work in WinCE. + * @see https://github.com/open-source-parsers/jsoncpp/pull/9 + */ +static inline void fixNumericLocale(char* begin, char* end) { + while (begin < end) { + if (*begin == ',') { + *begin = '.'; + } + ++begin; + } +} + +static inline void fixNumericLocaleInput(char* begin, char* end) { + char decimalPoint = getDecimalPoint(); + if (decimalPoint != '\0' && decimalPoint != '.') { + while (begin < end) { + if (*begin == '.') { + *begin = decimalPoint; + } + ++begin; + } + } +} + +} // namespace Json { + +#endif // LIB_JSONCPP_JSON_TOOL_H_INCLUDED + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_tool.h +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_reader.cpp +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2011 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#if !defined(JSON_IS_AMALGAMATION) +#include <json/assertions.h> +#include <json/reader.h> +#include <json/value.h> +#include "json_tool.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <utility> +#include <cstdio> +#include <cassert> +#include <cstring> +#include <istream> +#include <sstream> +#include <memory> +#include <set> +#include <limits> + +#if defined(_MSC_VER) +#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above +#define snprintf sprintf_s +#elif _MSC_VER >= 1900 // VC++ 14.0 and above +#define snprintf std::snprintf +#else +#define snprintf _snprintf +#endif +#elif defined(__ANDROID__) || defined(__QNXNTO__) +#define snprintf snprintf +#elif __cplusplus >= 201103L +#if !defined(__MINGW32__) && !defined(__CYGWIN__) +#define snprintf std::snprintf +#endif +#endif + +#if defined(__QNXNTO__) +#define sscanf std::sscanf +#endif + +#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0 +// Disable warning about strdup being deprecated. +#pragma warning(disable : 4996) +#endif + +static int const stackLimit_g = 1000; +static int stackDepth_g = 0; // see readValue() + +namespace Json { + +#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520) +typedef std::unique_ptr<CharReader> CharReaderPtr; +#else +typedef std::auto_ptr<CharReader> CharReaderPtr; +#endif + +// Implementation of class Features +// //////////////////////////////// + +Features::Features() + : allowComments_(true), strictRoot_(false), + allowDroppedNullPlaceholders_(false), allowNumericKeys_(false) {} + +Features Features::all() { return Features(); } + +Features Features::strictMode() { + Features features; + features.allowComments_ = false; + features.strictRoot_ = true; + features.allowDroppedNullPlaceholders_ = false; + features.allowNumericKeys_ = false; + return features; +} + +// Implementation of class Reader +// //////////////////////////////// + +static bool containsNewLine(Reader::Location begin, Reader::Location end) { + for (; begin < end; ++begin) + if (*begin == '\n' || *begin == '\r') + return true; + return false; +} + +// Class Reader +// ////////////////////////////////////////////////////////////////// + +Reader::Reader() + : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), + lastValue_(), commentsBefore_(), features_(Features::all()), + collectComments_() {} + +Reader::Reader(const Features& features) + : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), + lastValue_(), commentsBefore_(), features_(features), collectComments_() { +} + +bool +Reader::parse(const std::string& document, Value& root, bool collectComments) { + JSONCPP_STRING documentCopy(document.data(), document.data() + document.capacity()); + std::swap(documentCopy, document_); + const char* begin = document_.c_str(); + const char* end = begin + document_.length(); + return parse(begin, end, root, collectComments); +} + +bool Reader::parse(std::istream& sin, Value& root, bool collectComments) { + // std::istream_iterator<char> begin(sin); + // std::istream_iterator<char> end; + // Those would allow streamed input from a file, if parse() were a + // template function. + + // Since JSONCPP_STRING is reference-counted, this at least does not + // create an extra copy. + JSONCPP_STRING doc; + std::getline(sin, doc, (char)EOF); + return parse(doc.data(), doc.data() + doc.size(), root, collectComments); +} + +bool Reader::parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments) { + if (!features_.allowComments_) { + collectComments = false; + } + + begin_ = beginDoc; + end_ = endDoc; + collectComments_ = collectComments; + current_ = begin_; + lastValueEnd_ = 0; + lastValue_ = 0; + commentsBefore_ = ""; + errors_.clear(); + while (!nodes_.empty()) + nodes_.pop(); + nodes_.push(&root); + + stackDepth_g = 0; // Yes, this is bad coding, but options are limited. + bool successful = readValue(); + Token token; + skipCommentTokens(token); + if (collectComments_ && !commentsBefore_.empty()) + root.setComment(commentsBefore_, commentAfter); + if (features_.strictRoot_) { + if (!root.isArray() && !root.isObject()) { + // Set error location to start of doc, ideally should be first token found + // in doc + token.type_ = tokenError; + token.start_ = beginDoc; + token.end_ = endDoc; + addError( + "A valid JSON document must be either an array or an object value.", + token); + return false; + } + } + return successful; +} + +bool Reader::readValue() { + // This is a non-reentrant way to support a stackLimit. Terrible! + // But this deprecated class has a security problem: Bad input can + // cause a seg-fault. This seems like a fair, binary-compatible way + // to prevent the problem. + if (stackDepth_g >= stackLimit_g) throwRuntimeError("Exceeded stackLimit in readValue()."); + ++stackDepth_g; + + Token token; + skipCommentTokens(token); + bool successful = true; + + if (collectComments_ && !commentsBefore_.empty()) { + currentValue().setComment(commentsBefore_, commentBefore); + commentsBefore_ = ""; + } + + switch (token.type_) { + case tokenObjectBegin: + successful = readObject(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenArrayBegin: + successful = readArray(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenNumber: + successful = decodeNumber(token); + break; + case tokenString: + successful = decodeString(token); + break; + case tokenTrue: + { + Value v(true); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenFalse: + { + Value v(false); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNull: + { + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenArraySeparator: + case tokenObjectEnd: + case tokenArrayEnd: + if (features_.allowDroppedNullPlaceholders_) { + // "Un-read" the current token and mark the current value as a null + // token. + current_--; + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(current_ - begin_ - 1); + currentValue().setOffsetLimit(current_ - begin_); + break; + } // Else, fall through... + default: + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return addError("Syntax error: value, object or array expected.", token); + } + + if (collectComments_) { + lastValueEnd_ = current_; + lastValue_ = ¤tValue(); + } + + --stackDepth_g; + return successful; +} + +void Reader::skipCommentTokens(Token& token) { + if (features_.allowComments_) { + do { + readToken(token); + } while (token.type_ == tokenComment); + } else { + readToken(token); + } +} + +bool Reader::readToken(Token& token) { + skipSpaces(); + token.start_ = current_; + Char c = getNextChar(); + bool ok = true; + switch (c) { + case '{': + token.type_ = tokenObjectBegin; + break; + case '}': + token.type_ = tokenObjectEnd; + break; + case '[': + token.type_ = tokenArrayBegin; + break; + case ']': + token.type_ = tokenArrayEnd; + break; + case '"': + token.type_ = tokenString; + ok = readString(); + break; + case '/': + token.type_ = tokenComment; + ok = readComment(); + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '-': + token.type_ = tokenNumber; + readNumber(); + break; + case 't': + token.type_ = tokenTrue; + ok = match("rue", 3); + break; + case 'f': + token.type_ = tokenFalse; + ok = match("alse", 4); + break; + case 'n': + token.type_ = tokenNull; + ok = match("ull", 3); + break; + case ',': + token.type_ = tokenArraySeparator; + break; + case ':': + token.type_ = tokenMemberSeparator; + break; + case 0: + token.type_ = tokenEndOfStream; + break; + default: + ok = false; + break; + } + if (!ok) + token.type_ = tokenError; + token.end_ = current_; + return true; +} + +void Reader::skipSpaces() { + while (current_ != end_) { + Char c = *current_; + if (c == ' ' || c == '\t' || c == '\r' || c == '\n') + ++current_; + else + break; + } +} + +bool Reader::match(Location pattern, int patternLength) { + if (end_ - current_ < patternLength) + return false; + int index = patternLength; + while (index--) + if (current_[index] != pattern[index]) + return false; + current_ += patternLength; + return true; +} + +bool Reader::readComment() { + Location commentBegin = current_ - 1; + Char c = getNextChar(); + bool successful = false; + if (c == '*') + successful = readCStyleComment(); + else if (c == '/') + successful = readCppStyleComment(); + if (!successful) + return false; + + if (collectComments_) { + CommentPlacement placement = commentBefore; + if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) { + if (c != '*' || !containsNewLine(commentBegin, current_)) + placement = commentAfterOnSameLine; + } + + addComment(commentBegin, current_, placement); + } + return true; +} + +static JSONCPP_STRING normalizeEOL(Reader::Location begin, Reader::Location end) { + JSONCPP_STRING normalized; + normalized.reserve(static_cast<size_t>(end - begin)); + Reader::Location current = begin; + while (current != end) { + char c = *current++; + if (c == '\r') { + if (current != end && *current == '\n') + // convert dos EOL + ++current; + // convert Mac EOL + normalized += '\n'; + } else { + normalized += c; + } + } + return normalized; +} + +void +Reader::addComment(Location begin, Location end, CommentPlacement placement) { + assert(collectComments_); + const JSONCPP_STRING& normalized = normalizeEOL(begin, end); + if (placement == commentAfterOnSameLine) { + assert(lastValue_ != 0); + lastValue_->setComment(normalized, placement); + } else { + commentsBefore_ += normalized; + } +} + +bool Reader::readCStyleComment() { + while ((current_ + 1) < end_) { + Char c = getNextChar(); + if (c == '*' && *current_ == '/') + break; + } + return getNextChar() == '/'; +} + +bool Reader::readCppStyleComment() { + while (current_ != end_) { + Char c = getNextChar(); + if (c == '\n') + break; + if (c == '\r') { + // Consume DOS EOL. It will be normalized in addComment. + if (current_ != end_ && *current_ == '\n') + getNextChar(); + // Break on Moc OS 9 EOL. + break; + } + } + return true; +} + +void Reader::readNumber() { + const char *p = current_; + char c = '0'; // stopgap for already consumed character + // integral part + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : '\0'; + // fractional part + if (c == '.') { + c = (current_ = p) < end_ ? *p++ : '\0'; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : '\0'; + } + // exponential part + if (c == 'e' || c == 'E') { + c = (current_ = p) < end_ ? *p++ : '\0'; + if (c == '+' || c == '-') + c = (current_ = p) < end_ ? *p++ : '\0'; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : '\0'; + } +} + +bool Reader::readString() { + Char c = '\0'; + while (current_ != end_) { + c = getNextChar(); + if (c == '\\') + getNextChar(); + else if (c == '"') + break; + } + return c == '"'; +} + +bool Reader::readObject(Token& tokenStart) { + Token tokenName; + JSONCPP_STRING name; + Value init(objectValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + while (readToken(tokenName)) { + bool initialTokenOk = true; + while (tokenName.type_ == tokenComment && initialTokenOk) + initialTokenOk = readToken(tokenName); + if (!initialTokenOk) + break; + if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object + return true; + name = ""; + if (tokenName.type_ == tokenString) { + if (!decodeString(tokenName, name)) + return recoverFromError(tokenObjectEnd); + } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) { + Value numberName; + if (!decodeNumber(tokenName, numberName)) + return recoverFromError(tokenObjectEnd); + name = JSONCPP_STRING(numberName.asCString()); + } else { + break; + } + + Token colon; + if (!readToken(colon) || colon.type_ != tokenMemberSeparator) { + return addErrorAndRecover( + "Missing ':' after object member name", colon, tokenObjectEnd); + } + Value& value = currentValue()[name]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenObjectEnd); + + Token comma; + if (!readToken(comma) || + (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator && + comma.type_ != tokenComment)) { + return addErrorAndRecover( + "Missing ',' or '}' in object declaration", comma, tokenObjectEnd); + } + bool finalizeTokenOk = true; + while (comma.type_ == tokenComment && finalizeTokenOk) + finalizeTokenOk = readToken(comma); + if (comma.type_ == tokenObjectEnd) + return true; + } + return addErrorAndRecover( + "Missing '}' or object member name", tokenName, tokenObjectEnd); +} + +bool Reader::readArray(Token& tokenStart) { + Value init(arrayValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + skipSpaces(); + if (current_ != end_ && *current_ == ']') // empty array + { + Token endArray; + readToken(endArray); + return true; + } + int index = 0; + for (;;) { + Value& value = currentValue()[index++]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenArrayEnd); + + Token token; + // Accept Comment after last item in the array. + ok = readToken(token); + while (token.type_ == tokenComment && ok) { + ok = readToken(token); + } + bool badTokenType = + (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd); + if (!ok || badTokenType) { + return addErrorAndRecover( + "Missing ',' or ']' in array declaration", token, tokenArrayEnd); + } + if (token.type_ == tokenArrayEnd) + break; + } + return true; +} + +bool Reader::decodeNumber(Token& token) { + Value decoded; + if (!decodeNumber(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool Reader::decodeNumber(Token& token, Value& decoded) { + // Attempts to parse the number as an integer. If the number is + // larger than the maximum supported value of an integer then + // we decode the number as a double. + Location current = token.start_; + bool isNegative = *current == '-'; + if (isNegative) + ++current; + // TODO: Help the compiler do the div and mod at compile time or get rid of them. + Value::LargestUInt maxIntegerValue = + isNegative ? Value::LargestUInt(Value::maxLargestInt) + 1 + : Value::maxLargestUInt; + Value::LargestUInt threshold = maxIntegerValue / 10; + Value::LargestUInt value = 0; + while (current < token.end_) { + Char c = *current++; + if (c < '0' || c > '9') + return decodeDouble(token, decoded); + Value::UInt digit(static_cast<Value::UInt>(c - '0')); + if (value >= threshold) { + // We've hit or exceeded the max value divided by 10 (rounded down). If + // a) we've only just touched the limit, b) this is the last digit, and + // c) it's small enough to fit in that rounding delta, we're okay. + // Otherwise treat this number as a double to avoid overflow. + if (value > threshold || current != token.end_ || + digit > maxIntegerValue % 10) { + return decodeDouble(token, decoded); + } + } + value = value * 10 + digit; + } + if (isNegative && value == maxIntegerValue) + decoded = Value::minLargestInt; + else if (isNegative) + decoded = -Value::LargestInt(value); + else if (value <= Value::LargestUInt(Value::maxInt)) + decoded = Value::LargestInt(value); + else + decoded = value; + return true; +} + +bool Reader::decodeDouble(Token& token) { + Value decoded; + if (!decodeDouble(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool Reader::decodeDouble(Token& token, Value& decoded) { + double value = 0; + JSONCPP_STRING buffer(token.start_, token.end_); + JSONCPP_ISTRINGSTREAM is(buffer); + if (!(is >> value)) + return addError("'" + JSONCPP_STRING(token.start_, token.end_) + + "' is not a number.", + token); + decoded = value; + return true; +} + +bool Reader::decodeString(Token& token) { + JSONCPP_STRING decoded_string; + if (!decodeString(token, decoded_string)) + return false; + Value decoded(decoded_string); + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool Reader::decodeString(Token& token, JSONCPP_STRING& decoded) { + decoded.reserve(static_cast<size_t>(token.end_ - token.start_ - 2)); + Location current = token.start_ + 1; // skip '"' + Location end = token.end_ - 1; // do not include '"' + while (current != end) { + Char c = *current++; + if (c == '"') + break; + else if (c == '\\') { + if (current == end) + return addError("Empty escape sequence in string", token, current); + Char escape = *current++; + switch (escape) { + case '"': + decoded += '"'; + break; + case '/': + decoded += '/'; + break; + case '\\': + decoded += '\\'; + break; + case 'b': + decoded += '\b'; + break; + case 'f': + decoded += '\f'; + break; + case 'n': + decoded += '\n'; + break; + case 'r': + decoded += '\r'; + break; + case 't': + decoded += '\t'; + break; + case 'u': { + unsigned int unicode; + if (!decodeUnicodeCodePoint(token, current, end, unicode)) + return false; + decoded += codePointToUTF8(unicode); + } break; + default: + return addError("Bad escape sequence in string", token, current); + } + } else { + decoded += c; + } + } + return true; +} + +bool Reader::decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode) { + + if (!decodeUnicodeEscapeSequence(token, current, end, unicode)) + return false; + if (unicode >= 0xD800 && unicode <= 0xDBFF) { + // surrogate pairs + if (end - current < 6) + return addError( + "additional six characters expected to parse unicode surrogate pair.", + token, + current); + unsigned int surrogatePair; + if (*(current++) == '\\' && *(current++) == 'u') { + if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) { + unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF); + } else + return false; + } else + return addError("expecting another \\u token to begin the second half of " + "a unicode surrogate pair", + token, + current); + } + return true; +} + +bool Reader::decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& ret_unicode) { + if (end - current < 4) + return addError( + "Bad unicode escape sequence in string: four digits expected.", + token, + current); + int unicode = 0; + for (int index = 0; index < 4; ++index) { + Char c = *current++; + unicode *= 16; + if (c >= '0' && c <= '9') + unicode += c - '0'; + else if (c >= 'a' && c <= 'f') + unicode += c - 'a' + 10; + else if (c >= 'A' && c <= 'F') + unicode += c - 'A' + 10; + else + return addError( + "Bad unicode escape sequence in string: hexadecimal digit expected.", + token, + current); + } + ret_unicode = static_cast<unsigned int>(unicode); + return true; +} + +bool +Reader::addError(const JSONCPP_STRING& message, Token& token, Location extra) { + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = extra; + errors_.push_back(info); + return false; +} + +bool Reader::recoverFromError(TokenType skipUntilToken) { + size_t const errorCount = errors_.size(); + Token skip; + for (;;) { + if (!readToken(skip)) + errors_.resize(errorCount); // discard errors caused by recovery + if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream) + break; + } + errors_.resize(errorCount); + return false; +} + +bool Reader::addErrorAndRecover(const JSONCPP_STRING& message, + Token& token, + TokenType skipUntilToken) { + addError(message, token); + return recoverFromError(skipUntilToken); +} + +Value& Reader::currentValue() { return *(nodes_.top()); } + +Reader::Char Reader::getNextChar() { + if (current_ == end_) + return 0; + return *current_++; +} + +void Reader::getLocationLineAndColumn(Location location, + int& line, + int& column) const { + Location current = begin_; + Location lastLineStart = current; + line = 0; + while (current < location && current != end_) { + Char c = *current++; + if (c == '\r') { + if (*current == '\n') + ++current; + lastLineStart = current; + ++line; + } else if (c == '\n') { + lastLineStart = current; + ++line; + } + } + // column & line start at 1 + column = int(location - lastLineStart) + 1; + ++line; +} + +JSONCPP_STRING Reader::getLocationLineAndColumn(Location location) const { + int line, column; + getLocationLineAndColumn(location, line, column); + char buffer[18 + 16 + 16 + 1]; + snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column); + return buffer; +} + +// Deprecated. Preserved for backward compatibility +JSONCPP_STRING Reader::getFormatedErrorMessages() const { + return getFormattedErrorMessages(); +} + +JSONCPP_STRING Reader::getFormattedErrorMessages() const { + JSONCPP_STRING formattedMessage; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + formattedMessage += + "* " + getLocationLineAndColumn(error.token_.start_) + "\n"; + formattedMessage += " " + error.message_ + "\n"; + if (error.extra_) + formattedMessage += + "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n"; + } + return formattedMessage; +} + +std::vector<Reader::StructuredError> Reader::getStructuredErrors() const { + std::vector<Reader::StructuredError> allErrors; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + Reader::StructuredError structured; + structured.offset_start = error.token_.start_ - begin_; + structured.offset_limit = error.token_.end_ - begin_; + structured.message = error.message_; + allErrors.push_back(structured); + } + return allErrors; +} + +bool Reader::pushError(const Value& value, const JSONCPP_STRING& message) { + ptrdiff_t const length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = end_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = 0; + errors_.push_back(info); + return true; +} + +bool Reader::pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra) { + ptrdiff_t const length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length + || extra.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = begin_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = begin_ + extra.getOffsetStart(); + errors_.push_back(info); + return true; +} + +bool Reader::good() const { + return !errors_.size(); +} + +// exact copy of Features +class OurFeatures { +public: + static OurFeatures all(); + bool allowComments_; + bool strictRoot_; + bool allowDroppedNullPlaceholders_; + bool allowNumericKeys_; + bool allowSingleQuotes_; + bool failIfExtra_; + bool rejectDupKeys_; + bool allowSpecialFloats_; + int stackLimit_; +}; // OurFeatures + +// exact copy of Implementation of class Features +// //////////////////////////////// + +OurFeatures OurFeatures::all() { return OurFeatures(); } + +// Implementation of class Reader +// //////////////////////////////// + +// exact copy of Reader, renamed to OurReader +class OurReader { +public: + typedef char Char; + typedef const Char* Location; + struct StructuredError { + ptrdiff_t offset_start; + ptrdiff_t offset_limit; + JSONCPP_STRING message; + }; + + OurReader(OurFeatures const& features); + bool parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments = true); + JSONCPP_STRING getFormattedErrorMessages() const; + std::vector<StructuredError> getStructuredErrors() const; + bool pushError(const Value& value, const JSONCPP_STRING& message); + bool pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra); + bool good() const; + +private: + OurReader(OurReader const&); // no impl + void operator=(OurReader const&); // no impl + + enum TokenType { + tokenEndOfStream = 0, + tokenObjectBegin, + tokenObjectEnd, + tokenArrayBegin, + tokenArrayEnd, + tokenString, + tokenNumber, + tokenTrue, + tokenFalse, + tokenNull, + tokenNaN, + tokenPosInf, + tokenNegInf, + tokenArraySeparator, + tokenMemberSeparator, + tokenComment, + tokenError + }; + + class Token { + public: + TokenType type_; + Location start_; + Location end_; + }; + + class ErrorInfo { + public: + Token token_; + JSONCPP_STRING message_; + Location extra_; + }; + + typedef std::deque<ErrorInfo> Errors; + + bool readToken(Token& token); + void skipSpaces(); + bool match(Location pattern, int patternLength); + bool readComment(); + bool readCStyleComment(); + bool readCppStyleComment(); + bool readString(); + bool readStringSingleQuote(); + bool readNumber(bool checkInf); + bool readValue(); + bool readObject(Token& token); + bool readArray(Token& token); + bool decodeNumber(Token& token); + bool decodeNumber(Token& token, Value& decoded); + bool decodeString(Token& token); + bool decodeString(Token& token, JSONCPP_STRING& decoded); + bool decodeDouble(Token& token); + bool decodeDouble(Token& token, Value& decoded); + bool decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool addError(const JSONCPP_STRING& message, Token& token, Location extra = 0); + bool recoverFromError(TokenType skipUntilToken); + bool addErrorAndRecover(const JSONCPP_STRING& message, + Token& token, + TokenType skipUntilToken); + void skipUntilSpace(); + Value& currentValue(); + Char getNextChar(); + void + getLocationLineAndColumn(Location location, int& line, int& column) const; + JSONCPP_STRING getLocationLineAndColumn(Location location) const; + void addComment(Location begin, Location end, CommentPlacement placement); + void skipCommentTokens(Token& token); + + typedef std::stack<Value*> Nodes; + Nodes nodes_; + Errors errors_; + JSONCPP_STRING document_; + Location begin_; + Location end_; + Location current_; + Location lastValueEnd_; + Value* lastValue_; + JSONCPP_STRING commentsBefore_; + int stackDepth_; + + OurFeatures const features_; + bool collectComments_; +}; // OurReader + +// complete copy of Read impl, for OurReader + +OurReader::OurReader(OurFeatures const& features) + : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), + lastValue_(), commentsBefore_(), + stackDepth_(0), + features_(features), collectComments_() { +} + +bool OurReader::parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments) { + if (!features_.allowComments_) { + collectComments = false; + } + + begin_ = beginDoc; + end_ = endDoc; + collectComments_ = collectComments; + current_ = begin_; + lastValueEnd_ = 0; + lastValue_ = 0; + commentsBefore_ = ""; + errors_.clear(); + while (!nodes_.empty()) + nodes_.pop(); + nodes_.push(&root); + + stackDepth_ = 0; + bool successful = readValue(); + Token token; + skipCommentTokens(token); + if (features_.failIfExtra_) { + if ((features_.strictRoot_ || token.type_ != tokenError) && token.type_ != tokenEndOfStream) { + addError("Extra non-whitespace after JSON value.", token); + return false; + } + } + if (collectComments_ && !commentsBefore_.empty()) + root.setComment(commentsBefore_, commentAfter); + if (features_.strictRoot_) { + if (!root.isArray() && !root.isObject()) { + // Set error location to start of doc, ideally should be first token found + // in doc + token.type_ = tokenError; + token.start_ = beginDoc; + token.end_ = endDoc; + addError( + "A valid JSON document must be either an array or an object value.", + token); + return false; + } + } + return successful; +} + +bool OurReader::readValue() { + if (stackDepth_ >= features_.stackLimit_) throwRuntimeError("Exceeded stackLimit in readValue()."); + ++stackDepth_; + Token token; + skipCommentTokens(token); + bool successful = true; + + if (collectComments_ && !commentsBefore_.empty()) { + currentValue().setComment(commentsBefore_, commentBefore); + commentsBefore_ = ""; + } + + switch (token.type_) { + case tokenObjectBegin: + successful = readObject(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenArrayBegin: + successful = readArray(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenNumber: + successful = decodeNumber(token); + break; + case tokenString: + successful = decodeString(token); + break; + case tokenTrue: + { + Value v(true); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenFalse: + { + Value v(false); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNull: + { + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNaN: + { + Value v(std::numeric_limits<double>::quiet_NaN()); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenPosInf: + { + Value v(std::numeric_limits<double>::infinity()); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNegInf: + { + Value v(-std::numeric_limits<double>::infinity()); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenArraySeparator: + case tokenObjectEnd: + case tokenArrayEnd: + if (features_.allowDroppedNullPlaceholders_) { + // "Un-read" the current token and mark the current value as a null + // token. + current_--; + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(current_ - begin_ - 1); + currentValue().setOffsetLimit(current_ - begin_); + break; + } // else, fall through ... + default: + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return addError("Syntax error: value, object or array expected.", token); + } + + if (collectComments_) { + lastValueEnd_ = current_; + lastValue_ = ¤tValue(); + } + + --stackDepth_; + return successful; +} + +void OurReader::skipCommentTokens(Token& token) { + if (features_.allowComments_) { + do { + readToken(token); + } while (token.type_ == tokenComment); + } else { + readToken(token); + } +} + +bool OurReader::readToken(Token& token) { + skipSpaces(); + token.start_ = current_; + Char c = getNextChar(); + bool ok = true; + switch (c) { + case '{': + token.type_ = tokenObjectBegin; + break; + case '}': + token.type_ = tokenObjectEnd; + break; + case '[': + token.type_ = tokenArrayBegin; + break; + case ']': + token.type_ = tokenArrayEnd; + break; + case '"': + token.type_ = tokenString; + ok = readString(); + break; + case '\'': + if (features_.allowSingleQuotes_) { + token.type_ = tokenString; + ok = readStringSingleQuote(); + break; + } // else continue + case '/': + token.type_ = tokenComment; + ok = readComment(); + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + token.type_ = tokenNumber; + readNumber(false); + break; + case '-': + if (readNumber(true)) { + token.type_ = tokenNumber; + } else { + token.type_ = tokenNegInf; + ok = features_.allowSpecialFloats_ && match("nfinity", 7); + } + break; + case 't': + token.type_ = tokenTrue; + ok = match("rue", 3); + break; + case 'f': + token.type_ = tokenFalse; + ok = match("alse", 4); + break; + case 'n': + token.type_ = tokenNull; + ok = match("ull", 3); + break; + case 'N': + if (features_.allowSpecialFloats_) { + token.type_ = tokenNaN; + ok = match("aN", 2); + } else { + ok = false; + } + break; + case 'I': + if (features_.allowSpecialFloats_) { + token.type_ = tokenPosInf; + ok = match("nfinity", 7); + } else { + ok = false; + } + break; + case ',': + token.type_ = tokenArraySeparator; + break; + case ':': + token.type_ = tokenMemberSeparator; + break; + case 0: + token.type_ = tokenEndOfStream; + break; + default: + ok = false; + break; + } + if (!ok) + token.type_ = tokenError; + token.end_ = current_; + return true; +} + +void OurReader::skipSpaces() { + while (current_ != end_) { + Char c = *current_; + if (c == ' ' || c == '\t' || c == '\r' || c == '\n') + ++current_; + else + break; + } +} + +bool OurReader::match(Location pattern, int patternLength) { + if (end_ - current_ < patternLength) + return false; + int index = patternLength; + while (index--) + if (current_[index] != pattern[index]) + return false; + current_ += patternLength; + return true; +} + +bool OurReader::readComment() { + Location commentBegin = current_ - 1; + Char c = getNextChar(); + bool successful = false; + if (c == '*') + successful = readCStyleComment(); + else if (c == '/') + successful = readCppStyleComment(); + if (!successful) + return false; + + if (collectComments_) { + CommentPlacement placement = commentBefore; + if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) { + if (c != '*' || !containsNewLine(commentBegin, current_)) + placement = commentAfterOnSameLine; + } + + addComment(commentBegin, current_, placement); + } + return true; +} + +void +OurReader::addComment(Location begin, Location end, CommentPlacement placement) { + assert(collectComments_); + const JSONCPP_STRING& normalized = normalizeEOL(begin, end); + if (placement == commentAfterOnSameLine) { + assert(lastValue_ != 0); + lastValue_->setComment(normalized, placement); + } else { + commentsBefore_ += normalized; + } +} + +bool OurReader::readCStyleComment() { + while ((current_ + 1) < end_) { + Char c = getNextChar(); + if (c == '*' && *current_ == '/') + break; + } + return getNextChar() == '/'; +} + +bool OurReader::readCppStyleComment() { + while (current_ != end_) { + Char c = getNextChar(); + if (c == '\n') + break; + if (c == '\r') { + // Consume DOS EOL. It will be normalized in addComment. + if (current_ != end_ && *current_ == '\n') + getNextChar(); + // Break on Moc OS 9 EOL. + break; + } + } + return true; +} + +bool OurReader::readNumber(bool checkInf) { + const char *p = current_; + if (checkInf && p != end_ && *p == 'I') { + current_ = ++p; + return false; + } + char c = '0'; // stopgap for already consumed character + // integral part + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : '\0'; + // fractional part + if (c == '.') { + c = (current_ = p) < end_ ? *p++ : '\0'; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : '\0'; + } + // exponential part + if (c == 'e' || c == 'E') { + c = (current_ = p) < end_ ? *p++ : '\0'; + if (c == '+' || c == '-') + c = (current_ = p) < end_ ? *p++ : '\0'; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : '\0'; + } + return true; +} +bool OurReader::readString() { + Char c = 0; + while (current_ != end_) { + c = getNextChar(); + if (c == '\\') + getNextChar(); + else if (c == '"') + break; + } + return c == '"'; +} + + +bool OurReader::readStringSingleQuote() { + Char c = 0; + while (current_ != end_) { + c = getNextChar(); + if (c == '\\') + getNextChar(); + else if (c == '\'') + break; + } + return c == '\''; +} + +bool OurReader::readObject(Token& tokenStart) { + Token tokenName; + JSONCPP_STRING name; + Value init(objectValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + while (readToken(tokenName)) { + bool initialTokenOk = true; + while (tokenName.type_ == tokenComment && initialTokenOk) + initialTokenOk = readToken(tokenName); + if (!initialTokenOk) + break; + if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object + return true; + name = ""; + if (tokenName.type_ == tokenString) { + if (!decodeString(tokenName, name)) + return recoverFromError(tokenObjectEnd); + } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) { + Value numberName; + if (!decodeNumber(tokenName, numberName)) + return recoverFromError(tokenObjectEnd); + name = numberName.asString(); + } else { + break; + } + + Token colon; + if (!readToken(colon) || colon.type_ != tokenMemberSeparator) { + return addErrorAndRecover( + "Missing ':' after object member name", colon, tokenObjectEnd); + } + if (name.length() >= (1U<<30)) throwRuntimeError("keylength >= 2^30"); + if (features_.rejectDupKeys_ && currentValue().isMember(name)) { + JSONCPP_STRING msg = "Duplicate key: '" + name + "'"; + return addErrorAndRecover( + msg, tokenName, tokenObjectEnd); + } + Value& value = currentValue()[name]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenObjectEnd); + + Token comma; + if (!readToken(comma) || + (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator && + comma.type_ != tokenComment)) { + return addErrorAndRecover( + "Missing ',' or '}' in object declaration", comma, tokenObjectEnd); + } + bool finalizeTokenOk = true; + while (comma.type_ == tokenComment && finalizeTokenOk) + finalizeTokenOk = readToken(comma); + if (comma.type_ == tokenObjectEnd) + return true; + } + return addErrorAndRecover( + "Missing '}' or object member name", tokenName, tokenObjectEnd); +} + +bool OurReader::readArray(Token& tokenStart) { + Value init(arrayValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + skipSpaces(); + if (current_ != end_ && *current_ == ']') // empty array + { + Token endArray; + readToken(endArray); + return true; + } + int index = 0; + for (;;) { + Value& value = currentValue()[index++]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenArrayEnd); + + Token token; + // Accept Comment after last item in the array. + ok = readToken(token); + while (token.type_ == tokenComment && ok) { + ok = readToken(token); + } + bool badTokenType = + (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd); + if (!ok || badTokenType) { + return addErrorAndRecover( + "Missing ',' or ']' in array declaration", token, tokenArrayEnd); + } + if (token.type_ == tokenArrayEnd) + break; + } + return true; +} + +bool OurReader::decodeNumber(Token& token) { + Value decoded; + if (!decodeNumber(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool OurReader::decodeNumber(Token& token, Value& decoded) { + // Attempts to parse the number as an integer. If the number is + // larger than the maximum supported value of an integer then + // we decode the number as a double. + Location current = token.start_; + bool isNegative = *current == '-'; + if (isNegative) + ++current; + // TODO: Help the compiler do the div and mod at compile time or get rid of them. + Value::LargestUInt maxIntegerValue = + isNegative ? Value::LargestUInt(-Value::minLargestInt) + : Value::maxLargestUInt; + Value::LargestUInt threshold = maxIntegerValue / 10; + Value::LargestUInt value = 0; + while (current < token.end_) { + Char c = *current++; + if (c < '0' || c > '9') + return decodeDouble(token, decoded); + Value::UInt digit(static_cast<Value::UInt>(c - '0')); + if (value >= threshold) { + // We've hit or exceeded the max value divided by 10 (rounded down). If + // a) we've only just touched the limit, b) this is the last digit, and + // c) it's small enough to fit in that rounding delta, we're okay. + // Otherwise treat this number as a double to avoid overflow. + if (value > threshold || current != token.end_ || + digit > maxIntegerValue % 10) { + return decodeDouble(token, decoded); + } + } + value = value * 10 + digit; + } + if (isNegative) + decoded = -Value::LargestInt(value); + else if (value <= Value::LargestUInt(Value::maxInt)) + decoded = Value::LargestInt(value); + else + decoded = value; + return true; +} + +bool OurReader::decodeDouble(Token& token) { + Value decoded; + if (!decodeDouble(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool OurReader::decodeDouble(Token& token, Value& decoded) { + double value = 0; + const int bufferSize = 32; + int count; + ptrdiff_t const length = token.end_ - token.start_; + + // Sanity check to avoid buffer overflow exploits. + if (length < 0) { + return addError("Unable to parse token length", token); + } + size_t const ulength = static_cast<size_t>(length); + + // Avoid using a string constant for the format control string given to + // sscanf, as this can cause hard to debug crashes on OS X. See here for more + // info: + // + // http://developer.apple.com/library/mac/#DOCUMENTATION/DeveloperTools/gcc-4.0.1/gcc/Incompatibilities.html + char format[] = "%lf"; + + if (length <= bufferSize) { + Char buffer[bufferSize + 1]; + memcpy(buffer, token.start_, ulength); + buffer[length] = 0; + fixNumericLocaleInput(buffer, buffer + length); + count = sscanf(buffer, format, &value); + } else { + JSONCPP_STRING buffer(token.start_, token.end_); + count = sscanf(buffer.c_str(), format, &value); + } + + if (count != 1) + return addError("'" + JSONCPP_STRING(token.start_, token.end_) + + "' is not a number.", + token); + decoded = value; + return true; +} + +bool OurReader::decodeString(Token& token) { + JSONCPP_STRING decoded_string; + if (!decodeString(token, decoded_string)) + return false; + Value decoded(decoded_string); + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool OurReader::decodeString(Token& token, JSONCPP_STRING& decoded) { + decoded.reserve(static_cast<size_t>(token.end_ - token.start_ - 2)); + Location current = token.start_ + 1; // skip '"' + Location end = token.end_ - 1; // do not include '"' + while (current != end) { + Char c = *current++; + if (c == '"') + break; + else if (c == '\\') { + if (current == end) + return addError("Empty escape sequence in string", token, current); + Char escape = *current++; + switch (escape) { + case '"': + decoded += '"'; + break; + case '/': + decoded += '/'; + break; + case '\\': + decoded += '\\'; + break; + case 'b': + decoded += '\b'; + break; + case 'f': + decoded += '\f'; + break; + case 'n': + decoded += '\n'; + break; + case 'r': + decoded += '\r'; + break; + case 't': + decoded += '\t'; + break; + case 'u': { + unsigned int unicode; + if (!decodeUnicodeCodePoint(token, current, end, unicode)) + return false; + decoded += codePointToUTF8(unicode); + } break; + default: + return addError("Bad escape sequence in string", token, current); + } + } else { + decoded += c; + } + } + return true; +} + +bool OurReader::decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode) { + + if (!decodeUnicodeEscapeSequence(token, current, end, unicode)) + return false; + if (unicode >= 0xD800 && unicode <= 0xDBFF) { + // surrogate pairs + if (end - current < 6) + return addError( + "additional six characters expected to parse unicode surrogate pair.", + token, + current); + unsigned int surrogatePair; + if (*(current++) == '\\' && *(current++) == 'u') { + if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) { + unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF); + } else + return false; + } else + return addError("expecting another \\u token to begin the second half of " + "a unicode surrogate pair", + token, + current); + } + return true; +} + +bool OurReader::decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& ret_unicode) { + if (end - current < 4) + return addError( + "Bad unicode escape sequence in string: four digits expected.", + token, + current); + int unicode = 0; + for (int index = 0; index < 4; ++index) { + Char c = *current++; + unicode *= 16; + if (c >= '0' && c <= '9') + unicode += c - '0'; + else if (c >= 'a' && c <= 'f') + unicode += c - 'a' + 10; + else if (c >= 'A' && c <= 'F') + unicode += c - 'A' + 10; + else + return addError( + "Bad unicode escape sequence in string: hexadecimal digit expected.", + token, + current); + } + ret_unicode = static_cast<unsigned int>(unicode); + return true; +} + +bool +OurReader::addError(const JSONCPP_STRING& message, Token& token, Location extra) { + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = extra; + errors_.push_back(info); + return false; +} + +bool OurReader::recoverFromError(TokenType skipUntilToken) { + size_t errorCount = errors_.size(); + Token skip; + for (;;) { + if (!readToken(skip)) + errors_.resize(errorCount); // discard errors caused by recovery + if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream) + break; + } + errors_.resize(errorCount); + return false; +} + +bool OurReader::addErrorAndRecover(const JSONCPP_STRING& message, + Token& token, + TokenType skipUntilToken) { + addError(message, token); + return recoverFromError(skipUntilToken); +} + +Value& OurReader::currentValue() { return *(nodes_.top()); } + +OurReader::Char OurReader::getNextChar() { + if (current_ == end_) + return 0; + return *current_++; +} + +void OurReader::getLocationLineAndColumn(Location location, + int& line, + int& column) const { + Location current = begin_; + Location lastLineStart = current; + line = 0; + while (current < location && current != end_) { + Char c = *current++; + if (c == '\r') { + if (*current == '\n') + ++current; + lastLineStart = current; + ++line; + } else if (c == '\n') { + lastLineStart = current; + ++line; + } + } + // column & line start at 1 + column = int(location - lastLineStart) + 1; + ++line; +} + +JSONCPP_STRING OurReader::getLocationLineAndColumn(Location location) const { + int line, column; + getLocationLineAndColumn(location, line, column); + char buffer[18 + 16 + 16 + 1]; + snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column); + return buffer; +} + +JSONCPP_STRING OurReader::getFormattedErrorMessages() const { + JSONCPP_STRING formattedMessage; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + formattedMessage += + "* " + getLocationLineAndColumn(error.token_.start_) + "\n"; + formattedMessage += " " + error.message_ + "\n"; + if (error.extra_) + formattedMessage += + "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n"; + } + return formattedMessage; +} + +std::vector<OurReader::StructuredError> OurReader::getStructuredErrors() const { + std::vector<OurReader::StructuredError> allErrors; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + OurReader::StructuredError structured; + structured.offset_start = error.token_.start_ - begin_; + structured.offset_limit = error.token_.end_ - begin_; + structured.message = error.message_; + allErrors.push_back(structured); + } + return allErrors; +} + +bool OurReader::pushError(const Value& value, const JSONCPP_STRING& message) { + ptrdiff_t length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = end_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = 0; + errors_.push_back(info); + return true; +} + +bool OurReader::pushError(const Value& value, const JSONCPP_STRING& message, const Value& extra) { + ptrdiff_t length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length + || extra.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = begin_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = begin_ + extra.getOffsetStart(); + errors_.push_back(info); + return true; +} + +bool OurReader::good() const { + return !errors_.size(); +} + + +class OurCharReader : public CharReader { + bool const collectComments_; + OurReader reader_; +public: + OurCharReader( + bool collectComments, + OurFeatures const& features) + : collectComments_(collectComments) + , reader_(features) + {} + bool parse( + char const* beginDoc, char const* endDoc, + Value* root, JSONCPP_STRING* errs) JSONCPP_OVERRIDE { + bool ok = reader_.parse(beginDoc, endDoc, *root, collectComments_); + if (errs) { + *errs = reader_.getFormattedErrorMessages(); + } + return ok; + } +}; + +CharReaderBuilder::CharReaderBuilder() +{ + setDefaults(&settings_); +} +CharReaderBuilder::~CharReaderBuilder() +{} +CharReader* CharReaderBuilder::newCharReader() const +{ + bool collectComments = settings_["collectComments"].asBool(); + OurFeatures features = OurFeatures::all(); + features.allowComments_ = settings_["allowComments"].asBool(); + features.strictRoot_ = settings_["strictRoot"].asBool(); + features.allowDroppedNullPlaceholders_ = settings_["allowDroppedNullPlaceholders"].asBool(); + features.allowNumericKeys_ = settings_["allowNumericKeys"].asBool(); + features.allowSingleQuotes_ = settings_["allowSingleQuotes"].asBool(); + features.stackLimit_ = settings_["stackLimit"].asInt(); + features.failIfExtra_ = settings_["failIfExtra"].asBool(); + features.rejectDupKeys_ = settings_["rejectDupKeys"].asBool(); + features.allowSpecialFloats_ = settings_["allowSpecialFloats"].asBool(); + return new OurCharReader(collectComments, features); +} +static void getValidReaderKeys(std::set<JSONCPP_STRING>* valid_keys) +{ + valid_keys->clear(); + valid_keys->insert("collectComments"); + valid_keys->insert("allowComments"); + valid_keys->insert("strictRoot"); + valid_keys->insert("allowDroppedNullPlaceholders"); + valid_keys->insert("allowNumericKeys"); + valid_keys->insert("allowSingleQuotes"); + valid_keys->insert("stackLimit"); + valid_keys->insert("failIfExtra"); + valid_keys->insert("rejectDupKeys"); + valid_keys->insert("allowSpecialFloats"); +} +bool CharReaderBuilder::validate(Json::Value* invalid) const +{ + Json::Value my_invalid; + if (!invalid) invalid = &my_invalid; // so we do not need to test for NULL + Json::Value& inv = *invalid; + std::set<JSONCPP_STRING> valid_keys; + getValidReaderKeys(&valid_keys); + Value::Members keys = settings_.getMemberNames(); + size_t n = keys.size(); + for (size_t i = 0; i < n; ++i) { + JSONCPP_STRING const& key = keys[i]; + if (valid_keys.find(key) == valid_keys.end()) { + inv[key] = settings_[key]; + } + } + return 0u == inv.size(); +} +Value& CharReaderBuilder::operator[](JSONCPP_STRING key) +{ + return settings_[key]; +} +// static +void CharReaderBuilder::strictMode(Json::Value* settings) +{ +//! [CharReaderBuilderStrictMode] + (*settings)["allowComments"] = false; + (*settings)["strictRoot"] = true; + (*settings)["allowDroppedNullPlaceholders"] = false; + (*settings)["allowNumericKeys"] = false; + (*settings)["allowSingleQuotes"] = false; + (*settings)["stackLimit"] = 1000; + (*settings)["failIfExtra"] = true; + (*settings)["rejectDupKeys"] = true; + (*settings)["allowSpecialFloats"] = false; +//! [CharReaderBuilderStrictMode] +} +// static +void CharReaderBuilder::setDefaults(Json::Value* settings) +{ +//! [CharReaderBuilderDefaults] + (*settings)["collectComments"] = true; + (*settings)["allowComments"] = true; + (*settings)["strictRoot"] = false; + (*settings)["allowDroppedNullPlaceholders"] = false; + (*settings)["allowNumericKeys"] = false; + (*settings)["allowSingleQuotes"] = false; + (*settings)["stackLimit"] = 1000; + (*settings)["failIfExtra"] = false; + (*settings)["rejectDupKeys"] = false; + (*settings)["allowSpecialFloats"] = false; +//! [CharReaderBuilderDefaults] +} + +////////////////////////////////// +// global functions + +bool parseFromStream( + CharReader::Factory const& fact, JSONCPP_ISTREAM& sin, + Value* root, JSONCPP_STRING* errs) +{ + JSONCPP_OSTRINGSTREAM ssin; + ssin << sin.rdbuf(); + JSONCPP_STRING doc = ssin.str(); + char const* begin = doc.data(); + char const* end = begin + doc.size(); + // Note that we do not actually need a null-terminator. + CharReaderPtr const reader(fact.newCharReader()); + return reader->parse(begin, end, root, errs); +} + +JSONCPP_ISTREAM& operator>>(JSONCPP_ISTREAM& sin, Value& root) { + CharReaderBuilder b; + JSONCPP_STRING errs; + bool ok = parseFromStream(b, sin, &root, &errs); + if (!ok) { + fprintf(stderr, + "Error from reader: %s", + errs.c_str()); + + throwRuntimeError(errs); + } + return sin; +} + +} // namespace Json + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_reader.cpp +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_valueiterator.inl +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +// included by json_value.cpp + +namespace Json { + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class ValueIteratorBase +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +ValueIteratorBase::ValueIteratorBase() + : current_(), isNull_(true) { +} + +ValueIteratorBase::ValueIteratorBase( + const Value::ObjectValues::iterator& current) + : current_(current), isNull_(false) {} + +Value& ValueIteratorBase::deref() const { + return current_->second; +} + +void ValueIteratorBase::increment() { + ++current_; +} + +void ValueIteratorBase::decrement() { + --current_; +} + +ValueIteratorBase::difference_type +ValueIteratorBase::computeDistance(const SelfType& other) const { +#ifdef JSON_USE_CPPTL_SMALLMAP + return other.current_ - current_; +#else + // Iterator for null value are initialized using the default + // constructor, which initialize current_ to the default + // std::map::iterator. As begin() and end() are two instance + // of the default std::map::iterator, they can not be compared. + // To allow this, we handle this comparison specifically. + if (isNull_ && other.isNull_) { + return 0; + } + + // Usage of std::distance is not portable (does not compile with Sun Studio 12 + // RogueWave STL, + // which is the one used by default). + // Using a portable hand-made version for non random iterator instead: + // return difference_type( std::distance( current_, other.current_ ) ); + difference_type myDistance = 0; + for (Value::ObjectValues::iterator it = current_; it != other.current_; + ++it) { + ++myDistance; + } + return myDistance; +#endif +} + +bool ValueIteratorBase::isEqual(const SelfType& other) const { + if (isNull_) { + return other.isNull_; + } + return current_ == other.current_; +} + +void ValueIteratorBase::copy(const SelfType& other) { + current_ = other.current_; + isNull_ = other.isNull_; +} + +Value ValueIteratorBase::key() const { + const Value::CZString czstring = (*current_).first; + if (czstring.data()) { + if (czstring.isStaticString()) + return Value(StaticString(czstring.data())); + return Value(czstring.data(), czstring.data() + czstring.length()); + } + return Value(czstring.index()); +} + +UInt ValueIteratorBase::index() const { + const Value::CZString czstring = (*current_).first; + if (!czstring.data()) + return czstring.index(); + return Value::UInt(-1); +} + +JSONCPP_STRING ValueIteratorBase::name() const { + char const* keey; + char const* end; + keey = memberName(&end); + if (!keey) return JSONCPP_STRING(); + return JSONCPP_STRING(keey, end); +} + +char const* ValueIteratorBase::memberName() const { + const char* cname = (*current_).first.data(); + return cname ? cname : ""; +} + +char const* ValueIteratorBase::memberName(char const** end) const { + const char* cname = (*current_).first.data(); + if (!cname) { + *end = NULL; + return NULL; + } + *end = cname + (*current_).first.length(); + return cname; +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class ValueConstIterator +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +ValueConstIterator::ValueConstIterator() {} + +ValueConstIterator::ValueConstIterator( + const Value::ObjectValues::iterator& current) + : ValueIteratorBase(current) {} + +ValueConstIterator::ValueConstIterator(ValueIterator const& other) + : ValueIteratorBase(other) {} + +ValueConstIterator& ValueConstIterator:: +operator=(const ValueIteratorBase& other) { + copy(other); + return *this; +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class ValueIterator +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +ValueIterator::ValueIterator() {} + +ValueIterator::ValueIterator(const Value::ObjectValues::iterator& current) + : ValueIteratorBase(current) {} + +ValueIterator::ValueIterator(const ValueConstIterator& other) + : ValueIteratorBase(other) { + throwRuntimeError("ConstIterator to Iterator should never be allowed."); +} + +ValueIterator::ValueIterator(const ValueIterator& other) + : ValueIteratorBase(other) {} + +ValueIterator& ValueIterator::operator=(const SelfType& other) { + copy(other); + return *this; +} + +} // namespace Json + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_valueiterator.inl +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_value.cpp +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2011 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#if !defined(JSON_IS_AMALGAMATION) +#include <json/assertions.h> +#include <json/value.h> +#include <json/writer.h> +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <math.h> +#include <sstream> +#include <utility> +#include <cstring> +#include <cassert> +#ifdef JSON_USE_CPPTL +#include <cpptl/conststring.h> +#endif +#include <cstddef> // size_t +#include <algorithm> // min() + +#define JSON_ASSERT_UNREACHABLE assert(false) + +namespace Json { + +// This is a walkaround to avoid the static initialization of Value::null. +// kNull must be word-aligned to avoid crashing on ARM. We use an alignment of +// 8 (instead of 4) as a bit of future-proofing. +#if defined(__ARMEL__) +#define ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment))) +#else +#define ALIGNAS(byte_alignment) +#endif +//static const unsigned char ALIGNAS(8) kNull[sizeof(Value)] = { 0 }; +//const unsigned char& kNullRef = kNull[0]; +//const Value& Value::null = reinterpret_cast<const Value&>(kNullRef); +//const Value& Value::nullRef = null; + +// static +Value const& Value::nullSingleton() +{ + static Value const nullStatic; + return nullStatic; +} + +// for backwards compatibility, we'll leave these global references around, but DO NOT +// use them in JSONCPP library code any more! +Value const& Value::null = Value::nullSingleton(); +Value const& Value::nullRef = Value::nullSingleton(); + +const Int Value::minInt = Int(~(UInt(-1) / 2)); +const Int Value::maxInt = Int(UInt(-1) / 2); +const UInt Value::maxUInt = UInt(-1); +#if defined(JSON_HAS_INT64) +const Int64 Value::minInt64 = Int64(~(UInt64(-1) / 2)); +const Int64 Value::maxInt64 = Int64(UInt64(-1) / 2); +const UInt64 Value::maxUInt64 = UInt64(-1); +// The constant is hard-coded because some compiler have trouble +// converting Value::maxUInt64 to a double correctly (AIX/xlC). +// Assumes that UInt64 is a 64 bits integer. +static const double maxUInt64AsDouble = 18446744073709551615.0; +#endif // defined(JSON_HAS_INT64) +const LargestInt Value::minLargestInt = LargestInt(~(LargestUInt(-1) / 2)); +const LargestInt Value::maxLargestInt = LargestInt(LargestUInt(-1) / 2); +const LargestUInt Value::maxLargestUInt = LargestUInt(-1); + +#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) +template <typename T, typename U> +static inline bool InRange(double d, T min, U max) { + // The casts can lose precision, but we are looking only for + // an approximate range. Might fail on edge cases though. ~cdunn + //return d >= static_cast<double>(min) && d <= static_cast<double>(max); + return d >= min && d <= max; +} +#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) +static inline double integerToDouble(Json::UInt64 value) { + return static_cast<double>(Int64(value / 2)) * 2.0 + static_cast<double>(Int64(value & 1)); +} + +template <typename T> static inline double integerToDouble(T value) { + return static_cast<double>(value); +} + +template <typename T, typename U> +static inline bool InRange(double d, T min, U max) { + return d >= integerToDouble(min) && d <= integerToDouble(max); +} +#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + +/** Duplicates the specified string value. + * @param value Pointer to the string to duplicate. Must be zero-terminated if + * length is "unknown". + * @param length Length of the value. if equals to unknown, then it will be + * computed using strlen(value). + * @return Pointer on the duplicate instance of string. + */ +static inline char* duplicateStringValue(const char* value, + size_t length) +{ + // Avoid an integer overflow in the call to malloc below by limiting length + // to a sane value. + if (length >= static_cast<size_t>(Value::maxInt)) + length = Value::maxInt - 1; + + char* newString = static_cast<char*>(malloc(length + 1)); + if (newString == NULL) { + throwRuntimeError( + "in Json::Value::duplicateStringValue(): " + "Failed to allocate string value buffer"); + } + memcpy(newString, value, length); + newString[length] = 0; + return newString; +} + +/* Record the length as a prefix. + */ +static inline char* duplicateAndPrefixStringValue( + const char* value, + unsigned int length) +{ + // Avoid an integer overflow in the call to malloc below by limiting length + // to a sane value. + JSON_ASSERT_MESSAGE(length <= static_cast<unsigned>(Value::maxInt) - sizeof(unsigned) - 1U, + "in Json::Value::duplicateAndPrefixStringValue(): " + "length too big for prefixing"); + unsigned actualLength = length + static_cast<unsigned>(sizeof(unsigned)) + 1U; + char* newString = static_cast<char*>(malloc(actualLength)); + if (newString == 0) { + throwRuntimeError( + "in Json::Value::duplicateAndPrefixStringValue(): " + "Failed to allocate string value buffer"); + } + *reinterpret_cast<unsigned*>(newString) = length; + memcpy(newString + sizeof(unsigned), value, length); + newString[actualLength - 1U] = 0; // to avoid buffer over-run accidents by users later + return newString; +} +inline static void decodePrefixedString( + bool isPrefixed, char const* prefixed, + unsigned* length, char const** value) +{ + if (!isPrefixed) { + *length = static_cast<unsigned>(strlen(prefixed)); + *value = prefixed; + } else { + *length = *reinterpret_cast<unsigned const*>(prefixed); + *value = prefixed + sizeof(unsigned); + } +} +/** Free the string duplicated by duplicateStringValue()/duplicateAndPrefixStringValue(). + */ +#if JSONCPP_USING_SECURE_MEMORY +static inline void releasePrefixedStringValue(char* value) { + unsigned length = 0; + char const* valueDecoded; + decodePrefixedString(true, value, &length, &valueDecoded); + size_t const size = sizeof(unsigned) + length + 1U; + memset(value, 0, size); + free(value); +} +static inline void releaseStringValue(char* value, unsigned length) { + // length==0 => we allocated the strings memory + size_t size = (length==0) ? strlen(value) : length; + memset(value, 0, size); + free(value); +} +#else // !JSONCPP_USING_SECURE_MEMORY +static inline void releasePrefixedStringValue(char* value) { + free(value); +} +static inline void releaseStringValue(char* value, unsigned) { + free(value); +} +#endif // JSONCPP_USING_SECURE_MEMORY + +} // namespace Json + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ValueInternals... +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +#if !defined(JSON_IS_AMALGAMATION) + +#include "json_valueiterator.inl" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +Exception::Exception(JSONCPP_STRING const& msg) + : msg_(msg) +{} +Exception::~Exception() throw() +{} +char const* Exception::what() const throw() +{ + return msg_.c_str(); +} +RuntimeError::RuntimeError(JSONCPP_STRING const& msg) + : Exception(msg) +{} +LogicError::LogicError(JSONCPP_STRING const& msg) + : Exception(msg) +{} +JSONCPP_NORETURN void throwRuntimeError(JSONCPP_STRING const& msg) +{ + throw RuntimeError(msg); +} +JSONCPP_NORETURN void throwLogicError(JSONCPP_STRING const& msg) +{ + throw LogicError(msg); +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class Value::CommentInfo +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +Value::CommentInfo::CommentInfo() : comment_(0) +{} + +Value::CommentInfo::~CommentInfo() { + if (comment_) + releaseStringValue(comment_, 0u); +} + +void Value::CommentInfo::setComment(const char* text, size_t len) { + if (comment_) { + releaseStringValue(comment_, 0u); + comment_ = 0; + } + JSON_ASSERT(text != 0); + JSON_ASSERT_MESSAGE( + text[0] == '\0' || text[0] == '/', + "in Json::Value::setComment(): Comments must start with /"); + // It seems that /**/ style comments are acceptable as well. + comment_ = duplicateStringValue(text, len); +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class Value::CZString +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +// Notes: policy_ indicates if the string was allocated when +// a string is stored. + +Value::CZString::CZString(ArrayIndex aindex) : cstr_(0), index_(aindex) {} + +Value::CZString::CZString(char const* str, unsigned ulength, DuplicationPolicy allocate) + : cstr_(str) { + // allocate != duplicate + storage_.policy_ = allocate & 0x3; + storage_.length_ = ulength & 0x3FFFFFFF; +} + +Value::CZString::CZString(const CZString& other) { + cstr_ = (other.storage_.policy_ != noDuplication && other.cstr_ != 0 + ? duplicateStringValue(other.cstr_, other.storage_.length_) + : other.cstr_); + storage_.policy_ = static_cast<unsigned>(other.cstr_ + ? (static_cast<DuplicationPolicy>(other.storage_.policy_) == noDuplication + ? noDuplication : duplicate) + : static_cast<DuplicationPolicy>(other.storage_.policy_)) & 3U; + storage_.length_ = other.storage_.length_; +} + +#if JSON_HAS_RVALUE_REFERENCES +Value::CZString::CZString(CZString&& other) + : cstr_(other.cstr_), index_(other.index_) { + other.cstr_ = nullptr; +} +#endif + +Value::CZString::~CZString() { + if (cstr_ && storage_.policy_ == duplicate) { + releaseStringValue(const_cast<char*>(cstr_), storage_.length_ + 1u); //+1 for null terminating character for sake of completeness but not actually necessary + } +} + +void Value::CZString::swap(CZString& other) { + std::swap(cstr_, other.cstr_); + std::swap(index_, other.index_); +} + +Value::CZString& Value::CZString::operator=(CZString other) { + swap(other); + return *this; +} + +bool Value::CZString::operator<(const CZString& other) const { + if (!cstr_) return index_ < other.index_; + //return strcmp(cstr_, other.cstr_) < 0; + // Assume both are strings. + unsigned this_len = this->storage_.length_; + unsigned other_len = other.storage_.length_; + unsigned min_len = std::min(this_len, other_len); + JSON_ASSERT(this->cstr_ && other.cstr_); + int comp = memcmp(this->cstr_, other.cstr_, min_len); + if (comp < 0) return true; + if (comp > 0) return false; + return (this_len < other_len); +} + +bool Value::CZString::operator==(const CZString& other) const { + if (!cstr_) return index_ == other.index_; + //return strcmp(cstr_, other.cstr_) == 0; + // Assume both are strings. + unsigned this_len = this->storage_.length_; + unsigned other_len = other.storage_.length_; + if (this_len != other_len) return false; + JSON_ASSERT(this->cstr_ && other.cstr_); + int comp = memcmp(this->cstr_, other.cstr_, this_len); + return comp == 0; +} + +ArrayIndex Value::CZString::index() const { return index_; } + +//const char* Value::CZString::c_str() const { return cstr_; } +const char* Value::CZString::data() const { return cstr_; } +unsigned Value::CZString::length() const { return storage_.length_; } +bool Value::CZString::isStaticString() const { return storage_.policy_ == noDuplication; } + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class Value::Value +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +/*! \internal Default constructor initialization must be equivalent to: + * memset( this, 0, sizeof(Value) ) + * This optimization is used in ValueInternalMap fast allocator. + */ +Value::Value(ValueType vtype) { + static char const empty[] = ""; + initBasic(vtype); + switch (vtype) { + case nullValue: + break; + case intValue: + case uintValue: + value_.int_ = 0; + break; + case realValue: + value_.real_ = 0.0; + break; + case stringValue: + // allocated_ == false, so this is safe. + value_.string_ = const_cast<char*>(static_cast<char const*>(empty)); + break; + case arrayValue: + case objectValue: + value_.map_ = new ObjectValues(); + break; + case booleanValue: + value_.bool_ = false; + break; + default: + JSON_ASSERT_UNREACHABLE; + } +} + +Value::Value(Int value) { + initBasic(intValue); + value_.int_ = value; +} + +Value::Value(UInt value) { + initBasic(uintValue); + value_.uint_ = value; +} +#if defined(JSON_HAS_INT64) +Value::Value(Int64 value) { + initBasic(intValue); + value_.int_ = value; +} +Value::Value(UInt64 value) { + initBasic(uintValue); + value_.uint_ = value; +} +#endif // defined(JSON_HAS_INT64) + +Value::Value(double value) { + initBasic(realValue); + value_.real_ = value; +} + +Value::Value(const char* value) { + initBasic(stringValue, true); + value_.string_ = duplicateAndPrefixStringValue(value, static_cast<unsigned>(strlen(value))); +} + +Value::Value(const char* beginValue, const char* endValue) { + initBasic(stringValue, true); + value_.string_ = + duplicateAndPrefixStringValue(beginValue, static_cast<unsigned>(endValue - beginValue)); +} + +Value::Value(const JSONCPP_STRING& value) { + initBasic(stringValue, true); + value_.string_ = + duplicateAndPrefixStringValue(value.data(), static_cast<unsigned>(value.length())); +} + +Value::Value(const StaticString& value) { + initBasic(stringValue); + value_.string_ = const_cast<char*>(value.c_str()); +} + +#ifdef JSON_USE_CPPTL +Value::Value(const CppTL::ConstString& value) { + initBasic(stringValue, true); + value_.string_ = duplicateAndPrefixStringValue(value, static_cast<unsigned>(value.length())); +} +#endif + +Value::Value(bool value) { + initBasic(booleanValue); + value_.bool_ = value; +} + +Value::Value(Value const& other) + : type_(other.type_), allocated_(false) + , + comments_(0), start_(other.start_), limit_(other.limit_) +{ + switch (type_) { + case nullValue: + case intValue: + case uintValue: + case realValue: + case booleanValue: + value_ = other.value_; + break; + case stringValue: + if (other.value_.string_ && other.allocated_) { + unsigned len; + char const* str; + decodePrefixedString(other.allocated_, other.value_.string_, + &len, &str); + value_.string_ = duplicateAndPrefixStringValue(str, len); + allocated_ = true; + } else { + value_.string_ = other.value_.string_; + allocated_ = false; + } + break; + case arrayValue: + case objectValue: + value_.map_ = new ObjectValues(*other.value_.map_); + break; + default: + JSON_ASSERT_UNREACHABLE; + } + if (other.comments_) { + comments_ = new CommentInfo[numberOfCommentPlacement]; + for (int comment = 0; comment < numberOfCommentPlacement; ++comment) { + const CommentInfo& otherComment = other.comments_[comment]; + if (otherComment.comment_) + comments_[comment].setComment( + otherComment.comment_, strlen(otherComment.comment_)); + } + } +} + +#if JSON_HAS_RVALUE_REFERENCES +// Move constructor +Value::Value(Value&& other) { + initBasic(nullValue); + swap(other); +} +#endif + +Value::~Value() { + switch (type_) { + case nullValue: + case intValue: + case uintValue: + case realValue: + case booleanValue: + break; + case stringValue: + if (allocated_) + releasePrefixedStringValue(value_.string_); + break; + case arrayValue: + case objectValue: + delete value_.map_; + break; + default: + JSON_ASSERT_UNREACHABLE; + } + + delete[] comments_; + + value_.uint_ = 0; +} + +Value& Value::operator=(Value other) { + swap(other); + return *this; +} + +void Value::swapPayload(Value& other) { + ValueType temp = type_; + type_ = other.type_; + other.type_ = temp; + std::swap(value_, other.value_); + int temp2 = allocated_; + allocated_ = other.allocated_; + other.allocated_ = temp2 & 0x1; +} + +void Value::swap(Value& other) { + swapPayload(other); + std::swap(comments_, other.comments_); + std::swap(start_, other.start_); + std::swap(limit_, other.limit_); +} + +ValueType Value::type() const { return type_; } + +int Value::compare(const Value& other) const { + if (*this < other) + return -1; + if (*this > other) + return 1; + return 0; +} + +bool Value::operator<(const Value& other) const { + int typeDelta = type_ - other.type_; + if (typeDelta) + return typeDelta < 0 ? true : false; + switch (type_) { + case nullValue: + return false; + case intValue: + return value_.int_ < other.value_.int_; + case uintValue: + return value_.uint_ < other.value_.uint_; + case realValue: + return value_.real_ < other.value_.real_; + case booleanValue: + return value_.bool_ < other.value_.bool_; + case stringValue: + { + if ((value_.string_ == 0) || (other.value_.string_ == 0)) { + if (other.value_.string_) return true; + else return false; + } + unsigned this_len; + unsigned other_len; + char const* this_str; + char const* other_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str); + unsigned min_len = std::min(this_len, other_len); + JSON_ASSERT(this_str && other_str); + int comp = memcmp(this_str, other_str, min_len); + if (comp < 0) return true; + if (comp > 0) return false; + return (this_len < other_len); + } + case arrayValue: + case objectValue: { + int delta = int(value_.map_->size() - other.value_.map_->size()); + if (delta) + return delta < 0; + return (*value_.map_) < (*other.value_.map_); + } + default: + JSON_ASSERT_UNREACHABLE; + } + return false; // unreachable +} + +bool Value::operator<=(const Value& other) const { return !(other < *this); } + +bool Value::operator>=(const Value& other) const { return !(*this < other); } + +bool Value::operator>(const Value& other) const { return other < *this; } + +bool Value::operator==(const Value& other) const { + // if ( type_ != other.type_ ) + // GCC 2.95.3 says: + // attempt to take address of bit-field structure member `Json::Value::type_' + // Beats me, but a temp solves the problem. + int temp = other.type_; + if (type_ != temp) + return false; + switch (type_) { + case nullValue: + return true; + case intValue: + return value_.int_ == other.value_.int_; + case uintValue: + return value_.uint_ == other.value_.uint_; + case realValue: + return value_.real_ == other.value_.real_; + case booleanValue: + return value_.bool_ == other.value_.bool_; + case stringValue: + { + if ((value_.string_ == 0) || (other.value_.string_ == 0)) { + return (value_.string_ == other.value_.string_); + } + unsigned this_len; + unsigned other_len; + char const* this_str; + char const* other_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str); + if (this_len != other_len) return false; + JSON_ASSERT(this_str && other_str); + int comp = memcmp(this_str, other_str, this_len); + return comp == 0; + } + case arrayValue: + case objectValue: + return value_.map_->size() == other.value_.map_->size() && + (*value_.map_) == (*other.value_.map_); + default: + JSON_ASSERT_UNREACHABLE; + } + return false; // unreachable +} + +bool Value::operator!=(const Value& other) const { return !(*this == other); } + +const char* Value::asCString() const { + JSON_ASSERT_MESSAGE(type_ == stringValue, + "in Json::Value::asCString(): requires stringValue"); + if (value_.string_ == 0) return 0; + unsigned this_len; + char const* this_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + return this_str; +} + +#if JSONCPP_USING_SECURE_MEMORY +unsigned Value::getCStringLength() const { + JSON_ASSERT_MESSAGE(type_ == stringValue, + "in Json::Value::asCString(): requires stringValue"); + if (value_.string_ == 0) return 0; + unsigned this_len; + char const* this_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + return this_len; +} +#endif + +bool Value::getString(char const** str, char const** cend) const { + if (type_ != stringValue) return false; + if (value_.string_ == 0) return false; + unsigned length; + decodePrefixedString(this->allocated_, this->value_.string_, &length, str); + *cend = *str + length; + return true; +} + +JSONCPP_STRING Value::asString() const { + switch (type_) { + case nullValue: + return ""; + case stringValue: + { + if (value_.string_ == 0) return ""; + unsigned this_len; + char const* this_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + return JSONCPP_STRING(this_str, this_len); + } + case booleanValue: + return value_.bool_ ? "true" : "false"; + case intValue: + return valueToString(value_.int_); + case uintValue: + return valueToString(value_.uint_); + case realValue: + return valueToString(value_.real_); + default: + JSON_FAIL_MESSAGE("Type is not convertible to string"); + } +} + +#ifdef JSON_USE_CPPTL +CppTL::ConstString Value::asConstString() const { + unsigned len; + char const* str; + decodePrefixedString(allocated_, value_.string_, + &len, &str); + return CppTL::ConstString(str, len); +} +#endif + +Value::Int Value::asInt() const { + switch (type_) { + case intValue: + JSON_ASSERT_MESSAGE(isInt(), "LargestInt out of Int range"); + return Int(value_.int_); + case uintValue: + JSON_ASSERT_MESSAGE(isInt(), "LargestUInt out of Int range"); + return Int(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt, maxInt), + "double out of Int range"); + return Int(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to Int."); +} + +Value::UInt Value::asUInt() const { + switch (type_) { + case intValue: + JSON_ASSERT_MESSAGE(isUInt(), "LargestInt out of UInt range"); + return UInt(value_.int_); + case uintValue: + JSON_ASSERT_MESSAGE(isUInt(), "LargestUInt out of UInt range"); + return UInt(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt), + "double out of UInt range"); + return UInt(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to UInt."); +} + +#if defined(JSON_HAS_INT64) + +Value::Int64 Value::asInt64() const { + switch (type_) { + case intValue: + return Int64(value_.int_); + case uintValue: + JSON_ASSERT_MESSAGE(isInt64(), "LargestUInt out of Int64 range"); + return Int64(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt64, maxInt64), + "double out of Int64 range"); + return Int64(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to Int64."); +} + +Value::UInt64 Value::asUInt64() const { + switch (type_) { + case intValue: + JSON_ASSERT_MESSAGE(isUInt64(), "LargestInt out of UInt64 range"); + return UInt64(value_.int_); + case uintValue: + return UInt64(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt64), + "double out of UInt64 range"); + return UInt64(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to UInt64."); +} +#endif // if defined(JSON_HAS_INT64) + +LargestInt Value::asLargestInt() const { +#if defined(JSON_NO_INT64) + return asInt(); +#else + return asInt64(); +#endif +} + +LargestUInt Value::asLargestUInt() const { +#if defined(JSON_NO_INT64) + return asUInt(); +#else + return asUInt64(); +#endif +} + +double Value::asDouble() const { + switch (type_) { + case intValue: + return static_cast<double>(value_.int_); + case uintValue: +#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return static_cast<double>(value_.uint_); +#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return integerToDouble(value_.uint_); +#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + case realValue: + return value_.real_; + case nullValue: + return 0.0; + case booleanValue: + return value_.bool_ ? 1.0 : 0.0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to double."); +} + +float Value::asFloat() const { + switch (type_) { + case intValue: + return static_cast<float>(value_.int_); + case uintValue: +#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return static_cast<float>(value_.uint_); +#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + // This can fail (silently?) if the value is bigger than MAX_FLOAT. + return static_cast<float>(integerToDouble(value_.uint_)); +#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + case realValue: + return static_cast<float>(value_.real_); + case nullValue: + return 0.0; + case booleanValue: + return value_.bool_ ? 1.0f : 0.0f; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to float."); +} + +bool Value::asBool() const { + switch (type_) { + case booleanValue: + return value_.bool_; + case nullValue: + return false; + case intValue: + return value_.int_ ? true : false; + case uintValue: + return value_.uint_ ? true : false; + case realValue: + // This is kind of strange. Not recommended. + return (value_.real_ != 0.0) ? true : false; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to bool."); +} + +bool Value::isConvertibleTo(ValueType other) const { + switch (other) { + case nullValue: + return (isNumeric() && asDouble() == 0.0) || + (type_ == booleanValue && value_.bool_ == false) || + (type_ == stringValue && asString() == "") || + (type_ == arrayValue && value_.map_->size() == 0) || + (type_ == objectValue && value_.map_->size() == 0) || + type_ == nullValue; + case intValue: + return isInt() || + (type_ == realValue && InRange(value_.real_, minInt, maxInt)) || + type_ == booleanValue || type_ == nullValue; + case uintValue: + return isUInt() || + (type_ == realValue && InRange(value_.real_, 0, maxUInt)) || + type_ == booleanValue || type_ == nullValue; + case realValue: + return isNumeric() || type_ == booleanValue || type_ == nullValue; + case booleanValue: + return isNumeric() || type_ == booleanValue || type_ == nullValue; + case stringValue: + return isNumeric() || type_ == booleanValue || type_ == stringValue || + type_ == nullValue; + case arrayValue: + return type_ == arrayValue || type_ == nullValue; + case objectValue: + return type_ == objectValue || type_ == nullValue; + } + JSON_ASSERT_UNREACHABLE; + return false; +} + +/// Number of values in array or object +ArrayIndex Value::size() const { + switch (type_) { + case nullValue: + case intValue: + case uintValue: + case realValue: + case booleanValue: + case stringValue: + return 0; + case arrayValue: // size of the array is highest index + 1 + if (!value_.map_->empty()) { + ObjectValues::const_iterator itLast = value_.map_->end(); + --itLast; + return (*itLast).first.index() + 1; + } + return 0; + case objectValue: + return ArrayIndex(value_.map_->size()); + } + JSON_ASSERT_UNREACHABLE; + return 0; // unreachable; +} + +bool Value::empty() const { + if (isNull() || isArray() || isObject()) + return size() == 0u; + else + return false; +} + +bool Value::operator!() const { return isNull(); } + +void Value::clear() { + JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue || + type_ == objectValue, + "in Json::Value::clear(): requires complex value"); + start_ = 0; + limit_ = 0; + switch (type_) { + case arrayValue: + case objectValue: + value_.map_->clear(); + break; + default: + break; + } +} + +void Value::resize(ArrayIndex newSize) { + JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue, + "in Json::Value::resize(): requires arrayValue"); + if (type_ == nullValue) + *this = Value(arrayValue); + ArrayIndex oldSize = size(); + if (newSize == 0) + clear(); + else if (newSize > oldSize) + (*this)[newSize - 1]; + else { + for (ArrayIndex index = newSize; index < oldSize; ++index) { + value_.map_->erase(index); + } + JSON_ASSERT(size() == newSize); + } +} + +Value& Value::operator[](ArrayIndex index) { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == arrayValue, + "in Json::Value::operator[](ArrayIndex): requires arrayValue"); + if (type_ == nullValue) + *this = Value(arrayValue); + CZString key(index); + ObjectValues::iterator it = value_.map_->lower_bound(key); + if (it != value_.map_->end() && (*it).first == key) + return (*it).second; + + ObjectValues::value_type defaultValue(key, nullSingleton()); + it = value_.map_->insert(it, defaultValue); + return (*it).second; +} + +Value& Value::operator[](int index) { + JSON_ASSERT_MESSAGE( + index >= 0, + "in Json::Value::operator[](int index): index cannot be negative"); + return (*this)[ArrayIndex(index)]; +} + +const Value& Value::operator[](ArrayIndex index) const { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == arrayValue, + "in Json::Value::operator[](ArrayIndex)const: requires arrayValue"); + if (type_ == nullValue) + return nullSingleton(); + CZString key(index); + ObjectValues::const_iterator it = value_.map_->find(key); + if (it == value_.map_->end()) + return nullSingleton(); + return (*it).second; +} + +const Value& Value::operator[](int index) const { + JSON_ASSERT_MESSAGE( + index >= 0, + "in Json::Value::operator[](int index) const: index cannot be negative"); + return (*this)[ArrayIndex(index)]; +} + +void Value::initBasic(ValueType vtype, bool allocated) { + type_ = vtype; + allocated_ = allocated; + comments_ = 0; + start_ = 0; + limit_ = 0; +} + +// Access an object value by name, create a null member if it does not exist. +// @pre Type of '*this' is object or null. +// @param key is null-terminated. +Value& Value::resolveReference(const char* key) { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::resolveReference(): requires objectValue"); + if (type_ == nullValue) + *this = Value(objectValue); + CZString actualKey( + key, static_cast<unsigned>(strlen(key)), CZString::noDuplication); // NOTE! + ObjectValues::iterator it = value_.map_->lower_bound(actualKey); + if (it != value_.map_->end() && (*it).first == actualKey) + return (*it).second; + + ObjectValues::value_type defaultValue(actualKey, nullSingleton()); + it = value_.map_->insert(it, defaultValue); + Value& value = (*it).second; + return value; +} + +// @param key is not null-terminated. +Value& Value::resolveReference(char const* key, char const* cend) +{ + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::resolveReference(key, end): requires objectValue"); + if (type_ == nullValue) + *this = Value(objectValue); + CZString actualKey( + key, static_cast<unsigned>(cend-key), CZString::duplicateOnCopy); + ObjectValues::iterator it = value_.map_->lower_bound(actualKey); + if (it != value_.map_->end() && (*it).first == actualKey) + return (*it).second; + + ObjectValues::value_type defaultValue(actualKey, nullSingleton()); + it = value_.map_->insert(it, defaultValue); + Value& value = (*it).second; + return value; +} + +Value Value::get(ArrayIndex index, const Value& defaultValue) const { + const Value* value = &((*this)[index]); + return value == &nullSingleton() ? defaultValue : *value; +} + +bool Value::isValidIndex(ArrayIndex index) const { return index < size(); } + +Value const* Value::find(char const* key, char const* cend) const +{ + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::find(key, end, found): requires objectValue or nullValue"); + if (type_ == nullValue) return NULL; + CZString actualKey(key, static_cast<unsigned>(cend-key), CZString::noDuplication); + ObjectValues::const_iterator it = value_.map_->find(actualKey); + if (it == value_.map_->end()) return NULL; + return &(*it).second; +} +const Value& Value::operator[](const char* key) const +{ + Value const* found = find(key, key + strlen(key)); + if (!found) return nullSingleton(); + return *found; +} +Value const& Value::operator[](JSONCPP_STRING const& key) const +{ + Value const* found = find(key.data(), key.data() + key.length()); + if (!found) return nullSingleton(); + return *found; +} + +Value& Value::operator[](const char* key) { + return resolveReference(key, key + strlen(key)); +} + +Value& Value::operator[](const JSONCPP_STRING& key) { + return resolveReference(key.data(), key.data() + key.length()); +} + +Value& Value::operator[](const StaticString& key) { + return resolveReference(key.c_str()); +} + +#ifdef JSON_USE_CPPTL +Value& Value::operator[](const CppTL::ConstString& key) { + return resolveReference(key.c_str(), key.end_c_str()); +} +Value const& Value::operator[](CppTL::ConstString const& key) const +{ + Value const* found = find(key.c_str(), key.end_c_str()); + if (!found) return nullSingleton(); + return *found; +} +#endif + +Value& Value::append(const Value& value) { return (*this)[size()] = value; } + +Value Value::get(char const* key, char const* cend, Value const& defaultValue) const +{ + Value const* found = find(key, cend); + return !found ? defaultValue : *found; +} +Value Value::get(char const* key, Value const& defaultValue) const +{ + return get(key, key + strlen(key), defaultValue); +} +Value Value::get(JSONCPP_STRING const& key, Value const& defaultValue) const +{ + return get(key.data(), key.data() + key.length(), defaultValue); +} + + +bool Value::removeMember(const char* key, const char* cend, Value* removed) +{ + if (type_ != objectValue) { + return false; + } + CZString actualKey(key, static_cast<unsigned>(cend-key), CZString::noDuplication); + ObjectValues::iterator it = value_.map_->find(actualKey); + if (it == value_.map_->end()) + return false; + *removed = it->second; + value_.map_->erase(it); + return true; +} +bool Value::removeMember(const char* key, Value* removed) +{ + return removeMember(key, key + strlen(key), removed); +} +bool Value::removeMember(JSONCPP_STRING const& key, Value* removed) +{ + return removeMember(key.data(), key.data() + key.length(), removed); +} +Value Value::removeMember(const char* key) +{ + JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue, + "in Json::Value::removeMember(): requires objectValue"); + if (type_ == nullValue) + return nullSingleton(); + + Value removed; // null + removeMember(key, key + strlen(key), &removed); + return removed; // still null if removeMember() did nothing +} +Value Value::removeMember(const JSONCPP_STRING& key) +{ + return removeMember(key.c_str()); +} + +bool Value::removeIndex(ArrayIndex index, Value* removed) { + if (type_ != arrayValue) { + return false; + } + CZString key(index); + ObjectValues::iterator it = value_.map_->find(key); + if (it == value_.map_->end()) { + return false; + } + *removed = it->second; + ArrayIndex oldSize = size(); + // shift left all items left, into the place of the "removed" + for (ArrayIndex i = index; i < (oldSize - 1); ++i){ + CZString keey(i); + (*value_.map_)[keey] = (*this)[i + 1]; + } + // erase the last one ("leftover") + CZString keyLast(oldSize - 1); + ObjectValues::iterator itLast = value_.map_->find(keyLast); + value_.map_->erase(itLast); + return true; +} + +#ifdef JSON_USE_CPPTL +Value Value::get(const CppTL::ConstString& key, + const Value& defaultValue) const { + return get(key.c_str(), key.end_c_str(), defaultValue); +} +#endif + +bool Value::isMember(char const* key, char const* cend) const +{ + Value const* value = find(key, cend); + return NULL != value; +} +bool Value::isMember(char const* key) const +{ + return isMember(key, key + strlen(key)); +} +bool Value::isMember(JSONCPP_STRING const& key) const +{ + return isMember(key.data(), key.data() + key.length()); +} + +#ifdef JSON_USE_CPPTL +bool Value::isMember(const CppTL::ConstString& key) const { + return isMember(key.c_str(), key.end_c_str()); +} +#endif + +Value::Members Value::getMemberNames() const { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::getMemberNames(), value must be objectValue"); + if (type_ == nullValue) + return Value::Members(); + Members members; + members.reserve(value_.map_->size()); + ObjectValues::const_iterator it = value_.map_->begin(); + ObjectValues::const_iterator itEnd = value_.map_->end(); + for (; it != itEnd; ++it) { + members.push_back(JSONCPP_STRING((*it).first.data(), + (*it).first.length())); + } + return members; +} +// +//# ifdef JSON_USE_CPPTL +// EnumMemberNames +// Value::enumMemberNames() const +//{ +// if ( type_ == objectValue ) +// { +// return CppTL::Enum::any( CppTL::Enum::transform( +// CppTL::Enum::keys( *(value_.map_), CppTL::Type<const CZString &>() ), +// MemberNamesTransform() ) ); +// } +// return EnumMemberNames(); +//} +// +// +// EnumValues +// Value::enumValues() const +//{ +// if ( type_ == objectValue || type_ == arrayValue ) +// return CppTL::Enum::anyValues( *(value_.map_), +// CppTL::Type<const Value &>() ); +// return EnumValues(); +//} +// +//# endif + +static bool IsIntegral(double d) { + double integral_part; + return modf(d, &integral_part) == 0.0; +} + +bool Value::isNull() const { return type_ == nullValue; } + +bool Value::isBool() const { return type_ == booleanValue; } + +bool Value::isInt() const { + switch (type_) { + case intValue: + return value_.int_ >= minInt && value_.int_ <= maxInt; + case uintValue: + return value_.uint_ <= UInt(maxInt); + case realValue: + return value_.real_ >= minInt && value_.real_ <= maxInt && + IsIntegral(value_.real_); + default: + break; + } + return false; +} + +bool Value::isUInt() const { + switch (type_) { + case intValue: + return value_.int_ >= 0 && LargestUInt(value_.int_) <= LargestUInt(maxUInt); + case uintValue: + return value_.uint_ <= maxUInt; + case realValue: + return value_.real_ >= 0 && value_.real_ <= maxUInt && + IsIntegral(value_.real_); + default: + break; + } + return false; +} + +bool Value::isInt64() const { +#if defined(JSON_HAS_INT64) + switch (type_) { + case intValue: + return true; + case uintValue: + return value_.uint_ <= UInt64(maxInt64); + case realValue: + // Note that maxInt64 (= 2^63 - 1) is not exactly representable as a + // double, so double(maxInt64) will be rounded up to 2^63. Therefore we + // require the value to be strictly less than the limit. + return value_.real_ >= double(minInt64) && + value_.real_ < double(maxInt64) && IsIntegral(value_.real_); + default: + break; + } +#endif // JSON_HAS_INT64 + return false; +} + +bool Value::isUInt64() const { +#if defined(JSON_HAS_INT64) + switch (type_) { + case intValue: + return value_.int_ >= 0; + case uintValue: + return true; + case realValue: + // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a + // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we + // require the value to be strictly less than the limit. + return value_.real_ >= 0 && value_.real_ < maxUInt64AsDouble && + IsIntegral(value_.real_); + default: + break; + } +#endif // JSON_HAS_INT64 + return false; +} + +bool Value::isIntegral() const { +#if defined(JSON_HAS_INT64) + return isInt64() || isUInt64(); +#else + return isInt() || isUInt(); +#endif +} + +bool Value::isDouble() const { return type_ == realValue || isIntegral(); } + +bool Value::isNumeric() const { return isIntegral() || isDouble(); } + +bool Value::isString() const { return type_ == stringValue; } + +bool Value::isArray() const { return type_ == arrayValue; } + +bool Value::isObject() const { return type_ == objectValue; } + +void Value::setComment(const char* comment, size_t len, CommentPlacement placement) { + if (!comments_) + comments_ = new CommentInfo[numberOfCommentPlacement]; + if ((len > 0) && (comment[len-1] == '\n')) { + // Always discard trailing newline, to aid indentation. + len -= 1; + } + comments_[placement].setComment(comment, len); +} + +void Value::setComment(const char* comment, CommentPlacement placement) { + setComment(comment, strlen(comment), placement); +} + +void Value::setComment(const JSONCPP_STRING& comment, CommentPlacement placement) { + setComment(comment.c_str(), comment.length(), placement); +} + +bool Value::hasComment(CommentPlacement placement) const { + return comments_ != 0 && comments_[placement].comment_ != 0; +} + +JSONCPP_STRING Value::getComment(CommentPlacement placement) const { + if (hasComment(placement)) + return comments_[placement].comment_; + return ""; +} + +void Value::setOffsetStart(ptrdiff_t start) { start_ = start; } + +void Value::setOffsetLimit(ptrdiff_t limit) { limit_ = limit; } + +ptrdiff_t Value::getOffsetStart() const { return start_; } + +ptrdiff_t Value::getOffsetLimit() const { return limit_; } + +JSONCPP_STRING Value::toStyledString() const { + StyledWriter writer; + return writer.write(*this); +} + +Value::const_iterator Value::begin() const { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return const_iterator(value_.map_->begin()); + break; + default: + break; + } + return const_iterator(); +} + +Value::const_iterator Value::end() const { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return const_iterator(value_.map_->end()); + break; + default: + break; + } + return const_iterator(); +} + +Value::iterator Value::begin() { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return iterator(value_.map_->begin()); + break; + default: + break; + } + return iterator(); +} + +Value::iterator Value::end() { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return iterator(value_.map_->end()); + break; + default: + break; + } + return iterator(); +} + +// class PathArgument +// ////////////////////////////////////////////////////////////////// + +PathArgument::PathArgument() : key_(), index_(), kind_(kindNone) {} + +PathArgument::PathArgument(ArrayIndex index) + : key_(), index_(index), kind_(kindIndex) {} + +PathArgument::PathArgument(const char* key) + : key_(key), index_(), kind_(kindKey) {} + +PathArgument::PathArgument(const JSONCPP_STRING& key) + : key_(key.c_str()), index_(), kind_(kindKey) {} + +// class Path +// ////////////////////////////////////////////////////////////////// + +Path::Path(const JSONCPP_STRING& path, + const PathArgument& a1, + const PathArgument& a2, + const PathArgument& a3, + const PathArgument& a4, + const PathArgument& a5) { + InArgs in; + in.push_back(&a1); + in.push_back(&a2); + in.push_back(&a3); + in.push_back(&a4); + in.push_back(&a5); + makePath(path, in); +} + +void Path::makePath(const JSONCPP_STRING& path, const InArgs& in) { + const char* current = path.c_str(); + const char* end = current + path.length(); + InArgs::const_iterator itInArg = in.begin(); + while (current != end) { + if (*current == '[') { + ++current; + if (*current == '%') + addPathInArg(path, in, itInArg, PathArgument::kindIndex); + else { + ArrayIndex index = 0; + for (; current != end && *current >= '0' && *current <= '9'; ++current) + index = index * 10 + ArrayIndex(*current - '0'); + args_.push_back(index); + } + if (current == end || *++current != ']') + invalidPath(path, int(current - path.c_str())); + } else if (*current == '%') { + addPathInArg(path, in, itInArg, PathArgument::kindKey); + ++current; + } else if (*current == '.' || *current == ']') { + ++current; + } else { + const char* beginName = current; + while (current != end && !strchr("[.", *current)) + ++current; + args_.push_back(JSONCPP_STRING(beginName, current)); + } + } +} + +void Path::addPathInArg(const JSONCPP_STRING& /*path*/, + const InArgs& in, + InArgs::const_iterator& itInArg, + PathArgument::Kind kind) { + if (itInArg == in.end()) { + // Error: missing argument %d + } else if ((*itInArg)->kind_ != kind) { + // Error: bad argument type + } else { + args_.push_back(**itInArg++); + } +} + +void Path::invalidPath(const JSONCPP_STRING& /*path*/, int /*location*/) { + // Error: invalid path. +} + +const Value& Path::resolve(const Value& root) const { + const Value* node = &root; + for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { + const PathArgument& arg = *it; + if (arg.kind_ == PathArgument::kindIndex) { + if (!node->isArray() || !node->isValidIndex(arg.index_)) { + // Error: unable to resolve path (array value expected at position... + return Value::null; + } + node = &((*node)[arg.index_]); + } else if (arg.kind_ == PathArgument::kindKey) { + if (!node->isObject()) { + // Error: unable to resolve path (object value expected at position...) + return Value::null; + } + node = &((*node)[arg.key_]); + if (node == &Value::nullSingleton()) { + // Error: unable to resolve path (object has no member named '' at + // position...) + return Value::null; + } + } + } + return *node; +} + +Value Path::resolve(const Value& root, const Value& defaultValue) const { + const Value* node = &root; + for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { + const PathArgument& arg = *it; + if (arg.kind_ == PathArgument::kindIndex) { + if (!node->isArray() || !node->isValidIndex(arg.index_)) + return defaultValue; + node = &((*node)[arg.index_]); + } else if (arg.kind_ == PathArgument::kindKey) { + if (!node->isObject()) + return defaultValue; + node = &((*node)[arg.key_]); + if (node == &Value::nullSingleton()) + return defaultValue; + } + } + return *node; +} + +Value& Path::make(Value& root) const { + Value* node = &root; + for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { + const PathArgument& arg = *it; + if (arg.kind_ == PathArgument::kindIndex) { + if (!node->isArray()) { + // Error: node is not an array at position ... + } + node = &((*node)[arg.index_]); + } else if (arg.kind_ == PathArgument::kindKey) { + if (!node->isObject()) { + // Error: node is not an object at position... + } + node = &((*node)[arg.key_]); + } + } + return *node; +} + +} // namespace Json + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_value.cpp +// ////////////////////////////////////////////////////////////////////// + + + + + + +// ////////////////////////////////////////////////////////////////////// +// Beginning of content of file: src/lib_json/json_writer.cpp +// ////////////////////////////////////////////////////////////////////// + +// Copyright 2011 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#if !defined(JSON_IS_AMALGAMATION) +#include <json/writer.h> +#include "json_tool.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <iomanip> +#include <memory> +#include <sstream> +#include <utility> +#include <set> +#include <cassert> +#include <cstring> +#include <cstdio> + +#if defined(_MSC_VER) && _MSC_VER >= 1200 && _MSC_VER < 1800 // Between VC++ 6.0 and VC++ 11.0 +#include <float.h> +#define isfinite _finite +#elif defined(__sun) && defined(__SVR4) //Solaris +#if !defined(isfinite) +#include <ieeefp.h> +#define isfinite finite +#endif +#elif defined(_AIX) +#if !defined(isfinite) +#include <math.h> +#define isfinite finite +#endif +#elif defined(__hpux) +#if !defined(isfinite) +#if defined(__ia64) && !defined(finite) +#define isfinite(x) ((sizeof(x) == sizeof(float) ? \ + _Isfinitef(x) : _IsFinite(x))) +#else +#include <math.h> +#define isfinite finite +#endif +#endif +#else +#include <cmath> +#if !(defined(__QNXNTO__)) // QNX already defines isfinite +#define isfinite std::isfinite +#endif +#endif + +#if defined(_MSC_VER) +#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above +#define snprintf sprintf_s +#elif _MSC_VER >= 1900 // VC++ 14.0 and above +#define snprintf std::snprintf +#else +#define snprintf _snprintf +#endif +#elif defined(__ANDROID__) || defined(__QNXNTO__) +#define snprintf snprintf +#elif __cplusplus >= 201103L +#if !defined(__MINGW32__) && !defined(__CYGWIN__) +#define snprintf std::snprintf +#endif +#endif + +#if defined(__BORLANDC__) +#include <float.h> +#define isfinite _finite +#define snprintf _snprintf +#endif + +#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0 +// Disable warning about strdup being deprecated. +#pragma warning(disable : 4996) +#endif + +namespace Json { + +#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520) +typedef std::unique_ptr<StreamWriter> StreamWriterPtr; +#else +typedef std::auto_ptr<StreamWriter> StreamWriterPtr; +#endif + +static bool containsControlCharacter(const char* str) { + while (*str) { + if (isControlCharacter(*(str++))) + return true; + } + return false; +} + +static bool containsControlCharacter0(const char* str, unsigned len) { + char const* end = str + len; + while (end != str) { + if (isControlCharacter(*str) || 0==*str) + return true; + ++str; + } + return false; +} + +JSONCPP_STRING valueToString(LargestInt value) { + UIntToStringBuffer buffer; + char* current = buffer + sizeof(buffer); + if (value == Value::minLargestInt) { + uintToString(LargestUInt(Value::maxLargestInt) + 1, current); + *--current = '-'; + } else if (value < 0) { + uintToString(LargestUInt(-value), current); + *--current = '-'; + } else { + uintToString(LargestUInt(value), current); + } + assert(current >= buffer); + return current; +} + +JSONCPP_STRING valueToString(LargestUInt value) { + UIntToStringBuffer buffer; + char* current = buffer + sizeof(buffer); + uintToString(value, current); + assert(current >= buffer); + return current; +} + +#if defined(JSON_HAS_INT64) + +JSONCPP_STRING valueToString(Int value) { + return valueToString(LargestInt(value)); +} + +JSONCPP_STRING valueToString(UInt value) { + return valueToString(LargestUInt(value)); +} + +#endif // # if defined(JSON_HAS_INT64) + +namespace { +JSONCPP_STRING valueToString(double value, bool useSpecialFloats, unsigned int precision) { + // Allocate a buffer that is more than large enough to store the 16 digits of + // precision requested below. + char buffer[32]; + int len = -1; + + char formatString[6]; + sprintf(formatString, "%%.%dg", precision); + + // Print into the buffer. We need not request the alternative representation + // that always has a decimal point because JSON doesn't distingish the + // concepts of reals and integers. + if (isfinite(value)) { + len = snprintf(buffer, sizeof(buffer), formatString, value); + } else { + // IEEE standard states that NaN values will not compare to themselves + if (value != value) { + len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "NaN" : "null"); + } else if (value < 0) { + len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "-Infinity" : "-1e+9999"); + } else { + len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "Infinity" : "1e+9999"); + } + // For those, we do not need to call fixNumLoc, but it is fast. + } + assert(len >= 0); + fixNumericLocale(buffer, buffer + len); + return buffer; +} +} + +JSONCPP_STRING valueToString(double value) { return valueToString(value, false, 17); } + +JSONCPP_STRING valueToString(bool value) { return value ? "true" : "false"; } + +JSONCPP_STRING valueToQuotedString(const char* value) { + if (value == NULL) + return ""; + // Not sure how to handle unicode... + if (strpbrk(value, "\"\\\b\f\n\r\t") == NULL && + !containsControlCharacter(value)) + return JSONCPP_STRING("\"") + value + "\""; + // We have to walk value and escape any special characters. + // Appending to JSONCPP_STRING is not efficient, but this should be rare. + // (Note: forward slashes are *not* rare, but I am not escaping them.) + JSONCPP_STRING::size_type maxsize = + strlen(value) * 2 + 3; // allescaped+quotes+NULL + JSONCPP_STRING result; + result.reserve(maxsize); // to avoid lots of mallocs + result += "\""; + for (const char* c = value; *c != 0; ++c) { + switch (*c) { + case '\"': + result += "\\\""; + break; + case '\\': + result += "\\\\"; + break; + case '\b': + result += "\\b"; + break; + case '\f': + result += "\\f"; + break; + case '\n': + result += "\\n"; + break; + case '\r': + result += "\\r"; + break; + case '\t': + result += "\\t"; + break; + // case '/': + // Even though \/ is considered a legal escape in JSON, a bare + // slash is also legal, so I see no reason to escape it. + // (I hope I am not misunderstanding something. + // blep notes: actually escaping \/ may be useful in javascript to avoid </ + // sequence. + // Should add a flag to allow this compatibility mode and prevent this + // sequence from occurring. + default: + if (isControlCharacter(*c)) { + JSONCPP_OSTRINGSTREAM oss; + oss << "\\u" << std::hex << std::uppercase << std::setfill('0') + << std::setw(4) << static_cast<int>(*c); + result += oss.str(); + } else { + result += *c; + } + break; + } + } + result += "\""; + return result; +} + +// https://github.com/upcaste/upcaste/blob/master/src/upcore/src/cstring/strnpbrk.cpp +static char const* strnpbrk(char const* s, char const* accept, size_t n) { + assert((s || !n) && accept); + + char const* const end = s + n; + for (char const* cur = s; cur < end; ++cur) { + int const c = *cur; + for (char const* a = accept; *a; ++a) { + if (*a == c) { + return cur; + } + } + } + return NULL; +} +static JSONCPP_STRING valueToQuotedStringN(const char* value, unsigned length) { + if (value == NULL) + return ""; + // Not sure how to handle unicode... + if (strnpbrk(value, "\"\\\b\f\n\r\t", length) == NULL && + !containsControlCharacter0(value, length)) + return JSONCPP_STRING("\"") + value + "\""; + // We have to walk value and escape any special characters. + // Appending to JSONCPP_STRING is not efficient, but this should be rare. + // (Note: forward slashes are *not* rare, but I am not escaping them.) + JSONCPP_STRING::size_type maxsize = + length * 2 + 3; // allescaped+quotes+NULL + JSONCPP_STRING result; + result.reserve(maxsize); // to avoid lots of mallocs + result += "\""; + char const* end = value + length; + for (const char* c = value; c != end; ++c) { + switch (*c) { + case '\"': + result += "\\\""; + break; + case '\\': + result += "\\\\"; + break; + case '\b': + result += "\\b"; + break; + case '\f': + result += "\\f"; + break; + case '\n': + result += "\\n"; + break; + case '\r': + result += "\\r"; + break; + case '\t': + result += "\\t"; + break; + // case '/': + // Even though \/ is considered a legal escape in JSON, a bare + // slash is also legal, so I see no reason to escape it. + // (I hope I am not misunderstanding something.) + // blep notes: actually escaping \/ may be useful in javascript to avoid </ + // sequence. + // Should add a flag to allow this compatibility mode and prevent this + // sequence from occurring. + default: + if ((isControlCharacter(*c)) || (*c == 0)) { + JSONCPP_OSTRINGSTREAM oss; + oss << "\\u" << std::hex << std::uppercase << std::setfill('0') + << std::setw(4) << static_cast<int>(*c); + result += oss.str(); + } else { + result += *c; + } + break; + } + } + result += "\""; + return result; +} + +// Class Writer +// ////////////////////////////////////////////////////////////////// +Writer::~Writer() {} + +// Class FastWriter +// ////////////////////////////////////////////////////////////////// + +FastWriter::FastWriter() + : yamlCompatiblityEnabled_(false), dropNullPlaceholders_(false), + omitEndingLineFeed_(false) {} + +void FastWriter::enableYAMLCompatibility() { yamlCompatiblityEnabled_ = true; } + +void FastWriter::dropNullPlaceholders() { dropNullPlaceholders_ = true; } + +void FastWriter::omitEndingLineFeed() { omitEndingLineFeed_ = true; } + +JSONCPP_STRING FastWriter::write(const Value& root) { + document_ = ""; + writeValue(root); + if (!omitEndingLineFeed_) + document_ += "\n"; + return document_; +} + +void FastWriter::writeValue(const Value& value) { + switch (value.type()) { + case nullValue: + if (!dropNullPlaceholders_) + document_ += "null"; + break; + case intValue: + document_ += valueToString(value.asLargestInt()); + break; + case uintValue: + document_ += valueToString(value.asLargestUInt()); + break; + case realValue: + document_ += valueToString(value.asDouble()); + break; + case stringValue: + { + // Is NULL possible for value.string_? No. + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) document_ += valueToQuotedStringN(str, static_cast<unsigned>(end-str)); + break; + } + case booleanValue: + document_ += valueToString(value.asBool()); + break; + case arrayValue: { + document_ += '['; + ArrayIndex size = value.size(); + for (ArrayIndex index = 0; index < size; ++index) { + if (index > 0) + document_ += ','; + writeValue(value[index]); + } + document_ += ']'; + } break; + case objectValue: { + Value::Members members(value.getMemberNames()); + document_ += '{'; + for (Value::Members::iterator it = members.begin(); it != members.end(); + ++it) { + const JSONCPP_STRING& name = *it; + if (it != members.begin()) + document_ += ','; + document_ += valueToQuotedStringN(name.data(), static_cast<unsigned>(name.length())); + document_ += yamlCompatiblityEnabled_ ? ": " : ":"; + writeValue(value[name]); + } + document_ += '}'; + } break; + } +} + +// Class StyledWriter +// ////////////////////////////////////////////////////////////////// + +StyledWriter::StyledWriter() + : rightMargin_(74), indentSize_(3), addChildValues_() {} + +JSONCPP_STRING StyledWriter::write(const Value& root) { + document_ = ""; + addChildValues_ = false; + indentString_ = ""; + writeCommentBeforeValue(root); + writeValue(root); + writeCommentAfterValueOnSameLine(root); + document_ += "\n"; + return document_; +} + +void StyledWriter::writeValue(const Value& value) { + switch (value.type()) { + case nullValue: + pushValue("null"); + break; + case intValue: + pushValue(valueToString(value.asLargestInt())); + break; + case uintValue: + pushValue(valueToString(value.asLargestUInt())); + break; + case realValue: + pushValue(valueToString(value.asDouble())); + break; + case stringValue: + { + // Is NULL possible for value.string_? No. + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str))); + else pushValue(""); + break; + } + case booleanValue: + pushValue(valueToString(value.asBool())); + break; + case arrayValue: + writeArrayValue(value); + break; + case objectValue: { + Value::Members members(value.getMemberNames()); + if (members.empty()) + pushValue("{}"); + else { + writeWithIndent("{"); + indent(); + Value::Members::iterator it = members.begin(); + for (;;) { + const JSONCPP_STRING& name = *it; + const Value& childValue = value[name]; + writeCommentBeforeValue(childValue); + writeWithIndent(valueToQuotedString(name.c_str())); + document_ += " : "; + writeValue(childValue); + if (++it == members.end()) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + document_ += ','; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("}"); + } + } break; + } +} + +void StyledWriter::writeArrayValue(const Value& value) { + unsigned size = value.size(); + if (size == 0) + pushValue("[]"); + else { + bool isArrayMultiLine = isMultineArray(value); + if (isArrayMultiLine) { + writeWithIndent("["); + indent(); + bool hasChildValue = !childValues_.empty(); + unsigned index = 0; + for (;;) { + const Value& childValue = value[index]; + writeCommentBeforeValue(childValue); + if (hasChildValue) + writeWithIndent(childValues_[index]); + else { + writeIndent(); + writeValue(childValue); + } + if (++index == size) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + document_ += ','; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("]"); + } else // output on a single line + { + assert(childValues_.size() == size); + document_ += "[ "; + for (unsigned index = 0; index < size; ++index) { + if (index > 0) + document_ += ", "; + document_ += childValues_[index]; + } + document_ += " ]"; + } + } +} + +bool StyledWriter::isMultineArray(const Value& value) { + ArrayIndex const size = value.size(); + bool isMultiLine = size * 3 >= rightMargin_; + childValues_.clear(); + for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) { + const Value& childValue = value[index]; + isMultiLine = ((childValue.isArray() || childValue.isObject()) && + childValue.size() > 0); + } + if (!isMultiLine) // check if line length > max line length + { + childValues_.reserve(size); + addChildValues_ = true; + ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' + for (ArrayIndex index = 0; index < size; ++index) { + if (hasCommentForValue(value[index])) { + isMultiLine = true; + } + writeValue(value[index]); + lineLength += static_cast<ArrayIndex>(childValues_[index].length()); + } + addChildValues_ = false; + isMultiLine = isMultiLine || lineLength >= rightMargin_; + } + return isMultiLine; +} + +void StyledWriter::pushValue(const JSONCPP_STRING& value) { + if (addChildValues_) + childValues_.push_back(value); + else + document_ += value; +} + +void StyledWriter::writeIndent() { + if (!document_.empty()) { + char last = document_[document_.length() - 1]; + if (last == ' ') // already indented + return; + if (last != '\n') // Comments may add new-line + document_ += '\n'; + } + document_ += indentString_; +} + +void StyledWriter::writeWithIndent(const JSONCPP_STRING& value) { + writeIndent(); + document_ += value; +} + +void StyledWriter::indent() { indentString_ += JSONCPP_STRING(indentSize_, ' '); } + +void StyledWriter::unindent() { + assert(indentString_.size() >= indentSize_); + indentString_.resize(indentString_.size() - indentSize_); +} + +void StyledWriter::writeCommentBeforeValue(const Value& root) { + if (!root.hasComment(commentBefore)) + return; + + document_ += "\n"; + writeIndent(); + const JSONCPP_STRING& comment = root.getComment(commentBefore); + JSONCPP_STRING::const_iterator iter = comment.begin(); + while (iter != comment.end()) { + document_ += *iter; + if (*iter == '\n' && + (iter != comment.end() && *(iter + 1) == '/')) + writeIndent(); + ++iter; + } + + // Comments are stripped of trailing newlines, so add one here + document_ += "\n"; +} + +void StyledWriter::writeCommentAfterValueOnSameLine(const Value& root) { + if (root.hasComment(commentAfterOnSameLine)) + document_ += " " + root.getComment(commentAfterOnSameLine); + + if (root.hasComment(commentAfter)) { + document_ += "\n"; + document_ += root.getComment(commentAfter); + document_ += "\n"; + } +} + +bool StyledWriter::hasCommentForValue(const Value& value) { + return value.hasComment(commentBefore) || + value.hasComment(commentAfterOnSameLine) || + value.hasComment(commentAfter); +} + +// Class StyledStreamWriter +// ////////////////////////////////////////////////////////////////// + +StyledStreamWriter::StyledStreamWriter(JSONCPP_STRING indentation) + : document_(NULL), rightMargin_(74), indentation_(indentation), + addChildValues_() {} + +void StyledStreamWriter::write(JSONCPP_OSTREAM& out, const Value& root) { + document_ = &out; + addChildValues_ = false; + indentString_ = ""; + indented_ = true; + writeCommentBeforeValue(root); + if (!indented_) writeIndent(); + indented_ = true; + writeValue(root); + writeCommentAfterValueOnSameLine(root); + *document_ << "\n"; + document_ = NULL; // Forget the stream, for safety. +} + +void StyledStreamWriter::writeValue(const Value& value) { + switch (value.type()) { + case nullValue: + pushValue("null"); + break; + case intValue: + pushValue(valueToString(value.asLargestInt())); + break; + case uintValue: + pushValue(valueToString(value.asLargestUInt())); + break; + case realValue: + pushValue(valueToString(value.asDouble())); + break; + case stringValue: + { + // Is NULL possible for value.string_? No. + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str))); + else pushValue(""); + break; + } + case booleanValue: + pushValue(valueToString(value.asBool())); + break; + case arrayValue: + writeArrayValue(value); + break; + case objectValue: { + Value::Members members(value.getMemberNames()); + if (members.empty()) + pushValue("{}"); + else { + writeWithIndent("{"); + indent(); + Value::Members::iterator it = members.begin(); + for (;;) { + const JSONCPP_STRING& name = *it; + const Value& childValue = value[name]; + writeCommentBeforeValue(childValue); + writeWithIndent(valueToQuotedString(name.c_str())); + *document_ << " : "; + writeValue(childValue); + if (++it == members.end()) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *document_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("}"); + } + } break; + } +} + +void StyledStreamWriter::writeArrayValue(const Value& value) { + unsigned size = value.size(); + if (size == 0) + pushValue("[]"); + else { + bool isArrayMultiLine = isMultineArray(value); + if (isArrayMultiLine) { + writeWithIndent("["); + indent(); + bool hasChildValue = !childValues_.empty(); + unsigned index = 0; + for (;;) { + const Value& childValue = value[index]; + writeCommentBeforeValue(childValue); + if (hasChildValue) + writeWithIndent(childValues_[index]); + else { + if (!indented_) writeIndent(); + indented_ = true; + writeValue(childValue); + indented_ = false; + } + if (++index == size) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *document_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("]"); + } else // output on a single line + { + assert(childValues_.size() == size); + *document_ << "[ "; + for (unsigned index = 0; index < size; ++index) { + if (index > 0) + *document_ << ", "; + *document_ << childValues_[index]; + } + *document_ << " ]"; + } + } +} + +bool StyledStreamWriter::isMultineArray(const Value& value) { + ArrayIndex const size = value.size(); + bool isMultiLine = size * 3 >= rightMargin_; + childValues_.clear(); + for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) { + const Value& childValue = value[index]; + isMultiLine = ((childValue.isArray() || childValue.isObject()) && + childValue.size() > 0); + } + if (!isMultiLine) // check if line length > max line length + { + childValues_.reserve(size); + addChildValues_ = true; + ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' + for (ArrayIndex index = 0; index < size; ++index) { + if (hasCommentForValue(value[index])) { + isMultiLine = true; + } + writeValue(value[index]); + lineLength += static_cast<ArrayIndex>(childValues_[index].length()); + } + addChildValues_ = false; + isMultiLine = isMultiLine || lineLength >= rightMargin_; + } + return isMultiLine; +} + +void StyledStreamWriter::pushValue(const JSONCPP_STRING& value) { + if (addChildValues_) + childValues_.push_back(value); + else + *document_ << value; +} + +void StyledStreamWriter::writeIndent() { + // blep intended this to look at the so-far-written string + // to determine whether we are already indented, but + // with a stream we cannot do that. So we rely on some saved state. + // The caller checks indented_. + *document_ << '\n' << indentString_; +} + +void StyledStreamWriter::writeWithIndent(const JSONCPP_STRING& value) { + if (!indented_) writeIndent(); + *document_ << value; + indented_ = false; +} + +void StyledStreamWriter::indent() { indentString_ += indentation_; } + +void StyledStreamWriter::unindent() { + assert(indentString_.size() >= indentation_.size()); + indentString_.resize(indentString_.size() - indentation_.size()); +} + +void StyledStreamWriter::writeCommentBeforeValue(const Value& root) { + if (!root.hasComment(commentBefore)) + return; + + if (!indented_) writeIndent(); + const JSONCPP_STRING& comment = root.getComment(commentBefore); + JSONCPP_STRING::const_iterator iter = comment.begin(); + while (iter != comment.end()) { + *document_ << *iter; + if (*iter == '\n' && + (iter != comment.end() && *(iter + 1) == '/')) + // writeIndent(); // would include newline + *document_ << indentString_; + ++iter; + } + indented_ = false; +} + +void StyledStreamWriter::writeCommentAfterValueOnSameLine(const Value& root) { + if (root.hasComment(commentAfterOnSameLine)) + *document_ << ' ' << root.getComment(commentAfterOnSameLine); + + if (root.hasComment(commentAfter)) { + writeIndent(); + *document_ << root.getComment(commentAfter); + } + indented_ = false; +} + +bool StyledStreamWriter::hasCommentForValue(const Value& value) { + return value.hasComment(commentBefore) || + value.hasComment(commentAfterOnSameLine) || + value.hasComment(commentAfter); +} + +////////////////////////// +// BuiltStyledStreamWriter + +/// Scoped enums are not available until C++11. +struct CommentStyle { + /// Decide whether to write comments. + enum Enum { + None, ///< Drop all comments. + Most, ///< Recover odd behavior of previous versions (not implemented yet). + All ///< Keep all comments. + }; +}; + +struct BuiltStyledStreamWriter : public StreamWriter +{ + BuiltStyledStreamWriter( + JSONCPP_STRING const& indentation, + CommentStyle::Enum cs, + JSONCPP_STRING const& colonSymbol, + JSONCPP_STRING const& nullSymbol, + JSONCPP_STRING const& endingLineFeedSymbol, + bool useSpecialFloats, + unsigned int precision); + int write(Value const& root, JSONCPP_OSTREAM* sout) JSONCPP_OVERRIDE; +private: + void writeValue(Value const& value); + void writeArrayValue(Value const& value); + bool isMultineArray(Value const& value); + void pushValue(JSONCPP_STRING const& value); + void writeIndent(); + void writeWithIndent(JSONCPP_STRING const& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(Value const& root); + void writeCommentAfterValueOnSameLine(Value const& root); + static bool hasCommentForValue(const Value& value); + + typedef std::vector<JSONCPP_STRING> ChildValues; + + ChildValues childValues_; + JSONCPP_STRING indentString_; + unsigned int rightMargin_; + JSONCPP_STRING indentation_; + CommentStyle::Enum cs_; + JSONCPP_STRING colonSymbol_; + JSONCPP_STRING nullSymbol_; + JSONCPP_STRING endingLineFeedSymbol_; + bool addChildValues_ : 1; + bool indented_ : 1; + bool useSpecialFloats_ : 1; + unsigned int precision_; +}; +BuiltStyledStreamWriter::BuiltStyledStreamWriter( + JSONCPP_STRING const& indentation, + CommentStyle::Enum cs, + JSONCPP_STRING const& colonSymbol, + JSONCPP_STRING const& nullSymbol, + JSONCPP_STRING const& endingLineFeedSymbol, + bool useSpecialFloats, + unsigned int precision) + : rightMargin_(74) + , indentation_(indentation) + , cs_(cs) + , colonSymbol_(colonSymbol) + , nullSymbol_(nullSymbol) + , endingLineFeedSymbol_(endingLineFeedSymbol) + , addChildValues_(false) + , indented_(false) + , useSpecialFloats_(useSpecialFloats) + , precision_(precision) +{ +} +int BuiltStyledStreamWriter::write(Value const& root, JSONCPP_OSTREAM* sout) +{ + sout_ = sout; + addChildValues_ = false; + indented_ = true; + indentString_ = ""; + writeCommentBeforeValue(root); + if (!indented_) writeIndent(); + indented_ = true; + writeValue(root); + writeCommentAfterValueOnSameLine(root); + *sout_ << endingLineFeedSymbol_; + sout_ = NULL; + return 0; +} +void BuiltStyledStreamWriter::writeValue(Value const& value) { + switch (value.type()) { + case nullValue: + pushValue(nullSymbol_); + break; + case intValue: + pushValue(valueToString(value.asLargestInt())); + break; + case uintValue: + pushValue(valueToString(value.asLargestUInt())); + break; + case realValue: + pushValue(valueToString(value.asDouble(), useSpecialFloats_, precision_)); + break; + case stringValue: + { + // Is NULL is possible for value.string_? No. + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str))); + else pushValue(""); + break; + } + case booleanValue: + pushValue(valueToString(value.asBool())); + break; + case arrayValue: + writeArrayValue(value); + break; + case objectValue: { + Value::Members members(value.getMemberNames()); + if (members.empty()) + pushValue("{}"); + else { + writeWithIndent("{"); + indent(); + Value::Members::iterator it = members.begin(); + for (;;) { + JSONCPP_STRING const& name = *it; + Value const& childValue = value[name]; + writeCommentBeforeValue(childValue); + writeWithIndent(valueToQuotedStringN(name.data(), static_cast<unsigned>(name.length()))); + *sout_ << colonSymbol_; + writeValue(childValue); + if (++it == members.end()) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *sout_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("}"); + } + } break; + } +} + +void BuiltStyledStreamWriter::writeArrayValue(Value const& value) { + unsigned size = value.size(); + if (size == 0) + pushValue("[]"); + else { + bool isMultiLine = (cs_ == CommentStyle::All) || isMultineArray(value); + if (isMultiLine) { + writeWithIndent("["); + indent(); + bool hasChildValue = !childValues_.empty(); + unsigned index = 0; + for (;;) { + Value const& childValue = value[index]; + writeCommentBeforeValue(childValue); + if (hasChildValue) + writeWithIndent(childValues_[index]); + else { + if (!indented_) writeIndent(); + indented_ = true; + writeValue(childValue); + indented_ = false; + } + if (++index == size) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *sout_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("]"); + } else // output on a single line + { + assert(childValues_.size() == size); + *sout_ << "["; + if (!indentation_.empty()) *sout_ << " "; + for (unsigned index = 0; index < size; ++index) { + if (index > 0) + *sout_ << ((!indentation_.empty()) ? ", " : ","); + *sout_ << childValues_[index]; + } + if (!indentation_.empty()) *sout_ << " "; + *sout_ << "]"; + } + } +} + +bool BuiltStyledStreamWriter::isMultineArray(Value const& value) { + ArrayIndex const size = value.size(); + bool isMultiLine = size * 3 >= rightMargin_; + childValues_.clear(); + for (ArrayIndex index = 0; index < size && !isMultiLine; ++index) { + Value const& childValue = value[index]; + isMultiLine = ((childValue.isArray() || childValue.isObject()) && + childValue.size() > 0); + } + if (!isMultiLine) // check if line length > max line length + { + childValues_.reserve(size); + addChildValues_ = true; + ArrayIndex lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' + for (ArrayIndex index = 0; index < size; ++index) { + if (hasCommentForValue(value[index])) { + isMultiLine = true; + } + writeValue(value[index]); + lineLength += static_cast<ArrayIndex>(childValues_[index].length()); + } + addChildValues_ = false; + isMultiLine = isMultiLine || lineLength >= rightMargin_; + } + return isMultiLine; +} + +void BuiltStyledStreamWriter::pushValue(JSONCPP_STRING const& value) { + if (addChildValues_) + childValues_.push_back(value); + else + *sout_ << value; +} + +void BuiltStyledStreamWriter::writeIndent() { + // blep intended this to look at the so-far-written string + // to determine whether we are already indented, but + // with a stream we cannot do that. So we rely on some saved state. + // The caller checks indented_. + + if (!indentation_.empty()) { + // In this case, drop newlines too. + *sout_ << '\n' << indentString_; + } +} + +void BuiltStyledStreamWriter::writeWithIndent(JSONCPP_STRING const& value) { + if (!indented_) writeIndent(); + *sout_ << value; + indented_ = false; +} + +void BuiltStyledStreamWriter::indent() { indentString_ += indentation_; } + +void BuiltStyledStreamWriter::unindent() { + assert(indentString_.size() >= indentation_.size()); + indentString_.resize(indentString_.size() - indentation_.size()); +} + +void BuiltStyledStreamWriter::writeCommentBeforeValue(Value const& root) { + if (cs_ == CommentStyle::None) return; + if (!root.hasComment(commentBefore)) + return; + + if (!indented_) writeIndent(); + const JSONCPP_STRING& comment = root.getComment(commentBefore); + JSONCPP_STRING::const_iterator iter = comment.begin(); + while (iter != comment.end()) { + *sout_ << *iter; + if (*iter == '\n' && + (iter != comment.end() && *(iter + 1) == '/')) + // writeIndent(); // would write extra newline + *sout_ << indentString_; + ++iter; + } + indented_ = false; +} + +void BuiltStyledStreamWriter::writeCommentAfterValueOnSameLine(Value const& root) { + if (cs_ == CommentStyle::None) return; + if (root.hasComment(commentAfterOnSameLine)) + *sout_ << " " + root.getComment(commentAfterOnSameLine); + + if (root.hasComment(commentAfter)) { + writeIndent(); + *sout_ << root.getComment(commentAfter); + } +} + +// static +bool BuiltStyledStreamWriter::hasCommentForValue(const Value& value) { + return value.hasComment(commentBefore) || + value.hasComment(commentAfterOnSameLine) || + value.hasComment(commentAfter); +} + +/////////////// +// StreamWriter + +StreamWriter::StreamWriter() + : sout_(NULL) +{ +} +StreamWriter::~StreamWriter() +{ +} +StreamWriter::Factory::~Factory() +{} +StreamWriterBuilder::StreamWriterBuilder() +{ + setDefaults(&settings_); +} +StreamWriterBuilder::~StreamWriterBuilder() +{} +StreamWriter* StreamWriterBuilder::newStreamWriter() const +{ + JSONCPP_STRING indentation = settings_["indentation"].asString(); + JSONCPP_STRING cs_str = settings_["commentStyle"].asString(); + bool eyc = settings_["enableYAMLCompatibility"].asBool(); + bool dnp = settings_["dropNullPlaceholders"].asBool(); + bool usf = settings_["useSpecialFloats"].asBool(); + unsigned int pre = settings_["precision"].asUInt(); + CommentStyle::Enum cs = CommentStyle::All; + if (cs_str == "All") { + cs = CommentStyle::All; + } else if (cs_str == "None") { + cs = CommentStyle::None; + } else { + throwRuntimeError("commentStyle must be 'All' or 'None'"); + } + JSONCPP_STRING colonSymbol = " : "; + if (eyc) { + colonSymbol = ": "; + } else if (indentation.empty()) { + colonSymbol = ":"; + } + JSONCPP_STRING nullSymbol = "null"; + if (dnp) { + nullSymbol = ""; + } + if (pre > 17) pre = 17; + JSONCPP_STRING endingLineFeedSymbol = ""; + return new BuiltStyledStreamWriter( + indentation, cs, + colonSymbol, nullSymbol, endingLineFeedSymbol, usf, pre); +} +static void getValidWriterKeys(std::set<JSONCPP_STRING>* valid_keys) +{ + valid_keys->clear(); + valid_keys->insert("indentation"); + valid_keys->insert("commentStyle"); + valid_keys->insert("enableYAMLCompatibility"); + valid_keys->insert("dropNullPlaceholders"); + valid_keys->insert("useSpecialFloats"); + valid_keys->insert("precision"); +} +bool StreamWriterBuilder::validate(Json::Value* invalid) const +{ + Json::Value my_invalid; + if (!invalid) invalid = &my_invalid; // so we do not need to test for NULL + Json::Value& inv = *invalid; + std::set<JSONCPP_STRING> valid_keys; + getValidWriterKeys(&valid_keys); + Value::Members keys = settings_.getMemberNames(); + size_t n = keys.size(); + for (size_t i = 0; i < n; ++i) { + JSONCPP_STRING const& key = keys[i]; + if (valid_keys.find(key) == valid_keys.end()) { + inv[key] = settings_[key]; + } + } + return 0u == inv.size(); +} +Value& StreamWriterBuilder::operator[](JSONCPP_STRING key) +{ + return settings_[key]; +} +// static +void StreamWriterBuilder::setDefaults(Json::Value* settings) +{ + //! [StreamWriterBuilderDefaults] + (*settings)["commentStyle"] = "All"; + (*settings)["indentation"] = "\t"; + (*settings)["enableYAMLCompatibility"] = false; + (*settings)["dropNullPlaceholders"] = false; + (*settings)["useSpecialFloats"] = false; + (*settings)["precision"] = 17; + //! [StreamWriterBuilderDefaults] +} + +JSONCPP_STRING writeString(StreamWriter::Factory const& builder, Value const& root) { + JSONCPP_OSTRINGSTREAM sout; + StreamWriterPtr const writer(builder.newStreamWriter()); + writer->write(root, &sout); + return sout.str(); +} + +JSONCPP_OSTREAM& operator<<(JSONCPP_OSTREAM& sout, Value const& root) { + StreamWriterBuilder builder; + StreamWriterPtr const writer(builder.newStreamWriter()); + writer->write(root, &sout); + return sout; +} + +} // namespace Json + +// ////////////////////////////////////////////////////////////////////// +// End of content of file: src/lib_json/json_writer.cpp +// ////////////////////////////////////////////////////////////////////// + + + + + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/third_party/libsvm/LICENSE b/examples/ofx/Bitalino_rapidmix/dependencies/third_party/libsvm/LICENSE new file mode 100644 index 0000000..ad76b1d --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/third_party/libsvm/LICENSE @@ -0,0 +1,31 @@ + +Copyright (c) 2000-2017 Chih-Chung Chang and Chih-Jen Lin +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright +notice, this list of conditions and the following disclaimer. + +2. 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. + +3. Neither name of copyright holders 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. \ No newline at end of file diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/third_party/libsvm/libsvm.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/third_party/libsvm/libsvm.cpp new file mode 100644 index 0000000..77ea425 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/third_party/libsvm/libsvm.cpp @@ -0,0 +1,3184 @@ +#include <math.h> +#include <stdio.h> +#include <stdlib.h> +#include <ctype.h> +#include <float.h> +#include <string.h> +#include <stdarg.h> +#include <limits.h> +#include <locale.h> +#include "libsvm.h" + +namespace LIBSVM { + int libsvm_version = LIBSVM_VERSION; + typedef float Qfloat; + typedef signed char schar; +#ifndef min + template <class T> static inline T min(T x,T y) { return (x<y)?x:y; } +#endif +#ifndef max + template <class T> static inline T max(T x,T y) { return (x>y)?x:y; } +#endif + template <class T> static inline void swap(T& x, T& y) { T t=x; x=y; y=t; } + template <class S, class T> static inline void clone(T*& dst, S* src, int n) + { + dst = new T[n]; + memcpy((void *)dst,(void *)src,sizeof(T)*n); + } + static inline double powi(double base, int times) + { + double tmp = base, ret = 1.0; + + for(int t=times; t>0; t/=2) + { + if(t%2==1) ret*=tmp; + tmp = tmp * tmp; + } + return ret; + } +#define INF HUGE_VAL +#define TAU 1e-12 +#define Malloc(type,n) (type *)malloc((n)*sizeof(type)) + + static void print_string_stdout(const char *s) + { + fputs(s,stdout); + fflush(stdout); + } + static void (*svm_print_string) (const char *) = &print_string_stdout; +#if 1 + static void info(const char *fmt,...) + { + char buf[BUFSIZ]; + va_list ap; + va_start(ap,fmt); + vsprintf(buf,fmt,ap); + va_end(ap); + (*svm_print_string)(buf); + } +#else + static void info(const char *fmt,...) {} +#endif + + // + // Kernel Cache + // + // l is the number of total data items + // size is the cache size limit in bytes + // + class Cache + { + public: + Cache(int l,long int size); + ~Cache(); + + // request data [0,len) + // return some position p where [p,len) need to be filled + // (p >= len if nothing needs to be filled) + int get_data(const int index, Qfloat **data, int len); + void swap_index(int i, int j); + private: + int l; + long int size; + struct head_t + { + head_t *prev, *next; // a circular list + Qfloat *data; + int len; // data[0,len) is cached in this entry + }; + + head_t *head; + head_t lru_head; + void lru_delete(head_t *h); + void lru_insert(head_t *h); + }; + + Cache::Cache(int l_,long int size_):l(l_),size(size_) + { + head = (head_t *)calloc(l,sizeof(head_t)); // initialized to 0 + size /= sizeof(Qfloat); + size -= l * sizeof(head_t) / sizeof(Qfloat); + size = max(size, 2 * (long int) l); // cache must be large enough for two columns + lru_head.next = lru_head.prev = &lru_head; + } + + Cache::~Cache() + { + for(head_t *h = lru_head.next; h != &lru_head; h=h->next) + free(h->data); + free(head); + } + + void Cache::lru_delete(head_t *h) + { + // delete from current location + h->prev->next = h->next; + h->next->prev = h->prev; + } + + void Cache::lru_insert(head_t *h) + { + // insert to last position + h->next = &lru_head; + h->prev = lru_head.prev; + h->prev->next = h; + h->next->prev = h; + } + + int Cache::get_data(const int index, Qfloat **data, int len) + { + head_t *h = &head[index]; + if(h->len) lru_delete(h); + int more = len - h->len; + + if(more > 0) + { + // free old space + while(size < more) + { + head_t *old = lru_head.next; + lru_delete(old); + free(old->data); + size += old->len; + old->data = 0; + old->len = 0; + } + + // allocate new space + h->data = (Qfloat *)realloc(h->data,sizeof(Qfloat)*len); + size -= more; + swap(h->len,len); + } + + lru_insert(h); + *data = h->data; + return len; + } + + void Cache::swap_index(int i, int j) + { + if(i==j) return; + + if(head[i].len) lru_delete(&head[i]); + if(head[j].len) lru_delete(&head[j]); + swap(head[i].data,head[j].data); + swap(head[i].len,head[j].len); + if(head[i].len) lru_insert(&head[i]); + if(head[j].len) lru_insert(&head[j]); + + if(i>j) swap(i,j); + for(head_t *h = lru_head.next; h!=&lru_head; h=h->next) + { + if(h->len > i) + { + if(h->len > j) + swap(h->data[i],h->data[j]); + else + { + // give up + lru_delete(h); + free(h->data); + size += h->len; + h->data = 0; + h->len = 0; + } + } + } + } + + // + // Kernel evaluation + // + // the static method k_function is for doing single kernel evaluation + // the constructor of Kernel prepares to calculate the l*l kernel matrix + // the member function get_Q is for getting one column from the Q Matrix + // + class QMatrix { + public: + virtual Qfloat *get_Q(int column, int len) const = 0; + virtual double *get_QD() const = 0; + virtual void swap_index(int i, int j) const = 0; + virtual ~QMatrix() {} + }; + + class Kernel: public QMatrix { + public: + Kernel(int l, svm_node * const * x, const svm_parameter& param); + virtual ~Kernel(); + + static double k_function(const svm_node *x, const svm_node *y, + const svm_parameter& param); + virtual Qfloat *get_Q(int column, int len) const = 0; + virtual double *get_QD() const = 0; + virtual void swap_index(int i, int j) const // no so const... + { + swap(x[i],x[j]); + if(x_square) swap(x_square[i],x_square[j]); + } + protected: + + double (Kernel::*kernel_function)(int i, int j) const; + + private: + const svm_node **x; + double *x_square; + + // svm_parameter + const int kernel_type; + const int degree; + const double gamma; + const double coef0; + + static double dot(const svm_node *px, const svm_node *py); + double kernel_linear(int i, int j) const + { + return dot(x[i],x[j]); + } + double kernel_poly(int i, int j) const + { + return powi(gamma*dot(x[i],x[j])+coef0,degree); + } + double kernel_rbf(int i, int j) const + { + return exp(-gamma*(x_square[i]+x_square[j]-2*dot(x[i],x[j]))); + } + double kernel_sigmoid(int i, int j) const + { + return tanh(gamma*dot(x[i],x[j])+coef0); + } + double kernel_precomputed(int i, int j) const + { + return x[i][(int)(x[j][0].value)].value; + } + }; + + Kernel::Kernel(int l, svm_node * const * x_, const svm_parameter& param) + :kernel_type(param.kernel_type), degree(param.degree), + gamma(param.gamma), coef0(param.coef0) + { + switch(kernel_type) + { + case LINEAR: + kernel_function = &Kernel::kernel_linear; + break; + case POLY: + kernel_function = &Kernel::kernel_poly; + break; + case RBF: + kernel_function = &Kernel::kernel_rbf; + break; + case SIGMOID: + kernel_function = &Kernel::kernel_sigmoid; + break; + case PRECOMPUTED: + kernel_function = &Kernel::kernel_precomputed; + break; + } + + clone(x,x_,l); + + if(kernel_type == RBF) + { + x_square = new double[l]; + for(int i=0;i<l;i++) + x_square[i] = dot(x[i],x[i]); + } + else + x_square = 0; + } + + Kernel::~Kernel() + { + delete[] x; + delete[] x_square; + } + + double Kernel::dot(const svm_node *px, const svm_node *py) + { + double sum = 0; + while(px->index != -1 && py->index != -1) + { + if(px->index == py->index) + { + sum += px->value * py->value; + ++px; + ++py; + } + else + { + if(px->index > py->index) + ++py; + else + ++px; + } + } + return sum; + } + + double Kernel::k_function(const svm_node *x, const svm_node *y, + const svm_parameter& param) + { + switch(param.kernel_type) + { + case LINEAR: + return dot(x,y); + case POLY: + return powi(param.gamma*dot(x,y)+param.coef0,param.degree); + case RBF: + { + double sum = 0; + while(x->index != -1 && y->index !=-1) + { + if(x->index == y->index) + { + double d = x->value - y->value; + sum += d*d; + ++x; + ++y; + } + else + { + if(x->index > y->index) + { + sum += y->value * y->value; + ++y; + } + else + { + sum += x->value * x->value; + ++x; + } + } + } + + while(x->index != -1) + { + sum += x->value * x->value; + ++x; + } + + while(y->index != -1) + { + sum += y->value * y->value; + ++y; + } + + return exp(-param.gamma*sum); + } + case SIGMOID: + return tanh(param.gamma*dot(x,y)+param.coef0); + case PRECOMPUTED: //x: test (validation), y: SV + return x[(int)(y->value)].value; + default: + return 0; // Unreachable + } + } + + // An SMO algorithm in Fan et al., JMLR 6(2005), p. 1889--1918 + // Solves: + // + // min 0.5(\alpha^T Q \alpha) + p^T \alpha + // + // y^T \alpha = \delta + // y_i = +1 or -1 + // 0 <= alpha_i <= Cp for y_i = 1 + // 0 <= alpha_i <= Cn for y_i = -1 + // + // Given: + // + // Q, p, y, Cp, Cn, and an initial feasible point \alpha + // l is the size of vectors and matrices + // eps is the stopping tolerance + // + // solution will be put in \alpha, objective value will be put in obj + // + class Solver { + public: + Solver() {}; + virtual ~Solver() {}; + + struct SolutionInfo { + double obj; + double rho; + double upper_bound_p; + double upper_bound_n; + double r; // for Solver_NU + }; + + void Solve(int l, const QMatrix& Q, const double *p_, const schar *y_, + double *alpha_, double Cp, double Cn, double eps, + SolutionInfo* si, int shrinking); + protected: + int active_size; + schar *y; + double *G; // gradient of objective function + enum { LOWER_BOUND, UPPER_BOUND, FREE }; + char *alpha_status; // LOWER_BOUND, UPPER_BOUND, FREE + double *alpha; + const QMatrix *Q; + const double *QD; + double eps; + double Cp,Cn; + double *p; + int *active_set; + double *G_bar; // gradient, if we treat free variables as 0 + int l; + bool unshrink; // XXX + + double get_C(int i) + { + return (y[i] > 0)? Cp : Cn; + } + void update_alpha_status(int i) + { + if(alpha[i] >= get_C(i)) + alpha_status[i] = UPPER_BOUND; + else if(alpha[i] <= 0) + alpha_status[i] = LOWER_BOUND; + else alpha_status[i] = FREE; + } + bool is_upper_bound(int i) { return alpha_status[i] == UPPER_BOUND; } + bool is_lower_bound(int i) { return alpha_status[i] == LOWER_BOUND; } + bool is_free(int i) { return alpha_status[i] == FREE; } + void swap_index(int i, int j); + void reconstruct_gradient(); + virtual int select_working_set(int &i, int &j); + virtual double calculate_rho(); + virtual void do_shrinking(); + private: + bool be_shrunk(int i, double Gmax1, double Gmax2); + }; + + void Solver::swap_index(int i, int j) + { + Q->swap_index(i,j); + swap(y[i],y[j]); + swap(G[i],G[j]); + swap(alpha_status[i],alpha_status[j]); + swap(alpha[i],alpha[j]); + swap(p[i],p[j]); + swap(active_set[i],active_set[j]); + swap(G_bar[i],G_bar[j]); + } + + void Solver::reconstruct_gradient() + { + // reconstruct inactive elements of G from G_bar and free variables + + if(active_size == l) return; + + int i,j; + int nr_free = 0; + + for(j=active_size;j<l;j++) + G[j] = G_bar[j] + p[j]; + + for(j=0;j<active_size;j++) + if(is_free(j)) + nr_free++; + + if(2*nr_free < active_size) + info("\nWARNING: using -h 0 may be faster\n"); + + if (nr_free*l > 2*active_size*(l-active_size)) + { + for(i=active_size;i<l;i++) + { + const Qfloat *Q_i = Q->get_Q(i,active_size); + for(j=0;j<active_size;j++) + if(is_free(j)) + G[i] += alpha[j] * Q_i[j]; + } + } + else + { + for(i=0;i<active_size;i++) + if(is_free(i)) + { + const Qfloat *Q_i = Q->get_Q(i,l); + double alpha_i = alpha[i]; + for(j=active_size;j<l;j++) + G[j] += alpha_i * Q_i[j]; + } + } + } + + void Solver::Solve(int l, const QMatrix& Q, const double *p_, const schar *y_, + double *alpha_, double Cp, double Cn, double eps, + SolutionInfo* si, int shrinking) + { + this->l = l; + this->Q = &Q; + QD=Q.get_QD(); + clone(p, p_,l); + clone(y, y_,l); + clone(alpha,alpha_,l); + this->Cp = Cp; + this->Cn = Cn; + this->eps = eps; + unshrink = false; + + // initialize alpha_status + { + alpha_status = new char[l]; + for(int i=0;i<l;i++) + update_alpha_status(i); + } + + // initialize active set (for shrinking) + { + active_set = new int[l]; + for(int i=0;i<l;i++) + active_set[i] = i; + active_size = l; + } + + // initialize gradient + { + G = new double[l]; + G_bar = new double[l]; + int i; + for(i=0;i<l;i++) + { + G[i] = p[i]; + G_bar[i] = 0; + } + for(i=0;i<l;i++) + if(!is_lower_bound(i)) + { + const Qfloat *Q_i = Q.get_Q(i,l); + double alpha_i = alpha[i]; + int j; + for(j=0;j<l;j++) + G[j] += alpha_i*Q_i[j]; + if(is_upper_bound(i)) + for(j=0;j<l;j++) + G_bar[j] += get_C(i) * Q_i[j]; + } + } + + // optimization step + + int iter = 0; + int max_iter = max(10000000, l>INT_MAX/100 ? INT_MAX : 100*l); + int counter = min(l,1000)+1; + + while(iter < max_iter) + { + // show progress and do shrinking + + if(--counter == 0) + { + counter = min(l,1000); + if(shrinking) do_shrinking(); + info("."); + } + + int i,j; + if(select_working_set(i,j)!=0) + { + // reconstruct the whole gradient + reconstruct_gradient(); + // reset active set size and check + active_size = l; + info("*"); + if(select_working_set(i,j)!=0) + break; + else + counter = 1; // do shrinking next iteration + } + + ++iter; + + // update alpha[i] and alpha[j], handle bounds carefully + + const Qfloat *Q_i = Q.get_Q(i,active_size); + const Qfloat *Q_j = Q.get_Q(j,active_size); + + double C_i = get_C(i); + double C_j = get_C(j); + + double old_alpha_i = alpha[i]; + double old_alpha_j = alpha[j]; + + if(y[i]!=y[j]) + { + double quad_coef = QD[i]+QD[j]+2*Q_i[j]; + if (quad_coef <= 0) + quad_coef = TAU; + double delta = (-G[i]-G[j])/quad_coef; + double diff = alpha[i] - alpha[j]; + alpha[i] += delta; + alpha[j] += delta; + + if(diff > 0) + { + if(alpha[j] < 0) + { + alpha[j] = 0; + alpha[i] = diff; + } + } + else + { + if(alpha[i] < 0) + { + alpha[i] = 0; + alpha[j] = -diff; + } + } + if(diff > C_i - C_j) + { + if(alpha[i] > C_i) + { + alpha[i] = C_i; + alpha[j] = C_i - diff; + } + } + else + { + if(alpha[j] > C_j) + { + alpha[j] = C_j; + alpha[i] = C_j + diff; + } + } + } + else + { + double quad_coef = QD[i]+QD[j]-2*Q_i[j]; + if (quad_coef <= 0) + quad_coef = TAU; + double delta = (G[i]-G[j])/quad_coef; + double sum = alpha[i] + alpha[j]; + alpha[i] -= delta; + alpha[j] += delta; + + if(sum > C_i) + { + if(alpha[i] > C_i) + { + alpha[i] = C_i; + alpha[j] = sum - C_i; + } + } + else + { + if(alpha[j] < 0) + { + alpha[j] = 0; + alpha[i] = sum; + } + } + if(sum > C_j) + { + if(alpha[j] > C_j) + { + alpha[j] = C_j; + alpha[i] = sum - C_j; + } + } + else + { + if(alpha[i] < 0) + { + alpha[i] = 0; + alpha[j] = sum; + } + } + } + + // update G + + double delta_alpha_i = alpha[i] - old_alpha_i; + double delta_alpha_j = alpha[j] - old_alpha_j; + + for(int k=0;k<active_size;k++) + { + G[k] += Q_i[k]*delta_alpha_i + Q_j[k]*delta_alpha_j; + } + + // update alpha_status and G_bar + + { + bool ui = is_upper_bound(i); + bool uj = is_upper_bound(j); + update_alpha_status(i); + update_alpha_status(j); + int k; + if(ui != is_upper_bound(i)) + { + Q_i = Q.get_Q(i,l); + if(ui) + for(k=0;k<l;k++) + G_bar[k] -= C_i * Q_i[k]; + else + for(k=0;k<l;k++) + G_bar[k] += C_i * Q_i[k]; + } + + if(uj != is_upper_bound(j)) + { + Q_j = Q.get_Q(j,l); + if(uj) + for(k=0;k<l;k++) + G_bar[k] -= C_j * Q_j[k]; + else + for(k=0;k<l;k++) + G_bar[k] += C_j * Q_j[k]; + } + } + } + + if(iter >= max_iter) + { + if(active_size < l) + { + // reconstruct the whole gradient to calculate objective value + reconstruct_gradient(); + active_size = l; + info("*"); + } + fprintf(stderr,"\nWARNING: reaching max number of iterations\n"); + } + + // calculate rho + + si->rho = calculate_rho(); + + // calculate objective value + { + double v = 0; + int i; + for(i=0;i<l;i++) + v += alpha[i] * (G[i] + p[i]); + + si->obj = v/2; + } + + // put back the solution + { + for(int i=0;i<l;i++) + alpha_[active_set[i]] = alpha[i]; + } + + // juggle everything back + /*{ + for(int i=0;i<l;i++) + while(active_set[i] != i) + swap_index(i,active_set[i]); + // or Q.swap_index(i,active_set[i]); + }*/ + + si->upper_bound_p = Cp; + si->upper_bound_n = Cn; + + info("\noptimization finished, #iter = %d\n",iter); + + delete[] p; + delete[] y; + delete[] alpha; + delete[] alpha_status; + delete[] active_set; + delete[] G; + delete[] G_bar; + } + + // return 1 if already optimal, return 0 otherwise + int Solver::select_working_set(int &out_i, int &out_j) + { + // return i,j such that + // i: maximizes -y_i * grad(f)_i, i in I_up(\alpha) + // j: minimizes the decrease of obj value + // (if quadratic coefficeint <= 0, replace it with tau) + // -y_j*grad(f)_j < -y_i*grad(f)_i, j in I_low(\alpha) + + double Gmax = -INF; + double Gmax2 = -INF; + int Gmax_idx = -1; + int Gmin_idx = -1; + double obj_diff_min = INF; + + for(int t=0;t<active_size;t++) + if(y[t]==+1) + { + if(!is_upper_bound(t)) + if(-G[t] >= Gmax) + { + Gmax = -G[t]; + Gmax_idx = t; + } + } + else + { + if(!is_lower_bound(t)) + if(G[t] >= Gmax) + { + Gmax = G[t]; + Gmax_idx = t; + } + } + + int i = Gmax_idx; + const Qfloat *Q_i = NULL; + if(i != -1) // NULL Q_i not accessed: Gmax=-INF if i=-1 + Q_i = Q->get_Q(i,active_size); + + for(int j=0;j<active_size;j++) + { + if(y[j]==+1) + { + if (!is_lower_bound(j)) + { + double grad_diff=Gmax+G[j]; + if (G[j] >= Gmax2) + Gmax2 = G[j]; + if (grad_diff > 0) + { + double obj_diff; + double quad_coef = QD[i]+QD[j]-2.0*y[i]*Q_i[j]; + if (quad_coef > 0) + obj_diff = -(grad_diff*grad_diff)/quad_coef; + else + obj_diff = -(grad_diff*grad_diff)/TAU; + + if (obj_diff <= obj_diff_min) + { + Gmin_idx=j; + obj_diff_min = obj_diff; + } + } + } + } + else + { + if (!is_upper_bound(j)) + { + double grad_diff= Gmax-G[j]; + if (-G[j] >= Gmax2) + Gmax2 = -G[j]; + if (grad_diff > 0) + { + double obj_diff; + double quad_coef = QD[i]+QD[j]+2.0*y[i]*Q_i[j]; + if (quad_coef > 0) + obj_diff = -(grad_diff*grad_diff)/quad_coef; + else + obj_diff = -(grad_diff*grad_diff)/TAU; + + if (obj_diff <= obj_diff_min) + { + Gmin_idx=j; + obj_diff_min = obj_diff; + } + } + } + } + } + + if(Gmax+Gmax2 < eps || Gmin_idx == -1) + return 1; + + out_i = Gmax_idx; + out_j = Gmin_idx; + return 0; + } + + bool Solver::be_shrunk(int i, double Gmax1, double Gmax2) + { + if(is_upper_bound(i)) + { + if(y[i]==+1) + return(-G[i] > Gmax1); + else + return(-G[i] > Gmax2); + } + else if(is_lower_bound(i)) + { + if(y[i]==+1) + return(G[i] > Gmax2); + else + return(G[i] > Gmax1); + } + else + return(false); + } + + void Solver::do_shrinking() + { + int i; + double Gmax1 = -INF; // max { -y_i * grad(f)_i | i in I_up(\alpha) } + double Gmax2 = -INF; // max { y_i * grad(f)_i | i in I_low(\alpha) } + + // find maximal violating pair first + for(i=0;i<active_size;i++) + { + if(y[i]==+1) + { + if(!is_upper_bound(i)) + { + if(-G[i] >= Gmax1) + Gmax1 = -G[i]; + } + if(!is_lower_bound(i)) + { + if(G[i] >= Gmax2) + Gmax2 = G[i]; + } + } + else + { + if(!is_upper_bound(i)) + { + if(-G[i] >= Gmax2) + Gmax2 = -G[i]; + } + if(!is_lower_bound(i)) + { + if(G[i] >= Gmax1) + Gmax1 = G[i]; + } + } + } + + if(unshrink == false && Gmax1 + Gmax2 <= eps*10) + { + unshrink = true; + reconstruct_gradient(); + active_size = l; + info("*"); + } + + for(i=0;i<active_size;i++) + if (be_shrunk(i, Gmax1, Gmax2)) + { + active_size--; + while (active_size > i) + { + if (!be_shrunk(active_size, Gmax1, Gmax2)) + { + swap_index(i,active_size); + break; + } + active_size--; + } + } + } + + double Solver::calculate_rho() + { + double r; + int nr_free = 0; + double ub = INF, lb = -INF, sum_free = 0; + for(int i=0;i<active_size;i++) + { + double yG = y[i]*G[i]; + + if(is_upper_bound(i)) + { + if(y[i]==-1) + ub = min(ub,yG); + else + lb = max(lb,yG); + } + else if(is_lower_bound(i)) + { + if(y[i]==+1) + ub = min(ub,yG); + else + lb = max(lb,yG); + } + else + { + ++nr_free; + sum_free += yG; + } + } + + if(nr_free>0) + r = sum_free/nr_free; + else + r = (ub+lb)/2; + + return r; + } + + // + // Solver for nu-svm classification and regression + // + // additional constraint: e^T \alpha = constant + // + class Solver_NU: public Solver + { + public: + Solver_NU() {} + void Solve(int l, const QMatrix& Q, const double *p, const schar *y, + double *alpha, double Cp, double Cn, double eps, + SolutionInfo* si, int shrinking) + { + this->si = si; + Solver::Solve(l,Q,p,y,alpha,Cp,Cn,eps,si,shrinking); + } + private: + SolutionInfo *si; + int select_working_set(int &i, int &j); + double calculate_rho(); + bool be_shrunk(int i, double Gmax1, double Gmax2, double Gmax3, double Gmax4); + void do_shrinking(); + }; + + // return 1 if already optimal, return 0 otherwise + int Solver_NU::select_working_set(int &out_i, int &out_j) + { + // return i,j such that y_i = y_j and + // i: maximizes -y_i * grad(f)_i, i in I_up(\alpha) + // j: minimizes the decrease of obj value + // (if quadratic coefficeint <= 0, replace it with tau) + // -y_j*grad(f)_j < -y_i*grad(f)_i, j in I_low(\alpha) + + double Gmaxp = -INF; + double Gmaxp2 = -INF; + int Gmaxp_idx = -1; + + double Gmaxn = -INF; + double Gmaxn2 = -INF; + int Gmaxn_idx = -1; + + int Gmin_idx = -1; + double obj_diff_min = INF; + + for(int t=0;t<active_size;t++) + if(y[t]==+1) + { + if(!is_upper_bound(t)) + if(-G[t] >= Gmaxp) + { + Gmaxp = -G[t]; + Gmaxp_idx = t; + } + } + else + { + if(!is_lower_bound(t)) + if(G[t] >= Gmaxn) + { + Gmaxn = G[t]; + Gmaxn_idx = t; + } + } + + int ip = Gmaxp_idx; + int in = Gmaxn_idx; + const Qfloat *Q_ip = NULL; + const Qfloat *Q_in = NULL; + if(ip != -1) // NULL Q_ip not accessed: Gmaxp=-INF if ip=-1 + Q_ip = Q->get_Q(ip,active_size); + if(in != -1) + Q_in = Q->get_Q(in,active_size); + + for(int j=0;j<active_size;j++) + { + if(y[j]==+1) + { + if (!is_lower_bound(j)) + { + double grad_diff=Gmaxp+G[j]; + if (G[j] >= Gmaxp2) + Gmaxp2 = G[j]; + if (grad_diff > 0) + { + double obj_diff; + double quad_coef = QD[ip]+QD[j]-2*Q_ip[j]; + if (quad_coef > 0) + obj_diff = -(grad_diff*grad_diff)/quad_coef; + else + obj_diff = -(grad_diff*grad_diff)/TAU; + + if (obj_diff <= obj_diff_min) + { + Gmin_idx=j; + obj_diff_min = obj_diff; + } + } + } + } + else + { + if (!is_upper_bound(j)) + { + double grad_diff=Gmaxn-G[j]; + if (-G[j] >= Gmaxn2) + Gmaxn2 = -G[j]; + if (grad_diff > 0) + { + double obj_diff; + double quad_coef = QD[in]+QD[j]-2*Q_in[j]; + if (quad_coef > 0) + obj_diff = -(grad_diff*grad_diff)/quad_coef; + else + obj_diff = -(grad_diff*grad_diff)/TAU; + + if (obj_diff <= obj_diff_min) + { + Gmin_idx=j; + obj_diff_min = obj_diff; + } + } + } + } + } + + if(max(Gmaxp+Gmaxp2,Gmaxn+Gmaxn2) < eps || Gmin_idx == -1) + return 1; + + if (y[Gmin_idx] == +1) + out_i = Gmaxp_idx; + else + out_i = Gmaxn_idx; + out_j = Gmin_idx; + + return 0; + } + + bool Solver_NU::be_shrunk(int i, double Gmax1, double Gmax2, double Gmax3, double Gmax4) + { + if(is_upper_bound(i)) + { + if(y[i]==+1) + return(-G[i] > Gmax1); + else + return(-G[i] > Gmax4); + } + else if(is_lower_bound(i)) + { + if(y[i]==+1) + return(G[i] > Gmax2); + else + return(G[i] > Gmax3); + } + else + return(false); + } + + void Solver_NU::do_shrinking() + { + double Gmax1 = -INF; // max { -y_i * grad(f)_i | y_i = +1, i in I_up(\alpha) } + double Gmax2 = -INF; // max { y_i * grad(f)_i | y_i = +1, i in I_low(\alpha) } + double Gmax3 = -INF; // max { -y_i * grad(f)_i | y_i = -1, i in I_up(\alpha) } + double Gmax4 = -INF; // max { y_i * grad(f)_i | y_i = -1, i in I_low(\alpha) } + + // find maximal violating pair first + int i; + for(i=0;i<active_size;i++) + { + if(!is_upper_bound(i)) + { + if(y[i]==+1) + { + if(-G[i] > Gmax1) Gmax1 = -G[i]; + } + else if(-G[i] > Gmax4) Gmax4 = -G[i]; + } + if(!is_lower_bound(i)) + { + if(y[i]==+1) + { + if(G[i] > Gmax2) Gmax2 = G[i]; + } + else if(G[i] > Gmax3) Gmax3 = G[i]; + } + } + + if(unshrink == false && max(Gmax1+Gmax2,Gmax3+Gmax4) <= eps*10) + { + unshrink = true; + reconstruct_gradient(); + active_size = l; + } + + for(i=0;i<active_size;i++) + if (be_shrunk(i, Gmax1, Gmax2, Gmax3, Gmax4)) + { + active_size--; + while (active_size > i) + { + if (!be_shrunk(active_size, Gmax1, Gmax2, Gmax3, Gmax4)) + { + swap_index(i,active_size); + break; + } + active_size--; + } + } + } + + double Solver_NU::calculate_rho() + { + int nr_free1 = 0,nr_free2 = 0; + double ub1 = INF, ub2 = INF; + double lb1 = -INF, lb2 = -INF; + double sum_free1 = 0, sum_free2 = 0; + + for(int i=0;i<active_size;i++) + { + if(y[i]==+1) + { + if(is_upper_bound(i)) + lb1 = max(lb1,G[i]); + else if(is_lower_bound(i)) + ub1 = min(ub1,G[i]); + else + { + ++nr_free1; + sum_free1 += G[i]; + } + } + else + { + if(is_upper_bound(i)) + lb2 = max(lb2,G[i]); + else if(is_lower_bound(i)) + ub2 = min(ub2,G[i]); + else + { + ++nr_free2; + sum_free2 += G[i]; + } + } + } + + double r1,r2; + if(nr_free1 > 0) + r1 = sum_free1/nr_free1; + else + r1 = (ub1+lb1)/2; + + if(nr_free2 > 0) + r2 = sum_free2/nr_free2; + else + r2 = (ub2+lb2)/2; + + si->r = (r1+r2)/2; + return (r1-r2)/2; + } + + // + // Q matrices for various formulations + // + class SVC_Q: public Kernel + { + public: + SVC_Q(const svm_problem& prob, const svm_parameter& param, const schar *y_) + :Kernel(prob.l, prob.x, param) + { + clone(y,y_,prob.l); + cache = new Cache(prob.l,(long int)(param.cache_size*(1<<20))); + QD = new double[prob.l]; + for(int i=0;i<prob.l;i++) + QD[i] = (this->*kernel_function)(i,i); + } + + Qfloat *get_Q(int i, int len) const + { + Qfloat *data; + int start, j; + if((start = cache->get_data(i,&data,len)) < len) + { + for(j=start;j<len;j++) + data[j] = (Qfloat)(y[i]*y[j]*(this->*kernel_function)(i,j)); + } + return data; + } + + double *get_QD() const + { + return QD; + } + + void swap_index(int i, int j) const + { + cache->swap_index(i,j); + Kernel::swap_index(i,j); + swap(y[i],y[j]); + swap(QD[i],QD[j]); + } + + ~SVC_Q() + { + delete[] y; + delete cache; + delete[] QD; + } + private: + schar *y; + Cache *cache; + double *QD; + }; + + class ONE_CLASS_Q: public Kernel + { + public: + ONE_CLASS_Q(const svm_problem& prob, const svm_parameter& param) + :Kernel(prob.l, prob.x, param) + { + cache = new Cache(prob.l,(long int)(param.cache_size*(1<<20))); + QD = new double[prob.l]; + for(int i=0;i<prob.l;i++) + QD[i] = (this->*kernel_function)(i,i); + } + + Qfloat *get_Q(int i, int len) const + { + Qfloat *data; + int start, j; + if((start = cache->get_data(i,&data,len)) < len) + { + for(j=start;j<len;j++) + data[j] = (Qfloat)(this->*kernel_function)(i,j); + } + return data; + } + + double *get_QD() const + { + return QD; + } + + void swap_index(int i, int j) const + { + cache->swap_index(i,j); + Kernel::swap_index(i,j); + swap(QD[i],QD[j]); + } + + ~ONE_CLASS_Q() + { + delete cache; + delete[] QD; + } + private: + Cache *cache; + double *QD; + }; + + class SVR_Q: public Kernel + { + public: + SVR_Q(const svm_problem& prob, const svm_parameter& param) + :Kernel(prob.l, prob.x, param) + { + l = prob.l; + cache = new Cache(l,(long int)(param.cache_size*(1<<20))); + QD = new double[2*l]; + sign = new schar[2*l]; + index = new int[2*l]; + for(int k=0;k<l;k++) + { + sign[k] = 1; + sign[k+l] = -1; + index[k] = k; + index[k+l] = k; + QD[k] = (this->*kernel_function)(k,k); + QD[k+l] = QD[k]; + } + buffer[0] = new Qfloat[2*l]; + buffer[1] = new Qfloat[2*l]; + next_buffer = 0; + } + + void swap_index(int i, int j) const + { + swap(sign[i],sign[j]); + swap(index[i],index[j]); + swap(QD[i],QD[j]); + } + + Qfloat *get_Q(int i, int len) const + { + Qfloat *data; + int j, real_i = index[i]; + if(cache->get_data(real_i,&data,l) < l) + { + for(j=0;j<l;j++) + data[j] = (Qfloat)(this->*kernel_function)(real_i,j); + } + + // reorder and copy + Qfloat *buf = buffer[next_buffer]; + next_buffer = 1 - next_buffer; + schar si = sign[i]; + for(j=0;j<len;j++) + buf[j] = (Qfloat) si * (Qfloat) sign[j] * data[index[j]]; + return buf; + } + + double *get_QD() const + { + return QD; + } + + ~SVR_Q() + { + delete cache; + delete[] sign; + delete[] index; + delete[] buffer[0]; + delete[] buffer[1]; + delete[] QD; + } + private: + int l; + Cache *cache; + schar *sign; + int *index; + mutable int next_buffer; + Qfloat *buffer[2]; + double *QD; + }; + + // + // construct and solve various formulations + // + static void solve_c_svc( + const svm_problem *prob, const svm_parameter* param, + double *alpha, Solver::SolutionInfo* si, double Cp, double Cn) + { + int l = prob->l; + double *minus_ones = new double[l]; + schar *y = new schar[l]; + + int i; + + for(i=0;i<l;i++) + { + alpha[i] = 0; + minus_ones[i] = -1; + if(prob->y[i] > 0) y[i] = +1; else y[i] = -1; + } + + Solver s; + s.Solve(l, SVC_Q(*prob,*param,y), minus_ones, y, + alpha, Cp, Cn, param->eps, si, param->shrinking); + + double sum_alpha=0; + for(i=0;i<l;i++) + sum_alpha += alpha[i]; + + if (Cp==Cn) + info("nu = %f\n", sum_alpha/(Cp*prob->l)); + + for(i=0;i<l;i++) + alpha[i] *= y[i]; + + delete[] minus_ones; + delete[] y; + } + + static void solve_nu_svc( + const svm_problem *prob, const svm_parameter *param, + double *alpha, Solver::SolutionInfo* si) + { + int i; + int l = prob->l; + double nu = param->nu; + + schar *y = new schar[l]; + + for(i=0;i<l;i++) + if(prob->y[i]>0) + y[i] = +1; + else + y[i] = -1; + + double sum_pos = nu*l/2; + double sum_neg = nu*l/2; + + for(i=0;i<l;i++) + if(y[i] == +1) + { + alpha[i] = min(1.0,sum_pos); + sum_pos -= alpha[i]; + } + else + { + alpha[i] = min(1.0,sum_neg); + sum_neg -= alpha[i]; + } + + double *zeros = new double[l]; + + for(i=0;i<l;i++) + zeros[i] = 0; + + Solver_NU s; + s.Solve(l, SVC_Q(*prob,*param,y), zeros, y, + alpha, 1.0, 1.0, param->eps, si, param->shrinking); + double r = si->r; + + info("C = %f\n",1/r); + + for(i=0;i<l;i++) + alpha[i] *= y[i]/r; + + si->rho /= r; + si->obj /= (r*r); + si->upper_bound_p = 1/r; + si->upper_bound_n = 1/r; + + delete[] y; + delete[] zeros; + } + + static void solve_one_class( + const svm_problem *prob, const svm_parameter *param, + double *alpha, Solver::SolutionInfo* si) + { + int l = prob->l; + double *zeros = new double[l]; + schar *ones = new schar[l]; + int i; + + int n = (int)(param->nu*prob->l); // # of alpha's at upper bound + + for(i=0;i<n;i++) + alpha[i] = 1; + if(n<prob->l) + alpha[n] = param->nu * prob->l - n; + for(i=n+1;i<l;i++) + alpha[i] = 0; + + for(i=0;i<l;i++) + { + zeros[i] = 0; + ones[i] = 1; + } + + Solver s; + s.Solve(l, ONE_CLASS_Q(*prob,*param), zeros, ones, + alpha, 1.0, 1.0, param->eps, si, param->shrinking); + + delete[] zeros; + delete[] ones; + } + + static void solve_epsilon_svr( + const svm_problem *prob, const svm_parameter *param, + double *alpha, Solver::SolutionInfo* si) + { + int l = prob->l; + double *alpha2 = new double[2*l]; + double *linear_term = new double[2*l]; + schar *y = new schar[2*l]; + int i; + + for(i=0;i<l;i++) + { + alpha2[i] = 0; + linear_term[i] = param->p - prob->y[i]; + y[i] = 1; + + alpha2[i+l] = 0; + linear_term[i+l] = param->p + prob->y[i]; + y[i+l] = -1; + } + + Solver s; + s.Solve(2*l, SVR_Q(*prob,*param), linear_term, y, + alpha2, param->C, param->C, param->eps, si, param->shrinking); + + double sum_alpha = 0; + for(i=0;i<l;i++) + { + alpha[i] = alpha2[i] - alpha2[i+l]; + sum_alpha += fabs(alpha[i]); + } + info("nu = %f\n",sum_alpha/(param->C*l)); + + delete[] alpha2; + delete[] linear_term; + delete[] y; + } + + static void solve_nu_svr( + const svm_problem *prob, const svm_parameter *param, + double *alpha, Solver::SolutionInfo* si) + { + int l = prob->l; + double C = param->C; + double *alpha2 = new double[2*l]; + double *linear_term = new double[2*l]; + schar *y = new schar[2*l]; + int i; + + double sum = C * param->nu * l / 2; + for(i=0;i<l;i++) + { + alpha2[i] = alpha2[i+l] = min(sum,C); + sum -= alpha2[i]; + + linear_term[i] = - prob->y[i]; + y[i] = 1; + + linear_term[i+l] = prob->y[i]; + y[i+l] = -1; + } + + Solver_NU s; + s.Solve(2*l, SVR_Q(*prob,*param), linear_term, y, + alpha2, C, C, param->eps, si, param->shrinking); + + info("epsilon = %f\n",-si->r); + + for(i=0;i<l;i++) + alpha[i] = alpha2[i] - alpha2[i+l]; + + delete[] alpha2; + delete[] linear_term; + delete[] y; + } + + // + // decision_function + // + struct decision_function + { + double *alpha; + double rho; + }; + + static decision_function svm_train_one( + const svm_problem *prob, const svm_parameter *param, + double Cp, double Cn) + { + double *alpha = Malloc(double,prob->l); + Solver::SolutionInfo si; + switch(param->svm_type) + { + case C_SVC: + solve_c_svc(prob,param,alpha,&si,Cp,Cn); + break; + case NU_SVC: + solve_nu_svc(prob,param,alpha,&si); + break; + case ONE_CLASS: + solve_one_class(prob,param,alpha,&si); + break; + case EPSILON_SVR: + solve_epsilon_svr(prob,param,alpha,&si); + break; + case NU_SVR: + solve_nu_svr(prob,param,alpha,&si); + break; + } + + info("obj = %f, rho = %f\n",si.obj,si.rho); + + // output SVs + + int nSV = 0; + int nBSV = 0; + for(int i=0;i<prob->l;i++) + { + if(fabs(alpha[i]) > 0) + { + ++nSV; + if(prob->y[i] > 0) + { + if(fabs(alpha[i]) >= si.upper_bound_p) + ++nBSV; + } + else + { + if(fabs(alpha[i]) >= si.upper_bound_n) + ++nBSV; + } + } + } + + info("nSV = %d, nBSV = %d\n",nSV,nBSV); + + decision_function f; + f.alpha = alpha; + f.rho = si.rho; + return f; + } + + // Platt's binary SVM Probablistic Output: an improvement from Lin et al. + static void sigmoid_train( + int l, const double *dec_values, const double *labels, + double& A, double& B) + { + double prior1=0, prior0 = 0; + int i; + + for (i=0;i<l;i++) + if (labels[i] > 0) prior1+=1; + else prior0+=1; + + int max_iter=100; // Maximal number of iterations + double min_step=1e-10; // Minimal step taken in line search + double sigma=1e-12; // For numerically strict PD of Hessian + double eps=1e-5; + double hiTarget=(prior1+1.0)/(prior1+2.0); + double loTarget=1/(prior0+2.0); + double *t=Malloc(double,l); + double fApB,p,q,h11,h22,h21,g1,g2,det,dA,dB,gd,stepsize; + double newA,newB,newf,d1,d2; + int iter; + + // Initial Point and Initial Fun Value + A=0.0; B=log((prior0+1.0)/(prior1+1.0)); + double fval = 0.0; + + for (i=0;i<l;i++) + { + if (labels[i]>0) t[i]=hiTarget; + else t[i]=loTarget; + fApB = dec_values[i]*A+B; + if (fApB>=0) + fval += t[i]*fApB + log(1+exp(-fApB)); + else + fval += (t[i] - 1)*fApB +log(1+exp(fApB)); + } + for (iter=0;iter<max_iter;iter++) + { + // Update Gradient and Hessian (use H' = H + sigma I) + h11=sigma; // numerically ensures strict PD + h22=sigma; + h21=0.0;g1=0.0;g2=0.0; + for (i=0;i<l;i++) + { + fApB = dec_values[i]*A+B; + if (fApB >= 0) + { + p=exp(-fApB)/(1.0+exp(-fApB)); + q=1.0/(1.0+exp(-fApB)); + } + else + { + p=1.0/(1.0+exp(fApB)); + q=exp(fApB)/(1.0+exp(fApB)); + } + d2=p*q; + h11+=dec_values[i]*dec_values[i]*d2; + h22+=d2; + h21+=dec_values[i]*d2; + d1=t[i]-p; + g1+=dec_values[i]*d1; + g2+=d1; + } + + // Stopping Criteria + if (fabs(g1)<eps && fabs(g2)<eps) + break; + + // Finding Newton direction: -inv(H') * g + det=h11*h22-h21*h21; + dA=-(h22*g1 - h21 * g2) / det; + dB=-(-h21*g1+ h11 * g2) / det; + gd=g1*dA+g2*dB; + + + stepsize = 1; // Line Search + while (stepsize >= min_step) + { + newA = A + stepsize * dA; + newB = B + stepsize * dB; + + // New function value + newf = 0.0; + for (i=0;i<l;i++) + { + fApB = dec_values[i]*newA+newB; + if (fApB >= 0) + newf += t[i]*fApB + log(1+exp(-fApB)); + else + newf += (t[i] - 1)*fApB +log(1+exp(fApB)); + } + // Check sufficient decrease + if (newf<fval+0.0001*stepsize*gd) + { + A=newA;B=newB;fval=newf; + break; + } + else + stepsize = stepsize / 2.0; + } + + if (stepsize < min_step) + { + info("Line search fails in two-class probability estimates\n"); + break; + } + } + + if (iter>=max_iter) + info("Reaching maximal iterations in two-class probability estimates\n"); + free(t); + } + + static double sigmoid_predict(double decision_value, double A, double B) + { + double fApB = decision_value*A+B; + // 1-p used later; avoid catastrophic cancellation + if (fApB >= 0) + return exp(-fApB)/(1.0+exp(-fApB)); + else + return 1.0/(1+exp(fApB)) ; + } + + // Method 2 from the multiclass_prob paper by Wu, Lin, and Weng + static void multiclass_probability(int k, double **r, double *p) + { + int t,j; + int iter = 0, max_iter=max(100,k); + double **Q=Malloc(double *,k); + double *Qp=Malloc(double,k); + double pQp, eps=0.005/k; + + for (t=0;t<k;t++) + { + p[t]=1.0/k; // Valid if k = 1 + Q[t]=Malloc(double,k); + Q[t][t]=0; + for (j=0;j<t;j++) + { + Q[t][t]+=r[j][t]*r[j][t]; + Q[t][j]=Q[j][t]; + } + for (j=t+1;j<k;j++) + { + Q[t][t]+=r[j][t]*r[j][t]; + Q[t][j]=-r[j][t]*r[t][j]; + } + } + for (iter=0;iter<max_iter;iter++) + { + // stopping condition, recalculate QP,pQP for numerical accuracy + pQp=0; + for (t=0;t<k;t++) + { + Qp[t]=0; + for (j=0;j<k;j++) + Qp[t]+=Q[t][j]*p[j]; + pQp+=p[t]*Qp[t]; + } + double max_error=0; + for (t=0;t<k;t++) + { + double error=fabs(Qp[t]-pQp); + if (error>max_error) + max_error=error; + } + if (max_error<eps) break; + + for (t=0;t<k;t++) + { + double diff=(-Qp[t]+pQp)/Q[t][t]; + p[t]+=diff; + pQp=(pQp+diff*(diff*Q[t][t]+2*Qp[t]))/(1+diff)/(1+diff); + for (j=0;j<k;j++) + { + Qp[j]=(Qp[j]+diff*Q[t][j])/(1+diff); + p[j]/=(1+diff); + } + } + } + if (iter>=max_iter) + info("Exceeds max_iter in multiclass_prob\n"); + for(t=0;t<k;t++) free(Q[t]); + free(Q); + free(Qp); + } + + // Cross-validation decision values for probability estimates + static void svm_binary_svc_probability( + const svm_problem *prob, const svm_parameter *param, + double Cp, double Cn, double& probA, double& probB) + { + int i; + int nr_fold = 5; + int *perm = Malloc(int,prob->l); + double *dec_values = Malloc(double,prob->l); + + // random shuffle + for(i=0;i<prob->l;i++) perm[i]=i; + for(i=0;i<prob->l;i++) + { + int j = i+rand()%(prob->l-i); + swap(perm[i],perm[j]); + } + for(i=0;i<nr_fold;i++) + { + int begin = i*prob->l/nr_fold; + int end = (i+1)*prob->l/nr_fold; + int j,k; + struct svm_problem subprob; + + subprob.l = prob->l-(end-begin); + subprob.x = Malloc(struct svm_node*,subprob.l); + subprob.y = Malloc(double,subprob.l); + + k=0; + for(j=0;j<begin;j++) + { + subprob.x[k] = prob->x[perm[j]]; + subprob.y[k] = prob->y[perm[j]]; + ++k; + } + for(j=end;j<prob->l;j++) + { + subprob.x[k] = prob->x[perm[j]]; + subprob.y[k] = prob->y[perm[j]]; + ++k; + } + int p_count=0,n_count=0; + for(j=0;j<k;j++) + if(subprob.y[j]>0) + p_count++; + else + n_count++; + + if(p_count==0 && n_count==0) + for(j=begin;j<end;j++) + dec_values[perm[j]] = 0; + else if(p_count > 0 && n_count == 0) + for(j=begin;j<end;j++) + dec_values[perm[j]] = 1; + else if(p_count == 0 && n_count > 0) + for(j=begin;j<end;j++) + dec_values[perm[j]] = -1; + else + { + svm_parameter subparam = *param; + subparam.probability=0; + subparam.C=1.0; + subparam.nr_weight=2; + subparam.weight_label = Malloc(int,2); + subparam.weight = Malloc(double,2); + subparam.weight_label[0]=+1; + subparam.weight_label[1]=-1; + subparam.weight[0]=Cp; + subparam.weight[1]=Cn; + struct svm_model *submodel = svm_train(&subprob,&subparam); + for(j=begin;j<end;j++) + { + svm_predict_values(submodel,prob->x[perm[j]],&(dec_values[perm[j]])); + // ensure +1 -1 order; reason not using CV subroutine + dec_values[perm[j]] *= submodel->label[0]; + } + svm_free_and_destroy_model(&submodel); + svm_destroy_param(&subparam); + } + free(subprob.x); + free(subprob.y); + } + sigmoid_train(prob->l,dec_values,prob->y,probA,probB); + free(dec_values); + free(perm); + } + + // Return parameter of a Laplace distribution + static double svm_svr_probability( + const svm_problem *prob, const svm_parameter *param) + { + int i; + int nr_fold = 5; + double *ymv = Malloc(double,prob->l); + double mae = 0; + + svm_parameter newparam = *param; + newparam.probability = 0; + svm_cross_validation(prob,&newparam,nr_fold,ymv); + for(i=0;i<prob->l;i++) + { + ymv[i]=prob->y[i]-ymv[i]; + mae += fabs(ymv[i]); + } + mae /= prob->l; + double std=sqrt(2*mae*mae); + int count=0; + mae=0; + for(i=0;i<prob->l;i++) + if (fabs(ymv[i]) > 5*std) + count=count+1; + else + mae+=fabs(ymv[i]); + mae /= (prob->l-count); + info("Prob. model for test data: target value = predicted value + z,\nz: Laplace distribution e^(-|z|/sigma)/(2sigma),sigma= %g\n",mae); + free(ymv); + return mae; + } + + + // label: label name, start: begin of each class, count: #data of classes, perm: indices to the original data + // perm, length l, must be allocated before calling this subroutine + static void svm_group_classes(const svm_problem *prob, int *nr_class_ret, int **label_ret, int **start_ret, int **count_ret, int *perm) + { + int l = prob->l; + int max_nr_class = 16; + int nr_class = 0; + int *label = Malloc(int,max_nr_class); + int *count = Malloc(int,max_nr_class); + int *data_label = Malloc(int,l); + int i; + + for(i=0;i<l;i++) + { + int this_label = (int)prob->y[i]; + int j; + for(j=0;j<nr_class;j++) + { + if(this_label == label[j]) + { + ++count[j]; + break; + } + } + data_label[i] = j; + if(j == nr_class) + { + if(nr_class == max_nr_class) + { + max_nr_class *= 2; + label = (int *)realloc(label,max_nr_class*sizeof(int)); + count = (int *)realloc(count,max_nr_class*sizeof(int)); + } + label[nr_class] = this_label; + count[nr_class] = 1; + ++nr_class; + } + } + + // + // Labels are ordered by their first occurrence in the training set. + // However, for two-class sets with -1/+1 labels and -1 appears first, + // we swap labels to ensure that internally the binary SVM has positive data corresponding to the +1 instances. + // + if (nr_class == 2 && label[0] == -1 && label[1] == 1) + { + swap(label[0],label[1]); + swap(count[0],count[1]); + for(i=0;i<l;i++) + { + if(data_label[i] == 0) + data_label[i] = 1; + else + data_label[i] = 0; + } + } + + int *start = Malloc(int,nr_class); + start[0] = 0; + for(i=1;i<nr_class;i++) + start[i] = start[i-1]+count[i-1]; + for(i=0;i<l;i++) + { + perm[start[data_label[i]]] = i; + ++start[data_label[i]]; + } + start[0] = 0; + for(i=1;i<nr_class;i++) + start[i] = start[i-1]+count[i-1]; + + *nr_class_ret = nr_class; + *label_ret = label; + *start_ret = start; + *count_ret = count; + free(data_label); + } + + // + // Interface functions + // + svm_model *svm_train(const svm_problem *prob, const svm_parameter *param) + { + svm_model *model = Malloc(svm_model,1); + model->param = *param; + model->free_sv = 0; // XXX + + if(param->svm_type == ONE_CLASS || + param->svm_type == EPSILON_SVR || + param->svm_type == NU_SVR) + { + // regression or one-class-svm + model->nr_class = 2; + model->label = NULL; + model->nSV = NULL; + model->probA = NULL; model->probB = NULL; + model->sv_coef = Malloc(double *,1); + + if(param->probability && + (param->svm_type == EPSILON_SVR || + param->svm_type == NU_SVR)) + { + model->probA = Malloc(double,1); + model->probA[0] = svm_svr_probability(prob,param); + } + + decision_function f = svm_train_one(prob,param,0,0); + model->rho = Malloc(double,1); + model->rho[0] = f.rho; + + int nSV = 0; + int i; + for(i=0;i<prob->l;i++) + if(fabs(f.alpha[i]) > 0) ++nSV; + model->l = nSV; + model->SV = Malloc(svm_node *,nSV); + model->sv_coef[0] = Malloc(double,nSV); + model->sv_indices = Malloc(int,nSV); + int j = 0; + for(i=0;i<prob->l;i++) + if(fabs(f.alpha[i]) > 0) + { + model->SV[j] = prob->x[i]; + model->sv_coef[0][j] = f.alpha[i]; + model->sv_indices[j] = i+1; + ++j; + } + + free(f.alpha); + } + else + { + // classification + int l = prob->l; + int nr_class; + int *label = NULL; + int *start = NULL; + int *count = NULL; + int *perm = Malloc(int,l); + + // group training data of the same class + svm_group_classes(prob,&nr_class,&label,&start,&count,perm); + if(nr_class == 1) + info("WARNING: training data in only one class. See README for details.\n"); + + svm_node **x = Malloc(svm_node *,l); + int i; + for(i=0;i<l;i++) + x[i] = prob->x[perm[i]]; + + // calculate weighted C + + double *weighted_C = Malloc(double, nr_class); + for(i=0;i<nr_class;i++) + weighted_C[i] = param->C; + for(i=0;i<param->nr_weight;i++) + { + int j; + for(j=0;j<nr_class;j++) + if(param->weight_label[i] == label[j]) + break; + if(j == nr_class) + fprintf(stderr,"WARNING: class label %d specified in weight is not found\n", param->weight_label[i]); + else + weighted_C[j] *= param->weight[i]; + } + + // train k*(k-1)/2 models + + bool *nonzero = Malloc(bool,l); + for(i=0;i<l;i++) + nonzero[i] = false; + decision_function *f = Malloc(decision_function,nr_class*(nr_class-1)/2); + + double *probA=NULL,*probB=NULL; + if (param->probability) + { + probA=Malloc(double,nr_class*(nr_class-1)/2); + probB=Malloc(double,nr_class*(nr_class-1)/2); + } + + int p = 0; + for(i=0;i<nr_class;i++) + for(int j=i+1;j<nr_class;j++) + { + svm_problem sub_prob; + int si = start[i], sj = start[j]; + int ci = count[i], cj = count[j]; + sub_prob.l = ci+cj; + sub_prob.x = Malloc(svm_node *,sub_prob.l); + sub_prob.y = Malloc(double,sub_prob.l); + int k; + for(k=0;k<ci;k++) + { + sub_prob.x[k] = x[si+k]; + sub_prob.y[k] = +1; + } + for(k=0;k<cj;k++) + { + sub_prob.x[ci+k] = x[sj+k]; + sub_prob.y[ci+k] = -1; + } + + if(param->probability) + svm_binary_svc_probability(&sub_prob,param,weighted_C[i],weighted_C[j],probA[p],probB[p]); + + f[p] = svm_train_one(&sub_prob,param,weighted_C[i],weighted_C[j]); + for(k=0;k<ci;k++) + if(!nonzero[si+k] && fabs(f[p].alpha[k]) > 0) + nonzero[si+k] = true; + for(k=0;k<cj;k++) + if(!nonzero[sj+k] && fabs(f[p].alpha[ci+k]) > 0) + nonzero[sj+k] = true; + free(sub_prob.x); + free(sub_prob.y); + ++p; + } + + // build output + + model->nr_class = nr_class; + + model->label = Malloc(int,nr_class); + for(i=0;i<nr_class;i++) + model->label[i] = label[i]; + + model->rho = Malloc(double,nr_class*(nr_class-1)/2); + for(i=0;i<nr_class*(nr_class-1)/2;i++) + model->rho[i] = f[i].rho; + + if(param->probability) + { + model->probA = Malloc(double,nr_class*(nr_class-1)/2); + model->probB = Malloc(double,nr_class*(nr_class-1)/2); + for(i=0;i<nr_class*(nr_class-1)/2;i++) + { + model->probA[i] = probA[i]; + model->probB[i] = probB[i]; + } + } + else + { + model->probA=NULL; + model->probB=NULL; + } + + int total_sv = 0; + int *nz_count = Malloc(int,nr_class); + model->nSV = Malloc(int,nr_class); + for(i=0;i<nr_class;i++) + { + int nSV = 0; + for(int j=0;j<count[i];j++) + if(nonzero[start[i]+j]) + { + ++nSV; + ++total_sv; + } + model->nSV[i] = nSV; + nz_count[i] = nSV; + } + + info("Total nSV = %d\n",total_sv); + + model->l = total_sv; + model->SV = Malloc(svm_node *,total_sv); + model->sv_indices = Malloc(int,total_sv); + p = 0; + for(i=0;i<l;i++) + if(nonzero[i]) + { + model->SV[p] = x[i]; + model->sv_indices[p++] = perm[i] + 1; + } + + int *nz_start = Malloc(int,nr_class); + nz_start[0] = 0; + for(i=1;i<nr_class;i++) + nz_start[i] = nz_start[i-1]+nz_count[i-1]; + + model->sv_coef = Malloc(double *,nr_class-1); + for(i=0;i<nr_class-1;i++) + model->sv_coef[i] = Malloc(double,total_sv); + + p = 0; + for(i=0;i<nr_class;i++) + for(int j=i+1;j<nr_class;j++) + { + // classifier (i,j): coefficients with + // i are in sv_coef[j-1][nz_start[i]...], + // j are in sv_coef[i][nz_start[j]...] + + int si = start[i]; + int sj = start[j]; + int ci = count[i]; + int cj = count[j]; + + int q = nz_start[i]; + int k; + for(k=0;k<ci;k++) + if(nonzero[si+k]) + model->sv_coef[j-1][q++] = f[p].alpha[k]; + q = nz_start[j]; + for(k=0;k<cj;k++) + if(nonzero[sj+k]) + model->sv_coef[i][q++] = f[p].alpha[ci+k]; + ++p; + } + + free(label); + free(probA); + free(probB); + free(count); + free(perm); + free(start); + free(x); + free(weighted_C); + free(nonzero); + for(i=0;i<nr_class*(nr_class-1)/2;i++) + free(f[i].alpha); + free(f); + free(nz_count); + free(nz_start); + } + return model; + } + + // Stratified cross validation + void svm_cross_validation(const svm_problem *prob, const svm_parameter *param, int nr_fold, double *target) + { + int i; + int *fold_start; + int l = prob->l; + int *perm = Malloc(int,l); + int nr_class; + if (nr_fold > l) + { + nr_fold = l; + fprintf(stderr,"WARNING: # folds > # data. Will use # folds = # data instead (i.e., leave-one-out cross validation)\n"); + } + fold_start = Malloc(int,nr_fold+1); + // stratified cv may not give leave-one-out rate + // Each class to l folds -> some folds may have zero elements + if((param->svm_type == C_SVC || + param->svm_type == NU_SVC) && nr_fold < l) + { + int *start = NULL; + int *label = NULL; + int *count = NULL; + svm_group_classes(prob,&nr_class,&label,&start,&count,perm); + + // random shuffle and then data grouped by fold using the array perm + int *fold_count = Malloc(int,nr_fold); + int c; + int *index = Malloc(int,l); + for(i=0;i<l;i++) + index[i]=perm[i]; + for (c=0; c<nr_class; c++) + for(i=0;i<count[c];i++) + { + int j = i+rand()%(count[c]-i); + swap(index[start[c]+j],index[start[c]+i]); + } + for(i=0;i<nr_fold;i++) + { + fold_count[i] = 0; + for (c=0; c<nr_class;c++) + fold_count[i]+=(i+1)*count[c]/nr_fold-i*count[c]/nr_fold; + } + fold_start[0]=0; + for (i=1;i<=nr_fold;i++) + fold_start[i] = fold_start[i-1]+fold_count[i-1]; + for (c=0; c<nr_class;c++) + for(i=0;i<nr_fold;i++) + { + int begin = start[c]+i*count[c]/nr_fold; + int end = start[c]+(i+1)*count[c]/nr_fold; + for(int j=begin;j<end;j++) + { + perm[fold_start[i]] = index[j]; + fold_start[i]++; + } + } + fold_start[0]=0; + for (i=1;i<=nr_fold;i++) + fold_start[i] = fold_start[i-1]+fold_count[i-1]; + free(start); + free(label); + free(count); + free(index); + free(fold_count); + } + else + { + for(i=0;i<l;i++) perm[i]=i; + for(i=0;i<l;i++) + { + int j = i+rand()%(l-i); + swap(perm[i],perm[j]); + } + for(i=0;i<=nr_fold;i++) + fold_start[i]=i*l/nr_fold; + } + + for(i=0;i<nr_fold;i++) + { + int begin = fold_start[i]; + int end = fold_start[i+1]; + int j,k; + struct svm_problem subprob; + + subprob.l = l-(end-begin); + subprob.x = Malloc(struct svm_node*,subprob.l); + subprob.y = Malloc(double,subprob.l); + + k=0; + for(j=0;j<begin;j++) + { + subprob.x[k] = prob->x[perm[j]]; + subprob.y[k] = prob->y[perm[j]]; + ++k; + } + for(j=end;j<l;j++) + { + subprob.x[k] = prob->x[perm[j]]; + subprob.y[k] = prob->y[perm[j]]; + ++k; + } + struct svm_model *submodel = svm_train(&subprob,param); + if(param->probability && + (param->svm_type == C_SVC || param->svm_type == NU_SVC)) + { + double *prob_estimates=Malloc(double,svm_get_nr_class(submodel)); + for(j=begin;j<end;j++) + target[perm[j]] = svm_predict_probability(submodel,prob->x[perm[j]],prob_estimates); + free(prob_estimates); + } + else + for(j=begin;j<end;j++) + target[perm[j]] = svm_predict(submodel,prob->x[perm[j]]); + svm_free_and_destroy_model(&submodel); + free(subprob.x); + free(subprob.y); + } + free(fold_start); + free(perm); + } + + + int svm_get_svm_type(const svm_model *model) + { + return model->param.svm_type; + } + + int svm_get_nr_class(const svm_model *model) + { + return model->nr_class; + } + + void svm_get_labels(const svm_model *model, int* label) + { + if (model->label != NULL) + for(int i=0;i<model->nr_class;i++) + label[i] = model->label[i]; + } + + void svm_get_sv_indices(const svm_model *model, int* indices) + { + if (model->sv_indices != NULL) + for(int i=0;i<model->l;i++) + indices[i] = model->sv_indices[i]; + } + + int svm_get_nr_sv(const svm_model *model) + { + return model->l; + } + + double svm_get_svr_probability(const svm_model *model) + { + if ((model->param.svm_type == EPSILON_SVR || model->param.svm_type == NU_SVR) && + model->probA!=NULL) + return model->probA[0]; + else + { + fprintf(stderr,"Model doesn't contain information for SVR probability inference\n"); + return 0; + } + } + + double svm_predict_values(const svm_model *model, const svm_node *x, double* dec_values) + { + int i; + if(model->param.svm_type == ONE_CLASS || + model->param.svm_type == EPSILON_SVR || + model->param.svm_type == NU_SVR) + { + double *sv_coef = model->sv_coef[0]; + double sum = 0; + for(i=0;i<model->l;i++) + sum += sv_coef[i] * Kernel::k_function(x,model->SV[i],model->param); + sum -= model->rho[0]; + *dec_values = sum; + + if(model->param.svm_type == ONE_CLASS) + return (sum>0)?1:-1; + else + return sum; + } + else + { + int nr_class = model->nr_class; + int l = model->l; + + double *kvalue = Malloc(double,l); + for(i=0;i<l;i++) + kvalue[i] = Kernel::k_function(x,model->SV[i],model->param); + + int *start = Malloc(int,nr_class); + start[0] = 0; + for(i=1;i<nr_class;i++) + start[i] = start[i-1]+model->nSV[i-1]; + + int *vote = Malloc(int,nr_class); + for(i=0;i<nr_class;i++) + vote[i] = 0; + + int p=0; + for(i=0;i<nr_class;i++) + for(int j=i+1;j<nr_class;j++) + { + double sum = 0; + int si = start[i]; + int sj = start[j]; + int ci = model->nSV[i]; + int cj = model->nSV[j]; + + int k; + double *coef1 = model->sv_coef[j-1]; + double *coef2 = model->sv_coef[i]; + for(k=0;k<ci;k++) + sum += coef1[si+k] * kvalue[si+k]; + for(k=0;k<cj;k++) + sum += coef2[sj+k] * kvalue[sj+k]; + sum -= model->rho[p]; + dec_values[p] = sum; + + if(dec_values[p] > 0) + ++vote[i]; + else + ++vote[j]; + p++; + } + + int vote_max_idx = 0; + for(i=1;i<nr_class;i++) + if(vote[i] > vote[vote_max_idx]) + vote_max_idx = i; + + free(kvalue); + free(start); + free(vote); + return model->label[vote_max_idx]; + } + } + + double svm_predict(const svm_model *model, const svm_node *x) + { + int nr_class = model->nr_class; + double *dec_values; + if(model->param.svm_type == ONE_CLASS || + model->param.svm_type == EPSILON_SVR || + model->param.svm_type == NU_SVR) + dec_values = Malloc(double, 1); + else + dec_values = Malloc(double, nr_class*(nr_class-1)/2); + double pred_result = svm_predict_values(model, x, dec_values); + free(dec_values); + return pred_result; + } + + double svm_predict_probability( + const svm_model *model, const svm_node *x, double *prob_estimates) + { + if ((model->param.svm_type == C_SVC || model->param.svm_type == NU_SVC) && + model->probA!=NULL && model->probB!=NULL) + { + int i; + int nr_class = model->nr_class; + double *dec_values = Malloc(double, nr_class*(nr_class-1)/2); + svm_predict_values(model, x, dec_values); + + double min_prob=1e-7; + double **pairwise_prob=Malloc(double *,nr_class); + for(i=0;i<nr_class;i++) + pairwise_prob[i]=Malloc(double,nr_class); + int k=0; + for(i=0;i<nr_class;i++) + for(int j=i+1;j<nr_class;j++) + { + pairwise_prob[i][j]=min(max(sigmoid_predict(dec_values[k],model->probA[k],model->probB[k]),min_prob),1-min_prob); + pairwise_prob[j][i]=1-pairwise_prob[i][j]; + k++; + } + if (nr_class == 2) + { + prob_estimates[0] = pairwise_prob[0][1]; + prob_estimates[1] = pairwise_prob[1][0]; + } + else + multiclass_probability(nr_class,pairwise_prob,prob_estimates); + + int prob_max_idx = 0; + for(i=1;i<nr_class;i++) + if(prob_estimates[i] > prob_estimates[prob_max_idx]) + prob_max_idx = i; + for(i=0;i<nr_class;i++) + free(pairwise_prob[i]); + free(dec_values); + free(pairwise_prob); + return model->label[prob_max_idx]; + } + else + return svm_predict(model, x); + } + + static const char *svm_type_table[] = + { + "c_svc","nu_svc","one_class","epsilon_svr","nu_svr",NULL + }; + + static const char *kernel_type_table[]= + { + "linear","polynomial","rbf","sigmoid","precomputed",NULL + }; + + int svm_save_model(const char *model_file_name, const svm_model *model) + { + FILE *fp = fopen(model_file_name,"w"); + if(fp==NULL) return -1; + + char *old_locale = setlocale(LC_ALL, NULL); + if (old_locale) { + old_locale = strdup(old_locale); + } + setlocale(LC_ALL, "C"); + + const svm_parameter& param = model->param; + + fprintf(fp,"svm_type %s\n", svm_type_table[param.svm_type]); + fprintf(fp,"kernel_type %s\n", kernel_type_table[param.kernel_type]); + + if(param.kernel_type == POLY) + fprintf(fp,"degree %d\n", param.degree); + + if(param.kernel_type == POLY || param.kernel_type == RBF || param.kernel_type == SIGMOID) + fprintf(fp,"gamma %g\n", param.gamma); + + if(param.kernel_type == POLY || param.kernel_type == SIGMOID) + fprintf(fp,"coef0 %g\n", param.coef0); + + int nr_class = model->nr_class; + int l = model->l; + fprintf(fp, "nr_class %d\n", nr_class); + fprintf(fp, "total_sv %d\n",l); + + { + fprintf(fp, "rho"); + for(int i=0;i<nr_class*(nr_class-1)/2;i++) + fprintf(fp," %g",model->rho[i]); + fprintf(fp, "\n"); + } + + if(model->label) + { + fprintf(fp, "label"); + for(int i=0;i<nr_class;i++) + fprintf(fp," %d",model->label[i]); + fprintf(fp, "\n"); + } + + if(model->probA) // regression has probA only + { + fprintf(fp, "probA"); + for(int i=0;i<nr_class*(nr_class-1)/2;i++) + fprintf(fp," %g",model->probA[i]); + fprintf(fp, "\n"); + } + if(model->probB) + { + fprintf(fp, "probB"); + for(int i=0;i<nr_class*(nr_class-1)/2;i++) + fprintf(fp," %g",model->probB[i]); + fprintf(fp, "\n"); + } + + if(model->nSV) + { + fprintf(fp, "nr_sv"); + for(int i=0;i<nr_class;i++) + fprintf(fp," %d",model->nSV[i]); + fprintf(fp, "\n"); + } + + fprintf(fp, "SV\n"); + const double * const *sv_coef = model->sv_coef; + const svm_node * const *SV = model->SV; + + for(int i=0;i<l;i++) + { + for(int j=0;j<nr_class-1;j++) + fprintf(fp, "%.16g ",sv_coef[j][i]); + + const svm_node *p = SV[i]; + + if(param.kernel_type == PRECOMPUTED) + fprintf(fp,"0:%d ",(int)(p->value)); + else + while(p->index != -1) + { + fprintf(fp,"%d:%.8g ",p->index,p->value); + p++; + } + fprintf(fp, "\n"); + } + + setlocale(LC_ALL, old_locale); + free(old_locale); + + if (ferror(fp) != 0 || fclose(fp) != 0) return -1; + else return 0; + } + + static char *line = NULL; + static int max_line_len; + + static char* readline(FILE *input) + { + int len; + + if(fgets(line,max_line_len,input) == NULL) + return NULL; + + while(strrchr(line,'\n') == NULL) + { + max_line_len *= 2; + line = (char *) realloc(line,max_line_len); + len = (int) strlen(line); + if(fgets(line+len,max_line_len-len,input) == NULL) + break; + } + return line; + } + + // + // FSCANF helps to handle fscanf failures. + // Its do-while block avoids the ambiguity when + // if (...) + // FSCANF(); + // is used + // +#define FSCANF(_stream, _format, _var) do{ if (fscanf(_stream, _format, _var) != 1) return false; }while(0) + bool read_model_header(FILE *fp, svm_model* model) + { + svm_parameter& param = model->param; + // parameters for training only won't be assigned, but arrays are assigned as NULL for safety + param.nr_weight = 0; + param.weight_label = NULL; + param.weight = NULL; + + char cmd[81]; + while(1) + { + FSCANF(fp,"%80s",cmd); + + if(strcmp(cmd,"svm_type")==0) + { + FSCANF(fp,"%80s",cmd); + int i; + for(i=0;svm_type_table[i];i++) + { + if(strcmp(svm_type_table[i],cmd)==0) + { + param.svm_type=i; + break; + } + } + if(svm_type_table[i] == NULL) + { + fprintf(stderr,"unknown svm type.\n"); + return false; + } + } + else if(strcmp(cmd,"kernel_type")==0) + { + FSCANF(fp,"%80s",cmd); + int i; + for(i=0;kernel_type_table[i];i++) + { + if(strcmp(kernel_type_table[i],cmd)==0) + { + param.kernel_type=i; + break; + } + } + if(kernel_type_table[i] == NULL) + { + fprintf(stderr,"unknown kernel function.\n"); + return false; + } + } + else if(strcmp(cmd,"degree")==0) + FSCANF(fp,"%d",¶m.degree); + else if(strcmp(cmd,"gamma")==0) + FSCANF(fp,"%lf",¶m.gamma); + else if(strcmp(cmd,"coef0")==0) + FSCANF(fp,"%lf",¶m.coef0); + else if(strcmp(cmd,"nr_class")==0) + FSCANF(fp,"%d",&model->nr_class); + else if(strcmp(cmd,"total_sv")==0) + FSCANF(fp,"%d",&model->l); + else if(strcmp(cmd,"rho")==0) + { + int n = model->nr_class * (model->nr_class-1)/2; + model->rho = Malloc(double,n); + for(int i=0;i<n;i++) + FSCANF(fp,"%lf",&model->rho[i]); + } + else if(strcmp(cmd,"label")==0) + { + int n = model->nr_class; + model->label = Malloc(int,n); + for(int i=0;i<n;i++) + FSCANF(fp,"%d",&model->label[i]); + } + else if(strcmp(cmd,"probA")==0) + { + int n = model->nr_class * (model->nr_class-1)/2; + model->probA = Malloc(double,n); + for(int i=0;i<n;i++) + FSCANF(fp,"%lf",&model->probA[i]); + } + else if(strcmp(cmd,"probB")==0) + { + int n = model->nr_class * (model->nr_class-1)/2; + model->probB = Malloc(double,n); + for(int i=0;i<n;i++) + FSCANF(fp,"%lf",&model->probB[i]); + } + else if(strcmp(cmd,"nr_sv")==0) + { + int n = model->nr_class; + model->nSV = Malloc(int,n); + for(int i=0;i<n;i++) + FSCANF(fp,"%d",&model->nSV[i]); + } + else if(strcmp(cmd,"SV")==0) + { + while(1) + { + int c = getc(fp); + if(c==EOF || c=='\n') break; + } + break; + } + else + { + fprintf(stderr,"unknown text in model file: [%s]\n",cmd); + return false; + } + } + + return true; + + } + + svm_model *svm_load_model(const char *model_file_name) + { + FILE *fp = fopen(model_file_name,"rb"); + if(fp==NULL) return NULL; + + char *old_locale = setlocale(LC_ALL, NULL); + if (old_locale) { + old_locale = strdup(old_locale); + } + setlocale(LC_ALL, "C"); + + // read parameters + + svm_model *model = Malloc(svm_model,1); + model->rho = NULL; + model->probA = NULL; + model->probB = NULL; + model->sv_indices = NULL; + model->label = NULL; + model->nSV = NULL; + + // read header + if (!read_model_header(fp, model)) + { + fprintf(stderr, "ERROR: fscanf failed to read model\n"); + setlocale(LC_ALL, old_locale); + free(old_locale); + free(model->rho); + free(model->label); + free(model->nSV); + free(model); + return NULL; + } + + // read sv_coef and SV + + int elements = 0; + long pos = ftell(fp); + + max_line_len = 1024; + line = Malloc(char,max_line_len); + char *p,*endptr,*idx,*val; + + while(readline(fp)!=NULL) + { + p = strtok(line,":"); + while(1) + { + p = strtok(NULL,":"); + if(p == NULL) + break; + ++elements; + } + } + elements += model->l; + + fseek(fp,pos,SEEK_SET); + + int m = model->nr_class - 1; + int l = model->l; + model->sv_coef = Malloc(double *,m); + int i; + for(i=0;i<m;i++) + model->sv_coef[i] = Malloc(double,l); + model->SV = Malloc(svm_node*,l); + svm_node *x_space = NULL; + if(l>0) x_space = Malloc(svm_node,elements); + + int j=0; + for(i=0;i<l;i++) + { + readline(fp); + model->SV[i] = &x_space[j]; + + p = strtok(line, " \t"); + model->sv_coef[0][i] = strtod(p,&endptr); + for(int k=1;k<m;k++) + { + p = strtok(NULL, " \t"); + model->sv_coef[k][i] = strtod(p,&endptr); + } + + while(1) + { + idx = strtok(NULL, ":"); + val = strtok(NULL, " \t"); + + if(val == NULL) + break; + x_space[j].index = (int) strtol(idx,&endptr,10); + x_space[j].value = strtod(val,&endptr); + + ++j; + } + x_space[j++].index = -1; + } + free(line); + + setlocale(LC_ALL, old_locale); + free(old_locale); + + if (ferror(fp) != 0 || fclose(fp) != 0) + return NULL; + + model->free_sv = 1; // XXX + return model; + } + + void svm_free_model_content(svm_model* model_ptr) + { + if(model_ptr->free_sv && model_ptr->l > 0 && model_ptr->SV != NULL) + free((void *)(model_ptr->SV[0])); + if(model_ptr->sv_coef) + { + for(int i=0;i<model_ptr->nr_class-1;i++) + free(model_ptr->sv_coef[i]); + } + + free(model_ptr->SV); + model_ptr->SV = NULL; + + free(model_ptr->sv_coef); + model_ptr->sv_coef = NULL; + + free(model_ptr->rho); + model_ptr->rho = NULL; + + free(model_ptr->label); + model_ptr->label= NULL; + + free(model_ptr->probA); + model_ptr->probA = NULL; + + free(model_ptr->probB); + model_ptr->probB= NULL; + + free(model_ptr->sv_indices); + model_ptr->sv_indices = NULL; + + free(model_ptr->nSV); + model_ptr->nSV = NULL; + } + + void svm_free_and_destroy_model(svm_model** model_ptr_ptr) + { + if(model_ptr_ptr != NULL && *model_ptr_ptr != NULL) + { + svm_free_model_content(*model_ptr_ptr); + free(*model_ptr_ptr); + *model_ptr_ptr = NULL; + } + } + + void svm_destroy_param(svm_parameter* param) + { + free(param->weight_label); + free(param->weight); + } + + const char *svm_check_parameter(const svm_problem *prob, const svm_parameter *param) + { + // svm_type + + int svm_type = param->svm_type; + if(svm_type != C_SVC && + svm_type != NU_SVC && + svm_type != ONE_CLASS && + svm_type != EPSILON_SVR && + svm_type != NU_SVR) + return "unknown svm type"; + + // kernel_type, degree + + int kernel_type = param->kernel_type; + if(kernel_type != LINEAR && + kernel_type != POLY && + kernel_type != RBF && + kernel_type != SIGMOID && + kernel_type != PRECOMPUTED) + return "unknown kernel type"; + + if(param->gamma < 0) + return "gamma < 0"; + + if(param->degree < 0) + return "degree of polynomial kernel < 0"; + + // cache_size,eps,C,nu,p,shrinking + + if(param->cache_size <= 0) + return "cache_size <= 0"; + + if(param->eps <= 0) + return "eps <= 0"; + + if(svm_type == C_SVC || + svm_type == EPSILON_SVR || + svm_type == NU_SVR) + if(param->C <= 0) + return "C <= 0"; + + if(svm_type == NU_SVC || + svm_type == ONE_CLASS || + svm_type == NU_SVR) + if(param->nu <= 0 || param->nu > 1) + return "nu <= 0 or nu > 1"; + + if(svm_type == EPSILON_SVR) + if(param->p < 0) + return "p < 0"; + + if(param->shrinking != 0 && + param->shrinking != 1) + return "shrinking != 0 and shrinking != 1"; + + if(param->probability != 0 && + param->probability != 1) + return "probability != 0 and probability != 1"; + + if(param->probability == 1 && + svm_type == ONE_CLASS) + return "one-class SVM probability output not supported yet"; + + + // check whether nu-svc is feasible + + if(svm_type == NU_SVC) + { + int l = prob->l; + int max_nr_class = 16; + int nr_class = 0; + int *label = Malloc(int,max_nr_class); + int *count = Malloc(int,max_nr_class); + + int i; + for(i=0;i<l;i++) + { + int this_label = (int)prob->y[i]; + int j; + for(j=0;j<nr_class;j++) + if(this_label == label[j]) + { + ++count[j]; + break; + } + if(j == nr_class) + { + if(nr_class == max_nr_class) + { + max_nr_class *= 2; + label = (int *)realloc(label,max_nr_class*sizeof(int)); + count = (int *)realloc(count,max_nr_class*sizeof(int)); + } + label[nr_class] = this_label; + count[nr_class] = 1; + ++nr_class; + } + } + + for(i=0;i<nr_class;i++) + { + int n1 = count[i]; + for(int j=i+1;j<nr_class;j++) + { + int n2 = count[j]; + if(param->nu*(n1+n2)/2 > min(n1,n2)) + { + free(label); + free(count); + return "specified nu is infeasible"; + } + } + } + free(label); + free(count); + } + + return NULL; + } + + int svm_check_probability_model(const svm_model *model) + { + return ((model->param.svm_type == C_SVC || model->param.svm_type == NU_SVC) && + model->probA!=NULL && model->probB!=NULL) || + ((model->param.svm_type == EPSILON_SVR || model->param.svm_type == NU_SVR) && + model->probA!=NULL); + } + + void svm_set_print_string_function(void (*print_func)(const char *)) + { + if(print_func == NULL) + svm_print_string = &print_string_stdout; + else + svm_print_string = print_func; + } +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/third_party/libsvm/libsvm.h b/examples/ofx/Bitalino_rapidmix/dependencies/third_party/libsvm/libsvm.h new file mode 100644 index 0000000..b1f5832 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/third_party/libsvm/libsvm.h @@ -0,0 +1,108 @@ +#ifndef _LIBSVM_H +#define _LIBSVM_H + +namespace LIBSVM { + +#define LIBSVM_VERSION 322 + +#ifdef __cplusplus + extern "C" { +#endif + + extern int libsvm_version; + + struct svm_node + { + int index; + double value; + }; + + struct svm_problem + { + int l; + double *y; + struct svm_node **x; + }; + + enum { C_SVC, NU_SVC, ONE_CLASS, EPSILON_SVR, NU_SVR }; /* svm_type */ + enum { LINEAR, POLY, RBF, SIGMOID, PRECOMPUTED }; /* kernel_type */ + + struct svm_parameter + { + int svm_type; + int kernel_type; + int degree; /* for poly */ + double gamma; /* for poly/rbf/sigmoid */ + double coef0; /* for poly/sigmoid */ + + /* these are for training only */ + double cache_size; /* in MB */ + double eps; /* stopping criteria */ + double C; /* for C_SVC, EPSILON_SVR and NU_SVR */ + int nr_weight; /* for C_SVC */ + int *weight_label; /* for C_SVC */ + double* weight; /* for C_SVC */ + double nu; /* for NU_SVC, ONE_CLASS, and NU_SVR */ + double p; /* for EPSILON_SVR */ + int shrinking; /* use the shrinking heuristics */ + int probability; /* do probability estimates */ + }; + + // + // svm_model + // + struct svm_model + { + struct svm_parameter param; /* parameter */ + int nr_class; /* number of classes, = 2 in regression/one class svm */ + int l; /* total #SV */ + struct svm_node **SV; /* SVs (SV[l]) */ + double **sv_coef; /* coefficients for SVs in decision functions (sv_coef[k-1][l]) */ + double *rho; /* constants in decision functions (rho[k*(k-1)/2]) */ + double *probA; /* pariwise probability information */ + double *probB; + int *sv_indices; /* sv_indices[0,...,nSV-1] are values in [1,...,num_traning_data] to indicate SVs in the training set */ + + /* for classification only */ + + int *label; /* label of each class (label[k]) */ + int *nSV; /* number of SVs for each class (nSV[k]) */ + /* nSV[0] + nSV[1] + ... + nSV[k-1] = l */ + /* XXX */ + int free_sv; /* 1 if svm_model is created by svm_load_model*/ + /* 0 if svm_model is created by svm_train */ + }; + + struct svm_model *svm_train(const struct svm_problem *prob, const struct svm_parameter *param); + void svm_cross_validation(const struct svm_problem *prob, const struct svm_parameter *param, int nr_fold, double *target); + + int svm_save_model(const char *model_file_name, const struct svm_model *model); + struct svm_model *svm_load_model(const char *model_file_name); + + int svm_get_svm_type(const struct svm_model *model); + int svm_get_nr_class(const struct svm_model *model); + void svm_get_labels(const struct svm_model *model, int *label); + void svm_get_sv_indices(const struct svm_model *model, int *sv_indices); + int svm_get_nr_sv(const struct svm_model *model); + double svm_get_svr_probability(const struct svm_model *model); + + double svm_predict_values(const struct svm_model *model, const struct svm_node *x, double* dec_values); + double svm_predict(const struct svm_model *model, const struct svm_node *x); + double svm_predict_probability(const struct svm_model *model, const struct svm_node *x, double* prob_estimates); + + void svm_free_model_content(struct svm_model *model_ptr); + void svm_free_and_destroy_model(struct svm_model **model_ptr_ptr); + void svm_destroy_param(struct svm_parameter *param); + + const char *svm_check_parameter(const struct svm_problem *prob, const struct svm_parameter *param); + int svm_check_probability_model(const struct svm_model *model); + + void svm_set_print_string_function(void (*print_func)(const char *)); + +#ifdef __cplusplus + } +#endif + +} + +#endif /* _LIBSVM_H */ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/.gitignore b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/.gitignore new file mode 100644 index 0000000..5263c74 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/.gitignore @@ -0,0 +1,27 @@ +ide/xcode/build +ide/xcode/xmm-lib.xcodeproj/project.xcworkspace +ide/xcode/xmm-lib.xcodeproj/xcuserdata +dependencies/libjson/ide/build +dependencies/libjson/ide/json.xcodeproj/xcuserdata +dependencies/libjson/ide/json.xcodeproj/project.xcworkspace/xcuserdata +dependencies/libjson/Makefile +doc/html +doc/xml +bin +Makefile +python/Makefile +CMakeFiles +python/bin +python/xmm.py +python/xmm_doc.i +python/xmmPYTHON_wrap.cxx +python/bin +python/_build_tmp +*CMakeCache.txt +*cmake_install.cmake +*pyc +*.a +*.so +*.dylib +*.ipynb_checkpoints +cmake_clean.sh diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/CMakeLists.txt b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/CMakeLists.txt new file mode 100644 index 0000000..1d27bf0 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/CMakeLists.txt @@ -0,0 +1,111 @@ +cmake_minimum_required(VERSION 3.1.0 FATAL_ERROR) + +# Project declaration +project(xmm) + +include(CheckCXXCompilerFlag) +CHECK_CXX_COMPILER_FLAG("-std=c++11" COMPILER_SUPPORTS_CXX11) +CHECK_CXX_COMPILER_FLAG("-std=c++0x" COMPILER_SUPPORTS_CXX0X) +if(COMPILER_SUPPORTS_CXX11) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11") +elseif(COMPILER_SUPPORTS_CXX0X) + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++0x") +else() + message(STATUS "The compiler ${CMAKE_CXX_COMPILER} has no C++11 support. Please use a different C++ compiler.") +endif() + +# The version number. +set (xmm_VERSION_MAJOR 0) +set (xmm_VERSION_MINOR 1) + +# Compiler Flags +set(CMAKE_CXX_FLAGS_RELEASE "-O3 -DNDEBUG -fPIC") +set(CMAKE_CXX_FLAGS_DEBUG "-O0 -DJSON_DEBUG -fPIC") +if (NOT CMAKE_BUILD_TYPE) + message(STATUS "No build type selected, default to Release") + set(CMAKE_BUILD_TYPE "Release") +endif() + +# Include JSON +include_directories(./dependencies/jsoncpp/include) +include_directories(./dependencies/jsoncpp/src) + +# Declare library +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/core/common) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/core/distributions) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/core/model) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/core/trainingset) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/models/gmm) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/models/hmm) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/src/models/kmeans) + +set(LIBRARY_OUTPUT_PATH ${CMAKE_CURRENT_SOURCE_DIR}/bin/${CMAKE_BUILD_TYPE}) +add_definitions(-DUSE_PTHREAD) + +file( + GLOB_RECURSE + xmm_source_files + src/* +) + +file( + GLOB_RECURSE + jsoncpp_source_files + dependencies/jsoncpp/src/* +) + +add_library( + xmm + STATIC + ${xmm_source_files} ${jsoncpp_source_files} +) + +# Declare Unit tests +set(EXECUTABLE_OUTPUT_PATH bin/${CMAKE_BUILD_TYPE}) +include_directories(${CMAKE_CURRENT_SOURCE_DIR}/dependencies/catch) + +# message(${LINK_DIRECTORIES}) + +file( + GLOB_RECURSE + xmm_test_files + test/* +) + +add_executable( + tests + EXCLUDE_FROM_ALL + ${xmm_test_files} +) + +# linking configuration +target_link_libraries( + tests + xmm +) + +set_target_properties(tests PROPERTIES OUTPUT_NAME xmm_testing) +add_custom_command(TARGET tests POST_BUILD COMMAND ${EXECUTABLE_OUTPUT_PATH}/xmm_testing) + +# add a target to generate API documentation with Doxygen +find_package(Doxygen) + +find_program(DOTPATH dot) +if(${DOTPATH} STREQUAL "DOTPATH-NOTFOUND") + set(HAS_DOT "") +else(${DOTPATH} STREQUAL "DOTPATH-NOTFOUND") + set(HAS_DOT "-dot") +endif(${DOTPATH} STREQUAL "DOTPATH-NOTFOUND") + +if(DOXYGEN_FOUND) + add_custom_target(doc + COMMAND ${DOXYGEN_EXECUTABLE} ${CMAKE_CURRENT_SOURCE_DIR}/doc/Doxyfile${HAS_DOT} + DEPENDS ${tracking_source_files} + WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/doc/ + COMMENT "Generating API documentation with Doxygen" VERBATIM) +else(DOXYGEN_FOUND) + message(STATUS "Doxygen not found, doc will not be included in the Makefile") +endif(DOXYGEN_FOUND) + +set_directory_properties(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${CMAKE_CURRENT_SOURCE_DIR}/doc/html") diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/LICENSE b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/LICENSE new file mode 100644 index 0000000..6b156fe --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/LICENSE @@ -0,0 +1,675 @@ +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>. + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/catch/catch.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/catch/catch.hpp new file mode 100644 index 0000000..5b616a2 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/catch/catch.hpp @@ -0,0 +1,9427 @@ +/* + * CATCH v1.1 build 1 (master branch) + * Generated: 2015-03-27 18:00:16.346230 + * ---------------------------------------------------------- + * This file has been merged from multiple headers. Please don't edit it directly + * Copyright (c) 2012 Two Blue Cubes Ltd. All rights reserved. + * + * Distributed under the Boost Software License, Version 1.0. (See accompanying + * file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) + */ +#ifndef TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED +#define TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED + +#define TWOBLUECUBES_CATCH_HPP_INCLUDED + +// #included from: internal/catch_suppress_warnings.h + +#define TWOBLUECUBES_CATCH_SUPPRESS_WARNINGS_H_INCLUDED + +#ifdef __clang__ +# ifdef __ICC // icpc defines the __clang__ macro +# pragma warning(push) +# pragma warning(disable: 161 1682) +# else // __ICC +# pragma clang diagnostic ignored "-Wglobal-constructors" +# pragma clang diagnostic ignored "-Wvariadic-macros" +# pragma clang diagnostic ignored "-Wc99-extensions" +# pragma clang diagnostic ignored "-Wunused-variable" +# pragma clang diagnostic push +# pragma clang diagnostic ignored "-Wpadded" +# pragma clang diagnostic ignored "-Wc++98-compat" +# pragma clang diagnostic ignored "-Wc++98-compat-pedantic" +# endif +#elif defined __GNUC__ +# pragma GCC diagnostic ignored "-Wvariadic-macros" +# pragma GCC diagnostic ignored "-Wunused-variable" +# pragma GCC diagnostic push +# pragma GCC diagnostic ignored "-Wpadded" +#endif + +#if defined(CATCH_CONFIG_MAIN) || defined(CATCH_CONFIG_RUNNER) +# define CATCH_IMPL +#endif + +#ifdef CATCH_IMPL +# ifndef CLARA_CONFIG_MAIN +# define CLARA_CONFIG_MAIN_NOT_DEFINED +# define CLARA_CONFIG_MAIN +# endif +#endif + +// #included from: internal/catch_notimplemented_exception.h +#define TWOBLUECUBES_CATCH_NOTIMPLEMENTED_EXCEPTION_H_INCLUDED + +// #included from: catch_common.h +#define TWOBLUECUBES_CATCH_COMMON_H_INCLUDED + +#define INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) name##line +#define INTERNAL_CATCH_UNIQUE_NAME_LINE( name, line ) INTERNAL_CATCH_UNIQUE_NAME_LINE2( name, line ) +#define INTERNAL_CATCH_UNIQUE_NAME( name ) INTERNAL_CATCH_UNIQUE_NAME_LINE( name, __LINE__ ) + +#define INTERNAL_CATCH_STRINGIFY2( expr ) #expr +#define INTERNAL_CATCH_STRINGIFY( expr ) INTERNAL_CATCH_STRINGIFY2( expr ) + +#include <sstream> +#include <stdexcept> +#include <algorithm> + +// #included from: catch_compiler_capabilities.h +#define TWOBLUECUBES_CATCH_COMPILER_CAPABILITIES_HPP_INCLUDED + +// Much of the following code is based on Boost (1.53) + +#ifdef __clang__ + +# if __has_feature(cxx_nullptr) +# define CATCH_CONFIG_CPP11_NULLPTR +# endif + +# if __has_feature(cxx_noexcept) +# define CATCH_CONFIG_CPP11_NOEXCEPT +# endif + +#endif // __clang__ + +//////////////////////////////////////////////////////////////////////////////// +// Borland +#ifdef __BORLANDC__ + +#if (__BORLANDC__ > 0x582 ) +//#define CATCH_CONFIG_SFINAE // Not confirmed +#endif + +#endif // __BORLANDC__ + +//////////////////////////////////////////////////////////////////////////////// +// EDG +#ifdef __EDG_VERSION__ + +#if (__EDG_VERSION__ > 238 ) +//#define CATCH_CONFIG_SFINAE // Not confirmed +#endif + +#endif // __EDG_VERSION__ + +//////////////////////////////////////////////////////////////////////////////// +// Digital Mars +#ifdef __DMC__ + +#if (__DMC__ > 0x840 ) +//#define CATCH_CONFIG_SFINAE // Not confirmed +#endif + +#endif // __DMC__ + +//////////////////////////////////////////////////////////////////////////////// +// GCC +#ifdef __GNUC__ + +#if __GNUC__ < 3 + +#if (__GNUC_MINOR__ >= 96 ) +//#define CATCH_CONFIG_SFINAE +#endif + +#elif __GNUC__ >= 3 + +// #define CATCH_CONFIG_SFINAE // Taking this out completely for now + +#endif // __GNUC__ < 3 + +#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 6 && defined(__GXX_EXPERIMENTAL_CXX0X__) ) + +#define CATCH_CONFIG_CPP11_NULLPTR +#endif + +#endif // __GNUC__ + +//////////////////////////////////////////////////////////////////////////////// +// Visual C++ +#ifdef _MSC_VER + +#if (_MSC_VER >= 1600) +#define CATCH_CONFIG_CPP11_NULLPTR +#endif + +#if (_MSC_VER >= 1310 ) // (VC++ 7.0+) +//#define CATCH_CONFIG_SFINAE // Not confirmed +#endif + +#endif // _MSC_VER + +// Use variadic macros if the compiler supports them +#if ( defined _MSC_VER && _MSC_VER > 1400 && !defined __EDGE__) || \ + ( defined __WAVE__ && __WAVE_HAS_VARIADICS ) || \ + ( defined __GNUC__ && __GNUC__ >= 3 ) || \ + ( !defined __cplusplus && __STDC_VERSION__ >= 199901L || __cplusplus >= 201103L ) + +#ifndef CATCH_CONFIG_NO_VARIADIC_MACROS +#define CATCH_CONFIG_VARIADIC_MACROS +#endif + +#endif + +//////////////////////////////////////////////////////////////////////////////// +// C++ language feature support + +// detect language version: +#if (__cplusplus == 201103L) +# define CATCH_CPP11 +# define CATCH_CPP11_OR_GREATER +#elif (__cplusplus >= 201103L) +# define CATCH_CPP11_OR_GREATER +#endif + +// noexcept support: +#if defined(CATCH_CONFIG_CPP11_NOEXCEPT) && !defined(CATCH_NOEXCEPT) +# define CATCH_NOEXCEPT noexcept +# define CATCH_NOEXCEPT_IS(x) noexcept(x) +#else +# define CATCH_NOEXCEPT throw() +# define CATCH_NOEXCEPT_IS(x) +#endif + +namespace Catch { + + class NonCopyable { +#ifdef CATCH_CPP11_OR_GREATER + NonCopyable( NonCopyable const& ) = delete; + NonCopyable( NonCopyable && ) = delete; + NonCopyable& operator = ( NonCopyable const& ) = delete; + NonCopyable& operator = ( NonCopyable && ) = delete; +#else + NonCopyable( NonCopyable const& info ); + NonCopyable& operator = ( NonCopyable const& ); +#endif + + protected: + NonCopyable() {} + virtual ~NonCopyable(); + }; + + class SafeBool { + public: + typedef void (SafeBool::*type)() const; + + static type makeSafe( bool value ) { + return value ? &SafeBool::trueValue : 0; + } + private: + void trueValue() const {} + }; + + template<typename ContainerT> + inline void deleteAll( ContainerT& container ) { + typename ContainerT::const_iterator it = container.begin(); + typename ContainerT::const_iterator itEnd = container.end(); + for(; it != itEnd; ++it ) + delete *it; + } + template<typename AssociativeContainerT> + inline void deleteAllValues( AssociativeContainerT& container ) { + typename AssociativeContainerT::const_iterator it = container.begin(); + typename AssociativeContainerT::const_iterator itEnd = container.end(); + for(; it != itEnd; ++it ) + delete it->second; + } + + bool startsWith( std::string const& s, std::string const& prefix ); + bool endsWith( std::string const& s, std::string const& suffix ); + bool contains( std::string const& s, std::string const& infix ); + void toLowerInPlace( std::string& s ); + std::string toLower( std::string const& s ); + std::string trim( std::string const& str ); + bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ); + + struct pluralise { + pluralise( std::size_t count, std::string const& label ); + + friend std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser ); + + std::size_t m_count; + std::string m_label; + }; + + struct SourceLineInfo { + + SourceLineInfo(); + SourceLineInfo( char const* _file, std::size_t _line ); + SourceLineInfo( SourceLineInfo const& other ); +# ifdef CATCH_CPP11_OR_GREATER + SourceLineInfo( SourceLineInfo && ) = default; + SourceLineInfo& operator = ( SourceLineInfo const& ) = default; + SourceLineInfo& operator = ( SourceLineInfo && ) = default; +# endif + bool empty() const; + bool operator == ( SourceLineInfo const& other ) const; + bool operator < ( SourceLineInfo const& other ) const; + + std::string file; + std::size_t line; + }; + + std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ); + + // This is just here to avoid compiler warnings with macro constants and boolean literals + inline bool isTrue( bool value ){ return value; } + inline bool alwaysTrue() { return true; } + inline bool alwaysFalse() { return false; } + + void throwLogicError( std::string const& message, SourceLineInfo const& locationInfo ); + + // Use this in variadic streaming macros to allow + // >> +StreamEndStop + // as well as + // >> stuff +StreamEndStop + struct StreamEndStop { + std::string operator+() { + return std::string(); + } + }; + template<typename T> + T const& operator + ( T const& value, StreamEndStop ) { + return value; + } +} + +#define CATCH_INTERNAL_LINEINFO ::Catch::SourceLineInfo( __FILE__, static_cast<std::size_t>( __LINE__ ) ) +#define CATCH_INTERNAL_ERROR( msg ) ::Catch::throwLogicError( msg, CATCH_INTERNAL_LINEINFO ); + +#include <ostream> + +namespace Catch { + + class NotImplementedException : public std::exception + { + public: + NotImplementedException( SourceLineInfo const& lineInfo ); + NotImplementedException( NotImplementedException const& ) {} + + virtual ~NotImplementedException() CATCH_NOEXCEPT {} + + virtual const char* what() const CATCH_NOEXCEPT; + + private: + std::string m_what; + SourceLineInfo m_lineInfo; + }; + +} // end namespace Catch + +/////////////////////////////////////////////////////////////////////////////// +#define CATCH_NOT_IMPLEMENTED throw Catch::NotImplementedException( CATCH_INTERNAL_LINEINFO ) + +// #included from: internal/catch_context.h +#define TWOBLUECUBES_CATCH_CONTEXT_H_INCLUDED + +// #included from: catch_interfaces_generators.h +#define TWOBLUECUBES_CATCH_INTERFACES_GENERATORS_H_INCLUDED + +#include <string> + +namespace Catch { + + struct IGeneratorInfo { + virtual ~IGeneratorInfo(); + virtual bool moveNext() = 0; + virtual std::size_t getCurrentIndex() const = 0; + }; + + struct IGeneratorsForTest { + virtual ~IGeneratorsForTest(); + + virtual IGeneratorInfo& getGeneratorInfo( std::string const& fileInfo, std::size_t size ) = 0; + virtual bool moveNext() = 0; + }; + + IGeneratorsForTest* createGeneratorsForTest(); + +} // end namespace Catch + +// #included from: catch_ptr.hpp +#define TWOBLUECUBES_CATCH_PTR_HPP_INCLUDED + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wpadded" +#endif + +namespace Catch { + + // An intrusive reference counting smart pointer. + // T must implement addRef() and release() methods + // typically implementing the IShared interface + template<typename T> + class Ptr { + public: + Ptr() : m_p( NULL ){} + Ptr( T* p ) : m_p( p ){ + if( m_p ) + m_p->addRef(); + } + Ptr( Ptr const& other ) : m_p( other.m_p ){ + if( m_p ) + m_p->addRef(); + } + ~Ptr(){ + if( m_p ) + m_p->release(); + } + void reset() { + if( m_p ) + m_p->release(); + m_p = NULL; + } + Ptr& operator = ( T* p ){ + Ptr temp( p ); + swap( temp ); + return *this; + } + Ptr& operator = ( Ptr const& other ){ + Ptr temp( other ); + swap( temp ); + return *this; + } + void swap( Ptr& other ) { std::swap( m_p, other.m_p ); } + T* get() { return m_p; } + const T* get() const{ return m_p; } + T& operator*() const { return *m_p; } + T* operator->() const { return m_p; } + bool operator !() const { return m_p == NULL; } + operator SafeBool::type() const { return SafeBool::makeSafe( m_p != NULL ); } + + private: + T* m_p; + }; + + struct IShared : NonCopyable { + virtual ~IShared(); + virtual void addRef() const = 0; + virtual void release() const = 0; + }; + + template<typename T = IShared> + struct SharedImpl : T { + + SharedImpl() : m_rc( 0 ){} + + virtual void addRef() const { + ++m_rc; + } + virtual void release() const { + if( --m_rc == 0 ) + delete this; + } + + mutable unsigned int m_rc; + }; + +} // end namespace Catch + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#include <memory> +#include <vector> +#include <stdlib.h> + +namespace Catch { + + class TestCase; + class Stream; + struct IResultCapture; + struct IRunner; + struct IGeneratorsForTest; + struct IConfig; + + struct IContext + { + virtual ~IContext(); + + virtual IResultCapture* getResultCapture() = 0; + virtual IRunner* getRunner() = 0; + virtual size_t getGeneratorIndex( std::string const& fileInfo, size_t totalSize ) = 0; + virtual bool advanceGeneratorsForCurrentTest() = 0; + virtual Ptr<IConfig const> getConfig() const = 0; + }; + + struct IMutableContext : IContext + { + virtual ~IMutableContext(); + virtual void setResultCapture( IResultCapture* resultCapture ) = 0; + virtual void setRunner( IRunner* runner ) = 0; + virtual void setConfig( Ptr<IConfig const> const& config ) = 0; + }; + + IContext& getCurrentContext(); + IMutableContext& getCurrentMutableContext(); + void cleanUpContext(); + Stream createStream( std::string const& streamName ); + +} + +// #included from: internal/catch_test_registry.hpp +#define TWOBLUECUBES_CATCH_TEST_REGISTRY_HPP_INCLUDED + +// #included from: catch_interfaces_testcase.h +#define TWOBLUECUBES_CATCH_INTERFACES_TESTCASE_H_INCLUDED + +#include <vector> + +namespace Catch { + + class TestSpec; + + struct ITestCase : IShared { + virtual void invoke () const = 0; + protected: + virtual ~ITestCase(); + }; + + class TestCase; + struct IConfig; + + struct ITestCaseRegistry { + virtual ~ITestCaseRegistry(); + virtual std::vector<TestCase> const& getAllTests() const = 0; + virtual void getFilteredTests( TestSpec const& testSpec, IConfig const& config, std::vector<TestCase>& matchingTestCases, bool negated = false ) const = 0; + + }; +} + +namespace Catch { + +template<typename C> +class MethodTestCase : public SharedImpl<ITestCase> { + +public: + MethodTestCase( void (C::*method)() ) : m_method( method ) {} + + virtual void invoke() const { + C obj; + (obj.*m_method)(); + } + +private: + virtual ~MethodTestCase() {} + + void (C::*m_method)(); +}; + +typedef void(*TestFunction)(); + +struct NameAndDesc { + NameAndDesc( const char* _name = "", const char* _description= "" ) + : name( _name ), description( _description ) + {} + + const char* name; + const char* description; +}; + +struct AutoReg { + + AutoReg( TestFunction function, + SourceLineInfo const& lineInfo, + NameAndDesc const& nameAndDesc ); + + template<typename C> + AutoReg( void (C::*method)(), + char const* className, + NameAndDesc const& nameAndDesc, + SourceLineInfo const& lineInfo ) { + registerTestCase( new MethodTestCase<C>( method ), + className, + nameAndDesc, + lineInfo ); + } + + void registerTestCase( ITestCase* testCase, + char const* className, + NameAndDesc const& nameAndDesc, + SourceLineInfo const& lineInfo ); + + ~AutoReg(); + +private: + AutoReg( AutoReg const& ); + void operator= ( AutoReg const& ); +}; + +} // end namespace Catch + +#ifdef CATCH_CONFIG_VARIADIC_MACROS + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_TESTCASE( ... ) \ + static void INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )(); \ + namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( __VA_ARGS__ ) ); }\ + static void INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )() + + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, ... ) \ + namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &QualifiedMethod, "&" #QualifiedMethod, Catch::NameAndDesc( __VA_ARGS__ ), CATCH_INTERNAL_LINEINFO ); } + + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, ... )\ + namespace{ \ + struct INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ) : ClassName{ \ + void test(); \ + }; \ + Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( &INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )::test, #ClassName, Catch::NameAndDesc( __VA_ARGS__ ), CATCH_INTERNAL_LINEINFO ); \ + } \ + void INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )::test() + +#else + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_TESTCASE( Name, Desc ) \ + static void INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )(); \ + namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ), CATCH_INTERNAL_LINEINFO, Catch::NameAndDesc( Name, Desc ) ); }\ + static void INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )() + + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_METHOD_AS_TEST_CASE( QualifiedMethod, Name, Desc ) \ + namespace{ Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar )( &QualifiedMethod, "&" #QualifiedMethod, Catch::NameAndDesc( Name, Desc ), CATCH_INTERNAL_LINEINFO ); } + + /////////////////////////////////////////////////////////////////////////////// + #define INTERNAL_CATCH_TEST_CASE_METHOD( ClassName, TestName, Desc )\ + namespace{ \ + struct INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ ) : ClassName{ \ + void test(); \ + }; \ + Catch::AutoReg INTERNAL_CATCH_UNIQUE_NAME( autoRegistrar ) ( &INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )::test, #ClassName, Catch::NameAndDesc( TestName, Desc ), CATCH_INTERNAL_LINEINFO ); \ + } \ + void INTERNAL_CATCH_UNIQUE_NAME( ____C_A_T_C_H____T_E_S_T____ )::test() + +#endif + +// #included from: internal/catch_capture.hpp +#define TWOBLUECUBES_CATCH_CAPTURE_HPP_INCLUDED + +// #included from: catch_result_builder.h +#define TWOBLUECUBES_CATCH_RESULT_BUILDER_H_INCLUDED + +// #included from: catch_result_type.h +#define TWOBLUECUBES_CATCH_RESULT_TYPE_H_INCLUDED + +namespace Catch { + + // ResultWas::OfType enum + struct ResultWas { enum OfType { + Unknown = -1, + Ok = 0, + Info = 1, + Warning = 2, + + FailureBit = 0x10, + + ExpressionFailed = FailureBit | 1, + ExplicitFailure = FailureBit | 2, + + Exception = 0x100 | FailureBit, + + ThrewException = Exception | 1, + DidntThrowException = Exception | 2, + + FatalErrorCondition = 0x200 | FailureBit + + }; }; + + inline bool isOk( ResultWas::OfType resultType ) { + return ( resultType & ResultWas::FailureBit ) == 0; + } + inline bool isJustInfo( int flags ) { + return flags == ResultWas::Info; + } + + // ResultDisposition::Flags enum + struct ResultDisposition { enum Flags { + Normal = 0x00, + + ContinueOnFailure = 0x01, // Failures fail test, but execution continues + FalseTest = 0x02, // Prefix expression with ! + SuppressFail = 0x04 // Failures are reported but do not fail the test + }; }; + + inline ResultDisposition::Flags operator | ( ResultDisposition::Flags lhs, ResultDisposition::Flags rhs ) { + return static_cast<ResultDisposition::Flags>( static_cast<int>( lhs ) | static_cast<int>( rhs ) ); + } + + inline bool shouldContinueOnFailure( int flags ) { return ( flags & ResultDisposition::ContinueOnFailure ) != 0; } + inline bool isFalseTest( int flags ) { return ( flags & ResultDisposition::FalseTest ) != 0; } + inline bool shouldSuppressFailure( int flags ) { return ( flags & ResultDisposition::SuppressFail ) != 0; } + +} // end namespace Catch + +// #included from: catch_assertionresult.h +#define TWOBLUECUBES_CATCH_ASSERTIONRESULT_H_INCLUDED + +#include <string> + +namespace Catch { + + struct AssertionInfo + { + AssertionInfo() {} + AssertionInfo( std::string const& _macroName, + SourceLineInfo const& _lineInfo, + std::string const& _capturedExpression, + ResultDisposition::Flags _resultDisposition ); + + std::string macroName; + SourceLineInfo lineInfo; + std::string capturedExpression; + ResultDisposition::Flags resultDisposition; + }; + + struct AssertionResultData + { + AssertionResultData() : resultType( ResultWas::Unknown ) {} + + std::string reconstructedExpression; + std::string message; + ResultWas::OfType resultType; + }; + + class AssertionResult { + public: + AssertionResult(); + AssertionResult( AssertionInfo const& info, AssertionResultData const& data ); + ~AssertionResult(); +# ifdef CATCH_CPP11_OR_GREATER + AssertionResult( AssertionResult const& ) = default; + AssertionResult( AssertionResult && ) = default; + AssertionResult& operator = ( AssertionResult const& ) = default; + AssertionResult& operator = ( AssertionResult && ) = default; +# endif + + bool isOk() const; + bool succeeded() const; + ResultWas::OfType getResultType() const; + bool hasExpression() const; + bool hasMessage() const; + std::string getExpression() const; + std::string getExpressionInMacro() const; + bool hasExpandedExpression() const; + std::string getExpandedExpression() const; + std::string getMessage() const; + SourceLineInfo getSourceInfo() const; + std::string getTestMacroName() const; + + protected: + AssertionInfo m_info; + AssertionResultData m_resultData; + }; + +} // end namespace Catch + +namespace Catch { + + struct TestFailureException{}; + + template<typename T> class ExpressionLhs; + + struct STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison; + + struct CopyableStream { + CopyableStream() {} + CopyableStream( CopyableStream const& other ) { + oss << other.oss.str(); + } + CopyableStream& operator=( CopyableStream const& other ) { + oss.str(""); + oss << other.oss.str(); + return *this; + } + std::ostringstream oss; + }; + + class ResultBuilder { + public: + ResultBuilder( char const* macroName, + SourceLineInfo const& lineInfo, + char const* capturedExpression, + ResultDisposition::Flags resultDisposition ); + + template<typename T> + ExpressionLhs<T const&> operator->* ( T const& operand ); + ExpressionLhs<bool> operator->* ( bool value ); + + template<typename T> + ResultBuilder& operator << ( T const& value ) { + m_stream.oss << value; + return *this; + } + + template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && ( RhsT const& ); + template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || ( RhsT const& ); + + ResultBuilder& setResultType( ResultWas::OfType result ); + ResultBuilder& setResultType( bool result ); + ResultBuilder& setLhs( std::string const& lhs ); + ResultBuilder& setRhs( std::string const& rhs ); + ResultBuilder& setOp( std::string const& op ); + + void endExpression(); + + std::string reconstructExpression() const; + AssertionResult build() const; + + void useActiveException( ResultDisposition::Flags resultDisposition = ResultDisposition::Normal ); + void captureResult( ResultWas::OfType resultType ); + void captureExpression(); + void react(); + bool shouldDebugBreak() const; + bool allowThrows() const; + + private: + AssertionInfo m_assertionInfo; + AssertionResultData m_data; + struct ExprComponents { + ExprComponents() : testFalse( false ) {} + bool testFalse; + std::string lhs, rhs, op; + } m_exprComponents; + CopyableStream m_stream; + + bool m_shouldDebugBreak; + bool m_shouldThrow; + }; + +} // namespace Catch + +// Include after due to circular dependency: +// #included from: catch_expression_lhs.hpp +#define TWOBLUECUBES_CATCH_EXPRESSION_LHS_HPP_INCLUDED + +// #included from: catch_evaluate.hpp +#define TWOBLUECUBES_CATCH_EVALUATE_HPP_INCLUDED + +#ifdef _MSC_VER +#pragma warning(push) +#pragma warning(disable:4389) // '==' : signed/unsigned mismatch +#endif + +#include <cstddef> + +namespace Catch { +namespace Internal { + + enum Operator { + IsEqualTo, + IsNotEqualTo, + IsLessThan, + IsGreaterThan, + IsLessThanOrEqualTo, + IsGreaterThanOrEqualTo + }; + + template<Operator Op> struct OperatorTraits { static const char* getName(){ return "*error*"; } }; + template<> struct OperatorTraits<IsEqualTo> { static const char* getName(){ return "=="; } }; + template<> struct OperatorTraits<IsNotEqualTo> { static const char* getName(){ return "!="; } }; + template<> struct OperatorTraits<IsLessThan> { static const char* getName(){ return "<"; } }; + template<> struct OperatorTraits<IsGreaterThan> { static const char* getName(){ return ">"; } }; + template<> struct OperatorTraits<IsLessThanOrEqualTo> { static const char* getName(){ return "<="; } }; + template<> struct OperatorTraits<IsGreaterThanOrEqualTo>{ static const char* getName(){ return ">="; } }; + + template<typename T> + inline T& opCast(T const& t) { return const_cast<T&>(t); } + +// nullptr_t support based on pull request #154 from Konstantin Baumann +#ifdef CATCH_CONFIG_CPP11_NULLPTR + inline std::nullptr_t opCast(std::nullptr_t) { return nullptr; } +#endif // CATCH_CONFIG_CPP11_NULLPTR + + // So the compare overloads can be operator agnostic we convey the operator as a template + // enum, which is used to specialise an Evaluator for doing the comparison. + template<typename T1, typename T2, Operator Op> + class Evaluator{}; + + template<typename T1, typename T2> + struct Evaluator<T1, T2, IsEqualTo> { + static bool evaluate( T1 const& lhs, T2 const& rhs) { + return opCast( lhs ) == opCast( rhs ); + } + }; + template<typename T1, typename T2> + struct Evaluator<T1, T2, IsNotEqualTo> { + static bool evaluate( T1 const& lhs, T2 const& rhs ) { + return opCast( lhs ) != opCast( rhs ); + } + }; + template<typename T1, typename T2> + struct Evaluator<T1, T2, IsLessThan> { + static bool evaluate( T1 const& lhs, T2 const& rhs ) { + return opCast( lhs ) < opCast( rhs ); + } + }; + template<typename T1, typename T2> + struct Evaluator<T1, T2, IsGreaterThan> { + static bool evaluate( T1 const& lhs, T2 const& rhs ) { + return opCast( lhs ) > opCast( rhs ); + } + }; + template<typename T1, typename T2> + struct Evaluator<T1, T2, IsGreaterThanOrEqualTo> { + static bool evaluate( T1 const& lhs, T2 const& rhs ) { + return opCast( lhs ) >= opCast( rhs ); + } + }; + template<typename T1, typename T2> + struct Evaluator<T1, T2, IsLessThanOrEqualTo> { + static bool evaluate( T1 const& lhs, T2 const& rhs ) { + return opCast( lhs ) <= opCast( rhs ); + } + }; + + template<Operator Op, typename T1, typename T2> + bool applyEvaluator( T1 const& lhs, T2 const& rhs ) { + return Evaluator<T1, T2, Op>::evaluate( lhs, rhs ); + } + + // This level of indirection allows us to specialise for integer types + // to avoid signed/ unsigned warnings + + // "base" overload + template<Operator Op, typename T1, typename T2> + bool compare( T1 const& lhs, T2 const& rhs ) { + return Evaluator<T1, T2, Op>::evaluate( lhs, rhs ); + } + + // unsigned X to int + template<Operator Op> bool compare( unsigned int lhs, int rhs ) { + return applyEvaluator<Op>( lhs, static_cast<unsigned int>( rhs ) ); + } + template<Operator Op> bool compare( unsigned long lhs, int rhs ) { + return applyEvaluator<Op>( lhs, static_cast<unsigned int>( rhs ) ); + } + template<Operator Op> bool compare( unsigned char lhs, int rhs ) { + return applyEvaluator<Op>( lhs, static_cast<unsigned int>( rhs ) ); + } + + // unsigned X to long + template<Operator Op> bool compare( unsigned int lhs, long rhs ) { + return applyEvaluator<Op>( lhs, static_cast<unsigned long>( rhs ) ); + } + template<Operator Op> bool compare( unsigned long lhs, long rhs ) { + return applyEvaluator<Op>( lhs, static_cast<unsigned long>( rhs ) ); + } + template<Operator Op> bool compare( unsigned char lhs, long rhs ) { + return applyEvaluator<Op>( lhs, static_cast<unsigned long>( rhs ) ); + } + + // int to unsigned X + template<Operator Op> bool compare( int lhs, unsigned int rhs ) { + return applyEvaluator<Op>( static_cast<unsigned int>( lhs ), rhs ); + } + template<Operator Op> bool compare( int lhs, unsigned long rhs ) { + return applyEvaluator<Op>( static_cast<unsigned int>( lhs ), rhs ); + } + template<Operator Op> bool compare( int lhs, unsigned char rhs ) { + return applyEvaluator<Op>( static_cast<unsigned int>( lhs ), rhs ); + } + + // long to unsigned X + template<Operator Op> bool compare( long lhs, unsigned int rhs ) { + return applyEvaluator<Op>( static_cast<unsigned long>( lhs ), rhs ); + } + template<Operator Op> bool compare( long lhs, unsigned long rhs ) { + return applyEvaluator<Op>( static_cast<unsigned long>( lhs ), rhs ); + } + template<Operator Op> bool compare( long lhs, unsigned char rhs ) { + return applyEvaluator<Op>( static_cast<unsigned long>( lhs ), rhs ); + } + + // pointer to long (when comparing against NULL) + template<Operator Op, typename T> bool compare( long lhs, T* rhs ) { + return Evaluator<T*, T*, Op>::evaluate( reinterpret_cast<T*>( lhs ), rhs ); + } + template<Operator Op, typename T> bool compare( T* lhs, long rhs ) { + return Evaluator<T*, T*, Op>::evaluate( lhs, reinterpret_cast<T*>( rhs ) ); + } + + // pointer to int (when comparing against NULL) + template<Operator Op, typename T> bool compare( int lhs, T* rhs ) { + return Evaluator<T*, T*, Op>::evaluate( reinterpret_cast<T*>( lhs ), rhs ); + } + template<Operator Op, typename T> bool compare( T* lhs, int rhs ) { + return Evaluator<T*, T*, Op>::evaluate( lhs, reinterpret_cast<T*>( rhs ) ); + } + +#ifdef CATCH_CONFIG_CPP11_NULLPTR + // pointer to nullptr_t (when comparing against nullptr) + template<Operator Op, typename T> bool compare( std::nullptr_t, T* rhs ) { + return Evaluator<T*, T*, Op>::evaluate( NULL, rhs ); + } + template<Operator Op, typename T> bool compare( T* lhs, std::nullptr_t ) { + return Evaluator<T*, T*, Op>::evaluate( lhs, NULL ); + } +#endif // CATCH_CONFIG_CPP11_NULLPTR + +} // end of namespace Internal +} // end of namespace Catch + +#ifdef _MSC_VER +#pragma warning(pop) +#endif + +// #included from: catch_tostring.h +#define TWOBLUECUBES_CATCH_TOSTRING_H_INCLUDED + +// #included from: catch_sfinae.hpp +#define TWOBLUECUBES_CATCH_SFINAE_HPP_INCLUDED + +// Try to detect if the current compiler supports SFINAE + +namespace Catch { + + struct TrueType { + static const bool value = true; + typedef void Enable; + char sizer[1]; + }; + struct FalseType { + static const bool value = false; + typedef void Disable; + char sizer[2]; + }; + +#ifdef CATCH_CONFIG_SFINAE + + template<bool> struct NotABooleanExpression; + + template<bool c> struct If : NotABooleanExpression<c> {}; + template<> struct If<true> : TrueType {}; + template<> struct If<false> : FalseType {}; + + template<int size> struct SizedIf; + template<> struct SizedIf<sizeof(TrueType)> : TrueType {}; + template<> struct SizedIf<sizeof(FalseType)> : FalseType {}; + +#endif // CATCH_CONFIG_SFINAE + +} // end namespace Catch + +#include <sstream> +#include <iomanip> +#include <limits> +#include <vector> +#include <cstddef> + +#ifdef __OBJC__ +// #included from: catch_objc_arc.hpp +#define TWOBLUECUBES_CATCH_OBJC_ARC_HPP_INCLUDED + +#import <Foundation/Foundation.h> + +#ifdef __has_feature +#define CATCH_ARC_ENABLED __has_feature(objc_arc) +#else +#define CATCH_ARC_ENABLED 0 +#endif + +void arcSafeRelease( NSObject* obj ); +id performOptionalSelector( id obj, SEL sel ); + +#if !CATCH_ARC_ENABLED +inline void arcSafeRelease( NSObject* obj ) { + [obj release]; +} +inline id performOptionalSelector( id obj, SEL sel ) { + if( [obj respondsToSelector: sel] ) + return [obj performSelector: sel]; + return nil; +} +#define CATCH_UNSAFE_UNRETAINED +#define CATCH_ARC_STRONG +#else +inline void arcSafeRelease( NSObject* ){} +inline id performOptionalSelector( id obj, SEL sel ) { +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Warc-performSelector-leaks" +#endif + if( [obj respondsToSelector: sel] ) + return [obj performSelector: sel]; +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + return nil; +} +#define CATCH_UNSAFE_UNRETAINED __unsafe_unretained +#define CATCH_ARC_STRONG __strong +#endif + +#endif + +#ifdef CATCH_CPP11_OR_GREATER +#include <tuple> +#include <type_traits> +#endif + +namespace Catch { + +// Why we're here. +template<typename T> +std::string toString( T const& value ); + +// Built in overloads + +std::string toString( std::string const& value ); +std::string toString( std::wstring const& value ); +std::string toString( const char* const value ); +std::string toString( char* const value ); +std::string toString( const wchar_t* const value ); +std::string toString( wchar_t* const value ); +std::string toString( int value ); +std::string toString( unsigned long value ); +std::string toString( unsigned int value ); +std::string toString( const double value ); +std::string toString( const float value ); +std::string toString( bool value ); +std::string toString( char value ); +std::string toString( signed char value ); +std::string toString( unsigned char value ); + +#ifdef CATCH_CONFIG_CPP11_NULLPTR +std::string toString( std::nullptr_t ); +#endif + +#ifdef __OBJC__ + std::string toString( NSString const * const& nsstring ); + std::string toString( NSString * CATCH_ARC_STRONG const& nsstring ); + std::string toString( NSObject* const& nsObject ); +#endif + +namespace Detail { + + extern std::string unprintableString; + +// SFINAE is currently disabled by default for all compilers. +// If the non SFINAE version of IsStreamInsertable is ambiguous for you +// and your compiler supports SFINAE, try #defining CATCH_CONFIG_SFINAE +#ifdef CATCH_CONFIG_SFINAE + + template<typename T> + class IsStreamInsertableHelper { + template<int N> struct TrueIfSizeable : TrueType {}; + + template<typename T2> + static TrueIfSizeable<sizeof((*(std::ostream*)0) << *((T2 const*)0))> dummy(T2*); + static FalseType dummy(...); + + public: + typedef SizedIf<sizeof(dummy((T*)0))> type; + }; + + template<typename T> + struct IsStreamInsertable : IsStreamInsertableHelper<T>::type {}; + +#else + + struct BorgType { + template<typename T> BorgType( T const& ); + }; + + TrueType& testStreamable( std::ostream& ); + FalseType testStreamable( FalseType ); + + FalseType operator<<( std::ostream const&, BorgType const& ); + + template<typename T> + struct IsStreamInsertable { + static std::ostream &s; + static T const&t; + enum { value = sizeof( testStreamable(s << t) ) == sizeof( TrueType ) }; + }; + +#endif + +#if defined(CATCH_CPP11_OR_GREATER) + template<typename T, + bool IsEnum = std::is_enum<T>::value + > + struct EnumStringMaker + { + static std::string convert( T const& ) { return unprintableString; } + }; + + template<typename T> + struct EnumStringMaker<T,true> + { + static std::string convert( T const& v ) + { + return ::Catch::toString( + static_cast<typename std::underlying_type<T>::type>(v) + ); + } + }; +#endif + template<bool C> + struct StringMakerBase { +#if defined(CATCH_CPP11_OR_GREATER) + template<typename T> + static std::string convert( T const& v ) + { + return EnumStringMaker<T>::convert( v ); + } +#else + template<typename T> + static std::string convert( T const& ) { return unprintableString; } +#endif + }; + + template<> + struct StringMakerBase<true> { + template<typename T> + static std::string convert( T const& _value ) { + std::ostringstream oss; + oss << _value; + return oss.str(); + } + }; + + std::string rawMemoryToString( const void *object, std::size_t size ); + + template<typename T> + inline std::string rawMemoryToString( const T& object ) { + return rawMemoryToString( &object, sizeof(object) ); + } + +} // end namespace Detail + +template<typename T> +struct StringMaker : + Detail::StringMakerBase<Detail::IsStreamInsertable<T>::value> {}; + +template<typename T> +struct StringMaker<T*> { + template<typename U> + static std::string convert( U* p ) { + if( !p ) + return INTERNAL_CATCH_STRINGIFY( NULL ); + else + return Detail::rawMemoryToString( p ); + } +}; + +template<typename R, typename C> +struct StringMaker<R C::*> { + static std::string convert( R C::* p ) { + if( !p ) + return INTERNAL_CATCH_STRINGIFY( NULL ); + else + return Detail::rawMemoryToString( p ); + } +}; + +namespace Detail { + template<typename InputIterator> + std::string rangeToString( InputIterator first, InputIterator last ); +} + +//template<typename T, typename Allocator> +//struct StringMaker<std::vector<T, Allocator> > { +// static std::string convert( std::vector<T,Allocator> const& v ) { +// return Detail::rangeToString( v.begin(), v.end() ); +// } +//}; + +template<typename T, typename Allocator> +std::string toString( std::vector<T,Allocator> const& v ) { + return Detail::rangeToString( v.begin(), v.end() ); +} + +#ifdef CATCH_CPP11_OR_GREATER + +// toString for tuples +namespace TupleDetail { + template< + typename Tuple, + std::size_t N = 0, + bool = (N < std::tuple_size<Tuple>::value) + > + struct ElementPrinter { + static void print( const Tuple& tuple, std::ostream& os ) + { + os << ( N ? ", " : " " ) + << Catch::toString(std::get<N>(tuple)); + ElementPrinter<Tuple,N+1>::print(tuple,os); + } + }; + + template< + typename Tuple, + std::size_t N + > + struct ElementPrinter<Tuple,N,false> { + static void print( const Tuple&, std::ostream& ) {} + }; + +} + +template<typename ...Types> +struct StringMaker<std::tuple<Types...>> { + + static std::string convert( const std::tuple<Types...>& tuple ) + { + std::ostringstream os; + os << '{'; + TupleDetail::ElementPrinter<std::tuple<Types...>>::print( tuple, os ); + os << " }"; + return os.str(); + } +}; +#endif + +namespace Detail { + template<typename T> + std::string makeString( T const& value ) { + return StringMaker<T>::convert( value ); + } +} // end namespace Detail + +/// \brief converts any type to a string +/// +/// The default template forwards on to ostringstream - except when an +/// ostringstream overload does not exist - in which case it attempts to detect +/// that and writes {?}. +/// Overload (not specialise) this template for custom typs that you don't want +/// to provide an ostream overload for. +template<typename T> +std::string toString( T const& value ) { + return StringMaker<T>::convert( value ); +} + + namespace Detail { + template<typename InputIterator> + std::string rangeToString( InputIterator first, InputIterator last ) { + std::ostringstream oss; + oss << "{ "; + if( first != last ) { + oss << Catch::toString( *first ); + for( ++first ; first != last ; ++first ) + oss << ", " << Catch::toString( *first ); + } + oss << " }"; + return oss.str(); + } +} + +} // end namespace Catch + +namespace Catch { + +// Wraps the LHS of an expression and captures the operator and RHS (if any) - +// wrapping them all in a ResultBuilder object +template<typename T> +class ExpressionLhs { + ExpressionLhs& operator = ( ExpressionLhs const& ); +# ifdef CATCH_CPP11_OR_GREATER + ExpressionLhs& operator = ( ExpressionLhs && ) = delete; +# endif + +public: + ExpressionLhs( ResultBuilder& rb, T lhs ) : m_rb( rb ), m_lhs( lhs ) {} +# ifdef CATCH_CPP11_OR_GREATER + ExpressionLhs( ExpressionLhs const& ) = default; + ExpressionLhs( ExpressionLhs && ) = default; +# endif + + template<typename RhsT> + ResultBuilder& operator == ( RhsT const& rhs ) { + return captureExpression<Internal::IsEqualTo>( rhs ); + } + + template<typename RhsT> + ResultBuilder& operator != ( RhsT const& rhs ) { + return captureExpression<Internal::IsNotEqualTo>( rhs ); + } + + template<typename RhsT> + ResultBuilder& operator < ( RhsT const& rhs ) { + return captureExpression<Internal::IsLessThan>( rhs ); + } + + template<typename RhsT> + ResultBuilder& operator > ( RhsT const& rhs ) { + return captureExpression<Internal::IsGreaterThan>( rhs ); + } + + template<typename RhsT> + ResultBuilder& operator <= ( RhsT const& rhs ) { + return captureExpression<Internal::IsLessThanOrEqualTo>( rhs ); + } + + template<typename RhsT> + ResultBuilder& operator >= ( RhsT const& rhs ) { + return captureExpression<Internal::IsGreaterThanOrEqualTo>( rhs ); + } + + ResultBuilder& operator == ( bool rhs ) { + return captureExpression<Internal::IsEqualTo>( rhs ); + } + + ResultBuilder& operator != ( bool rhs ) { + return captureExpression<Internal::IsNotEqualTo>( rhs ); + } + + void endExpression() { + bool value = m_lhs ? true : false; + m_rb + .setLhs( Catch::toString( value ) ) + .setResultType( value ) + .endExpression(); + } + + // Only simple binary expressions are allowed on the LHS. + // If more complex compositions are required then place the sub expression in parentheses + template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator + ( RhsT const& ); + template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator - ( RhsT const& ); + template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator / ( RhsT const& ); + template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator * ( RhsT const& ); + template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator && ( RhsT const& ); + template<typename RhsT> STATIC_ASSERT_Expression_Too_Complex_Please_Rewrite_As_Binary_Comparison& operator || ( RhsT const& ); + +private: + template<Internal::Operator Op, typename RhsT> + ResultBuilder& captureExpression( RhsT const& rhs ) { + return m_rb + .setResultType( Internal::compare<Op>( m_lhs, rhs ) ) + .setLhs( Catch::toString( m_lhs ) ) + .setRhs( Catch::toString( rhs ) ) + .setOp( Internal::OperatorTraits<Op>::getName() ); + } + +private: + ResultBuilder& m_rb; + T m_lhs; +}; + +} // end namespace Catch + + +namespace Catch { + + template<typename T> + inline ExpressionLhs<T const&> ResultBuilder::operator->* ( T const& operand ) { + return ExpressionLhs<T const&>( *this, operand ); + } + + inline ExpressionLhs<bool> ResultBuilder::operator->* ( bool value ) { + return ExpressionLhs<bool>( *this, value ); + } + +} // namespace Catch + +// #included from: catch_message.h +#define TWOBLUECUBES_CATCH_MESSAGE_H_INCLUDED + +#include <string> + +namespace Catch { + + struct MessageInfo { + MessageInfo( std::string const& _macroName, + SourceLineInfo const& _lineInfo, + ResultWas::OfType _type ); + + std::string macroName; + SourceLineInfo lineInfo; + ResultWas::OfType type; + std::string message; + unsigned int sequence; + + bool operator == ( MessageInfo const& other ) const { + return sequence == other.sequence; + } + bool operator < ( MessageInfo const& other ) const { + return sequence < other.sequence; + } + private: + static unsigned int globalCount; + }; + + struct MessageBuilder { + MessageBuilder( std::string const& macroName, + SourceLineInfo const& lineInfo, + ResultWas::OfType type ) + : m_info( macroName, lineInfo, type ) + {} + + template<typename T> + MessageBuilder& operator << ( T const& value ) { + m_stream << value; + return *this; + } + + MessageInfo m_info; + std::ostringstream m_stream; + }; + + class ScopedMessage { + public: + ScopedMessage( MessageBuilder const& builder ); + ScopedMessage( ScopedMessage const& other ); + ~ScopedMessage(); + + MessageInfo m_info; + }; + +} // end namespace Catch + +// #included from: catch_interfaces_capture.h +#define TWOBLUECUBES_CATCH_INTERFACES_CAPTURE_H_INCLUDED + +#include <string> + +namespace Catch { + + class TestCase; + class AssertionResult; + struct AssertionInfo; + struct SectionInfo; + struct MessageInfo; + class ScopedMessageBuilder; + struct Counts; + + struct IResultCapture { + + virtual ~IResultCapture(); + + virtual void assertionEnded( AssertionResult const& result ) = 0; + virtual bool sectionStarted( SectionInfo const& sectionInfo, + Counts& assertions ) = 0; + virtual void sectionEnded( SectionInfo const& name, Counts const& assertions, double _durationInSeconds ) = 0; + virtual void pushScopedMessage( MessageInfo const& message ) = 0; + virtual void popScopedMessage( MessageInfo const& message ) = 0; + + virtual std::string getCurrentTestName() const = 0; + virtual const AssertionResult* getLastResult() const = 0; + + virtual void handleFatalErrorCondition( std::string const& message ) = 0; + }; + + IResultCapture& getResultCapture(); +} + +// #included from: catch_debugger.h +#define TWOBLUECUBES_CATCH_DEBUGGER_H_INCLUDED + +// #included from: catch_platform.h +#define TWOBLUECUBES_CATCH_PLATFORM_H_INCLUDED + +#if defined(__MAC_OS_X_VERSION_MIN_REQUIRED) +#define CATCH_PLATFORM_MAC +#elif defined(__IPHONE_OS_VERSION_MIN_REQUIRED) +#define CATCH_PLATFORM_IPHONE +#elif defined(WIN32) || defined(__WIN32__) || defined(_WIN32) || defined(_MSC_VER) +#define CATCH_PLATFORM_WINDOWS +#endif + +#include <string> + +namespace Catch{ + + bool isDebuggerActive(); + void writeToDebugConsole( std::string const& text ); +} + +#ifdef CATCH_PLATFORM_MAC + + // The following code snippet based on: + // http://cocoawithlove.com/2008/03/break-into-debugger.html + #ifdef DEBUG + #if defined(__ppc64__) || defined(__ppc__) + #define CATCH_BREAK_INTO_DEBUGGER() \ + if( Catch::isDebuggerActive() ) { \ + __asm__("li r0, 20\nsc\nnop\nli r0, 37\nli r4, 2\nsc\nnop\n" \ + : : : "memory","r0","r3","r4" ); \ + } + #else + #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) {__asm__("int $3\n" : : );} + #endif + #endif + +#elif defined(_MSC_VER) + #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { __debugbreak(); } +#elif defined(__MINGW32__) + extern "C" __declspec(dllimport) void __stdcall DebugBreak(); + #define CATCH_BREAK_INTO_DEBUGGER() if( Catch::isDebuggerActive() ) { DebugBreak(); } +#endif + +#ifndef CATCH_BREAK_INTO_DEBUGGER +#define CATCH_BREAK_INTO_DEBUGGER() Catch::alwaysTrue(); +#endif + +// #included from: catch_interfaces_runner.h +#define TWOBLUECUBES_CATCH_INTERFACES_RUNNER_H_INCLUDED + +namespace Catch { + class TestCase; + + struct IRunner { + virtual ~IRunner(); + virtual bool aborting() const = 0; + }; +} + +/////////////////////////////////////////////////////////////////////////////// +// In the event of a failure works out if the debugger needs to be invoked +// and/or an exception thrown and takes appropriate action. +// This needs to be done as a macro so the debugger will stop in the user +// source code rather than in Catch library code +#define INTERNAL_CATCH_REACT( resultBuilder ) \ + if( resultBuilder.shouldDebugBreak() ) CATCH_BREAK_INTO_DEBUGGER(); \ + resultBuilder.react(); + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_TEST( expr, resultDisposition, macroName ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition ); \ + try { \ + ( __catchResult->*expr ).endExpression(); \ + } \ + catch( ... ) { \ + __catchResult.useActiveException( Catch::ResultDisposition::Normal ); \ + } \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::isTrue( false && (expr) ) ) // expr here is never evaluated at runtime but it forces the compiler to give it a look + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_IF( expr, resultDisposition, macroName ) \ + INTERNAL_CATCH_TEST( expr, resultDisposition, macroName ); \ + if( Catch::getResultCapture().getLastResult()->succeeded() ) + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_ELSE( expr, resultDisposition, macroName ) \ + INTERNAL_CATCH_TEST( expr, resultDisposition, macroName ); \ + if( !Catch::getResultCapture().getLastResult()->succeeded() ) + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_NO_THROW( expr, resultDisposition, macroName ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition ); \ + try { \ + expr; \ + __catchResult.captureResult( Catch::ResultWas::Ok ); \ + } \ + catch( ... ) { \ + __catchResult.useActiveException( resultDisposition ); \ + } \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_THROWS( expr, resultDisposition, macroName ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition ); \ + if( __catchResult.allowThrows() ) \ + try { \ + expr; \ + __catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \ + } \ + catch( ... ) { \ + __catchResult.captureResult( Catch::ResultWas::Ok ); \ + } \ + else \ + __catchResult.captureResult( Catch::ResultWas::Ok ); \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_THROWS_AS( expr, exceptionType, resultDisposition, macroName ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #expr, resultDisposition ); \ + if( __catchResult.allowThrows() ) \ + try { \ + expr; \ + __catchResult.captureResult( Catch::ResultWas::DidntThrowException ); \ + } \ + catch( exceptionType ) { \ + __catchResult.captureResult( Catch::ResultWas::Ok ); \ + } \ + catch( ... ) { \ + __catchResult.useActiveException( resultDisposition ); \ + } \ + else \ + __catchResult.captureResult( Catch::ResultWas::Ok ); \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) + +/////////////////////////////////////////////////////////////////////////////// +#ifdef CATCH_CONFIG_VARIADIC_MACROS + #define INTERNAL_CATCH_MSG( messageType, resultDisposition, macroName, ... ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, "", resultDisposition ); \ + __catchResult << __VA_ARGS__ + ::Catch::StreamEndStop(); \ + __catchResult.captureResult( messageType ); \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) +#else + #define INTERNAL_CATCH_MSG( messageType, resultDisposition, macroName, log ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, "", resultDisposition ); \ + __catchResult << log + ::Catch::StreamEndStop(); \ + __catchResult.captureResult( messageType ); \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) +#endif + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_INFO( log, macroName ) \ + Catch::ScopedMessage INTERNAL_CATCH_UNIQUE_NAME( scopedMessage ) = Catch::MessageBuilder( macroName, CATCH_INTERNAL_LINEINFO, Catch::ResultWas::Info ) << log; + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CHECK_THAT( arg, matcher, resultDisposition, macroName ) \ + do { \ + Catch::ResultBuilder __catchResult( macroName, CATCH_INTERNAL_LINEINFO, #arg " " #matcher, resultDisposition ); \ + try { \ + std::string matcherAsString = ::Catch::Matchers::matcher.toString(); \ + __catchResult \ + .setLhs( Catch::toString( arg ) ) \ + .setRhs( matcherAsString == Catch::Detail::unprintableString ? #matcher : matcherAsString ) \ + .setOp( "matches" ) \ + .setResultType( ::Catch::Matchers::matcher.match( arg ) ); \ + __catchResult.captureExpression(); \ + } catch( ... ) { \ + __catchResult.useActiveException( resultDisposition | Catch::ResultDisposition::ContinueOnFailure ); \ + } \ + INTERNAL_CATCH_REACT( __catchResult ) \ + } while( Catch::alwaysFalse() ) + +// #included from: internal/catch_section.h +#define TWOBLUECUBES_CATCH_SECTION_H_INCLUDED + +// #included from: catch_section_info.h +#define TWOBLUECUBES_CATCH_SECTION_INFO_H_INCLUDED + +namespace Catch { + + struct SectionInfo { + SectionInfo + ( SourceLineInfo const& _lineInfo, + std::string const& _name, + std::string const& _description = std::string() ); + + std::string name; + std::string description; + SourceLineInfo lineInfo; + }; + +} // end namespace Catch + +// #included from: catch_totals.hpp +#define TWOBLUECUBES_CATCH_TOTALS_HPP_INCLUDED + +#include <cstddef> + +namespace Catch { + + struct Counts { + Counts() : passed( 0 ), failed( 0 ), failedButOk( 0 ) {} + + Counts operator - ( Counts const& other ) const { + Counts diff; + diff.passed = passed - other.passed; + diff.failed = failed - other.failed; + diff.failedButOk = failedButOk - other.failedButOk; + return diff; + } + Counts& operator += ( Counts const& other ) { + passed += other.passed; + failed += other.failed; + failedButOk += other.failedButOk; + return *this; + } + + std::size_t total() const { + return passed + failed + failedButOk; + } + bool allPassed() const { + return failed == 0 && failedButOk == 0; + } + bool allOk() const { + return failed == 0; + } + + std::size_t passed; + std::size_t failed; + std::size_t failedButOk; + }; + + struct Totals { + + Totals operator - ( Totals const& other ) const { + Totals diff; + diff.assertions = assertions - other.assertions; + diff.testCases = testCases - other.testCases; + return diff; + } + + Totals delta( Totals const& prevTotals ) const { + Totals diff = *this - prevTotals; + if( diff.assertions.failed > 0 ) + ++diff.testCases.failed; + else if( diff.assertions.failedButOk > 0 ) + ++diff.testCases.failedButOk; + else + ++diff.testCases.passed; + return diff; + } + + Totals& operator += ( Totals const& other ) { + assertions += other.assertions; + testCases += other.testCases; + return *this; + } + + Counts assertions; + Counts testCases; + }; +} + +// #included from: catch_timer.h +#define TWOBLUECUBES_CATCH_TIMER_H_INCLUDED + +#ifdef CATCH_PLATFORM_WINDOWS +typedef unsigned long long uint64_t; +#else +#include <stdint.h> +#endif + +namespace Catch { + + class Timer { + public: + Timer() : m_ticks( 0 ) {} + void start(); + unsigned int getElapsedMicroseconds() const; + unsigned int getElapsedMilliseconds() const; + double getElapsedSeconds() const; + + private: + uint64_t m_ticks; + }; + +} // namespace Catch + +#include <string> + +namespace Catch { + + class Section : NonCopyable { + public: + Section( SectionInfo const& info ); + ~Section(); + + // This indicates whether the section should be executed or not + operator bool() const; + + private: + SectionInfo m_info; + + std::string m_name; + Counts m_assertions; + bool m_sectionIncluded; + Timer m_timer; + }; + +} // end namespace Catch + +#ifdef CATCH_CONFIG_VARIADIC_MACROS + #define INTERNAL_CATCH_SECTION( ... ) \ + if( Catch::Section const& INTERNAL_CATCH_UNIQUE_NAME( catch_internal_Section ) = Catch::SectionInfo( CATCH_INTERNAL_LINEINFO, __VA_ARGS__ ) ) +#else + #define INTERNAL_CATCH_SECTION( name, desc ) \ + if( Catch::Section const& INTERNAL_CATCH_UNIQUE_NAME( catch_internal_Section ) = Catch::SectionInfo( CATCH_INTERNAL_LINEINFO, name, desc ) ) +#endif + +// #included from: internal/catch_generators.hpp +#define TWOBLUECUBES_CATCH_GENERATORS_HPP_INCLUDED + +#include <iterator> +#include <vector> +#include <string> +#include <stdlib.h> + +namespace Catch { + +template<typename T> +struct IGenerator { + virtual ~IGenerator() {} + virtual T getValue( std::size_t index ) const = 0; + virtual std::size_t size () const = 0; +}; + +template<typename T> +class BetweenGenerator : public IGenerator<T> { +public: + BetweenGenerator( T from, T to ) : m_from( from ), m_to( to ){} + + virtual T getValue( std::size_t index ) const { + return m_from+static_cast<int>( index ); + } + + virtual std::size_t size() const { + return static_cast<std::size_t>( 1+m_to-m_from ); + } + +private: + + T m_from; + T m_to; +}; + +template<typename T> +class ValuesGenerator : public IGenerator<T> { +public: + ValuesGenerator(){} + + void add( T value ) { + m_values.push_back( value ); + } + + virtual T getValue( std::size_t index ) const { + return m_values[index]; + } + + virtual std::size_t size() const { + return m_values.size(); + } + +private: + std::vector<T> m_values; +}; + +template<typename T> +class CompositeGenerator { +public: + CompositeGenerator() : m_totalSize( 0 ) {} + + // *** Move semantics, similar to auto_ptr *** + CompositeGenerator( CompositeGenerator& other ) + : m_fileInfo( other.m_fileInfo ), + m_totalSize( 0 ) + { + move( other ); + } + + CompositeGenerator& setFileInfo( const char* fileInfo ) { + m_fileInfo = fileInfo; + return *this; + } + + ~CompositeGenerator() { + deleteAll( m_composed ); + } + + operator T () const { + size_t overallIndex = getCurrentContext().getGeneratorIndex( m_fileInfo, m_totalSize ); + + typename std::vector<const IGenerator<T>*>::const_iterator it = m_composed.begin(); + typename std::vector<const IGenerator<T>*>::const_iterator itEnd = m_composed.end(); + for( size_t index = 0; it != itEnd; ++it ) + { + const IGenerator<T>* generator = *it; + if( overallIndex >= index && overallIndex < index + generator->size() ) + { + return generator->getValue( overallIndex-index ); + } + index += generator->size(); + } + CATCH_INTERNAL_ERROR( "Indexed past end of generated range" ); + return T(); // Suppress spurious "not all control paths return a value" warning in Visual Studio - if you know how to fix this please do so + } + + void add( const IGenerator<T>* generator ) { + m_totalSize += generator->size(); + m_composed.push_back( generator ); + } + + CompositeGenerator& then( CompositeGenerator& other ) { + move( other ); + return *this; + } + + CompositeGenerator& then( T value ) { + ValuesGenerator<T>* valuesGen = new ValuesGenerator<T>(); + valuesGen->add( value ); + add( valuesGen ); + return *this; + } + +private: + + void move( CompositeGenerator& other ) { + std::copy( other.m_composed.begin(), other.m_composed.end(), std::back_inserter( m_composed ) ); + m_totalSize += other.m_totalSize; + other.m_composed.clear(); + } + + std::vector<const IGenerator<T>*> m_composed; + std::string m_fileInfo; + size_t m_totalSize; +}; + +namespace Generators +{ + template<typename T> + CompositeGenerator<T> between( T from, T to ) { + CompositeGenerator<T> generators; + generators.add( new BetweenGenerator<T>( from, to ) ); + return generators; + } + + template<typename T> + CompositeGenerator<T> values( T val1, T val2 ) { + CompositeGenerator<T> generators; + ValuesGenerator<T>* valuesGen = new ValuesGenerator<T>(); + valuesGen->add( val1 ); + valuesGen->add( val2 ); + generators.add( valuesGen ); + return generators; + } + + template<typename T> + CompositeGenerator<T> values( T val1, T val2, T val3 ){ + CompositeGenerator<T> generators; + ValuesGenerator<T>* valuesGen = new ValuesGenerator<T>(); + valuesGen->add( val1 ); + valuesGen->add( val2 ); + valuesGen->add( val3 ); + generators.add( valuesGen ); + return generators; + } + + template<typename T> + CompositeGenerator<T> values( T val1, T val2, T val3, T val4 ) { + CompositeGenerator<T> generators; + ValuesGenerator<T>* valuesGen = new ValuesGenerator<T>(); + valuesGen->add( val1 ); + valuesGen->add( val2 ); + valuesGen->add( val3 ); + valuesGen->add( val4 ); + generators.add( valuesGen ); + return generators; + } + +} // end namespace Generators + +using namespace Generators; + +} // end namespace Catch + +#define INTERNAL_CATCH_LINESTR2( line ) #line +#define INTERNAL_CATCH_LINESTR( line ) INTERNAL_CATCH_LINESTR2( line ) + +#define INTERNAL_CATCH_GENERATE( expr ) expr.setFileInfo( __FILE__ "(" INTERNAL_CATCH_LINESTR( __LINE__ ) ")" ) + +// #included from: internal/catch_interfaces_exception.h +#define TWOBLUECUBES_CATCH_INTERFACES_EXCEPTION_H_INCLUDED + +#include <string> +// #included from: catch_interfaces_registry_hub.h +#define TWOBLUECUBES_CATCH_INTERFACES_REGISTRY_HUB_H_INCLUDED + +#include <string> + +namespace Catch { + + class TestCase; + struct ITestCaseRegistry; + struct IExceptionTranslatorRegistry; + struct IExceptionTranslator; + struct IReporterRegistry; + struct IReporterFactory; + + struct IRegistryHub { + virtual ~IRegistryHub(); + + virtual IReporterRegistry const& getReporterRegistry() const = 0; + virtual ITestCaseRegistry const& getTestCaseRegistry() const = 0; + virtual IExceptionTranslatorRegistry& getExceptionTranslatorRegistry() = 0; + }; + + struct IMutableRegistryHub { + virtual ~IMutableRegistryHub(); + virtual void registerReporter( std::string const& name, IReporterFactory* factory ) = 0; + virtual void registerTest( TestCase const& testInfo ) = 0; + virtual void registerTranslator( const IExceptionTranslator* translator ) = 0; + }; + + IRegistryHub& getRegistryHub(); + IMutableRegistryHub& getMutableRegistryHub(); + void cleanUp(); + std::string translateActiveException(); + +} + + +namespace Catch { + + typedef std::string(*exceptionTranslateFunction)(); + + struct IExceptionTranslator { + virtual ~IExceptionTranslator(); + virtual std::string translate() const = 0; + }; + + struct IExceptionTranslatorRegistry { + virtual ~IExceptionTranslatorRegistry(); + + virtual std::string translateActiveException() const = 0; + }; + + class ExceptionTranslatorRegistrar { + template<typename T> + class ExceptionTranslator : public IExceptionTranslator { + public: + + ExceptionTranslator( std::string(*translateFunction)( T& ) ) + : m_translateFunction( translateFunction ) + {} + + virtual std::string translate() const { + try { + throw; + } + catch( T& ex ) { + return m_translateFunction( ex ); + } + } + + protected: + std::string(*m_translateFunction)( T& ); + }; + + public: + template<typename T> + ExceptionTranslatorRegistrar( std::string(*translateFunction)( T& ) ) { + getMutableRegistryHub().registerTranslator + ( new ExceptionTranslator<T>( translateFunction ) ); + } + }; +} + +/////////////////////////////////////////////////////////////////////////////// +#define INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) \ + static std::string INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator )( signature ); \ + namespace{ Catch::ExceptionTranslatorRegistrar INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionRegistrar )( &INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator ) ); }\ + static std::string INTERNAL_CATCH_UNIQUE_NAME( catch_internal_ExceptionTranslator )( signature ) + +// #included from: internal/catch_approx.hpp +#define TWOBLUECUBES_CATCH_APPROX_HPP_INCLUDED + +#include <cmath> +#include <limits> + +namespace Catch { +namespace Detail { + + class Approx { + public: + explicit Approx ( double value ) + : m_epsilon( std::numeric_limits<float>::epsilon()*100 ), + m_scale( 1.0 ), + m_value( value ) + {} + + Approx( Approx const& other ) + : m_epsilon( other.m_epsilon ), + m_scale( other.m_scale ), + m_value( other.m_value ) + {} + + static Approx custom() { + return Approx( 0 ); + } + + Approx operator()( double value ) { + Approx approx( value ); + approx.epsilon( m_epsilon ); + approx.scale( m_scale ); + return approx; + } + + friend bool operator == ( double lhs, Approx const& rhs ) { + // Thanks to Richard Harris for his help refining this formula + return fabs( lhs - rhs.m_value ) < rhs.m_epsilon * (rhs.m_scale + (std::max)( fabs(lhs), fabs(rhs.m_value) ) ); + } + + friend bool operator == ( Approx const& lhs, double rhs ) { + return operator==( rhs, lhs ); + } + + friend bool operator != ( double lhs, Approx const& rhs ) { + return !operator==( lhs, rhs ); + } + + friend bool operator != ( Approx const& lhs, double rhs ) { + return !operator==( rhs, lhs ); + } + + Approx& epsilon( double newEpsilon ) { + m_epsilon = newEpsilon; + return *this; + } + + Approx& scale( double newScale ) { + m_scale = newScale; + return *this; + } + + std::string toString() const { + std::ostringstream oss; + oss << "Approx( " << Catch::toString( m_value ) << " )"; + return oss.str(); + } + + private: + double m_epsilon; + double m_scale; + double m_value; + }; +} + +template<> +inline std::string toString<Detail::Approx>( Detail::Approx const& value ) { + return value.toString(); +} + +} // end namespace Catch + +// #included from: internal/catch_matchers.hpp +#define TWOBLUECUBES_CATCH_MATCHERS_HPP_INCLUDED + +namespace Catch { +namespace Matchers { + namespace Impl { + + template<typename ExpressionT> + struct Matcher : SharedImpl<IShared> + { + typedef ExpressionT ExpressionType; + + virtual ~Matcher() {} + virtual Ptr<Matcher> clone() const = 0; + virtual bool match( ExpressionT const& expr ) const = 0; + virtual std::string toString() const = 0; + }; + + template<typename DerivedT, typename ExpressionT> + struct MatcherImpl : Matcher<ExpressionT> { + + virtual Ptr<Matcher<ExpressionT> > clone() const { + return Ptr<Matcher<ExpressionT> >( new DerivedT( static_cast<DerivedT const&>( *this ) ) ); + } + }; + + namespace Generic { + + template<typename ExpressionT> + class AllOf : public MatcherImpl<AllOf<ExpressionT>, ExpressionT> { + public: + + AllOf() {} + AllOf( AllOf const& other ) : m_matchers( other.m_matchers ) {} + + AllOf& add( Matcher<ExpressionT> const& matcher ) { + m_matchers.push_back( matcher.clone() ); + return *this; + } + virtual bool match( ExpressionT const& expr ) const + { + for( std::size_t i = 0; i < m_matchers.size(); ++i ) + if( !m_matchers[i]->match( expr ) ) + return false; + return true; + } + virtual std::string toString() const { + std::ostringstream oss; + oss << "( "; + for( std::size_t i = 0; i < m_matchers.size(); ++i ) { + if( i != 0 ) + oss << " and "; + oss << m_matchers[i]->toString(); + } + oss << " )"; + return oss.str(); + } + + private: + std::vector<Ptr<Matcher<ExpressionT> > > m_matchers; + }; + + template<typename ExpressionT> + class AnyOf : public MatcherImpl<AnyOf<ExpressionT>, ExpressionT> { + public: + + AnyOf() {} + AnyOf( AnyOf const& other ) : m_matchers( other.m_matchers ) {} + + AnyOf& add( Matcher<ExpressionT> const& matcher ) { + m_matchers.push_back( matcher.clone() ); + return *this; + } + virtual bool match( ExpressionT const& expr ) const + { + for( std::size_t i = 0; i < m_matchers.size(); ++i ) + if( m_matchers[i]->match( expr ) ) + return true; + return false; + } + virtual std::string toString() const { + std::ostringstream oss; + oss << "( "; + for( std::size_t i = 0; i < m_matchers.size(); ++i ) { + if( i != 0 ) + oss << " or "; + oss << m_matchers[i]->toString(); + } + oss << " )"; + return oss.str(); + } + + private: + std::vector<Ptr<Matcher<ExpressionT> > > m_matchers; + }; + + } + + namespace StdString { + + inline std::string makeString( std::string const& str ) { return str; } + inline std::string makeString( const char* str ) { return str ? std::string( str ) : std::string(); } + + struct Equals : MatcherImpl<Equals, std::string> { + Equals( std::string const& str ) : m_str( str ){} + Equals( Equals const& other ) : m_str( other.m_str ){} + + virtual ~Equals(); + + virtual bool match( std::string const& expr ) const { + return m_str == expr; + } + virtual std::string toString() const { + return "equals: \"" + m_str + "\""; + } + + std::string m_str; + }; + + struct Contains : MatcherImpl<Contains, std::string> { + Contains( std::string const& substr ) : m_substr( substr ){} + Contains( Contains const& other ) : m_substr( other.m_substr ){} + + virtual ~Contains(); + + virtual bool match( std::string const& expr ) const { + return expr.find( m_substr ) != std::string::npos; + } + virtual std::string toString() const { + return "contains: \"" + m_substr + "\""; + } + + std::string m_substr; + }; + + struct StartsWith : MatcherImpl<StartsWith, std::string> { + StartsWith( std::string const& substr ) : m_substr( substr ){} + StartsWith( StartsWith const& other ) : m_substr( other.m_substr ){} + + virtual ~StartsWith(); + + virtual bool match( std::string const& expr ) const { + return expr.find( m_substr ) == 0; + } + virtual std::string toString() const { + return "starts with: \"" + m_substr + "\""; + } + + std::string m_substr; + }; + + struct EndsWith : MatcherImpl<EndsWith, std::string> { + EndsWith( std::string const& substr ) : m_substr( substr ){} + EndsWith( EndsWith const& other ) : m_substr( other.m_substr ){} + + virtual ~EndsWith(); + + virtual bool match( std::string const& expr ) const { + return expr.find( m_substr ) == expr.size() - m_substr.size(); + } + virtual std::string toString() const { + return "ends with: \"" + m_substr + "\""; + } + + std::string m_substr; + }; + } // namespace StdString + } // namespace Impl + + // The following functions create the actual matcher objects. + // This allows the types to be inferred + template<typename ExpressionT> + inline Impl::Generic::AllOf<ExpressionT> AllOf( Impl::Matcher<ExpressionT> const& m1, + Impl::Matcher<ExpressionT> const& m2 ) { + return Impl::Generic::AllOf<ExpressionT>().add( m1 ).add( m2 ); + } + template<typename ExpressionT> + inline Impl::Generic::AllOf<ExpressionT> AllOf( Impl::Matcher<ExpressionT> const& m1, + Impl::Matcher<ExpressionT> const& m2, + Impl::Matcher<ExpressionT> const& m3 ) { + return Impl::Generic::AllOf<ExpressionT>().add( m1 ).add( m2 ).add( m3 ); + } + template<typename ExpressionT> + inline Impl::Generic::AnyOf<ExpressionT> AnyOf( Impl::Matcher<ExpressionT> const& m1, + Impl::Matcher<ExpressionT> const& m2 ) { + return Impl::Generic::AnyOf<ExpressionT>().add( m1 ).add( m2 ); + } + template<typename ExpressionT> + inline Impl::Generic::AnyOf<ExpressionT> AnyOf( Impl::Matcher<ExpressionT> const& m1, + Impl::Matcher<ExpressionT> const& m2, + Impl::Matcher<ExpressionT> const& m3 ) { + return Impl::Generic::AnyOf<ExpressionT>().add( m1 ).add( m2 ).add( m3 ); + } + + inline Impl::StdString::Equals Equals( std::string const& str ) { + return Impl::StdString::Equals( str ); + } + inline Impl::StdString::Equals Equals( const char* str ) { + return Impl::StdString::Equals( Impl::StdString::makeString( str ) ); + } + inline Impl::StdString::Contains Contains( std::string const& substr ) { + return Impl::StdString::Contains( substr ); + } + inline Impl::StdString::Contains Contains( const char* substr ) { + return Impl::StdString::Contains( Impl::StdString::makeString( substr ) ); + } + inline Impl::StdString::StartsWith StartsWith( std::string const& substr ) { + return Impl::StdString::StartsWith( substr ); + } + inline Impl::StdString::StartsWith StartsWith( const char* substr ) { + return Impl::StdString::StartsWith( Impl::StdString::makeString( substr ) ); + } + inline Impl::StdString::EndsWith EndsWith( std::string const& substr ) { + return Impl::StdString::EndsWith( substr ); + } + inline Impl::StdString::EndsWith EndsWith( const char* substr ) { + return Impl::StdString::EndsWith( Impl::StdString::makeString( substr ) ); + } + +} // namespace Matchers + +using namespace Matchers; + +} // namespace Catch + +// #included from: internal/catch_interfaces_tag_alias_registry.h +#define TWOBLUECUBES_CATCH_INTERFACES_TAG_ALIAS_REGISTRY_H_INCLUDED + +// #included from: catch_tag_alias.h +#define TWOBLUECUBES_CATCH_TAG_ALIAS_H_INCLUDED + +#include <string> + +namespace Catch { + + struct TagAlias { + TagAlias( std::string _tag, SourceLineInfo _lineInfo ) : tag( _tag ), lineInfo( _lineInfo ) {} + + std::string tag; + SourceLineInfo lineInfo; + }; + + struct RegistrarForTagAliases { + RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo ); + }; + +} // end namespace Catch + +#define CATCH_REGISTER_TAG_ALIAS( alias, spec ) namespace{ Catch::RegistrarForTagAliases INTERNAL_CATCH_UNIQUE_NAME( AutoRegisterTagAlias )( alias, spec, CATCH_INTERNAL_LINEINFO ); } +// #included from: catch_option.hpp +#define TWOBLUECUBES_CATCH_OPTION_HPP_INCLUDED + +namespace Catch { + + // An optional type + template<typename T> + class Option { + public: + Option() : nullableValue( NULL ) {} + Option( T const& _value ) + : nullableValue( new( storage ) T( _value ) ) + {} + Option( Option const& _other ) + : nullableValue( _other ? new( storage ) T( *_other ) : NULL ) + {} + + ~Option() { + reset(); + } + + Option& operator= ( Option const& _other ) { + if( &_other != this ) { + reset(); + if( _other ) + nullableValue = new( storage ) T( *_other ); + } + return *this; + } + Option& operator = ( T const& _value ) { + reset(); + nullableValue = new( storage ) T( _value ); + return *this; + } + + void reset() { + if( nullableValue ) + nullableValue->~T(); + nullableValue = NULL; + } + + T& operator*() { return *nullableValue; } + T const& operator*() const { return *nullableValue; } + T* operator->() { return nullableValue; } + const T* operator->() const { return nullableValue; } + + T valueOr( T const& defaultValue ) const { + return nullableValue ? *nullableValue : defaultValue; + } + + bool some() const { return nullableValue != NULL; } + bool none() const { return nullableValue == NULL; } + + bool operator !() const { return nullableValue == NULL; } + operator SafeBool::type() const { + return SafeBool::makeSafe( some() ); + } + + private: + T* nullableValue; + char storage[sizeof(T)]; + }; + +} // end namespace Catch + +namespace Catch { + + struct ITagAliasRegistry { + virtual ~ITagAliasRegistry(); + virtual Option<TagAlias> find( std::string const& alias ) const = 0; + virtual std::string expandAliases( std::string const& unexpandedTestSpec ) const = 0; + + static ITagAliasRegistry const& get(); + }; + +} // end namespace Catch + +// These files are included here so the single_include script doesn't put them +// in the conditionally compiled sections +// #included from: internal/catch_test_case_info.h +#define TWOBLUECUBES_CATCH_TEST_CASE_INFO_H_INCLUDED + +#include <string> +#include <set> + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wpadded" +#endif + +namespace Catch { + + struct ITestCase; + + struct TestCaseInfo { + enum SpecialProperties{ + None = 0, + IsHidden = 1 << 1, + ShouldFail = 1 << 2, + MayFail = 1 << 3, + Throws = 1 << 4 + }; + + TestCaseInfo( std::string const& _name, + std::string const& _className, + std::string const& _description, + std::set<std::string> const& _tags, + SourceLineInfo const& _lineInfo ); + + TestCaseInfo( TestCaseInfo const& other ); + + bool isHidden() const; + bool throws() const; + bool okToFail() const; + bool expectedToFail() const; + + std::string name; + std::string className; + std::string description; + std::set<std::string> tags; + std::set<std::string> lcaseTags; + std::string tagsAsString; + SourceLineInfo lineInfo; + SpecialProperties properties; + }; + + class TestCase : public TestCaseInfo { + public: + + TestCase( ITestCase* testCase, TestCaseInfo const& info ); + TestCase( TestCase const& other ); + + TestCase withName( std::string const& _newName ) const; + + void invoke() const; + + TestCaseInfo const& getTestCaseInfo() const; + + void swap( TestCase& other ); + bool operator == ( TestCase const& other ) const; + bool operator < ( TestCase const& other ) const; + TestCase& operator = ( TestCase const& other ); + + private: + Ptr<ITestCase> test; + }; + + TestCase makeTestCase( ITestCase* testCase, + std::string const& className, + std::string const& name, + std::string const& description, + SourceLineInfo const& lineInfo ); +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + + +#ifdef __OBJC__ +// #included from: internal/catch_objc.hpp +#define TWOBLUECUBES_CATCH_OBJC_HPP_INCLUDED + +#import <objc/runtime.h> + +#include <string> + +// NB. Any general catch headers included here must be included +// in catch.hpp first to make sure they are included by the single +// header for non obj-usage + +/////////////////////////////////////////////////////////////////////////////// +// This protocol is really only here for (self) documenting purposes, since +// all its methods are optional. +@protocol OcFixture + +@optional + +-(void) setUp; +-(void) tearDown; + +@end + +namespace Catch { + + class OcMethod : public SharedImpl<ITestCase> { + + public: + OcMethod( Class cls, SEL sel ) : m_cls( cls ), m_sel( sel ) {} + + virtual void invoke() const { + id obj = [[m_cls alloc] init]; + + performOptionalSelector( obj, @selector(setUp) ); + performOptionalSelector( obj, m_sel ); + performOptionalSelector( obj, @selector(tearDown) ); + + arcSafeRelease( obj ); + } + private: + virtual ~OcMethod() {} + + Class m_cls; + SEL m_sel; + }; + + namespace Detail{ + + inline std::string getAnnotation( Class cls, + std::string const& annotationName, + std::string const& testCaseName ) { + NSString* selStr = [[NSString alloc] initWithFormat:@"Catch_%s_%s", annotationName.c_str(), testCaseName.c_str()]; + SEL sel = NSSelectorFromString( selStr ); + arcSafeRelease( selStr ); + id value = performOptionalSelector( cls, sel ); + if( value ) + return [(NSString*)value UTF8String]; + return ""; + } + } + + inline size_t registerTestMethods() { + size_t noTestMethods = 0; + int noClasses = objc_getClassList( NULL, 0 ); + + Class* classes = (CATCH_UNSAFE_UNRETAINED Class *)malloc( sizeof(Class) * noClasses); + objc_getClassList( classes, noClasses ); + + for( int c = 0; c < noClasses; c++ ) { + Class cls = classes[c]; + { + u_int count; + Method* methods = class_copyMethodList( cls, &count ); + for( u_int m = 0; m < count ; m++ ) { + SEL selector = method_getName(methods[m]); + std::string methodName = sel_getName(selector); + if( startsWith( methodName, "Catch_TestCase_" ) ) { + std::string testCaseName = methodName.substr( 15 ); + std::string name = Detail::getAnnotation( cls, "Name", testCaseName ); + std::string desc = Detail::getAnnotation( cls, "Description", testCaseName ); + const char* className = class_getName( cls ); + + getMutableRegistryHub().registerTest( makeTestCase( new OcMethod( cls, selector ), className, name.c_str(), desc.c_str(), SourceLineInfo() ) ); + noTestMethods++; + } + } + free(methods); + } + } + return noTestMethods; + } + + namespace Matchers { + namespace Impl { + namespace NSStringMatchers { + + template<typename MatcherT> + struct StringHolder : MatcherImpl<MatcherT, NSString*>{ + StringHolder( NSString* substr ) : m_substr( [substr copy] ){} + StringHolder( StringHolder const& other ) : m_substr( [other.m_substr copy] ){} + StringHolder() { + arcSafeRelease( m_substr ); + } + + NSString* m_substr; + }; + + struct Equals : StringHolder<Equals> { + Equals( NSString* substr ) : StringHolder( substr ){} + + virtual bool match( ExpressionType const& str ) const { + return (str != nil || m_substr == nil ) && + [str isEqualToString:m_substr]; + } + + virtual std::string toString() const { + return "equals string: " + Catch::toString( m_substr ); + } + }; + + struct Contains : StringHolder<Contains> { + Contains( NSString* substr ) : StringHolder( substr ){} + + virtual bool match( ExpressionType const& str ) const { + return (str != nil || m_substr == nil ) && + [str rangeOfString:m_substr].location != NSNotFound; + } + + virtual std::string toString() const { + return "contains string: " + Catch::toString( m_substr ); + } + }; + + struct StartsWith : StringHolder<StartsWith> { + StartsWith( NSString* substr ) : StringHolder( substr ){} + + virtual bool match( ExpressionType const& str ) const { + return (str != nil || m_substr == nil ) && + [str rangeOfString:m_substr].location == 0; + } + + virtual std::string toString() const { + return "starts with: " + Catch::toString( m_substr ); + } + }; + struct EndsWith : StringHolder<EndsWith> { + EndsWith( NSString* substr ) : StringHolder( substr ){} + + virtual bool match( ExpressionType const& str ) const { + return (str != nil || m_substr == nil ) && + [str rangeOfString:m_substr].location == [str length] - [m_substr length]; + } + + virtual std::string toString() const { + return "ends with: " + Catch::toString( m_substr ); + } + }; + + } // namespace NSStringMatchers + } // namespace Impl + + inline Impl::NSStringMatchers::Equals + Equals( NSString* substr ){ return Impl::NSStringMatchers::Equals( substr ); } + + inline Impl::NSStringMatchers::Contains + Contains( NSString* substr ){ return Impl::NSStringMatchers::Contains( substr ); } + + inline Impl::NSStringMatchers::StartsWith + StartsWith( NSString* substr ){ return Impl::NSStringMatchers::StartsWith( substr ); } + + inline Impl::NSStringMatchers::EndsWith + EndsWith( NSString* substr ){ return Impl::NSStringMatchers::EndsWith( substr ); } + + } // namespace Matchers + + using namespace Matchers; + +} // namespace Catch + +/////////////////////////////////////////////////////////////////////////////// +#define OC_TEST_CASE( name, desc )\ ++(NSString*) INTERNAL_CATCH_UNIQUE_NAME( Catch_Name_test ) \ +{\ +return @ name; \ +}\ ++(NSString*) INTERNAL_CATCH_UNIQUE_NAME( Catch_Description_test ) \ +{ \ +return @ desc; \ +} \ +-(void) INTERNAL_CATCH_UNIQUE_NAME( Catch_TestCase_test ) + +#endif + +#ifdef CATCH_IMPL +// #included from: internal/catch_impl.hpp +#define TWOBLUECUBES_CATCH_IMPL_HPP_INCLUDED + +// Collect all the implementation files together here +// These are the equivalent of what would usually be cpp files + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wweak-vtables" +#endif + +// #included from: ../catch_runner.hpp +#define TWOBLUECUBES_CATCH_RUNNER_HPP_INCLUDED + +// #included from: internal/catch_commandline.hpp +#define TWOBLUECUBES_CATCH_COMMANDLINE_HPP_INCLUDED + +// #included from: catch_config.hpp +#define TWOBLUECUBES_CATCH_CONFIG_HPP_INCLUDED + +// #included from: catch_test_spec_parser.hpp +#define TWOBLUECUBES_CATCH_TEST_SPEC_PARSER_HPP_INCLUDED + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wpadded" +#endif + +// #included from: catch_test_spec.hpp +#define TWOBLUECUBES_CATCH_TEST_SPEC_HPP_INCLUDED + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wpadded" +#endif + +#include <string> +#include <vector> + +namespace Catch { + + class TestSpec { + struct Pattern : SharedImpl<> { + virtual ~Pattern(); + virtual bool matches( TestCaseInfo const& testCase ) const = 0; + }; + class NamePattern : public Pattern { + enum WildcardPosition { + NoWildcard = 0, + WildcardAtStart = 1, + WildcardAtEnd = 2, + WildcardAtBothEnds = WildcardAtStart | WildcardAtEnd + }; + + public: + NamePattern( std::string const& name ) : m_name( toLower( name ) ), m_wildcard( NoWildcard ) { + if( startsWith( m_name, "*" ) ) { + m_name = m_name.substr( 1 ); + m_wildcard = WildcardAtStart; + } + if( endsWith( m_name, "*" ) ) { + m_name = m_name.substr( 0, m_name.size()-1 ); + m_wildcard = static_cast<WildcardPosition>( m_wildcard | WildcardAtEnd ); + } + } + virtual ~NamePattern(); + virtual bool matches( TestCaseInfo const& testCase ) const { + switch( m_wildcard ) { + case NoWildcard: + return m_name == toLower( testCase.name ); + case WildcardAtStart: + return endsWith( toLower( testCase.name ), m_name ); + case WildcardAtEnd: + return startsWith( toLower( testCase.name ), m_name ); + case WildcardAtBothEnds: + return contains( toLower( testCase.name ), m_name ); + } + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wunreachable-code" +#endif + throw std::logic_error( "Unknown enum" ); +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + } + private: + std::string m_name; + WildcardPosition m_wildcard; + }; + class TagPattern : public Pattern { + public: + TagPattern( std::string const& tag ) : m_tag( toLower( tag ) ) {} + virtual ~TagPattern(); + virtual bool matches( TestCaseInfo const& testCase ) const { + return testCase.lcaseTags.find( m_tag ) != testCase.lcaseTags.end(); + } + private: + std::string m_tag; + }; + class ExcludedPattern : public Pattern { + public: + ExcludedPattern( Ptr<Pattern> const& underlyingPattern ) : m_underlyingPattern( underlyingPattern ) {} + virtual ~ExcludedPattern(); + virtual bool matches( TestCaseInfo const& testCase ) const { return !m_underlyingPattern->matches( testCase ); } + private: + Ptr<Pattern> m_underlyingPattern; + }; + + struct Filter { + std::vector<Ptr<Pattern> > m_patterns; + + bool matches( TestCaseInfo const& testCase ) const { + // All patterns in a filter must match for the filter to be a match + for( std::vector<Ptr<Pattern> >::const_iterator it = m_patterns.begin(), itEnd = m_patterns.end(); it != itEnd; ++it ) + if( !(*it)->matches( testCase ) ) + return false; + return true; + } + }; + + public: + bool hasFilters() const { + return !m_filters.empty(); + } + bool matches( TestCaseInfo const& testCase ) const { + // A TestSpec matches if any filter matches + for( std::vector<Filter>::const_iterator it = m_filters.begin(), itEnd = m_filters.end(); it != itEnd; ++it ) + if( it->matches( testCase ) ) + return true; + return false; + } + + private: + std::vector<Filter> m_filters; + + friend class TestSpecParser; + }; +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +namespace Catch { + + class TestSpecParser { + enum Mode{ None, Name, QuotedName, Tag }; + Mode m_mode; + bool m_exclusion; + std::size_t m_start, m_pos; + std::string m_arg; + TestSpec::Filter m_currentFilter; + TestSpec m_testSpec; + ITagAliasRegistry const* m_tagAliases; + + public: + TestSpecParser( ITagAliasRegistry const& tagAliases ) : m_tagAliases( &tagAliases ) {} + + TestSpecParser& parse( std::string const& arg ) { + m_mode = None; + m_exclusion = false; + m_start = std::string::npos; + m_arg = m_tagAliases->expandAliases( arg ); + for( m_pos = 0; m_pos < m_arg.size(); ++m_pos ) + visitChar( m_arg[m_pos] ); + if( m_mode == Name ) + addPattern<TestSpec::NamePattern>(); + return *this; + } + TestSpec testSpec() { + addFilter(); + return m_testSpec; + } + private: + void visitChar( char c ) { + if( m_mode == None ) { + switch( c ) { + case ' ': return; + case '~': m_exclusion = true; return; + case '[': return startNewMode( Tag, ++m_pos ); + case '"': return startNewMode( QuotedName, ++m_pos ); + default: startNewMode( Name, m_pos ); break; + } + } + if( m_mode == Name ) { + if( c == ',' ) { + addPattern<TestSpec::NamePattern>(); + addFilter(); + } + else if( c == '[' ) { + if( subString() == "exclude:" ) + m_exclusion = true; + else + addPattern<TestSpec::NamePattern>(); + startNewMode( Tag, ++m_pos ); + } + } + else if( m_mode == QuotedName && c == '"' ) + addPattern<TestSpec::NamePattern>(); + else if( m_mode == Tag && c == ']' ) + addPattern<TestSpec::TagPattern>(); + } + void startNewMode( Mode mode, std::size_t start ) { + m_mode = mode; + m_start = start; + } + std::string subString() const { return m_arg.substr( m_start, m_pos - m_start ); } + template<typename T> + void addPattern() { + std::string token = subString(); + if( startsWith( token, "exclude:" ) ) { + m_exclusion = true; + token = token.substr( 8 ); + } + if( !token.empty() ) { + Ptr<TestSpec::Pattern> pattern = new T( token ); + if( m_exclusion ) + pattern = new TestSpec::ExcludedPattern( pattern ); + m_currentFilter.m_patterns.push_back( pattern ); + } + m_exclusion = false; + m_mode = None; + } + void addFilter() { + if( !m_currentFilter.m_patterns.empty() ) { + m_testSpec.m_filters.push_back( m_currentFilter ); + m_currentFilter = TestSpec::Filter(); + } + } + }; + inline TestSpec parseTestSpec( std::string const& arg ) { + return TestSpecParser( ITagAliasRegistry::get() ).parse( arg ).testSpec(); + } + +} // namespace Catch + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +// #included from: catch_interfaces_config.h +#define TWOBLUECUBES_CATCH_INTERFACES_CONFIG_H_INCLUDED + +#include <iostream> +#include <string> +#include <vector> + +namespace Catch { + + struct Verbosity { enum Level { + NoOutput = 0, + Quiet, + Normal + }; }; + + struct WarnAbout { enum What { + Nothing = 0x00, + NoAssertions = 0x01 + }; }; + + struct ShowDurations { enum OrNot { + DefaultForReporter, + Always, + Never + }; }; + struct RunTests { enum InWhatOrder { + InDeclarationOrder, + InLexicographicalOrder, + InRandomOrder + }; }; + + class TestSpec; + + struct IConfig : IShared { + + virtual ~IConfig(); + + virtual bool allowThrows() const = 0; + virtual std::ostream& stream() const = 0; + virtual std::string name() const = 0; + virtual bool includeSuccessfulResults() const = 0; + virtual bool shouldDebugBreak() const = 0; + virtual bool warnAboutMissingAssertions() const = 0; + virtual int abortAfter() const = 0; + virtual bool showInvisibles() const = 0; + virtual ShowDurations::OrNot showDurations() const = 0; + virtual TestSpec const& testSpec() const = 0; + virtual RunTests::InWhatOrder runOrder() const = 0; + virtual unsigned int rngSeed() const = 0; + virtual bool forceColour() const = 0; + }; +} + +// #included from: catch_stream.h +#define TWOBLUECUBES_CATCH_STREAM_H_INCLUDED + +#include <streambuf> + +#ifdef __clang__ +#pragma clang diagnostic ignored "-Wpadded" +#endif + +namespace Catch { + + class Stream { + public: + Stream(); + Stream( std::streambuf* _streamBuf, bool _isOwned ); + void release(); + + std::streambuf* streamBuf; + + private: + bool isOwned; + }; + + std::ostream& cout(); + std::ostream& cerr(); +} + +#include <memory> +#include <vector> +#include <string> +#include <iostream> +#include <ctime> + +#ifndef CATCH_CONFIG_CONSOLE_WIDTH +#define CATCH_CONFIG_CONSOLE_WIDTH 80 +#endif + +namespace Catch { + + struct ConfigData { + + ConfigData() + : listTests( false ), + listTags( false ), + listReporters( false ), + listTestNamesOnly( false ), + showSuccessfulTests( false ), + shouldDebugBreak( false ), + noThrow( false ), + showHelp( false ), + showInvisibles( false ), + forceColour( false ), + abortAfter( -1 ), + rngSeed( 0 ), + verbosity( Verbosity::Normal ), + warnings( WarnAbout::Nothing ), + showDurations( ShowDurations::DefaultForReporter ), + runOrder( RunTests::InDeclarationOrder ) + {} + + bool listTests; + bool listTags; + bool listReporters; + bool listTestNamesOnly; + + bool showSuccessfulTests; + bool shouldDebugBreak; + bool noThrow; + bool showHelp; + bool showInvisibles; + bool forceColour; + + int abortAfter; + unsigned int rngSeed; + + Verbosity::Level verbosity; + WarnAbout::What warnings; + ShowDurations::OrNot showDurations; + RunTests::InWhatOrder runOrder; + + std::string reporterName; + std::string outputFilename; + std::string name; + std::string processName; + + std::vector<std::string> testsOrTags; + }; + + class Config : public SharedImpl<IConfig> { + private: + Config( Config const& other ); + Config& operator = ( Config const& other ); + virtual void dummy(); + public: + + Config() + : m_os( Catch::cout().rdbuf() ) + {} + + Config( ConfigData const& data ) + : m_data( data ), + m_os( Catch::cout().rdbuf() ) + { + if( !data.testsOrTags.empty() ) { + TestSpecParser parser( ITagAliasRegistry::get() ); + for( std::size_t i = 0; i < data.testsOrTags.size(); ++i ) + parser.parse( data.testsOrTags[i] ); + m_testSpec = parser.testSpec(); + } + } + + virtual ~Config() { + m_os.rdbuf( Catch::cout().rdbuf() ); + m_stream.release(); + } + + void setFilename( std::string const& filename ) { + m_data.outputFilename = filename; + } + + std::string const& getFilename() const { + return m_data.outputFilename ; + } + + bool listTests() const { return m_data.listTests; } + bool listTestNamesOnly() const { return m_data.listTestNamesOnly; } + bool listTags() const { return m_data.listTags; } + bool listReporters() const { return m_data.listReporters; } + + std::string getProcessName() const { return m_data.processName; } + + bool shouldDebugBreak() const { return m_data.shouldDebugBreak; } + + void setStreamBuf( std::streambuf* buf ) { + m_os.rdbuf( buf ? buf : Catch::cout().rdbuf() ); + } + + void useStream( std::string const& streamName ) { + Stream stream = createStream( streamName ); + setStreamBuf( stream.streamBuf ); + m_stream.release(); + m_stream = stream; + } + + std::string getReporterName() const { return m_data.reporterName; } + + int abortAfter() const { return m_data.abortAfter; } + + TestSpec const& testSpec() const { return m_testSpec; } + + bool showHelp() const { return m_data.showHelp; } + bool showInvisibles() const { return m_data.showInvisibles; } + + // IConfig interface + virtual bool allowThrows() const { return !m_data.noThrow; } + virtual std::ostream& stream() const { return m_os; } + virtual std::string name() const { return m_data.name.empty() ? m_data.processName : m_data.name; } + virtual bool includeSuccessfulResults() const { return m_data.showSuccessfulTests; } + virtual bool warnAboutMissingAssertions() const { return m_data.warnings & WarnAbout::NoAssertions; } + virtual ShowDurations::OrNot showDurations() const { return m_data.showDurations; } + virtual RunTests::InWhatOrder runOrder() const { return m_data.runOrder; } + virtual unsigned int rngSeed() const { return m_data.rngSeed; } + virtual bool forceColour() const { return m_data.forceColour; } + + private: + ConfigData m_data; + + Stream m_stream; + mutable std::ostream m_os; + TestSpec m_testSpec; + }; + +} // end namespace Catch + +// #included from: catch_clara.h +#define TWOBLUECUBES_CATCH_CLARA_H_INCLUDED + +// Use Catch's value for console width (store Clara's off to the side, if present) +#ifdef CLARA_CONFIG_CONSOLE_WIDTH +#define CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH CLARA_CONFIG_CONSOLE_WIDTH +#undef CLARA_CONFIG_CONSOLE_WIDTH +#endif +#define CLARA_CONFIG_CONSOLE_WIDTH CATCH_CONFIG_CONSOLE_WIDTH + +// Declare Clara inside the Catch namespace +#define STITCH_CLARA_OPEN_NAMESPACE namespace Catch { +// #included from: ../external/clara.h + +// Only use header guard if we are not using an outer namespace +#if !defined(TWOBLUECUBES_CLARA_H_INCLUDED) || defined(STITCH_CLARA_OPEN_NAMESPACE) + +#ifndef STITCH_CLARA_OPEN_NAMESPACE +#define TWOBLUECUBES_CLARA_H_INCLUDED +#define STITCH_CLARA_OPEN_NAMESPACE +#define STITCH_CLARA_CLOSE_NAMESPACE +#else +#define STITCH_CLARA_CLOSE_NAMESPACE } +#endif + +#define STITCH_TBC_TEXT_FORMAT_OPEN_NAMESPACE STITCH_CLARA_OPEN_NAMESPACE + +// ----------- #included from tbc_text_format.h ----------- + +// Only use header guard if we are not using an outer namespace +#if !defined(TBC_TEXT_FORMAT_H_INCLUDED) || defined(STITCH_TBC_TEXT_FORMAT_OUTER_NAMESPACE) +#ifndef STITCH_TBC_TEXT_FORMAT_OUTER_NAMESPACE +#define TBC_TEXT_FORMAT_H_INCLUDED +#endif + +#include <string> +#include <vector> +#include <sstream> + +// Use optional outer namespace +#ifdef STITCH_TBC_TEXT_FORMAT_OUTER_NAMESPACE +namespace STITCH_TBC_TEXT_FORMAT_OUTER_NAMESPACE { +#endif + +namespace Tbc { + +#ifdef TBC_TEXT_FORMAT_CONSOLE_WIDTH + const unsigned int consoleWidth = TBC_TEXT_FORMAT_CONSOLE_WIDTH; +#else + const unsigned int consoleWidth = 80; +#endif + + struct TextAttributes { + TextAttributes() + : initialIndent( std::string::npos ), + indent( 0 ), + width( consoleWidth-1 ), + tabChar( '\t' ) + {} + + TextAttributes& setInitialIndent( std::size_t _value ) { initialIndent = _value; return *this; } + TextAttributes& setIndent( std::size_t _value ) { indent = _value; return *this; } + TextAttributes& setWidth( std::size_t _value ) { width = _value; return *this; } + TextAttributes& setTabChar( char _value ) { tabChar = _value; return *this; } + + std::size_t initialIndent; // indent of first line, or npos + std::size_t indent; // indent of subsequent lines, or all if initialIndent is npos + std::size_t width; // maximum width of text, including indent. Longer text will wrap + char tabChar; // If this char is seen the indent is changed to current pos + }; + + class Text { + public: + Text( std::string const& _str, TextAttributes const& _attr = TextAttributes() ) + : attr( _attr ) + { + std::string wrappableChars = " [({.,/|\\-"; + std::size_t indent = _attr.initialIndent != std::string::npos + ? _attr.initialIndent + : _attr.indent; + std::string remainder = _str; + + while( !remainder.empty() ) { + if( lines.size() >= 1000 ) { + lines.push_back( "... message truncated due to excessive size" ); + return; + } + std::size_t tabPos = std::string::npos; + std::size_t width = (std::min)( remainder.size(), _attr.width - indent ); + std::size_t pos = remainder.find_first_of( '\n' ); + if( pos <= width ) { + width = pos; + } + pos = remainder.find_last_of( _attr.tabChar, width ); + if( pos != std::string::npos ) { + tabPos = pos; + if( remainder[width] == '\n' ) + width--; + remainder = remainder.substr( 0, tabPos ) + remainder.substr( tabPos+1 ); + } + + if( width == remainder.size() ) { + spliceLine( indent, remainder, width ); + } + else if( remainder[width] == '\n' ) { + spliceLine( indent, remainder, width ); + if( width <= 1 || remainder.size() != 1 ) + remainder = remainder.substr( 1 ); + indent = _attr.indent; + } + else { + pos = remainder.find_last_of( wrappableChars, width ); + if( pos != std::string::npos && pos > 0 ) { + spliceLine( indent, remainder, pos ); + if( remainder[0] == ' ' ) + remainder = remainder.substr( 1 ); + } + else { + spliceLine( indent, remainder, width-1 ); + lines.back() += "-"; + } + if( lines.size() == 1 ) + indent = _attr.indent; + if( tabPos != std::string::npos ) + indent += tabPos; + } + } + } + + void spliceLine( std::size_t _indent, std::string& _remainder, std::size_t _pos ) { + lines.push_back( std::string( _indent, ' ' ) + _remainder.substr( 0, _pos ) ); + _remainder = _remainder.substr( _pos ); + } + + typedef std::vector<std::string>::const_iterator const_iterator; + + const_iterator begin() const { return lines.begin(); } + const_iterator end() const { return lines.end(); } + std::string const& last() const { return lines.back(); } + std::size_t size() const { return lines.size(); } + std::string const& operator[]( std::size_t _index ) const { return lines[_index]; } + std::string toString() const { + std::ostringstream oss; + oss << *this; + return oss.str(); + } + + inline friend std::ostream& operator << ( std::ostream& _stream, Text const& _text ) { + for( Text::const_iterator it = _text.begin(), itEnd = _text.end(); + it != itEnd; ++it ) { + if( it != _text.begin() ) + _stream << "\n"; + _stream << *it; + } + return _stream; + } + + private: + std::string str; + TextAttributes attr; + std::vector<std::string> lines; + }; + +} // end namespace Tbc + +#ifdef STITCH_TBC_TEXT_FORMAT_OUTER_NAMESPACE +} // end outer namespace +#endif + +#endif // TBC_TEXT_FORMAT_H_INCLUDED + +// ----------- end of #include from tbc_text_format.h ----------- +// ........... back in /Users/philnash/Dev/OSS/Clara/srcs/clara.h + +#undef STITCH_TBC_TEXT_FORMAT_OPEN_NAMESPACE + +#include <map> +#include <algorithm> +#include <stdexcept> +#include <memory> + +// Use optional outer namespace +#ifdef STITCH_CLARA_OPEN_NAMESPACE +STITCH_CLARA_OPEN_NAMESPACE +#endif + +namespace Clara { + + struct UnpositionalTag {}; + + extern UnpositionalTag _; + +#ifdef CLARA_CONFIG_MAIN + UnpositionalTag _; +#endif + + namespace Detail { + +#ifdef CLARA_CONSOLE_WIDTH + const unsigned int consoleWidth = CLARA_CONFIG_CONSOLE_WIDTH; +#else + const unsigned int consoleWidth = 80; +#endif + + using namespace Tbc; + + inline bool startsWith( std::string const& str, std::string const& prefix ) { + return str.size() >= prefix.size() && str.substr( 0, prefix.size() ) == prefix; + } + + template<typename T> struct RemoveConstRef{ typedef T type; }; + template<typename T> struct RemoveConstRef<T&>{ typedef T type; }; + template<typename T> struct RemoveConstRef<T const&>{ typedef T type; }; + template<typename T> struct RemoveConstRef<T const>{ typedef T type; }; + + template<typename T> struct IsBool { static const bool value = false; }; + template<> struct IsBool<bool> { static const bool value = true; }; + + template<typename T> + void convertInto( std::string const& _source, T& _dest ) { + std::stringstream ss; + ss << _source; + ss >> _dest; + if( ss.fail() ) + throw std::runtime_error( "Unable to convert " + _source + " to destination type" ); + } + inline void convertInto( std::string const& _source, std::string& _dest ) { + _dest = _source; + } + inline void convertInto( std::string const& _source, bool& _dest ) { + std::string sourceLC = _source; + std::transform( sourceLC.begin(), sourceLC.end(), sourceLC.begin(), ::tolower ); + if( sourceLC == "y" || sourceLC == "1" || sourceLC == "true" || sourceLC == "yes" || sourceLC == "on" ) + _dest = true; + else if( sourceLC == "n" || sourceLC == "0" || sourceLC == "false" || sourceLC == "no" || sourceLC == "off" ) + _dest = false; + else + throw std::runtime_error( "Expected a boolean value but did not recognise:\n '" + _source + "'" ); + } + inline void convertInto( bool _source, bool& _dest ) { + _dest = _source; + } + template<typename T> + inline void convertInto( bool, T& ) { + throw std::runtime_error( "Invalid conversion" ); + } + + template<typename ConfigT> + struct IArgFunction { + virtual ~IArgFunction() {} +# ifdef CATCH_CPP11_OR_GREATER + IArgFunction() = default; + IArgFunction( IArgFunction const& ) = default; +# endif + virtual void set( ConfigT& config, std::string const& value ) const = 0; + virtual void setFlag( ConfigT& config ) const = 0; + virtual bool takesArg() const = 0; + virtual IArgFunction* clone() const = 0; + }; + + template<typename ConfigT> + class BoundArgFunction { + public: + BoundArgFunction() : functionObj( NULL ) {} + BoundArgFunction( IArgFunction<ConfigT>* _functionObj ) : functionObj( _functionObj ) {} + BoundArgFunction( BoundArgFunction const& other ) : functionObj( other.functionObj ? other.functionObj->clone() : NULL ) {} + BoundArgFunction& operator = ( BoundArgFunction const& other ) { + IArgFunction<ConfigT>* newFunctionObj = other.functionObj ? other.functionObj->clone() : NULL; + delete functionObj; + functionObj = newFunctionObj; + return *this; + } + ~BoundArgFunction() { delete functionObj; } + + void set( ConfigT& config, std::string const& value ) const { + functionObj->set( config, value ); + } + void setFlag( ConfigT& config ) const { + functionObj->setFlag( config ); + } + bool takesArg() const { return functionObj->takesArg(); } + + bool isSet() const { + return functionObj != NULL; + } + private: + IArgFunction<ConfigT>* functionObj; + }; + + template<typename C> + struct NullBinder : IArgFunction<C>{ + virtual void set( C&, std::string const& ) const {} + virtual void setFlag( C& ) const {} + virtual bool takesArg() const { return true; } + virtual IArgFunction<C>* clone() const { return new NullBinder( *this ); } + }; + + template<typename C, typename M> + struct BoundDataMember : IArgFunction<C>{ + BoundDataMember( M C::* _member ) : member( _member ) {} + virtual void set( C& p, std::string const& stringValue ) const { + convertInto( stringValue, p.*member ); + } + virtual void setFlag( C& p ) const { + convertInto( true, p.*member ); + } + virtual bool takesArg() const { return !IsBool<M>::value; } + virtual IArgFunction<C>* clone() const { return new BoundDataMember( *this ); } + M C::* member; + }; + template<typename C, typename M> + struct BoundUnaryMethod : IArgFunction<C>{ + BoundUnaryMethod( void (C::*_member)( M ) ) : member( _member ) {} + virtual void set( C& p, std::string const& stringValue ) const { + typename RemoveConstRef<M>::type value; + convertInto( stringValue, value ); + (p.*member)( value ); + } + virtual void setFlag( C& p ) const { + typename RemoveConstRef<M>::type value; + convertInto( true, value ); + (p.*member)( value ); + } + virtual bool takesArg() const { return !IsBool<M>::value; } + virtual IArgFunction<C>* clone() const { return new BoundUnaryMethod( *this ); } + void (C::*member)( M ); + }; + template<typename C> + struct BoundNullaryMethod : IArgFunction<C>{ + BoundNullaryMethod( void (C::*_member)() ) : member( _member ) {} + virtual void set( C& p, std::string const& stringValue ) const { + bool value; + convertInto( stringValue, value ); + if( value ) + (p.*member)(); + } + virtual void setFlag( C& p ) const { + (p.*member)(); + } + virtual bool takesArg() const { return false; } + virtual IArgFunction<C>* clone() const { return new BoundNullaryMethod( *this ); } + void (C::*member)(); + }; + + template<typename C> + struct BoundUnaryFunction : IArgFunction<C>{ + BoundUnaryFunction( void (*_function)( C& ) ) : function( _function ) {} + virtual void set( C& obj, std::string const& stringValue ) const { + bool value; + convertInto( stringValue, value ); + if( value ) + function( obj ); + } + virtual void setFlag( C& p ) const { + function( p ); + } + virtual bool takesArg() const { return false; } + virtual IArgFunction<C>* clone() const { return new BoundUnaryFunction( *this ); } + void (*function)( C& ); + }; + + template<typename C, typename T> + struct BoundBinaryFunction : IArgFunction<C>{ + BoundBinaryFunction( void (*_function)( C&, T ) ) : function( _function ) {} + virtual void set( C& obj, std::string const& stringValue ) const { + typename RemoveConstRef<T>::type value; + convertInto( stringValue, value ); + function( obj, value ); + } + virtual void setFlag( C& obj ) const { + typename RemoveConstRef<T>::type value; + convertInto( true, value ); + function( obj, value ); + } + virtual bool takesArg() const { return !IsBool<T>::value; } + virtual IArgFunction<C>* clone() const { return new BoundBinaryFunction( *this ); } + void (*function)( C&, T ); + }; + + } // namespace Detail + + struct Parser { + Parser() : separators( " \t=:" ) {} + + struct Token { + enum Type { Positional, ShortOpt, LongOpt }; + Token( Type _type, std::string const& _data ) : type( _type ), data( _data ) {} + Type type; + std::string data; + }; + + void parseIntoTokens( int argc, char const * const * argv, std::vector<Parser::Token>& tokens ) const { + const std::string doubleDash = "--"; + for( int i = 1; i < argc && argv[i] != doubleDash; ++i ) + parseIntoTokens( argv[i] , tokens); + } + void parseIntoTokens( std::string arg, std::vector<Parser::Token>& tokens ) const { + while( !arg.empty() ) { + Parser::Token token( Parser::Token::Positional, arg ); + arg = ""; + if( token.data[0] == '-' ) { + if( token.data.size() > 1 && token.data[1] == '-' ) { + token = Parser::Token( Parser::Token::LongOpt, token.data.substr( 2 ) ); + } + else { + token = Parser::Token( Parser::Token::ShortOpt, token.data.substr( 1 ) ); + if( token.data.size() > 1 && separators.find( token.data[1] ) == std::string::npos ) { + arg = "-" + token.data.substr( 1 ); + token.data = token.data.substr( 0, 1 ); + } + } + } + if( token.type != Parser::Token::Positional ) { + std::size_t pos = token.data.find_first_of( separators ); + if( pos != std::string::npos ) { + arg = token.data.substr( pos+1 ); + token.data = token.data.substr( 0, pos ); + } + } + tokens.push_back( token ); + } + } + std::string separators; + }; + + template<typename ConfigT> + struct CommonArgProperties { + CommonArgProperties() {} + CommonArgProperties( Detail::BoundArgFunction<ConfigT> const& _boundField ) : boundField( _boundField ) {} + + Detail::BoundArgFunction<ConfigT> boundField; + std::string description; + std::string detail; + std::string placeholder; // Only value if boundField takes an arg + + bool takesArg() const { + return !placeholder.empty(); + } + void validate() const { + if( !boundField.isSet() ) + throw std::logic_error( "option not bound" ); + } + }; + struct OptionArgProperties { + std::vector<std::string> shortNames; + std::string longName; + + bool hasShortName( std::string const& shortName ) const { + return std::find( shortNames.begin(), shortNames.end(), shortName ) != shortNames.end(); + } + bool hasLongName( std::string const& _longName ) const { + return _longName == longName; + } + }; + struct PositionalArgProperties { + PositionalArgProperties() : position( -1 ) {} + int position; // -1 means non-positional (floating) + + bool isFixedPositional() const { + return position != -1; + } + }; + + template<typename ConfigT> + class CommandLine { + + struct Arg : CommonArgProperties<ConfigT>, OptionArgProperties, PositionalArgProperties { + Arg() {} + Arg( Detail::BoundArgFunction<ConfigT> const& _boundField ) : CommonArgProperties<ConfigT>( _boundField ) {} + + using CommonArgProperties<ConfigT>::placeholder; // !TBD + + std::string dbgName() const { + if( !longName.empty() ) + return "--" + longName; + if( !shortNames.empty() ) + return "-" + shortNames[0]; + return "positional args"; + } + std::string commands() const { + std::ostringstream oss; + bool first = true; + std::vector<std::string>::const_iterator it = shortNames.begin(), itEnd = shortNames.end(); + for(; it != itEnd; ++it ) { + if( first ) + first = false; + else + oss << ", "; + oss << "-" << *it; + } + if( !longName.empty() ) { + if( !first ) + oss << ", "; + oss << "--" << longName; + } + if( !placeholder.empty() ) + oss << " <" << placeholder << ">"; + return oss.str(); + } + }; + + // NOTE: std::auto_ptr is deprecated in c++11/c++0x +#if defined(__cplusplus) && __cplusplus > 199711L + typedef std::unique_ptr<Arg> ArgAutoPtr; +#else + typedef std::auto_ptr<Arg> ArgAutoPtr; +#endif + + friend void addOptName( Arg& arg, std::string const& optName ) + { + if( optName.empty() ) + return; + if( Detail::startsWith( optName, "--" ) ) { + if( !arg.longName.empty() ) + throw std::logic_error( "Only one long opt may be specified. '" + + arg.longName + + "' already specified, now attempting to add '" + + optName + "'" ); + arg.longName = optName.substr( 2 ); + } + else if( Detail::startsWith( optName, "-" ) ) + arg.shortNames.push_back( optName.substr( 1 ) ); + else + throw std::logic_error( "option must begin with - or --. Option was: '" + optName + "'" ); + } + friend void setPositionalArg( Arg& arg, int position ) + { + arg.position = position; + } + + class ArgBuilder { + public: + ArgBuilder( Arg* arg ) : m_arg( arg ) {} + + // Bind a non-boolean data member (requires placeholder string) + template<typename C, typename M> + void bind( M C::* field, std::string const& placeholder ) { + m_arg->boundField = new Detail::BoundDataMember<C,M>( field ); + m_arg->placeholder = placeholder; + } + // Bind a boolean data member (no placeholder required) + template<typename C> + void bind( bool C::* field ) { + m_arg->boundField = new Detail::BoundDataMember<C,bool>( field ); + } + + // Bind a method taking a single, non-boolean argument (requires a placeholder string) + template<typename C, typename M> + void bind( void (C::* unaryMethod)( M ), std::string const& placeholder ) { + m_arg->boundField = new Detail::BoundUnaryMethod<C,M>( unaryMethod ); + m_arg->placeholder = placeholder; + } + + // Bind a method taking a single, boolean argument (no placeholder string required) + template<typename C> + void bind( void (C::* unaryMethod)( bool ) ) { + m_arg->boundField = new Detail::BoundUnaryMethod<C,bool>( unaryMethod ); + } + + // Bind a method that takes no arguments (will be called if opt is present) + template<typename C> + void bind( void (C::* nullaryMethod)() ) { + m_arg->boundField = new Detail::BoundNullaryMethod<C>( nullaryMethod ); + } + + // Bind a free function taking a single argument - the object to operate on (no placeholder string required) + template<typename C> + void bind( void (* unaryFunction)( C& ) ) { + m_arg->boundField = new Detail::BoundUnaryFunction<C>( unaryFunction ); + } + + // Bind a free function taking a single argument - the object to operate on (requires a placeholder string) + template<typename C, typename T> + void bind( void (* binaryFunction)( C&, T ), std::string const& placeholder ) { + m_arg->boundField = new Detail::BoundBinaryFunction<C, T>( binaryFunction ); + m_arg->placeholder = placeholder; + } + + ArgBuilder& describe( std::string const& description ) { + m_arg->description = description; + return *this; + } + ArgBuilder& detail( std::string const& detail ) { + m_arg->detail = detail; + return *this; + } + + protected: + Arg* m_arg; + }; + + class OptBuilder : public ArgBuilder { + public: + OptBuilder( Arg* arg ) : ArgBuilder( arg ) {} + OptBuilder( OptBuilder& other ) : ArgBuilder( other ) {} + + OptBuilder& operator[]( std::string const& optName ) { + addOptName( *ArgBuilder::m_arg, optName ); + return *this; + } + }; + + public: + + CommandLine() + : m_boundProcessName( new Detail::NullBinder<ConfigT>() ), + m_highestSpecifiedArgPosition( 0 ), + m_throwOnUnrecognisedTokens( false ) + {} + CommandLine( CommandLine const& other ) + : m_boundProcessName( other.m_boundProcessName ), + m_options ( other.m_options ), + m_positionalArgs( other.m_positionalArgs ), + m_highestSpecifiedArgPosition( other.m_highestSpecifiedArgPosition ), + m_throwOnUnrecognisedTokens( other.m_throwOnUnrecognisedTokens ) + { + if( other.m_floatingArg.get() ) + m_floatingArg.reset( new Arg( *other.m_floatingArg ) ); + } + + CommandLine& setThrowOnUnrecognisedTokens( bool shouldThrow = true ) { + m_throwOnUnrecognisedTokens = shouldThrow; + return *this; + } + + OptBuilder operator[]( std::string const& optName ) { + m_options.push_back( Arg() ); + addOptName( m_options.back(), optName ); + OptBuilder builder( &m_options.back() ); + return builder; + } + + ArgBuilder operator[]( int position ) { + m_positionalArgs.insert( std::make_pair( position, Arg() ) ); + if( position > m_highestSpecifiedArgPosition ) + m_highestSpecifiedArgPosition = position; + setPositionalArg( m_positionalArgs[position], position ); + ArgBuilder builder( &m_positionalArgs[position] ); + return builder; + } + + // Invoke this with the _ instance + ArgBuilder operator[]( UnpositionalTag ) { + if( m_floatingArg.get() ) + throw std::logic_error( "Only one unpositional argument can be added" ); + m_floatingArg.reset( new Arg() ); + ArgBuilder builder( m_floatingArg.get() ); + return builder; + } + + template<typename C, typename M> + void bindProcessName( M C::* field ) { + m_boundProcessName = new Detail::BoundDataMember<C,M>( field ); + } + template<typename C, typename M> + void bindProcessName( void (C::*_unaryMethod)( M ) ) { + m_boundProcessName = new Detail::BoundUnaryMethod<C,M>( _unaryMethod ); + } + + void optUsage( std::ostream& os, std::size_t indent = 0, std::size_t width = Detail::consoleWidth ) const { + typename std::vector<Arg>::const_iterator itBegin = m_options.begin(), itEnd = m_options.end(), it; + std::size_t maxWidth = 0; + for( it = itBegin; it != itEnd; ++it ) + maxWidth = (std::max)( maxWidth, it->commands().size() ); + + for( it = itBegin; it != itEnd; ++it ) { + Detail::Text usage( it->commands(), Detail::TextAttributes() + .setWidth( maxWidth+indent ) + .setIndent( indent ) ); + Detail::Text desc( it->description, Detail::TextAttributes() + .setWidth( width - maxWidth - 3 ) ); + + for( std::size_t i = 0; i < (std::max)( usage.size(), desc.size() ); ++i ) { + std::string usageCol = i < usage.size() ? usage[i] : ""; + os << usageCol; + + if( i < desc.size() && !desc[i].empty() ) + os << std::string( indent + 2 + maxWidth - usageCol.size(), ' ' ) + << desc[i]; + os << "\n"; + } + } + } + std::string optUsage() const { + std::ostringstream oss; + optUsage( oss ); + return oss.str(); + } + + void argSynopsis( std::ostream& os ) const { + for( int i = 1; i <= m_highestSpecifiedArgPosition; ++i ) { + if( i > 1 ) + os << " "; + typename std::map<int, Arg>::const_iterator it = m_positionalArgs.find( i ); + if( it != m_positionalArgs.end() ) + os << "<" << it->second.placeholder << ">"; + else if( m_floatingArg.get() ) + os << "<" << m_floatingArg->placeholder << ">"; + else + throw std::logic_error( "non consecutive positional arguments with no floating args" ); + } + // !TBD No indication of mandatory args + if( m_floatingArg.get() ) { + if( m_highestSpecifiedArgPosition > 1 ) + os << " "; + os << "[<" << m_floatingArg->placeholder << "> ...]"; + } + } + std::string argSynopsis() const { + std::ostringstream oss; + argSynopsis( oss ); + return oss.str(); + } + + void usage( std::ostream& os, std::string const& procName ) const { + validate(); + os << "usage:\n " << procName << " "; + argSynopsis( os ); + if( !m_options.empty() ) { + os << " [options]\n\nwhere options are: \n"; + optUsage( os, 2 ); + } + os << "\n"; + } + std::string usage( std::string const& procName ) const { + std::ostringstream oss; + usage( oss, procName ); + return oss.str(); + } + + ConfigT parse( int argc, char const * const * argv ) const { + ConfigT config; + parseInto( argc, argv, config ); + return config; + } + + std::vector<Parser::Token> parseInto( int argc, char const * const * argv, ConfigT& config ) const { + std::string processName = argv[0]; + std::size_t lastSlash = processName.find_last_of( "/\\" ); + if( lastSlash != std::string::npos ) + processName = processName.substr( lastSlash+1 ); + m_boundProcessName.set( config, processName ); + std::vector<Parser::Token> tokens; + Parser parser; + parser.parseIntoTokens( argc, argv, tokens ); + return populate( tokens, config ); + } + + std::vector<Parser::Token> populate( std::vector<Parser::Token> const& tokens, ConfigT& config ) const { + validate(); + std::vector<Parser::Token> unusedTokens = populateOptions( tokens, config ); + unusedTokens = populateFixedArgs( unusedTokens, config ); + unusedTokens = populateFloatingArgs( unusedTokens, config ); + return unusedTokens; + } + + std::vector<Parser::Token> populateOptions( std::vector<Parser::Token> const& tokens, ConfigT& config ) const { + std::vector<Parser::Token> unusedTokens; + std::vector<std::string> errors; + for( std::size_t i = 0; i < tokens.size(); ++i ) { + Parser::Token const& token = tokens[i]; + typename std::vector<Arg>::const_iterator it = m_options.begin(), itEnd = m_options.end(); + for(; it != itEnd; ++it ) { + Arg const& arg = *it; + + try { + if( ( token.type == Parser::Token::ShortOpt && arg.hasShortName( token.data ) ) || + ( token.type == Parser::Token::LongOpt && arg.hasLongName( token.data ) ) ) { + if( arg.takesArg() ) { + if( i == tokens.size()-1 || tokens[i+1].type != Parser::Token::Positional ) + errors.push_back( "Expected argument to option: " + token.data ); + else + arg.boundField.set( config, tokens[++i].data ); + } + else { + arg.boundField.setFlag( config ); + } + break; + } + } + catch( std::exception& ex ) { + errors.push_back( std::string( ex.what() ) + "\n- while parsing: (" + arg.commands() + ")" ); + } + } + if( it == itEnd ) { + if( token.type == Parser::Token::Positional || !m_throwOnUnrecognisedTokens ) + unusedTokens.push_back( token ); + else if( errors.empty() && m_throwOnUnrecognisedTokens ) + errors.push_back( "unrecognised option: " + token.data ); + } + } + if( !errors.empty() ) { + std::ostringstream oss; + for( std::vector<std::string>::const_iterator it = errors.begin(), itEnd = errors.end(); + it != itEnd; + ++it ) { + if( it != errors.begin() ) + oss << "\n"; + oss << *it; + } + throw std::runtime_error( oss.str() ); + } + return unusedTokens; + } + std::vector<Parser::Token> populateFixedArgs( std::vector<Parser::Token> const& tokens, ConfigT& config ) const { + std::vector<Parser::Token> unusedTokens; + int position = 1; + for( std::size_t i = 0; i < tokens.size(); ++i ) { + Parser::Token const& token = tokens[i]; + typename std::map<int, Arg>::const_iterator it = m_positionalArgs.find( position ); + if( it != m_positionalArgs.end() ) + it->second.boundField.set( config, token.data ); + else + unusedTokens.push_back( token ); + if( token.type == Parser::Token::Positional ) + position++; + } + return unusedTokens; + } + std::vector<Parser::Token> populateFloatingArgs( std::vector<Parser::Token> const& tokens, ConfigT& config ) const { + if( !m_floatingArg.get() ) + return tokens; + std::vector<Parser::Token> unusedTokens; + for( std::size_t i = 0; i < tokens.size(); ++i ) { + Parser::Token const& token = tokens[i]; + if( token.type == Parser::Token::Positional ) + m_floatingArg->boundField.set( config, token.data ); + else + unusedTokens.push_back( token ); + } + return unusedTokens; + } + + void validate() const + { + if( m_options.empty() && m_positionalArgs.empty() && !m_floatingArg.get() ) + throw std::logic_error( "No options or arguments specified" ); + + for( typename std::vector<Arg>::const_iterator it = m_options.begin(), + itEnd = m_options.end(); + it != itEnd; ++it ) + it->validate(); + } + + private: + Detail::BoundArgFunction<ConfigT> m_boundProcessName; + std::vector<Arg> m_options; + std::map<int, Arg> m_positionalArgs; + ArgAutoPtr m_floatingArg; + int m_highestSpecifiedArgPosition; + bool m_throwOnUnrecognisedTokens; + }; + +} // end namespace Clara + +STITCH_CLARA_CLOSE_NAMESPACE +#undef STITCH_CLARA_OPEN_NAMESPACE +#undef STITCH_CLARA_CLOSE_NAMESPACE + +#endif // TWOBLUECUBES_CLARA_H_INCLUDED +#undef STITCH_CLARA_OPEN_NAMESPACE + +// Restore Clara's value for console width, if present +#ifdef CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH +#define CLARA_CONFIG_CONSOLE_WIDTH CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH +#undef CATCH_TEMP_CLARA_CONFIG_CONSOLE_WIDTH +#endif + +#include <fstream> + +namespace Catch { + + inline void abortAfterFirst( ConfigData& config ) { config.abortAfter = 1; } + inline void abortAfterX( ConfigData& config, int x ) { + if( x < 1 ) + throw std::runtime_error( "Value after -x or --abortAfter must be greater than zero" ); + config.abortAfter = x; + } + inline void addTestOrTags( ConfigData& config, std::string const& _testSpec ) { config.testsOrTags.push_back( _testSpec ); } + + inline void addWarning( ConfigData& config, std::string const& _warning ) { + if( _warning == "NoAssertions" ) + config.warnings = static_cast<WarnAbout::What>( config.warnings | WarnAbout::NoAssertions ); + else + throw std::runtime_error( "Unrecognised warning: '" + _warning + "'" ); + } + inline void setOrder( ConfigData& config, std::string const& order ) { + if( startsWith( "declared", order ) ) + config.runOrder = RunTests::InDeclarationOrder; + else if( startsWith( "lexical", order ) ) + config.runOrder = RunTests::InLexicographicalOrder; + else if( startsWith( "random", order ) ) + config.runOrder = RunTests::InRandomOrder; + else + throw std::runtime_error( "Unrecognised ordering: '" + order + "'" ); + } + inline void setRngSeed( ConfigData& config, std::string const& seed ) { + if( seed == "time" ) { + config.rngSeed = static_cast<unsigned int>( std::time(0) ); + } + else { + std::stringstream ss; + ss << seed; + ss >> config.rngSeed; + if( ss.fail() ) + throw std::runtime_error( "Argment to --rng-seed should be the word 'time' or a number" ); + } + } + inline void setVerbosity( ConfigData& config, int level ) { + // !TBD: accept strings? + config.verbosity = static_cast<Verbosity::Level>( level ); + } + inline void setShowDurations( ConfigData& config, bool _showDurations ) { + config.showDurations = _showDurations + ? ShowDurations::Always + : ShowDurations::Never; + } + inline void loadTestNamesFromFile( ConfigData& config, std::string const& _filename ) { + std::ifstream f( _filename.c_str() ); + if( !f.is_open() ) + throw std::domain_error( "Unable to load input file: " + _filename ); + + std::string line; + while( std::getline( f, line ) ) { + line = trim(line); + if( !line.empty() && !startsWith( line, "#" ) ) + addTestOrTags( config, "\"" + line + "\"," ); + } + } + + inline Clara::CommandLine<ConfigData> makeCommandLineParser() { + + using namespace Clara; + CommandLine<ConfigData> cli; + + cli.bindProcessName( &ConfigData::processName ); + + cli["-?"]["-h"]["--help"] + .describe( "display usage information" ) + .bind( &ConfigData::showHelp ); + + cli["-l"]["--list-tests"] + .describe( "list all/matching test cases" ) + .bind( &ConfigData::listTests ); + + cli["-t"]["--list-tags"] + .describe( "list all/matching tags" ) + .bind( &ConfigData::listTags ); + + cli["-s"]["--success"] + .describe( "include successful tests in output" ) + .bind( &ConfigData::showSuccessfulTests ); + + cli["-b"]["--break"] + .describe( "break into debugger on failure" ) + .bind( &ConfigData::shouldDebugBreak ); + + cli["-e"]["--nothrow"] + .describe( "skip exception tests" ) + .bind( &ConfigData::noThrow ); + + cli["-i"]["--invisibles"] + .describe( "show invisibles (tabs, newlines)" ) + .bind( &ConfigData::showInvisibles ); + + cli["-o"]["--out"] + .describe( "output filename" ) + .bind( &ConfigData::outputFilename, "filename" ); + + cli["-r"]["--reporter"] +// .placeholder( "name[:filename]" ) + .describe( "reporter to use (defaults to console)" ) + .bind( &ConfigData::reporterName, "name" ); + + cli["-n"]["--name"] + .describe( "suite name" ) + .bind( &ConfigData::name, "name" ); + + cli["-a"]["--abort"] + .describe( "abort at first failure" ) + .bind( &abortAfterFirst ); + + cli["-x"]["--abortx"] + .describe( "abort after x failures" ) + .bind( &abortAfterX, "no. failures" ); + + cli["-w"]["--warn"] + .describe( "enable warnings" ) + .bind( &addWarning, "warning name" ); + +// - needs updating if reinstated +// cli.into( &setVerbosity ) +// .describe( "level of verbosity (0=no output)" ) +// .shortOpt( "v") +// .longOpt( "verbosity" ) +// .placeholder( "level" ); + + cli[_] + .describe( "which test or tests to use" ) + .bind( &addTestOrTags, "test name, pattern or tags" ); + + cli["-d"]["--durations"] + .describe( "show test durations" ) + .bind( &setShowDurations, "yes/no" ); + + cli["-f"]["--input-file"] + .describe( "load test names to run from a file" ) + .bind( &loadTestNamesFromFile, "filename" ); + + // Less common commands which don't have a short form + cli["--list-test-names-only"] + .describe( "list all/matching test cases names only" ) + .bind( &ConfigData::listTestNamesOnly ); + + cli["--list-reporters"] + .describe( "list all reporters" ) + .bind( &ConfigData::listReporters ); + + cli["--order"] + .describe( "test case order (defaults to decl)" ) + .bind( &setOrder, "decl|lex|rand" ); + + cli["--rng-seed"] + .describe( "set a specific seed for random numbers" ) + .bind( &setRngSeed, "'time'|number" ); + + cli["--force-colour"] + .describe( "force colourised output" ) + .bind( &ConfigData::forceColour ); + + return cli; + } + +} // end namespace Catch + +// #included from: internal/catch_list.hpp +#define TWOBLUECUBES_CATCH_LIST_HPP_INCLUDED + +// #included from: catch_text.h +#define TWOBLUECUBES_CATCH_TEXT_H_INCLUDED + +#define TBC_TEXT_FORMAT_CONSOLE_WIDTH CATCH_CONFIG_CONSOLE_WIDTH + +#define CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE Catch +// #included from: ../external/tbc_text_format.h +// Only use header guard if we are not using an outer namespace +#ifndef CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE +# ifdef TWOBLUECUBES_TEXT_FORMAT_H_INCLUDED +# ifndef TWOBLUECUBES_TEXT_FORMAT_H_ALREADY_INCLUDED +# define TWOBLUECUBES_TEXT_FORMAT_H_ALREADY_INCLUDED +# endif +# else +# define TWOBLUECUBES_TEXT_FORMAT_H_INCLUDED +# endif +#endif +#ifndef TWOBLUECUBES_TEXT_FORMAT_H_ALREADY_INCLUDED +#include <string> +#include <vector> +#include <sstream> + +// Use optional outer namespace +#ifdef CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE +namespace CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE { +#endif + +namespace Tbc { + +#ifdef TBC_TEXT_FORMAT_CONSOLE_WIDTH + const unsigned int consoleWidth = TBC_TEXT_FORMAT_CONSOLE_WIDTH; +#else + const unsigned int consoleWidth = 80; +#endif + + struct TextAttributes { + TextAttributes() + : initialIndent( std::string::npos ), + indent( 0 ), + width( consoleWidth-1 ), + tabChar( '\t' ) + {} + + TextAttributes& setInitialIndent( std::size_t _value ) { initialIndent = _value; return *this; } + TextAttributes& setIndent( std::size_t _value ) { indent = _value; return *this; } + TextAttributes& setWidth( std::size_t _value ) { width = _value; return *this; } + TextAttributes& setTabChar( char _value ) { tabChar = _value; return *this; } + + std::size_t initialIndent; // indent of first line, or npos + std::size_t indent; // indent of subsequent lines, or all if initialIndent is npos + std::size_t width; // maximum width of text, including indent. Longer text will wrap + char tabChar; // If this char is seen the indent is changed to current pos + }; + + class Text { + public: + Text( std::string const& _str, TextAttributes const& _attr = TextAttributes() ) + : attr( _attr ) + { + std::string wrappableChars = " [({.,/|\\-"; + std::size_t indent = _attr.initialIndent != std::string::npos + ? _attr.initialIndent + : _attr.indent; + std::string remainder = _str; + + while( !remainder.empty() ) { + if( lines.size() >= 1000 ) { + lines.push_back( "... message truncated due to excessive size" ); + return; + } + std::size_t tabPos = std::string::npos; + std::size_t width = (std::min)( remainder.size(), _attr.width - indent ); + std::size_t pos = remainder.find_first_of( '\n' ); + if( pos <= width ) { + width = pos; + } + pos = remainder.find_last_of( _attr.tabChar, width ); + if( pos != std::string::npos ) { + tabPos = pos; + if( remainder[width] == '\n' ) + width--; + remainder = remainder.substr( 0, tabPos ) + remainder.substr( tabPos+1 ); + } + + if( width == remainder.size() ) { + spliceLine( indent, remainder, width ); + } + else if( remainder[width] == '\n' ) { + spliceLine( indent, remainder, width ); + if( width <= 1 || remainder.size() != 1 ) + remainder = remainder.substr( 1 ); + indent = _attr.indent; + } + else { + pos = remainder.find_last_of( wrappableChars, width ); + if( pos != std::string::npos && pos > 0 ) { + spliceLine( indent, remainder, pos ); + if( remainder[0] == ' ' ) + remainder = remainder.substr( 1 ); + } + else { + spliceLine( indent, remainder, width-1 ); + lines.back() += "-"; + } + if( lines.size() == 1 ) + indent = _attr.indent; + if( tabPos != std::string::npos ) + indent += tabPos; + } + } + } + + void spliceLine( std::size_t _indent, std::string& _remainder, std::size_t _pos ) { + lines.push_back( std::string( _indent, ' ' ) + _remainder.substr( 0, _pos ) ); + _remainder = _remainder.substr( _pos ); + } + + typedef std::vector<std::string>::const_iterator const_iterator; + + const_iterator begin() const { return lines.begin(); } + const_iterator end() const { return lines.end(); } + std::string const& last() const { return lines.back(); } + std::size_t size() const { return lines.size(); } + std::string const& operator[]( std::size_t _index ) const { return lines[_index]; } + std::string toString() const { + std::ostringstream oss; + oss << *this; + return oss.str(); + } + + inline friend std::ostream& operator << ( std::ostream& _stream, Text const& _text ) { + for( Text::const_iterator it = _text.begin(), itEnd = _text.end(); + it != itEnd; ++it ) { + if( it != _text.begin() ) + _stream << "\n"; + _stream << *it; + } + return _stream; + } + + private: + std::string str; + TextAttributes attr; + std::vector<std::string> lines; + }; + +} // end namespace Tbc + +#ifdef CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE +} // end outer namespace +#endif + +#endif // TWOBLUECUBES_TEXT_FORMAT_H_ALREADY_INCLUDED +#undef CLICHE_TBC_TEXT_FORMAT_OUTER_NAMESPACE + +namespace Catch { + using Tbc::Text; + using Tbc::TextAttributes; +} + +// #included from: catch_console_colour.hpp +#define TWOBLUECUBES_CATCH_CONSOLE_COLOUR_HPP_INCLUDED + +namespace Catch { + + struct Colour { + enum Code { + None = 0, + + White, + Red, + Green, + Blue, + Cyan, + Yellow, + Grey, + + Bright = 0x10, + + BrightRed = Bright | Red, + BrightGreen = Bright | Green, + LightGrey = Bright | Grey, + BrightWhite = Bright | White, + + // By intention + FileName = LightGrey, + Warning = Yellow, + ResultError = BrightRed, + ResultSuccess = BrightGreen, + ResultExpectedFailure = Warning, + + Error = BrightRed, + Success = Green, + + OriginalExpression = Cyan, + ReconstructedExpression = Yellow, + + SecondaryText = LightGrey, + Headers = White + }; + + // Use constructed object for RAII guard + Colour( Code _colourCode ); + Colour( Colour const& other ); + ~Colour(); + + // Use static method for one-shot changes + static void use( Code _colourCode ); + + private: + bool m_moved; + }; + + inline std::ostream& operator << ( std::ostream& os, Colour const& ) { return os; } + +} // end namespace Catch + +// #included from: catch_interfaces_reporter.h +#define TWOBLUECUBES_CATCH_INTERFACES_REPORTER_H_INCLUDED + +#include <string> +#include <ostream> +#include <map> +#include <assert.h> + +namespace Catch +{ + struct ReporterConfig { + explicit ReporterConfig( Ptr<IConfig> const& _fullConfig ) + : m_stream( &_fullConfig->stream() ), m_fullConfig( _fullConfig ) {} + + ReporterConfig( Ptr<IConfig> const& _fullConfig, std::ostream& _stream ) + : m_stream( &_stream ), m_fullConfig( _fullConfig ) {} + + std::ostream& stream() const { return *m_stream; } + Ptr<IConfig> fullConfig() const { return m_fullConfig; } + + private: + std::ostream* m_stream; + Ptr<IConfig> m_fullConfig; + }; + + struct ReporterPreferences { + ReporterPreferences() + : shouldRedirectStdOut( false ) + {} + + bool shouldRedirectStdOut; + }; + + template<typename T> + struct LazyStat : Option<T> { + LazyStat() : used( false ) {} + LazyStat& operator=( T const& _value ) { + Option<T>::operator=( _value ); + used = false; + return *this; + } + void reset() { + Option<T>::reset(); + used = false; + } + bool used; + }; + + struct TestRunInfo { + TestRunInfo( std::string const& _name ) : name( _name ) {} + std::string name; + }; + struct GroupInfo { + GroupInfo( std::string const& _name, + std::size_t _groupIndex, + std::size_t _groupsCount ) + : name( _name ), + groupIndex( _groupIndex ), + groupsCounts( _groupsCount ) + {} + + std::string name; + std::size_t groupIndex; + std::size_t groupsCounts; + }; + + struct AssertionStats { + AssertionStats( AssertionResult const& _assertionResult, + std::vector<MessageInfo> const& _infoMessages, + Totals const& _totals ) + : assertionResult( _assertionResult ), + infoMessages( _infoMessages ), + totals( _totals ) + { + if( assertionResult.hasMessage() ) { + // Copy message into messages list. + // !TBD This should have been done earlier, somewhere + MessageBuilder builder( assertionResult.getTestMacroName(), assertionResult.getSourceInfo(), assertionResult.getResultType() ); + builder << assertionResult.getMessage(); + builder.m_info.message = builder.m_stream.str(); + + infoMessages.push_back( builder.m_info ); + } + } + virtual ~AssertionStats(); + +# ifdef CATCH_CPP11_OR_GREATER + AssertionStats( AssertionStats const& ) = default; + AssertionStats( AssertionStats && ) = default; + AssertionStats& operator = ( AssertionStats const& ) = default; + AssertionStats& operator = ( AssertionStats && ) = default; +# endif + + AssertionResult assertionResult; + std::vector<MessageInfo> infoMessages; + Totals totals; + }; + + struct SectionStats { + SectionStats( SectionInfo const& _sectionInfo, + Counts const& _assertions, + double _durationInSeconds, + bool _missingAssertions ) + : sectionInfo( _sectionInfo ), + assertions( _assertions ), + durationInSeconds( _durationInSeconds ), + missingAssertions( _missingAssertions ) + {} + virtual ~SectionStats(); +# ifdef CATCH_CPP11_OR_GREATER + SectionStats( SectionStats const& ) = default; + SectionStats( SectionStats && ) = default; + SectionStats& operator = ( SectionStats const& ) = default; + SectionStats& operator = ( SectionStats && ) = default; +# endif + + SectionInfo sectionInfo; + Counts assertions; + double durationInSeconds; + bool missingAssertions; + }; + + struct TestCaseStats { + TestCaseStats( TestCaseInfo const& _testInfo, + Totals const& _totals, + std::string const& _stdOut, + std::string const& _stdErr, + bool _aborting ) + : testInfo( _testInfo ), + totals( _totals ), + stdOut( _stdOut ), + stdErr( _stdErr ), + aborting( _aborting ) + {} + virtual ~TestCaseStats(); + +# ifdef CATCH_CPP11_OR_GREATER + TestCaseStats( TestCaseStats const& ) = default; + TestCaseStats( TestCaseStats && ) = default; + TestCaseStats& operator = ( TestCaseStats const& ) = default; + TestCaseStats& operator = ( TestCaseStats && ) = default; +# endif + + TestCaseInfo testInfo; + Totals totals; + std::string stdOut; + std::string stdErr; + bool aborting; + }; + + struct TestGroupStats { + TestGroupStats( GroupInfo const& _groupInfo, + Totals const& _totals, + bool _aborting ) + : groupInfo( _groupInfo ), + totals( _totals ), + aborting( _aborting ) + {} + TestGroupStats( GroupInfo const& _groupInfo ) + : groupInfo( _groupInfo ), + aborting( false ) + {} + virtual ~TestGroupStats(); + +# ifdef CATCH_CPP11_OR_GREATER + TestGroupStats( TestGroupStats const& ) = default; + TestGroupStats( TestGroupStats && ) = default; + TestGroupStats& operator = ( TestGroupStats const& ) = default; + TestGroupStats& operator = ( TestGroupStats && ) = default; +# endif + + GroupInfo groupInfo; + Totals totals; + bool aborting; + }; + + struct TestRunStats { + TestRunStats( TestRunInfo const& _runInfo, + Totals const& _totals, + bool _aborting ) + : runInfo( _runInfo ), + totals( _totals ), + aborting( _aborting ) + {} + virtual ~TestRunStats(); + +# ifndef CATCH_CPP11_OR_GREATER + TestRunStats( TestRunStats const& _other ) + : runInfo( _other.runInfo ), + totals( _other.totals ), + aborting( _other.aborting ) + {} +# else + TestRunStats( TestRunStats const& ) = default; + TestRunStats( TestRunStats && ) = default; + TestRunStats& operator = ( TestRunStats const& ) = default; + TestRunStats& operator = ( TestRunStats && ) = default; +# endif + + TestRunInfo runInfo; + Totals totals; + bool aborting; + }; + + struct IStreamingReporter : IShared { + virtual ~IStreamingReporter(); + + // Implementing class must also provide the following static method: + // static std::string getDescription(); + + virtual ReporterPreferences getPreferences() const = 0; + + virtual void noMatchingTestCases( std::string const& spec ) = 0; + + virtual void testRunStarting( TestRunInfo const& testRunInfo ) = 0; + virtual void testGroupStarting( GroupInfo const& groupInfo ) = 0; + + virtual void testCaseStarting( TestCaseInfo const& testInfo ) = 0; + virtual void sectionStarting( SectionInfo const& sectionInfo ) = 0; + + virtual void assertionStarting( AssertionInfo const& assertionInfo ) = 0; + + // The return value indicates if the messages buffer should be cleared: + virtual bool assertionEnded( AssertionStats const& assertionStats ) = 0; + virtual void sectionEnded( SectionStats const& sectionStats ) = 0; + virtual void testCaseEnded( TestCaseStats const& testCaseStats ) = 0; + virtual void testGroupEnded( TestGroupStats const& testGroupStats ) = 0; + virtual void testRunEnded( TestRunStats const& testRunStats ) = 0; + + virtual void skipTest( TestCaseInfo const& testInfo ) = 0; + }; + + struct IReporterFactory { + virtual ~IReporterFactory(); + virtual IStreamingReporter* create( ReporterConfig const& config ) const = 0; + virtual std::string getDescription() const = 0; + }; + + struct IReporterRegistry { + typedef std::map<std::string, IReporterFactory*> FactoryMap; + + virtual ~IReporterRegistry(); + virtual IStreamingReporter* create( std::string const& name, Ptr<IConfig> const& config ) const = 0; + virtual FactoryMap const& getFactories() const = 0; + }; + +} + +#include <limits> +#include <algorithm> + +namespace Catch { + + inline std::size_t listTests( Config const& config ) { + + TestSpec testSpec = config.testSpec(); + if( config.testSpec().hasFilters() ) + Catch::cout() << "Matching test cases:\n"; + else { + Catch::cout() << "All available test cases:\n"; + testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec(); + } + + std::size_t matchedTests = 0; + TextAttributes nameAttr, tagsAttr; + nameAttr.setInitialIndent( 2 ).setIndent( 4 ); + tagsAttr.setIndent( 6 ); + + std::vector<TestCase> matchedTestCases; + getRegistryHub().getTestCaseRegistry().getFilteredTests( testSpec, config, matchedTestCases ); + for( std::vector<TestCase>::const_iterator it = matchedTestCases.begin(), itEnd = matchedTestCases.end(); + it != itEnd; + ++it ) { + matchedTests++; + TestCaseInfo const& testCaseInfo = it->getTestCaseInfo(); + Colour::Code colour = testCaseInfo.isHidden() + ? Colour::SecondaryText + : Colour::None; + Colour colourGuard( colour ); + + Catch::cout() << Text( testCaseInfo.name, nameAttr ) << std::endl; + if( !testCaseInfo.tags.empty() ) + Catch::cout() << Text( testCaseInfo.tagsAsString, tagsAttr ) << std::endl; + } + + if( !config.testSpec().hasFilters() ) + Catch::cout() << pluralise( matchedTests, "test case" ) << "\n" << std::endl; + else + Catch::cout() << pluralise( matchedTests, "matching test case" ) << "\n" << std::endl; + return matchedTests; + } + + inline std::size_t listTestsNamesOnly( Config const& config ) { + TestSpec testSpec = config.testSpec(); + if( !config.testSpec().hasFilters() ) + testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec(); + std::size_t matchedTests = 0; + std::vector<TestCase> matchedTestCases; + getRegistryHub().getTestCaseRegistry().getFilteredTests( testSpec, config, matchedTestCases ); + for( std::vector<TestCase>::const_iterator it = matchedTestCases.begin(), itEnd = matchedTestCases.end(); + it != itEnd; + ++it ) { + matchedTests++; + TestCaseInfo const& testCaseInfo = it->getTestCaseInfo(); + Catch::cout() << testCaseInfo.name << std::endl; + } + return matchedTests; + } + + struct TagInfo { + TagInfo() : count ( 0 ) {} + void add( std::string const& spelling ) { + ++count; + spellings.insert( spelling ); + } + std::string all() const { + std::string out; + for( std::set<std::string>::const_iterator it = spellings.begin(), itEnd = spellings.end(); + it != itEnd; + ++it ) + out += "[" + *it + "]"; + return out; + } + std::set<std::string> spellings; + std::size_t count; + }; + + inline std::size_t listTags( Config const& config ) { + TestSpec testSpec = config.testSpec(); + if( config.testSpec().hasFilters() ) + Catch::cout() << "Tags for matching test cases:\n"; + else { + Catch::cout() << "All available tags:\n"; + testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "*" ).testSpec(); + } + + std::map<std::string, TagInfo> tagCounts; + + std::vector<TestCase> matchedTestCases; + getRegistryHub().getTestCaseRegistry().getFilteredTests( testSpec, config, matchedTestCases ); + for( std::vector<TestCase>::const_iterator it = matchedTestCases.begin(), itEnd = matchedTestCases.end(); + it != itEnd; + ++it ) { + for( std::set<std::string>::const_iterator tagIt = it->getTestCaseInfo().tags.begin(), + tagItEnd = it->getTestCaseInfo().tags.end(); + tagIt != tagItEnd; + ++tagIt ) { + std::string tagName = *tagIt; + std::string lcaseTagName = toLower( tagName ); + std::map<std::string, TagInfo>::iterator countIt = tagCounts.find( lcaseTagName ); + if( countIt == tagCounts.end() ) + countIt = tagCounts.insert( std::make_pair( lcaseTagName, TagInfo() ) ).first; + countIt->second.add( tagName ); + } + } + + for( std::map<std::string, TagInfo>::const_iterator countIt = tagCounts.begin(), + countItEnd = tagCounts.end(); + countIt != countItEnd; + ++countIt ) { + std::ostringstream oss; + oss << " " << std::setw(2) << countIt->second.count << " "; + Text wrapper( countIt->second.all(), TextAttributes() + .setInitialIndent( 0 ) + .setIndent( oss.str().size() ) + .setWidth( CATCH_CONFIG_CONSOLE_WIDTH-10 ) ); + Catch::cout() << oss.str() << wrapper << "\n"; + } + Catch::cout() << pluralise( tagCounts.size(), "tag" ) << "\n" << std::endl; + return tagCounts.size(); + } + + inline std::size_t listReporters( Config const& /*config*/ ) { + Catch::cout() << "Available reporters:\n"; + IReporterRegistry::FactoryMap const& factories = getRegistryHub().getReporterRegistry().getFactories(); + IReporterRegistry::FactoryMap::const_iterator itBegin = factories.begin(), itEnd = factories.end(), it; + std::size_t maxNameLen = 0; + for(it = itBegin; it != itEnd; ++it ) + maxNameLen = (std::max)( maxNameLen, it->first.size() ); + + for(it = itBegin; it != itEnd; ++it ) { + Text wrapper( it->second->getDescription(), TextAttributes() + .setInitialIndent( 0 ) + .setIndent( 7+maxNameLen ) + .setWidth( CATCH_CONFIG_CONSOLE_WIDTH - maxNameLen-8 ) ); + Catch::cout() << " " + << it->first + << ":" + << std::string( maxNameLen - it->first.size() + 2, ' ' ) + << wrapper << "\n"; + } + Catch::cout() << std::endl; + return factories.size(); + } + + inline Option<std::size_t> list( Config const& config ) { + Option<std::size_t> listedCount; + if( config.listTests() ) + listedCount = listedCount.valueOr(0) + listTests( config ); + if( config.listTestNamesOnly() ) + listedCount = listedCount.valueOr(0) + listTestsNamesOnly( config ); + if( config.listTags() ) + listedCount = listedCount.valueOr(0) + listTags( config ); + if( config.listReporters() ) + listedCount = listedCount.valueOr(0) + listReporters( config ); + return listedCount; + } + +} // end namespace Catch + +// #included from: internal/catch_runner_impl.hpp +#define TWOBLUECUBES_CATCH_RUNNER_IMPL_HPP_INCLUDED + +// #included from: catch_test_case_tracker.hpp +#define TWOBLUECUBES_CATCH_TEST_CASE_TRACKER_HPP_INCLUDED + +#include <map> +#include <string> +#include <assert.h> + +namespace Catch { +namespace SectionTracking { + + class TrackedSection { + + typedef std::map<std::string, TrackedSection> TrackedSections; + + public: + enum RunState { + NotStarted, + Executing, + ExecutingChildren, + Completed + }; + + TrackedSection( std::string const& name, TrackedSection* parent ) + : m_name( name ), m_runState( NotStarted ), m_parent( parent ) + {} + + RunState runState() const { return m_runState; } + + TrackedSection* findChild( std::string const& childName ) { + TrackedSections::iterator it = m_children.find( childName ); + return it != m_children.end() + ? &it->second + : NULL; + } + TrackedSection* acquireChild( std::string const& childName ) { + if( TrackedSection* child = findChild( childName ) ) + return child; + m_children.insert( std::make_pair( childName, TrackedSection( childName, this ) ) ); + return findChild( childName ); + } + void enter() { + if( m_runState == NotStarted ) + m_runState = Executing; + } + void leave() { + for( TrackedSections::const_iterator it = m_children.begin(), itEnd = m_children.end(); + it != itEnd; + ++it ) + if( it->second.runState() != Completed ) { + m_runState = ExecutingChildren; + return; + } + m_runState = Completed; + } + TrackedSection* getParent() { + return m_parent; + } + bool hasChildren() const { + return !m_children.empty(); + } + + private: + std::string m_name; + RunState m_runState; + TrackedSections m_children; + TrackedSection* m_parent; + + }; + + class TestCaseTracker { + public: + TestCaseTracker( std::string const& testCaseName ) + : m_testCase( testCaseName, NULL ), + m_currentSection( &m_testCase ), + m_completedASectionThisRun( false ) + {} + + bool enterSection( std::string const& name ) { + TrackedSection* child = m_currentSection->acquireChild( name ); + if( m_completedASectionThisRun || child->runState() == TrackedSection::Completed ) + return false; + + m_currentSection = child; + m_currentSection->enter(); + return true; + } + void leaveSection() { + m_currentSection->leave(); + m_currentSection = m_currentSection->getParent(); + assert( m_currentSection != NULL ); + m_completedASectionThisRun = true; + } + + bool currentSectionHasChildren() const { + return m_currentSection->hasChildren(); + } + bool isCompleted() const { + return m_testCase.runState() == TrackedSection::Completed; + } + + class Guard { + public: + Guard( TestCaseTracker& tracker ) : m_tracker( tracker ) { + m_tracker.enterTestCase(); + } + ~Guard() { + m_tracker.leaveTestCase(); + } + private: + Guard( Guard const& ); + void operator = ( Guard const& ); + TestCaseTracker& m_tracker; + }; + + private: + void enterTestCase() { + m_currentSection = &m_testCase; + m_completedASectionThisRun = false; + m_testCase.enter(); + } + void leaveTestCase() { + m_testCase.leave(); + } + + TrackedSection m_testCase; + TrackedSection* m_currentSection; + bool m_completedASectionThisRun; + }; + +} // namespace SectionTracking + +using SectionTracking::TestCaseTracker; + +} // namespace Catch + +// #included from: catch_fatal_condition.hpp +#define TWOBLUECUBES_CATCH_FATAL_CONDITION_H_INCLUDED + +namespace Catch { + + // Report the error condition then exit the process + inline void fatal( std::string const& message, int exitCode ) { + IContext& context = Catch::getCurrentContext(); + IResultCapture* resultCapture = context.getResultCapture(); + resultCapture->handleFatalErrorCondition( message ); + + if( Catch::alwaysTrue() ) // avoids "no return" warnings + exit( exitCode ); + } + +} // namespace Catch + +#if defined ( CATCH_PLATFORM_WINDOWS ) ///////////////////////////////////////// + +namespace Catch { + + struct FatalConditionHandler { + void reset() {} + }; + +} // namespace Catch + +#else // Not Windows - assumed to be POSIX compatible ////////////////////////// + +#include <signal.h> + +namespace Catch { + + struct SignalDefs { int id; const char* name; }; + extern SignalDefs signalDefs[]; + SignalDefs signalDefs[] = { + { SIGINT, "SIGINT - Terminal interrupt signal" }, + { SIGILL, "SIGILL - Illegal instruction signal" }, + { SIGFPE, "SIGFPE - Floating point error signal" }, + { SIGSEGV, "SIGSEGV - Segmentation violation signal" }, + { SIGTERM, "SIGTERM - Termination request signal" }, + { SIGABRT, "SIGABRT - Abort (abnormal termination) signal" } + }; + + struct FatalConditionHandler { + + static void handleSignal( int sig ) { + for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) + if( sig == signalDefs[i].id ) + fatal( signalDefs[i].name, -sig ); + fatal( "<unknown signal>", -sig ); + } + + FatalConditionHandler() : m_isSet( true ) { + for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) + signal( signalDefs[i].id, handleSignal ); + } + ~FatalConditionHandler() { + reset(); + } + void reset() { + if( m_isSet ) { + for( std::size_t i = 0; i < sizeof(signalDefs)/sizeof(SignalDefs); ++i ) + signal( signalDefs[i].id, SIG_DFL ); + m_isSet = false; + } + } + + bool m_isSet; + }; + +} // namespace Catch + +#endif // not Windows + +#include <set> +#include <string> + +namespace Catch { + + class StreamRedirect { + + public: + StreamRedirect( std::ostream& stream, std::string& targetString ) + : m_stream( stream ), + m_prevBuf( stream.rdbuf() ), + m_targetString( targetString ) + { + stream.rdbuf( m_oss.rdbuf() ); + } + + ~StreamRedirect() { + m_targetString += m_oss.str(); + m_stream.rdbuf( m_prevBuf ); + } + + private: + std::ostream& m_stream; + std::streambuf* m_prevBuf; + std::ostringstream m_oss; + std::string& m_targetString; + }; + + /////////////////////////////////////////////////////////////////////////// + + class RunContext : public IResultCapture, public IRunner { + + RunContext( RunContext const& ); + void operator =( RunContext const& ); + + public: + + explicit RunContext( Ptr<IConfig const> const& config, Ptr<IStreamingReporter> const& reporter ) + : m_runInfo( config->name() ), + m_context( getCurrentMutableContext() ), + m_activeTestCase( NULL ), + m_config( config ), + m_reporter( reporter ), + m_prevRunner( m_context.getRunner() ), + m_prevResultCapture( m_context.getResultCapture() ), + m_prevConfig( m_context.getConfig() ) + { + m_context.setRunner( this ); + m_context.setConfig( m_config ); + m_context.setResultCapture( this ); + m_reporter->testRunStarting( m_runInfo ); + } + + virtual ~RunContext() { + m_reporter->testRunEnded( TestRunStats( m_runInfo, m_totals, aborting() ) ); + m_context.setRunner( m_prevRunner ); + m_context.setConfig( NULL ); + m_context.setResultCapture( m_prevResultCapture ); + m_context.setConfig( m_prevConfig ); + } + + void testGroupStarting( std::string const& testSpec, std::size_t groupIndex, std::size_t groupsCount ) { + m_reporter->testGroupStarting( GroupInfo( testSpec, groupIndex, groupsCount ) ); + } + void testGroupEnded( std::string const& testSpec, Totals const& totals, std::size_t groupIndex, std::size_t groupsCount ) { + m_reporter->testGroupEnded( TestGroupStats( GroupInfo( testSpec, groupIndex, groupsCount ), totals, aborting() ) ); + } + + Totals runTest( TestCase const& testCase ) { + Totals prevTotals = m_totals; + + std::string redirectedCout; + std::string redirectedCerr; + + TestCaseInfo testInfo = testCase.getTestCaseInfo(); + + m_reporter->testCaseStarting( testInfo ); + + m_activeTestCase = &testCase; + m_testCaseTracker = TestCaseTracker( testInfo.name ); + + do { + do { + runCurrentTest( redirectedCout, redirectedCerr ); + } + while( !m_testCaseTracker->isCompleted() && !aborting() ); + } + while( getCurrentContext().advanceGeneratorsForCurrentTest() && !aborting() ); + + Totals deltaTotals = m_totals.delta( prevTotals ); + m_totals.testCases += deltaTotals.testCases; + m_reporter->testCaseEnded( TestCaseStats( testInfo, + deltaTotals, + redirectedCout, + redirectedCerr, + aborting() ) ); + + m_activeTestCase = NULL; + m_testCaseTracker.reset(); + + return deltaTotals; + } + + Ptr<IConfig const> config() const { + return m_config; + } + + private: // IResultCapture + + virtual void assertionEnded( AssertionResult const& result ) { + if( result.getResultType() == ResultWas::Ok ) { + m_totals.assertions.passed++; + } + else if( !result.isOk() ) { + m_totals.assertions.failed++; + } + + if( m_reporter->assertionEnded( AssertionStats( result, m_messages, m_totals ) ) ) + m_messages.clear(); + + // Reset working state + m_lastAssertionInfo = AssertionInfo( "", m_lastAssertionInfo.lineInfo, "{Unknown expression after the reported line}" , m_lastAssertionInfo.resultDisposition ); + m_lastResult = result; + } + + virtual bool sectionStarted ( + SectionInfo const& sectionInfo, + Counts& assertions + ) + { + std::ostringstream oss; + oss << sectionInfo.name << "@" << sectionInfo.lineInfo; + + if( !m_testCaseTracker->enterSection( oss.str() ) ) + return false; + + m_lastAssertionInfo.lineInfo = sectionInfo.lineInfo; + + m_reporter->sectionStarting( sectionInfo ); + + assertions = m_totals.assertions; + + return true; + } + bool testForMissingAssertions( Counts& assertions ) { + if( assertions.total() != 0 || + !m_config->warnAboutMissingAssertions() || + m_testCaseTracker->currentSectionHasChildren() ) + return false; + m_totals.assertions.failed++; + assertions.failed++; + return true; + } + + virtual void sectionEnded( SectionInfo const& info, Counts const& prevAssertions, double _durationInSeconds ) { + if( std::uncaught_exception() ) { + m_unfinishedSections.push_back( UnfinishedSections( info, prevAssertions, _durationInSeconds ) ); + return; + } + + Counts assertions = m_totals.assertions - prevAssertions; + bool missingAssertions = testForMissingAssertions( assertions ); + + m_testCaseTracker->leaveSection(); + + m_reporter->sectionEnded( SectionStats( info, assertions, _durationInSeconds, missingAssertions ) ); + m_messages.clear(); + } + + virtual void pushScopedMessage( MessageInfo const& message ) { + m_messages.push_back( message ); + } + + virtual void popScopedMessage( MessageInfo const& message ) { + m_messages.erase( std::remove( m_messages.begin(), m_messages.end(), message ), m_messages.end() ); + } + + virtual std::string getCurrentTestName() const { + return m_activeTestCase + ? m_activeTestCase->getTestCaseInfo().name + : ""; + } + + virtual const AssertionResult* getLastResult() const { + return &m_lastResult; + } + + virtual void handleFatalErrorCondition( std::string const& message ) { + ResultBuilder resultBuilder = makeUnexpectedResultBuilder(); + resultBuilder.setResultType( ResultWas::FatalErrorCondition ); + resultBuilder << message; + resultBuilder.captureExpression(); + + handleUnfinishedSections(); + + // Recreate section for test case (as we will lose the one that was in scope) + TestCaseInfo const& testCaseInfo = m_activeTestCase->getTestCaseInfo(); + SectionInfo testCaseSection( testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description ); + + Counts assertions; + assertions.failed = 1; + SectionStats testCaseSectionStats( testCaseSection, assertions, 0, false ); + m_reporter->sectionEnded( testCaseSectionStats ); + + TestCaseInfo testInfo = m_activeTestCase->getTestCaseInfo(); + + Totals deltaTotals; + deltaTotals.testCases.failed = 1; + m_reporter->testCaseEnded( TestCaseStats( testInfo, + deltaTotals, + "", + "", + false ) ); + m_totals.testCases.failed++; + testGroupEnded( "", m_totals, 1, 1 ); + m_reporter->testRunEnded( TestRunStats( m_runInfo, m_totals, false ) ); + } + + public: + // !TBD We need to do this another way! + bool aborting() const { + return m_totals.assertions.failed == static_cast<std::size_t>( m_config->abortAfter() ); + } + + private: + + void runCurrentTest( std::string& redirectedCout, std::string& redirectedCerr ) { + TestCaseInfo const& testCaseInfo = m_activeTestCase->getTestCaseInfo(); + SectionInfo testCaseSection( testCaseInfo.lineInfo, testCaseInfo.name, testCaseInfo.description ); + m_reporter->sectionStarting( testCaseSection ); + Counts prevAssertions = m_totals.assertions; + double duration = 0; + try { + m_lastAssertionInfo = AssertionInfo( "TEST_CASE", testCaseInfo.lineInfo, "", ResultDisposition::Normal ); + TestCaseTracker::Guard guard( *m_testCaseTracker ); + + Timer timer; + timer.start(); + if( m_reporter->getPreferences().shouldRedirectStdOut ) { + StreamRedirect coutRedir( Catch::cout(), redirectedCout ); + StreamRedirect cerrRedir( Catch::cerr(), redirectedCerr ); + invokeActiveTestCase(); + } + else { + invokeActiveTestCase(); + } + duration = timer.getElapsedSeconds(); + } + catch( TestFailureException& ) { + // This just means the test was aborted due to failure + } + catch(...) { + makeUnexpectedResultBuilder().useActiveException(); + } + handleUnfinishedSections(); + m_messages.clear(); + + Counts assertions = m_totals.assertions - prevAssertions; + bool missingAssertions = testForMissingAssertions( assertions ); + + if( testCaseInfo.okToFail() ) { + std::swap( assertions.failedButOk, assertions.failed ); + m_totals.assertions.failed -= assertions.failedButOk; + m_totals.assertions.failedButOk += assertions.failedButOk; + } + + SectionStats testCaseSectionStats( testCaseSection, assertions, duration, missingAssertions ); + m_reporter->sectionEnded( testCaseSectionStats ); + } + + void invokeActiveTestCase() { + FatalConditionHandler fatalConditionHandler; // Handle signals + m_activeTestCase->invoke(); + fatalConditionHandler.reset(); + } + + private: + + ResultBuilder makeUnexpectedResultBuilder() const { + return ResultBuilder( m_lastAssertionInfo.macroName.c_str(), + m_lastAssertionInfo.lineInfo, + m_lastAssertionInfo.capturedExpression.c_str(), + m_lastAssertionInfo.resultDisposition ); + } + + void handleUnfinishedSections() { + // If sections ended prematurely due to an exception we stored their + // infos here so we can tear them down outside the unwind process. + for( std::vector<UnfinishedSections>::const_reverse_iterator it = m_unfinishedSections.rbegin(), + itEnd = m_unfinishedSections.rend(); + it != itEnd; + ++it ) + sectionEnded( it->info, it->prevAssertions, it->durationInSeconds ); + m_unfinishedSections.clear(); + } + + struct UnfinishedSections { + UnfinishedSections( SectionInfo const& _info, Counts const& _prevAssertions, double _durationInSeconds ) + : info( _info ), prevAssertions( _prevAssertions ), durationInSeconds( _durationInSeconds ) + {} + + SectionInfo info; + Counts prevAssertions; + double durationInSeconds; + }; + + TestRunInfo m_runInfo; + IMutableContext& m_context; + TestCase const* m_activeTestCase; + Option<TestCaseTracker> m_testCaseTracker; + AssertionResult m_lastResult; + + Ptr<IConfig const> m_config; + Totals m_totals; + Ptr<IStreamingReporter> m_reporter; + std::vector<MessageInfo> m_messages; + IRunner* m_prevRunner; + IResultCapture* m_prevResultCapture; + Ptr<IConfig const> m_prevConfig; + AssertionInfo m_lastAssertionInfo; + std::vector<UnfinishedSections> m_unfinishedSections; + }; + + IResultCapture& getResultCapture() { + if( IResultCapture* capture = getCurrentContext().getResultCapture() ) + return *capture; + else + throw std::logic_error( "No result capture instance" ); + } + +} // end namespace Catch + +// #included from: internal/catch_version.h +#define TWOBLUECUBES_CATCH_VERSION_H_INCLUDED + +namespace Catch { + + // Versioning information + struct Version { + Version( unsigned int _majorVersion, + unsigned int _minorVersion, + unsigned int _buildNumber, + char const* const _branchName ) + : majorVersion( _majorVersion ), + minorVersion( _minorVersion ), + buildNumber( _buildNumber ), + branchName( _branchName ) + {} + + unsigned int const majorVersion; + unsigned int const minorVersion; + unsigned int const buildNumber; + char const* const branchName; + + private: + void operator=( Version const& ); + }; + + extern Version libraryVersion; +} + +#include <fstream> +#include <stdlib.h> +#include <limits> + +namespace Catch { + + class Runner { + + public: + Runner( Ptr<Config> const& config ) + : m_config( config ) + { + openStream(); + makeReporter(); + } + + Totals runTests() { + + RunContext context( m_config.get(), m_reporter ); + + Totals totals; + + context.testGroupStarting( "all tests", 1, 1 ); // deprecated? + + TestSpec testSpec = m_config->testSpec(); + if( !testSpec.hasFilters() ) + testSpec = TestSpecParser( ITagAliasRegistry::get() ).parse( "~[.]" ).testSpec(); // All not hidden tests + + std::vector<TestCase> testCases; + getRegistryHub().getTestCaseRegistry().getFilteredTests( testSpec, *m_config, testCases ); + + int testsRunForGroup = 0; + for( std::vector<TestCase>::const_iterator it = testCases.begin(), itEnd = testCases.end(); + it != itEnd; + ++it ) { + testsRunForGroup++; + if( m_testsAlreadyRun.find( *it ) == m_testsAlreadyRun.end() ) { + + if( context.aborting() ) + break; + + totals += context.runTest( *it ); + m_testsAlreadyRun.insert( *it ); + } + } + std::vector<TestCase> skippedTestCases; + getRegistryHub().getTestCaseRegistry().getFilteredTests( testSpec, *m_config, skippedTestCases, true ); + + for( std::vector<TestCase>::const_iterator it = skippedTestCases.begin(), itEnd = skippedTestCases.end(); + it != itEnd; + ++it ) + m_reporter->skipTest( *it ); + + context.testGroupEnded( "all tests", totals, 1, 1 ); + return totals; + } + + private: + void openStream() { + // Open output file, if specified + if( !m_config->getFilename().empty() ) { + m_ofs.open( m_config->getFilename().c_str() ); + if( m_ofs.fail() ) { + std::ostringstream oss; + oss << "Unable to open file: '" << m_config->getFilename() << "'"; + throw std::domain_error( oss.str() ); + } + m_config->setStreamBuf( m_ofs.rdbuf() ); + } + } + void makeReporter() { + std::string reporterName = m_config->getReporterName().empty() + ? "console" + : m_config->getReporterName(); + + m_reporter = getRegistryHub().getReporterRegistry().create( reporterName, m_config.get() ); + if( !m_reporter ) { + std::ostringstream oss; + oss << "No reporter registered with name: '" << reporterName << "'"; + throw std::domain_error( oss.str() ); + } + } + + private: + Ptr<Config> m_config; + std::ofstream m_ofs; + Ptr<IStreamingReporter> m_reporter; + std::set<TestCase> m_testsAlreadyRun; + }; + + class Session : NonCopyable { + static bool alreadyInstantiated; + + public: + + struct OnUnusedOptions { enum DoWhat { Ignore, Fail }; }; + + Session() + : m_cli( makeCommandLineParser() ) { + if( alreadyInstantiated ) { + std::string msg = "Only one instance of Catch::Session can ever be used"; + Catch::cerr() << msg << std::endl; + throw std::logic_error( msg ); + } + alreadyInstantiated = true; + } + ~Session() { + Catch::cleanUp(); + } + + void showHelp( std::string const& processName ) { + Catch::cout() << "\nCatch v" << libraryVersion.majorVersion << "." + << libraryVersion.minorVersion << " build " + << libraryVersion.buildNumber; + if( libraryVersion.branchName != std::string( "master" ) ) + Catch::cout() << " (" << libraryVersion.branchName << " branch)"; + Catch::cout() << "\n"; + + m_cli.usage( Catch::cout(), processName ); + Catch::cout() << "For more detail usage please see the project docs\n" << std::endl; + } + + int applyCommandLine( int argc, char* const argv[], OnUnusedOptions::DoWhat unusedOptionBehaviour = OnUnusedOptions::Fail ) { + try { + m_cli.setThrowOnUnrecognisedTokens( unusedOptionBehaviour == OnUnusedOptions::Fail ); + m_unusedTokens = m_cli.parseInto( argc, argv, m_configData ); + if( m_configData.showHelp ) + showHelp( m_configData.processName ); + m_config.reset(); + } + catch( std::exception& ex ) { + { + Colour colourGuard( Colour::Red ); + Catch::cerr() << "\nError(s) in input:\n" + << Text( ex.what(), TextAttributes().setIndent(2) ) + << "\n\n"; + } + m_cli.usage( Catch::cout(), m_configData.processName ); + return (std::numeric_limits<int>::max)(); + } + return 0; + } + + void useConfigData( ConfigData const& _configData ) { + m_configData = _configData; + m_config.reset(); + } + + int run( int argc, char* const argv[] ) { + + int returnCode = applyCommandLine( argc, argv ); + if( returnCode == 0 ) + returnCode = run(); + return returnCode; + } + + int run() { + if( m_configData.showHelp ) + return 0; + + try + { + config(); // Force config to be constructed + + std::srand( m_configData.rngSeed ); + + Runner runner( m_config ); + + // Handle list request + if( Option<std::size_t> listed = list( config() ) ) + return static_cast<int>( *listed ); + + return static_cast<int>( runner.runTests().assertions.failed ); + } + catch( std::exception& ex ) { + Catch::cerr() << ex.what() << std::endl; + return (std::numeric_limits<int>::max)(); + } + } + + Clara::CommandLine<ConfigData> const& cli() const { + return m_cli; + } + std::vector<Clara::Parser::Token> const& unusedTokens() const { + return m_unusedTokens; + } + ConfigData& configData() { + return m_configData; + } + Config& config() { + if( !m_config ) + m_config = new Config( m_configData ); + return *m_config; + } + + private: + Clara::CommandLine<ConfigData> m_cli; + std::vector<Clara::Parser::Token> m_unusedTokens; + ConfigData m_configData; + Ptr<Config> m_config; + }; + + bool Session::alreadyInstantiated = false; + +} // end namespace Catch + +// #included from: catch_registry_hub.hpp +#define TWOBLUECUBES_CATCH_REGISTRY_HUB_HPP_INCLUDED + +// #included from: catch_test_case_registry_impl.hpp +#define TWOBLUECUBES_CATCH_TEST_CASE_REGISTRY_IMPL_HPP_INCLUDED + +#include <vector> +#include <set> +#include <sstream> +#include <iostream> +#include <algorithm> + +namespace Catch { + + class TestRegistry : public ITestCaseRegistry { + struct LexSort { + bool operator() (TestCase i,TestCase j) const { return (i<j);} + }; + struct RandomNumberGenerator { + int operator()( int n ) const { return std::rand() % n; } + }; + + public: + TestRegistry() : m_unnamedCount( 0 ) {} + virtual ~TestRegistry(); + + virtual void registerTest( TestCase const& testCase ) { + std::string name = testCase.getTestCaseInfo().name; + if( name == "" ) { + std::ostringstream oss; + oss << "Anonymous test case " << ++m_unnamedCount; + return registerTest( testCase.withName( oss.str() ) ); + } + + if( m_functions.find( testCase ) == m_functions.end() ) { + m_functions.insert( testCase ); + m_functionsInOrder.push_back( testCase ); + if( !testCase.isHidden() ) + m_nonHiddenFunctions.push_back( testCase ); + } + else { + TestCase const& prev = *m_functions.find( testCase ); + { + Colour colourGuard( Colour::Red ); + Catch::cerr() << "error: TEST_CASE( \"" << name << "\" ) already defined.\n" + << "\tFirst seen at " << prev.getTestCaseInfo().lineInfo << "\n" + << "\tRedefined at " << testCase.getTestCaseInfo().lineInfo << std::endl; + } + exit(1); + } + } + + virtual std::vector<TestCase> const& getAllTests() const { + return m_functionsInOrder; + } + + virtual std::vector<TestCase> const& getAllNonHiddenTests() const { + return m_nonHiddenFunctions; + } + + virtual void getFilteredTests( TestSpec const& testSpec, IConfig const& config, std::vector<TestCase>& matchingTestCases, bool negated = false ) const { + + for( std::vector<TestCase>::const_iterator it = m_functionsInOrder.begin(), + itEnd = m_functionsInOrder.end(); + it != itEnd; + ++it ) { + bool includeTest = testSpec.matches( *it ) && ( config.allowThrows() || !it->throws() ); + if( includeTest != negated ) + matchingTestCases.push_back( *it ); + } + sortTests( config, matchingTestCases ); + } + + private: + + static void sortTests( IConfig const& config, std::vector<TestCase>& matchingTestCases ) { + + switch( config.runOrder() ) { + case RunTests::InLexicographicalOrder: + std::sort( matchingTestCases.begin(), matchingTestCases.end(), LexSort() ); + break; + case RunTests::InRandomOrder: + { + RandomNumberGenerator rng; + std::random_shuffle( matchingTestCases.begin(), matchingTestCases.end(), rng ); + } + break; + case RunTests::InDeclarationOrder: + // already in declaration order + break; + } + } + std::set<TestCase> m_functions; + std::vector<TestCase> m_functionsInOrder; + std::vector<TestCase> m_nonHiddenFunctions; + size_t m_unnamedCount; + }; + + /////////////////////////////////////////////////////////////////////////// + + class FreeFunctionTestCase : public SharedImpl<ITestCase> { + public: + + FreeFunctionTestCase( TestFunction fun ) : m_fun( fun ) {} + + virtual void invoke() const { + m_fun(); + } + + private: + virtual ~FreeFunctionTestCase(); + + TestFunction m_fun; + }; + + inline std::string extractClassName( std::string const& classOrQualifiedMethodName ) { + std::string className = classOrQualifiedMethodName; + if( startsWith( className, "&" ) ) + { + std::size_t lastColons = className.rfind( "::" ); + std::size_t penultimateColons = className.rfind( "::", lastColons-1 ); + if( penultimateColons == std::string::npos ) + penultimateColons = 1; + className = className.substr( penultimateColons, lastColons-penultimateColons ); + } + return className; + } + + /////////////////////////////////////////////////////////////////////////// + + AutoReg::AutoReg( TestFunction function, + SourceLineInfo const& lineInfo, + NameAndDesc const& nameAndDesc ) { + registerTestCase( new FreeFunctionTestCase( function ), "", nameAndDesc, lineInfo ); + } + + AutoReg::~AutoReg() {} + + void AutoReg::registerTestCase( ITestCase* testCase, + char const* classOrQualifiedMethodName, + NameAndDesc const& nameAndDesc, + SourceLineInfo const& lineInfo ) { + + getMutableRegistryHub().registerTest + ( makeTestCase( testCase, + extractClassName( classOrQualifiedMethodName ), + nameAndDesc.name, + nameAndDesc.description, + lineInfo ) ); + } + +} // end namespace Catch + +// #included from: catch_reporter_registry.hpp +#define TWOBLUECUBES_CATCH_REPORTER_REGISTRY_HPP_INCLUDED + +#include <map> + +namespace Catch { + + class ReporterRegistry : public IReporterRegistry { + + public: + + virtual ~ReporterRegistry() { + deleteAllValues( m_factories ); + } + + virtual IStreamingReporter* create( std::string const& name, Ptr<IConfig> const& config ) const { + FactoryMap::const_iterator it = m_factories.find( name ); + if( it == m_factories.end() ) + return NULL; + return it->second->create( ReporterConfig( config ) ); + } + + void registerReporter( std::string const& name, IReporterFactory* factory ) { + m_factories.insert( std::make_pair( name, factory ) ); + } + + FactoryMap const& getFactories() const { + return m_factories; + } + + private: + FactoryMap m_factories; + }; +} + +// #included from: catch_exception_translator_registry.hpp +#define TWOBLUECUBES_CATCH_EXCEPTION_TRANSLATOR_REGISTRY_HPP_INCLUDED + +#ifdef __OBJC__ +#import "Foundation/Foundation.h" +#endif + +namespace Catch { + + class ExceptionTranslatorRegistry : public IExceptionTranslatorRegistry { + public: + ~ExceptionTranslatorRegistry() { + deleteAll( m_translators ); + } + + virtual void registerTranslator( const IExceptionTranslator* translator ) { + m_translators.push_back( translator ); + } + + virtual std::string translateActiveException() const { + try { +#ifdef __OBJC__ + // In Objective-C try objective-c exceptions first + @try { + throw; + } + @catch (NSException *exception) { + return Catch::toString( [exception description] ); + } +#else + throw; +#endif + } + catch( TestFailureException& ) { + throw; + } + catch( std::exception& ex ) { + return ex.what(); + } + catch( std::string& msg ) { + return msg; + } + catch( const char* msg ) { + return msg; + } + catch(...) { + return tryTranslators( m_translators.begin() ); + } + } + + std::string tryTranslators( std::vector<const IExceptionTranslator*>::const_iterator it ) const { + if( it == m_translators.end() ) + return "Unknown exception"; + + try { + return (*it)->translate(); + } + catch(...) { + return tryTranslators( it+1 ); + } + } + + private: + std::vector<const IExceptionTranslator*> m_translators; + }; +} + +namespace Catch { + + namespace { + + class RegistryHub : public IRegistryHub, public IMutableRegistryHub { + + RegistryHub( RegistryHub const& ); + void operator=( RegistryHub const& ); + + public: // IRegistryHub + RegistryHub() { + } + virtual IReporterRegistry const& getReporterRegistry() const { + return m_reporterRegistry; + } + virtual ITestCaseRegistry const& getTestCaseRegistry() const { + return m_testCaseRegistry; + } + virtual IExceptionTranslatorRegistry& getExceptionTranslatorRegistry() { + return m_exceptionTranslatorRegistry; + } + + public: // IMutableRegistryHub + virtual void registerReporter( std::string const& name, IReporterFactory* factory ) { + m_reporterRegistry.registerReporter( name, factory ); + } + virtual void registerTest( TestCase const& testInfo ) { + m_testCaseRegistry.registerTest( testInfo ); + } + virtual void registerTranslator( const IExceptionTranslator* translator ) { + m_exceptionTranslatorRegistry.registerTranslator( translator ); + } + + private: + TestRegistry m_testCaseRegistry; + ReporterRegistry m_reporterRegistry; + ExceptionTranslatorRegistry m_exceptionTranslatorRegistry; + }; + + // Single, global, instance + inline RegistryHub*& getTheRegistryHub() { + static RegistryHub* theRegistryHub = NULL; + if( !theRegistryHub ) + theRegistryHub = new RegistryHub(); + return theRegistryHub; + } + } + + IRegistryHub& getRegistryHub() { + return *getTheRegistryHub(); + } + IMutableRegistryHub& getMutableRegistryHub() { + return *getTheRegistryHub(); + } + void cleanUp() { + delete getTheRegistryHub(); + getTheRegistryHub() = NULL; + cleanUpContext(); + } + std::string translateActiveException() { + return getRegistryHub().getExceptionTranslatorRegistry().translateActiveException(); + } + +} // end namespace Catch + +// #included from: catch_notimplemented_exception.hpp +#define TWOBLUECUBES_CATCH_NOTIMPLEMENTED_EXCEPTION_HPP_INCLUDED + +#include <ostream> + +namespace Catch { + + NotImplementedException::NotImplementedException( SourceLineInfo const& lineInfo ) + : m_lineInfo( lineInfo ) { + std::ostringstream oss; + oss << lineInfo << ": function "; + oss << "not implemented"; + m_what = oss.str(); + } + + const char* NotImplementedException::what() const CATCH_NOEXCEPT { + return m_what.c_str(); + } + +} // end namespace Catch + +// #included from: catch_context_impl.hpp +#define TWOBLUECUBES_CATCH_CONTEXT_IMPL_HPP_INCLUDED + +// #included from: catch_stream.hpp +#define TWOBLUECUBES_CATCH_STREAM_HPP_INCLUDED + +// #included from: catch_streambuf.h +#define TWOBLUECUBES_CATCH_STREAMBUF_H_INCLUDED + +#include <streambuf> + +namespace Catch { + + class StreamBufBase : public std::streambuf { + public: + virtual ~StreamBufBase() CATCH_NOEXCEPT; + }; +} + +#include <stdexcept> +#include <cstdio> +#include <iostream> + +namespace Catch { + + template<typename WriterF, size_t bufferSize=256> + class StreamBufImpl : public StreamBufBase { + char data[bufferSize]; + WriterF m_writer; + + public: + StreamBufImpl() { + setp( data, data + sizeof(data) ); + } + + ~StreamBufImpl() CATCH_NOEXCEPT { + sync(); + } + + private: + int overflow( int c ) { + sync(); + + if( c != EOF ) { + if( pbase() == epptr() ) + m_writer( std::string( 1, static_cast<char>( c ) ) ); + else + sputc( static_cast<char>( c ) ); + } + return 0; + } + + int sync() { + if( pbase() != pptr() ) { + m_writer( std::string( pbase(), static_cast<std::string::size_type>( pptr() - pbase() ) ) ); + setp( pbase(), epptr() ); + } + return 0; + } + }; + + /////////////////////////////////////////////////////////////////////////// + + struct OutputDebugWriter { + + void operator()( std::string const&str ) { + writeToDebugConsole( str ); + } + }; + + Stream::Stream() + : streamBuf( NULL ), isOwned( false ) + {} + + Stream::Stream( std::streambuf* _streamBuf, bool _isOwned ) + : streamBuf( _streamBuf ), isOwned( _isOwned ) + {} + + void Stream::release() { + if( isOwned ) { + delete streamBuf; + streamBuf = NULL; + isOwned = false; + } + } + +#ifndef CATCH_CONFIG_NOSTDOUT // If you #define this you must implement this functions + std::ostream& cout() { + return std::cout; + } + std::ostream& cerr() { + return std::cerr; + } +#endif +} + +namespace Catch { + + class Context : public IMutableContext { + + Context() : m_config( NULL ), m_runner( NULL ), m_resultCapture( NULL ) {} + Context( Context const& ); + void operator=( Context const& ); + + public: // IContext + virtual IResultCapture* getResultCapture() { + return m_resultCapture; + } + virtual IRunner* getRunner() { + return m_runner; + } + virtual size_t getGeneratorIndex( std::string const& fileInfo, size_t totalSize ) { + return getGeneratorsForCurrentTest() + .getGeneratorInfo( fileInfo, totalSize ) + .getCurrentIndex(); + } + virtual bool advanceGeneratorsForCurrentTest() { + IGeneratorsForTest* generators = findGeneratorsForCurrentTest(); + return generators && generators->moveNext(); + } + + virtual Ptr<IConfig const> getConfig() const { + return m_config; + } + + public: // IMutableContext + virtual void setResultCapture( IResultCapture* resultCapture ) { + m_resultCapture = resultCapture; + } + virtual void setRunner( IRunner* runner ) { + m_runner = runner; + } + virtual void setConfig( Ptr<IConfig const> const& config ) { + m_config = config; + } + + friend IMutableContext& getCurrentMutableContext(); + + private: + IGeneratorsForTest* findGeneratorsForCurrentTest() { + std::string testName = getResultCapture()->getCurrentTestName(); + + std::map<std::string, IGeneratorsForTest*>::const_iterator it = + m_generatorsByTestName.find( testName ); + return it != m_generatorsByTestName.end() + ? it->second + : NULL; + } + + IGeneratorsForTest& getGeneratorsForCurrentTest() { + IGeneratorsForTest* generators = findGeneratorsForCurrentTest(); + if( !generators ) { + std::string testName = getResultCapture()->getCurrentTestName(); + generators = createGeneratorsForTest(); + m_generatorsByTestName.insert( std::make_pair( testName, generators ) ); + } + return *generators; + } + + private: + Ptr<IConfig const> m_config; + IRunner* m_runner; + IResultCapture* m_resultCapture; + std::map<std::string, IGeneratorsForTest*> m_generatorsByTestName; + }; + + namespace { + Context* currentContext = NULL; + } + IMutableContext& getCurrentMutableContext() { + if( !currentContext ) + currentContext = new Context(); + return *currentContext; + } + IContext& getCurrentContext() { + return getCurrentMutableContext(); + } + + Stream createStream( std::string const& streamName ) { + if( streamName == "stdout" ) return Stream( Catch::cout().rdbuf(), false ); + if( streamName == "stderr" ) return Stream( Catch::cerr().rdbuf(), false ); + if( streamName == "debug" ) return Stream( new StreamBufImpl<OutputDebugWriter>, true ); + + throw std::domain_error( "Unknown stream: " + streamName ); + } + + void cleanUpContext() { + delete currentContext; + currentContext = NULL; + } +} + +// #included from: catch_console_colour_impl.hpp +#define TWOBLUECUBES_CATCH_CONSOLE_COLOUR_IMPL_HPP_INCLUDED + +namespace Catch { + namespace { + + struct IColourImpl { + virtual ~IColourImpl() {} + virtual void use( Colour::Code _colourCode ) = 0; + }; + + struct NoColourImpl : IColourImpl { + void use( Colour::Code ) {} + + static IColourImpl* instance() { + static NoColourImpl s_instance; + return &s_instance; + } + }; + + } // anon namespace +} // namespace Catch + +#if !defined( CATCH_CONFIG_COLOUR_NONE ) && !defined( CATCH_CONFIG_COLOUR_WINDOWS ) && !defined( CATCH_CONFIG_COLOUR_ANSI ) +# ifdef CATCH_PLATFORM_WINDOWS +# define CATCH_CONFIG_COLOUR_WINDOWS +# else +# define CATCH_CONFIG_COLOUR_ANSI +# endif +#endif + +#if defined ( CATCH_CONFIG_COLOUR_WINDOWS ) ///////////////////////////////////////// + +#ifndef NOMINMAX +#define NOMINMAX +#endif + +#ifdef __AFXDLL +#include <AfxWin.h> +#else +#include <windows.h> +#endif + +namespace Catch { +namespace { + + class Win32ColourImpl : public IColourImpl { + public: + Win32ColourImpl() : stdoutHandle( GetStdHandle(STD_OUTPUT_HANDLE) ) + { + CONSOLE_SCREEN_BUFFER_INFO csbiInfo; + GetConsoleScreenBufferInfo( stdoutHandle, &csbiInfo ); + originalAttributes = csbiInfo.wAttributes; + } + + virtual void use( Colour::Code _colourCode ) { + switch( _colourCode ) { + case Colour::None: return setTextAttribute( originalAttributes ); + case Colour::White: return setTextAttribute( FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE ); + case Colour::Red: return setTextAttribute( FOREGROUND_RED ); + case Colour::Green: return setTextAttribute( FOREGROUND_GREEN ); + case Colour::Blue: return setTextAttribute( FOREGROUND_BLUE ); + case Colour::Cyan: return setTextAttribute( FOREGROUND_BLUE | FOREGROUND_GREEN ); + case Colour::Yellow: return setTextAttribute( FOREGROUND_RED | FOREGROUND_GREEN ); + case Colour::Grey: return setTextAttribute( 0 ); + + case Colour::LightGrey: return setTextAttribute( FOREGROUND_INTENSITY ); + case Colour::BrightRed: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_RED ); + case Colour::BrightGreen: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN ); + case Colour::BrightWhite: return setTextAttribute( FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_BLUE ); + + case Colour::Bright: throw std::logic_error( "not a colour" ); + } + } + + private: + void setTextAttribute( WORD _textAttribute ) { + SetConsoleTextAttribute( stdoutHandle, _textAttribute ); + } + HANDLE stdoutHandle; + WORD originalAttributes; + }; + + IColourImpl* platformColourInstance() { + static Win32ColourImpl s_instance; + return &s_instance; + } + +} // end anon namespace +} // end namespace Catch + +#elif defined( CATCH_CONFIG_COLOUR_ANSI ) ////////////////////////////////////// + +#include <unistd.h> + +namespace Catch { +namespace { + + // use POSIX/ ANSI console terminal codes + // Thanks to Adam Strzelecki for original contribution + // (http://github.com/nanoant) + // https://github.com/philsquared/Catch/pull/131 + class PosixColourImpl : public IColourImpl { + public: + virtual void use( Colour::Code _colourCode ) { + switch( _colourCode ) { + case Colour::None: + case Colour::White: return setColour( "[0m" ); + case Colour::Red: return setColour( "[0;31m" ); + case Colour::Green: return setColour( "[0;32m" ); + case Colour::Blue: return setColour( "[0:34m" ); + case Colour::Cyan: return setColour( "[0;36m" ); + case Colour::Yellow: return setColour( "[0;33m" ); + case Colour::Grey: return setColour( "[1;30m" ); + + case Colour::LightGrey: return setColour( "[0;37m" ); + case Colour::BrightRed: return setColour( "[1;31m" ); + case Colour::BrightGreen: return setColour( "[1;32m" ); + case Colour::BrightWhite: return setColour( "[1;37m" ); + + case Colour::Bright: throw std::logic_error( "not a colour" ); + } + } + static IColourImpl* instance() { + static PosixColourImpl s_instance; + return &s_instance; + } + + private: + void setColour( const char* _escapeCode ) { + Catch::cout() << '\033' << _escapeCode; + } + }; + + IColourImpl* platformColourInstance() { + Ptr<IConfig const> config = getCurrentContext().getConfig(); + return (config && config->forceColour()) || isatty(STDOUT_FILENO) + ? PosixColourImpl::instance() + : NoColourImpl::instance(); + } + +} // end anon namespace +} // end namespace Catch + +#else // not Windows or ANSI /////////////////////////////////////////////// + +namespace Catch { + + static IColourImpl* platformColourInstance() { return NoColourImpl::instance(); } + +} // end namespace Catch + +#endif // Windows/ ANSI/ None + +namespace Catch { + + Colour::Colour( Code _colourCode ) : m_moved( false ) { use( _colourCode ); } + Colour::Colour( Colour const& _other ) : m_moved( false ) { const_cast<Colour&>( _other ).m_moved = true; } + Colour::~Colour(){ if( !m_moved ) use( None ); } + + void Colour::use( Code _colourCode ) { + static IColourImpl* impl = isDebuggerActive() + ? NoColourImpl::instance() + : platformColourInstance(); + impl->use( _colourCode ); + } + +} // end namespace Catch + +// #included from: catch_generators_impl.hpp +#define TWOBLUECUBES_CATCH_GENERATORS_IMPL_HPP_INCLUDED + +#include <vector> +#include <string> +#include <map> + +namespace Catch { + + struct GeneratorInfo : IGeneratorInfo { + + GeneratorInfo( std::size_t size ) + : m_size( size ), + m_currentIndex( 0 ) + {} + + bool moveNext() { + if( ++m_currentIndex == m_size ) { + m_currentIndex = 0; + return false; + } + return true; + } + + std::size_t getCurrentIndex() const { + return m_currentIndex; + } + + std::size_t m_size; + std::size_t m_currentIndex; + }; + + /////////////////////////////////////////////////////////////////////////// + + class GeneratorsForTest : public IGeneratorsForTest { + + public: + ~GeneratorsForTest() { + deleteAll( m_generatorsInOrder ); + } + + IGeneratorInfo& getGeneratorInfo( std::string const& fileInfo, std::size_t size ) { + std::map<std::string, IGeneratorInfo*>::const_iterator it = m_generatorsByName.find( fileInfo ); + if( it == m_generatorsByName.end() ) { + IGeneratorInfo* info = new GeneratorInfo( size ); + m_generatorsByName.insert( std::make_pair( fileInfo, info ) ); + m_generatorsInOrder.push_back( info ); + return *info; + } + return *it->second; + } + + bool moveNext() { + std::vector<IGeneratorInfo*>::const_iterator it = m_generatorsInOrder.begin(); + std::vector<IGeneratorInfo*>::const_iterator itEnd = m_generatorsInOrder.end(); + for(; it != itEnd; ++it ) { + if( (*it)->moveNext() ) + return true; + } + return false; + } + + private: + std::map<std::string, IGeneratorInfo*> m_generatorsByName; + std::vector<IGeneratorInfo*> m_generatorsInOrder; + }; + + IGeneratorsForTest* createGeneratorsForTest() + { + return new GeneratorsForTest(); + } + +} // end namespace Catch + +// #included from: catch_assertionresult.hpp +#define TWOBLUECUBES_CATCH_ASSERTIONRESULT_HPP_INCLUDED + +namespace Catch { + + AssertionInfo::AssertionInfo( std::string const& _macroName, + SourceLineInfo const& _lineInfo, + std::string const& _capturedExpression, + ResultDisposition::Flags _resultDisposition ) + : macroName( _macroName ), + lineInfo( _lineInfo ), + capturedExpression( _capturedExpression ), + resultDisposition( _resultDisposition ) + {} + + AssertionResult::AssertionResult() {} + + AssertionResult::AssertionResult( AssertionInfo const& info, AssertionResultData const& data ) + : m_info( info ), + m_resultData( data ) + {} + + AssertionResult::~AssertionResult() {} + + // Result was a success + bool AssertionResult::succeeded() const { + return Catch::isOk( m_resultData.resultType ); + } + + // Result was a success, or failure is suppressed + bool AssertionResult::isOk() const { + return Catch::isOk( m_resultData.resultType ) || shouldSuppressFailure( m_info.resultDisposition ); + } + + ResultWas::OfType AssertionResult::getResultType() const { + return m_resultData.resultType; + } + + bool AssertionResult::hasExpression() const { + return !m_info.capturedExpression.empty(); + } + + bool AssertionResult::hasMessage() const { + return !m_resultData.message.empty(); + } + + std::string AssertionResult::getExpression() const { + if( isFalseTest( m_info.resultDisposition ) ) + return "!" + m_info.capturedExpression; + else + return m_info.capturedExpression; + } + std::string AssertionResult::getExpressionInMacro() const { + if( m_info.macroName.empty() ) + return m_info.capturedExpression; + else + return m_info.macroName + "( " + m_info.capturedExpression + " )"; + } + + bool AssertionResult::hasExpandedExpression() const { + return hasExpression() && getExpandedExpression() != getExpression(); + } + + std::string AssertionResult::getExpandedExpression() const { + return m_resultData.reconstructedExpression; + } + + std::string AssertionResult::getMessage() const { + return m_resultData.message; + } + SourceLineInfo AssertionResult::getSourceInfo() const { + return m_info.lineInfo; + } + + std::string AssertionResult::getTestMacroName() const { + return m_info.macroName; + } + +} // end namespace Catch + +// #included from: catch_test_case_info.hpp +#define TWOBLUECUBES_CATCH_TEST_CASE_INFO_HPP_INCLUDED + +namespace Catch { + + inline TestCaseInfo::SpecialProperties parseSpecialTag( std::string const& tag ) { + if( startsWith( tag, "." ) || + tag == "hide" || + tag == "!hide" ) + return TestCaseInfo::IsHidden; + else if( tag == "!throws" ) + return TestCaseInfo::Throws; + else if( tag == "!shouldfail" ) + return TestCaseInfo::ShouldFail; + else if( tag == "!mayfail" ) + return TestCaseInfo::MayFail; + else + return TestCaseInfo::None; + } + inline bool isReservedTag( std::string const& tag ) { + return parseSpecialTag( tag ) == TestCaseInfo::None && tag.size() > 0 && !isalnum( tag[0] ); + } + inline void enforceNotReservedTag( std::string const& tag, SourceLineInfo const& _lineInfo ) { + if( isReservedTag( tag ) ) { + { + Colour colourGuard( Colour::Red ); + Catch::cerr() + << "Tag name [" << tag << "] not allowed.\n" + << "Tag names starting with non alpha-numeric characters are reserved\n"; + } + { + Colour colourGuard( Colour::FileName ); + Catch::cerr() << _lineInfo << std::endl; + } + exit(1); + } + } + + TestCase makeTestCase( ITestCase* _testCase, + std::string const& _className, + std::string const& _name, + std::string const& _descOrTags, + SourceLineInfo const& _lineInfo ) + { + bool isHidden( startsWith( _name, "./" ) ); // Legacy support + + // Parse out tags + std::set<std::string> tags; + std::string desc, tag; + bool inTag = false; + for( std::size_t i = 0; i < _descOrTags.size(); ++i ) { + char c = _descOrTags[i]; + if( !inTag ) { + if( c == '[' ) + inTag = true; + else + desc += c; + } + else { + if( c == ']' ) { + TestCaseInfo::SpecialProperties prop = parseSpecialTag( tag ); + if( prop == TestCaseInfo::IsHidden ) + isHidden = true; + else if( prop == TestCaseInfo::None ) + enforceNotReservedTag( tag, _lineInfo ); + + tags.insert( tag ); + tag.clear(); + inTag = false; + } + else + tag += c; + } + } + if( isHidden ) { + tags.insert( "hide" ); + tags.insert( "." ); + } + + TestCaseInfo info( _name, _className, desc, tags, _lineInfo ); + return TestCase( _testCase, info ); + } + + TestCaseInfo::TestCaseInfo( std::string const& _name, + std::string const& _className, + std::string const& _description, + std::set<std::string> const& _tags, + SourceLineInfo const& _lineInfo ) + : name( _name ), + className( _className ), + description( _description ), + tags( _tags ), + lineInfo( _lineInfo ), + properties( None ) + { + std::ostringstream oss; + for( std::set<std::string>::const_iterator it = _tags.begin(), itEnd = _tags.end(); it != itEnd; ++it ) { + oss << "[" << *it << "]"; + std::string lcaseTag = toLower( *it ); + properties = static_cast<SpecialProperties>( properties | parseSpecialTag( lcaseTag ) ); + lcaseTags.insert( lcaseTag ); + } + tagsAsString = oss.str(); + } + + TestCaseInfo::TestCaseInfo( TestCaseInfo const& other ) + : name( other.name ), + className( other.className ), + description( other.description ), + tags( other.tags ), + lcaseTags( other.lcaseTags ), + tagsAsString( other.tagsAsString ), + lineInfo( other.lineInfo ), + properties( other.properties ) + {} + + bool TestCaseInfo::isHidden() const { + return ( properties & IsHidden ) != 0; + } + bool TestCaseInfo::throws() const { + return ( properties & Throws ) != 0; + } + bool TestCaseInfo::okToFail() const { + return ( properties & (ShouldFail | MayFail ) ) != 0; + } + bool TestCaseInfo::expectedToFail() const { + return ( properties & (ShouldFail ) ) != 0; + } + + TestCase::TestCase( ITestCase* testCase, TestCaseInfo const& info ) : TestCaseInfo( info ), test( testCase ) {} + + TestCase::TestCase( TestCase const& other ) + : TestCaseInfo( other ), + test( other.test ) + {} + + TestCase TestCase::withName( std::string const& _newName ) const { + TestCase other( *this ); + other.name = _newName; + return other; + } + + void TestCase::swap( TestCase& other ) { + test.swap( other.test ); + name.swap( other.name ); + className.swap( other.className ); + description.swap( other.description ); + tags.swap( other.tags ); + lcaseTags.swap( other.lcaseTags ); + tagsAsString.swap( other.tagsAsString ); + std::swap( TestCaseInfo::properties, static_cast<TestCaseInfo&>( other ).properties ); + std::swap( lineInfo, other.lineInfo ); + } + + void TestCase::invoke() const { + test->invoke(); + } + + bool TestCase::operator == ( TestCase const& other ) const { + return test.get() == other.test.get() && + name == other.name && + className == other.className; + } + + bool TestCase::operator < ( TestCase const& other ) const { + return name < other.name; + } + TestCase& TestCase::operator = ( TestCase const& other ) { + TestCase temp( other ); + swap( temp ); + return *this; + } + + TestCaseInfo const& TestCase::getTestCaseInfo() const + { + return *this; + } + +} // end namespace Catch + +// #included from: catch_version.hpp +#define TWOBLUECUBES_CATCH_VERSION_HPP_INCLUDED + +namespace Catch { + + // These numbers are maintained by a script + Version libraryVersion( 1, 1, 1, "master" ); +} + +// #included from: catch_message.hpp +#define TWOBLUECUBES_CATCH_MESSAGE_HPP_INCLUDED + +namespace Catch { + + MessageInfo::MessageInfo( std::string const& _macroName, + SourceLineInfo const& _lineInfo, + ResultWas::OfType _type ) + : macroName( _macroName ), + lineInfo( _lineInfo ), + type( _type ), + sequence( ++globalCount ) + {} + + // This may need protecting if threading support is added + unsigned int MessageInfo::globalCount = 0; + + //////////////////////////////////////////////////////////////////////////// + + ScopedMessage::ScopedMessage( MessageBuilder const& builder ) + : m_info( builder.m_info ) + { + m_info.message = builder.m_stream.str(); + getResultCapture().pushScopedMessage( m_info ); + } + ScopedMessage::ScopedMessage( ScopedMessage const& other ) + : m_info( other.m_info ) + {} + + ScopedMessage::~ScopedMessage() { + getResultCapture().popScopedMessage( m_info ); + } + +} // end namespace Catch + +// #included from: catch_legacy_reporter_adapter.hpp +#define TWOBLUECUBES_CATCH_LEGACY_REPORTER_ADAPTER_HPP_INCLUDED + +// #included from: catch_legacy_reporter_adapter.h +#define TWOBLUECUBES_CATCH_LEGACY_REPORTER_ADAPTER_H_INCLUDED + +namespace Catch +{ + // Deprecated + struct IReporter : IShared { + virtual ~IReporter(); + + virtual bool shouldRedirectStdout() const = 0; + + virtual void StartTesting() = 0; + virtual void EndTesting( Totals const& totals ) = 0; + virtual void StartGroup( std::string const& groupName ) = 0; + virtual void EndGroup( std::string const& groupName, Totals const& totals ) = 0; + virtual void StartTestCase( TestCaseInfo const& testInfo ) = 0; + virtual void EndTestCase( TestCaseInfo const& testInfo, Totals const& totals, std::string const& stdOut, std::string const& stdErr ) = 0; + virtual void StartSection( std::string const& sectionName, std::string const& description ) = 0; + virtual void EndSection( std::string const& sectionName, Counts const& assertions ) = 0; + virtual void NoAssertionsInSection( std::string const& sectionName ) = 0; + virtual void NoAssertionsInTestCase( std::string const& testName ) = 0; + virtual void Aborted() = 0; + virtual void Result( AssertionResult const& result ) = 0; + }; + + class LegacyReporterAdapter : public SharedImpl<IStreamingReporter> + { + public: + LegacyReporterAdapter( Ptr<IReporter> const& legacyReporter ); + virtual ~LegacyReporterAdapter(); + + virtual ReporterPreferences getPreferences() const; + virtual void noMatchingTestCases( std::string const& ); + virtual void testRunStarting( TestRunInfo const& ); + virtual void testGroupStarting( GroupInfo const& groupInfo ); + virtual void testCaseStarting( TestCaseInfo const& testInfo ); + virtual void sectionStarting( SectionInfo const& sectionInfo ); + virtual void assertionStarting( AssertionInfo const& ); + virtual bool assertionEnded( AssertionStats const& assertionStats ); + virtual void sectionEnded( SectionStats const& sectionStats ); + virtual void testCaseEnded( TestCaseStats const& testCaseStats ); + virtual void testGroupEnded( TestGroupStats const& testGroupStats ); + virtual void testRunEnded( TestRunStats const& testRunStats ); + virtual void skipTest( TestCaseInfo const& ); + + private: + Ptr<IReporter> m_legacyReporter; + }; +} + +namespace Catch +{ + LegacyReporterAdapter::LegacyReporterAdapter( Ptr<IReporter> const& legacyReporter ) + : m_legacyReporter( legacyReporter ) + {} + LegacyReporterAdapter::~LegacyReporterAdapter() {} + + ReporterPreferences LegacyReporterAdapter::getPreferences() const { + ReporterPreferences prefs; + prefs.shouldRedirectStdOut = m_legacyReporter->shouldRedirectStdout(); + return prefs; + } + + void LegacyReporterAdapter::noMatchingTestCases( std::string const& ) {} + void LegacyReporterAdapter::testRunStarting( TestRunInfo const& ) { + m_legacyReporter->StartTesting(); + } + void LegacyReporterAdapter::testGroupStarting( GroupInfo const& groupInfo ) { + m_legacyReporter->StartGroup( groupInfo.name ); + } + void LegacyReporterAdapter::testCaseStarting( TestCaseInfo const& testInfo ) { + m_legacyReporter->StartTestCase( testInfo ); + } + void LegacyReporterAdapter::sectionStarting( SectionInfo const& sectionInfo ) { + m_legacyReporter->StartSection( sectionInfo.name, sectionInfo.description ); + } + void LegacyReporterAdapter::assertionStarting( AssertionInfo const& ) { + // Not on legacy interface + } + + bool LegacyReporterAdapter::assertionEnded( AssertionStats const& assertionStats ) { + if( assertionStats.assertionResult.getResultType() != ResultWas::Ok ) { + for( std::vector<MessageInfo>::const_iterator it = assertionStats.infoMessages.begin(), itEnd = assertionStats.infoMessages.end(); + it != itEnd; + ++it ) { + if( it->type == ResultWas::Info ) { + ResultBuilder rb( it->macroName.c_str(), it->lineInfo, "", ResultDisposition::Normal ); + rb << it->message; + rb.setResultType( ResultWas::Info ); + AssertionResult result = rb.build(); + m_legacyReporter->Result( result ); + } + } + } + m_legacyReporter->Result( assertionStats.assertionResult ); + return true; + } + void LegacyReporterAdapter::sectionEnded( SectionStats const& sectionStats ) { + if( sectionStats.missingAssertions ) + m_legacyReporter->NoAssertionsInSection( sectionStats.sectionInfo.name ); + m_legacyReporter->EndSection( sectionStats.sectionInfo.name, sectionStats.assertions ); + } + void LegacyReporterAdapter::testCaseEnded( TestCaseStats const& testCaseStats ) { + m_legacyReporter->EndTestCase + ( testCaseStats.testInfo, + testCaseStats.totals, + testCaseStats.stdOut, + testCaseStats.stdErr ); + } + void LegacyReporterAdapter::testGroupEnded( TestGroupStats const& testGroupStats ) { + if( testGroupStats.aborting ) + m_legacyReporter->Aborted(); + m_legacyReporter->EndGroup( testGroupStats.groupInfo.name, testGroupStats.totals ); + } + void LegacyReporterAdapter::testRunEnded( TestRunStats const& testRunStats ) { + m_legacyReporter->EndTesting( testRunStats.totals ); + } + void LegacyReporterAdapter::skipTest( TestCaseInfo const& ) { + } +} + +// #included from: catch_timer.hpp + +#ifdef __clang__ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wc++11-long-long" +#endif + +#ifdef CATCH_PLATFORM_WINDOWS +#include <windows.h> +#else +#include <sys/time.h> +#endif + +namespace Catch { + + namespace { +#ifdef CATCH_PLATFORM_WINDOWS + uint64_t getCurrentTicks() { + static uint64_t hz=0, hzo=0; + if (!hz) { + QueryPerformanceFrequency( reinterpret_cast<LARGE_INTEGER*>( &hz ) ); + QueryPerformanceCounter( reinterpret_cast<LARGE_INTEGER*>( &hzo ) ); + } + uint64_t t; + QueryPerformanceCounter( reinterpret_cast<LARGE_INTEGER*>( &t ) ); + return ((t-hzo)*1000000)/hz; + } +#else + uint64_t getCurrentTicks() { + timeval t; + gettimeofday(&t,NULL); + return static_cast<uint64_t>( t.tv_sec ) * 1000000ull + static_cast<uint64_t>( t.tv_usec ); + } +#endif + } + + void Timer::start() { + m_ticks = getCurrentTicks(); + } + unsigned int Timer::getElapsedMicroseconds() const { + return static_cast<unsigned int>(getCurrentTicks() - m_ticks); + } + unsigned int Timer::getElapsedMilliseconds() const { + return static_cast<unsigned int>(getElapsedMicroseconds()/1000); + } + double Timer::getElapsedSeconds() const { + return getElapsedMicroseconds()/1000000.0; + } + +} // namespace Catch + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif +// #included from: catch_common.hpp +#define TWOBLUECUBES_CATCH_COMMON_HPP_INCLUDED + +namespace Catch { + + bool startsWith( std::string const& s, std::string const& prefix ) { + return s.size() >= prefix.size() && s.substr( 0, prefix.size() ) == prefix; + } + bool endsWith( std::string const& s, std::string const& suffix ) { + return s.size() >= suffix.size() && s.substr( s.size()-suffix.size(), suffix.size() ) == suffix; + } + bool contains( std::string const& s, std::string const& infix ) { + return s.find( infix ) != std::string::npos; + } + void toLowerInPlace( std::string& s ) { + std::transform( s.begin(), s.end(), s.begin(), ::tolower ); + } + std::string toLower( std::string const& s ) { + std::string lc = s; + toLowerInPlace( lc ); + return lc; + } + std::string trim( std::string const& str ) { + static char const* whitespaceChars = "\n\r\t "; + std::string::size_type start = str.find_first_not_of( whitespaceChars ); + std::string::size_type end = str.find_last_not_of( whitespaceChars ); + + return start != std::string::npos ? str.substr( start, 1+end-start ) : ""; + } + + bool replaceInPlace( std::string& str, std::string const& replaceThis, std::string const& withThis ) { + bool replaced = false; + std::size_t i = str.find( replaceThis ); + while( i != std::string::npos ) { + replaced = true; + str = str.substr( 0, i ) + withThis + str.substr( i+replaceThis.size() ); + if( i < str.size()-withThis.size() ) + i = str.find( replaceThis, i+withThis.size() ); + else + i = std::string::npos; + } + return replaced; + } + + pluralise::pluralise( std::size_t count, std::string const& label ) + : m_count( count ), + m_label( label ) + {} + + std::ostream& operator << ( std::ostream& os, pluralise const& pluraliser ) { + os << pluraliser.m_count << " " << pluraliser.m_label; + if( pluraliser.m_count != 1 ) + os << "s"; + return os; + } + + SourceLineInfo::SourceLineInfo() : line( 0 ){} + SourceLineInfo::SourceLineInfo( char const* _file, std::size_t _line ) + : file( _file ), + line( _line ) + {} + SourceLineInfo::SourceLineInfo( SourceLineInfo const& other ) + : file( other.file ), + line( other.line ) + {} + bool SourceLineInfo::empty() const { + return file.empty(); + } + bool SourceLineInfo::operator == ( SourceLineInfo const& other ) const { + return line == other.line && file == other.file; + } + bool SourceLineInfo::operator < ( SourceLineInfo const& other ) const { + return line < other.line || ( line == other.line && file < other.file ); + } + + std::ostream& operator << ( std::ostream& os, SourceLineInfo const& info ) { +#ifndef __GNUG__ + os << info.file << "(" << info.line << ")"; +#else + os << info.file << ":" << info.line; +#endif + return os; + } + + void throwLogicError( std::string const& message, SourceLineInfo const& locationInfo ) { + std::ostringstream oss; + oss << locationInfo << ": Internal Catch error: '" << message << "'"; + if( alwaysTrue() ) + throw std::logic_error( oss.str() ); + } +} + +// #included from: catch_section.hpp +#define TWOBLUECUBES_CATCH_SECTION_HPP_INCLUDED + +namespace Catch { + + SectionInfo::SectionInfo + ( SourceLineInfo const& _lineInfo, + std::string const& _name, + std::string const& _description ) + : name( _name ), + description( _description ), + lineInfo( _lineInfo ) + {} + + Section::Section( SectionInfo const& info ) + : m_info( info ), + m_sectionIncluded( getResultCapture().sectionStarted( m_info, m_assertions ) ) + { + m_timer.start(); + } + + Section::~Section() { + if( m_sectionIncluded ) + getResultCapture().sectionEnded( m_info, m_assertions, m_timer.getElapsedSeconds() ); + } + + // This indicates whether the section should be executed or not + Section::operator bool() const { + return m_sectionIncluded; + } + +} // end namespace Catch + +// #included from: catch_debugger.hpp +#define TWOBLUECUBES_CATCH_DEBUGGER_HPP_INCLUDED + +#include <iostream> + +#ifdef CATCH_PLATFORM_MAC + + #include <assert.h> + #include <stdbool.h> + #include <sys/types.h> + #include <unistd.h> + #include <sys/sysctl.h> + + namespace Catch{ + + // The following function is taken directly from the following technical note: + // http://developer.apple.com/library/mac/#qa/qa2004/qa1361.html + + // Returns true if the current process is being debugged (either + // running under the debugger or has a debugger attached post facto). + bool isDebuggerActive(){ + + int mib[4]; + struct kinfo_proc info; + size_t size; + + // Initialize the flags so that, if sysctl fails for some bizarre + // reason, we get a predictable result. + + info.kp_proc.p_flag = 0; + + // Initialize mib, which tells sysctl the info we want, in this case + // we're looking for information about a specific process ID. + + mib[0] = CTL_KERN; + mib[1] = KERN_PROC; + mib[2] = KERN_PROC_PID; + mib[3] = getpid(); + + // Call sysctl. + + size = sizeof(info); + if( sysctl(mib, sizeof(mib) / sizeof(*mib), &info, &size, NULL, 0) != 0 ) { + Catch::cerr() << "\n** Call to sysctl failed - unable to determine if debugger is active **\n" << std::endl; + return false; + } + + // We're being debugged if the P_TRACED flag is set. + + return ( (info.kp_proc.p_flag & P_TRACED) != 0 ); + } + } // namespace Catch + +#elif defined(_MSC_VER) + extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent(); + namespace Catch { + bool isDebuggerActive() { + return IsDebuggerPresent() != 0; + } + } +#elif defined(__MINGW32__) + extern "C" __declspec(dllimport) int __stdcall IsDebuggerPresent(); + namespace Catch { + bool isDebuggerActive() { + return IsDebuggerPresent() != 0; + } + } +#else + namespace Catch { + inline bool isDebuggerActive() { return false; } + } +#endif // Platform + +#ifdef CATCH_PLATFORM_WINDOWS + extern "C" __declspec(dllimport) void __stdcall OutputDebugStringA( const char* ); + namespace Catch { + void writeToDebugConsole( std::string const& text ) { + ::OutputDebugStringA( text.c_str() ); + } + } +#else + namespace Catch { + void writeToDebugConsole( std::string const& text ) { + // !TBD: Need a version for Mac/ XCode and other IDEs + Catch::cout() << text; + } + } +#endif // Platform + +// #included from: catch_tostring.hpp +#define TWOBLUECUBES_CATCH_TOSTRING_HPP_INCLUDED + +namespace Catch { + +namespace Detail { + + std::string unprintableString = "{?}"; + + namespace { + struct Endianness { + enum Arch { Big, Little }; + + static Arch which() { + union _{ + int asInt; + char asChar[sizeof (int)]; + } u; + + u.asInt = 1; + return ( u.asChar[sizeof(int)-1] == 1 ) ? Big : Little; + } + }; + } + + std::string rawMemoryToString( const void *object, std::size_t size ) + { + // Reverse order for little endian architectures + int i = 0, end = static_cast<int>( size ), inc = 1; + if( Endianness::which() == Endianness::Little ) { + i = end-1; + end = inc = -1; + } + + unsigned char const *bytes = static_cast<unsigned char const *>(object); + std::ostringstream os; + os << "0x" << std::setfill('0') << std::hex; + for( ; i != end; i += inc ) + os << std::setw(2) << static_cast<unsigned>(bytes[i]); + return os.str(); + } +} + +std::string toString( std::string const& value ) { + std::string s = value; + if( getCurrentContext().getConfig()->showInvisibles() ) { + for(size_t i = 0; i < s.size(); ++i ) { + std::string subs; + switch( s[i] ) { + case '\n': subs = "\\n"; break; + case '\t': subs = "\\t"; break; + default: break; + } + if( !subs.empty() ) { + s = s.substr( 0, i ) + subs + s.substr( i+1 ); + ++i; + } + } + } + return "\"" + s + "\""; +} +std::string toString( std::wstring const& value ) { + + std::string s; + s.reserve( value.size() ); + for(size_t i = 0; i < value.size(); ++i ) + s += value[i] <= 0xff ? static_cast<char>( value[i] ) : '?'; + return Catch::toString( s ); +} + +std::string toString( const char* const value ) { + return value ? Catch::toString( std::string( value ) ) : std::string( "{null string}" ); +} + +std::string toString( char* const value ) { + return Catch::toString( static_cast<const char*>( value ) ); +} + +std::string toString( const wchar_t* const value ) +{ + return value ? Catch::toString( std::wstring(value) ) : std::string( "{null string}" ); +} + +std::string toString( wchar_t* const value ) +{ + return Catch::toString( static_cast<const wchar_t*>( value ) ); +} + +std::string toString( int value ) { + std::ostringstream oss; + if( value > 8192 ) + oss << "0x" << std::hex << value; + else + oss << value; + return oss.str(); +} + +std::string toString( unsigned long value ) { + std::ostringstream oss; + if( value > 8192 ) + oss << "0x" << std::hex << value; + else + oss << value; + return oss.str(); +} + +std::string toString( unsigned int value ) { + return Catch::toString( static_cast<unsigned long>( value ) ); +} + +template<typename T> +std::string fpToString( T value, int precision ) { + std::ostringstream oss; + oss << std::setprecision( precision ) + << std::fixed + << value; + std::string d = oss.str(); + std::size_t i = d.find_last_not_of( '0' ); + if( i != std::string::npos && i != d.size()-1 ) { + if( d[i] == '.' ) + i++; + d = d.substr( 0, i+1 ); + } + return d; +} + +std::string toString( const double value ) { + return fpToString( value, 10 ); +} +std::string toString( const float value ) { + return fpToString( value, 5 ) + "f"; +} + +std::string toString( bool value ) { + return value ? "true" : "false"; +} + +std::string toString( char value ) { + return value < ' ' + ? toString( static_cast<unsigned int>( value ) ) + : Detail::makeString( value ); +} + +std::string toString( signed char value ) { + return toString( static_cast<char>( value ) ); +} + +std::string toString( unsigned char value ) { + return toString( static_cast<char>( value ) ); +} + +#ifdef CATCH_CONFIG_CPP11_NULLPTR +std::string toString( std::nullptr_t ) { + return "nullptr"; +} +#endif + +#ifdef __OBJC__ + std::string toString( NSString const * const& nsstring ) { + if( !nsstring ) + return "nil"; + return "@" + toString([nsstring UTF8String]); + } + std::string toString( NSString * CATCH_ARC_STRONG const& nsstring ) { + if( !nsstring ) + return "nil"; + return "@" + toString([nsstring UTF8String]); + } + std::string toString( NSObject* const& nsObject ) { + return toString( [nsObject description] ); + } +#endif + +} // end namespace Catch + +// #included from: catch_result_builder.hpp +#define TWOBLUECUBES_CATCH_RESULT_BUILDER_HPP_INCLUDED + +namespace Catch { + + ResultBuilder::ResultBuilder( char const* macroName, + SourceLineInfo const& lineInfo, + char const* capturedExpression, + ResultDisposition::Flags resultDisposition ) + : m_assertionInfo( macroName, lineInfo, capturedExpression, resultDisposition ), + m_shouldDebugBreak( false ), + m_shouldThrow( false ) + {} + + ResultBuilder& ResultBuilder::setResultType( ResultWas::OfType result ) { + m_data.resultType = result; + return *this; + } + ResultBuilder& ResultBuilder::setResultType( bool result ) { + m_data.resultType = result ? ResultWas::Ok : ResultWas::ExpressionFailed; + return *this; + } + ResultBuilder& ResultBuilder::setLhs( std::string const& lhs ) { + m_exprComponents.lhs = lhs; + return *this; + } + ResultBuilder& ResultBuilder::setRhs( std::string const& rhs ) { + m_exprComponents.rhs = rhs; + return *this; + } + ResultBuilder& ResultBuilder::setOp( std::string const& op ) { + m_exprComponents.op = op; + return *this; + } + + void ResultBuilder::endExpression() { + m_exprComponents.testFalse = isFalseTest( m_assertionInfo.resultDisposition ); + captureExpression(); + } + + void ResultBuilder::useActiveException( ResultDisposition::Flags resultDisposition ) { + m_assertionInfo.resultDisposition = resultDisposition; + m_stream.oss << Catch::translateActiveException(); + captureResult( ResultWas::ThrewException ); + } + + void ResultBuilder::captureResult( ResultWas::OfType resultType ) { + setResultType( resultType ); + captureExpression(); + } + + void ResultBuilder::captureExpression() { + AssertionResult result = build(); + getResultCapture().assertionEnded( result ); + + if( !result.isOk() ) { + if( getCurrentContext().getConfig()->shouldDebugBreak() ) + m_shouldDebugBreak = true; + if( getCurrentContext().getRunner()->aborting() || m_assertionInfo.resultDisposition == ResultDisposition::Normal ) + m_shouldThrow = true; + } + } + void ResultBuilder::react() { + if( m_shouldThrow ) + throw Catch::TestFailureException(); + } + + bool ResultBuilder::shouldDebugBreak() const { return m_shouldDebugBreak; } + bool ResultBuilder::allowThrows() const { return getCurrentContext().getConfig()->allowThrows(); } + + AssertionResult ResultBuilder::build() const + { + assert( m_data.resultType != ResultWas::Unknown ); + + AssertionResultData data = m_data; + + // Flip bool results if testFalse is set + if( m_exprComponents.testFalse ) { + if( data.resultType == ResultWas::Ok ) + data.resultType = ResultWas::ExpressionFailed; + else if( data.resultType == ResultWas::ExpressionFailed ) + data.resultType = ResultWas::Ok; + } + + data.message = m_stream.oss.str(); + data.reconstructedExpression = reconstructExpression(); + if( m_exprComponents.testFalse ) { + if( m_exprComponents.op == "" ) + data.reconstructedExpression = "!" + data.reconstructedExpression; + else + data.reconstructedExpression = "!(" + data.reconstructedExpression + ")"; + } + return AssertionResult( m_assertionInfo, data ); + } + std::string ResultBuilder::reconstructExpression() const { + if( m_exprComponents.op == "" ) + return m_exprComponents.lhs.empty() ? m_assertionInfo.capturedExpression : m_exprComponents.op + m_exprComponents.lhs; + else if( m_exprComponents.op == "matches" ) + return m_exprComponents.lhs + " " + m_exprComponents.rhs; + else if( m_exprComponents.op != "!" ) { + if( m_exprComponents.lhs.size() + m_exprComponents.rhs.size() < 40 && + m_exprComponents.lhs.find("\n") == std::string::npos && + m_exprComponents.rhs.find("\n") == std::string::npos ) + return m_exprComponents.lhs + " " + m_exprComponents.op + " " + m_exprComponents.rhs; + else + return m_exprComponents.lhs + "\n" + m_exprComponents.op + "\n" + m_exprComponents.rhs; + } + else + return "{can't expand - use " + m_assertionInfo.macroName + "_FALSE( " + m_assertionInfo.capturedExpression.substr(1) + " ) instead of " + m_assertionInfo.macroName + "( " + m_assertionInfo.capturedExpression + " ) for better diagnostics}"; + } + +} // end namespace Catch + +// #included from: catch_tag_alias_registry.hpp +#define TWOBLUECUBES_CATCH_TAG_ALIAS_REGISTRY_HPP_INCLUDED + +// #included from: catch_tag_alias_registry.h +#define TWOBLUECUBES_CATCH_TAG_ALIAS_REGISTRY_H_INCLUDED + +#include <map> + +namespace Catch { + + class TagAliasRegistry : public ITagAliasRegistry { + public: + virtual ~TagAliasRegistry(); + virtual Option<TagAlias> find( std::string const& alias ) const; + virtual std::string expandAliases( std::string const& unexpandedTestSpec ) const; + void add( char const* alias, char const* tag, SourceLineInfo const& lineInfo ); + static TagAliasRegistry& get(); + + private: + std::map<std::string, TagAlias> m_registry; + }; + +} // end namespace Catch + +#include <map> +#include <iostream> + +namespace Catch { + + TagAliasRegistry::~TagAliasRegistry() {} + + Option<TagAlias> TagAliasRegistry::find( std::string const& alias ) const { + std::map<std::string, TagAlias>::const_iterator it = m_registry.find( alias ); + if( it != m_registry.end() ) + return it->second; + else + return Option<TagAlias>(); + } + + std::string TagAliasRegistry::expandAliases( std::string const& unexpandedTestSpec ) const { + std::string expandedTestSpec = unexpandedTestSpec; + for( std::map<std::string, TagAlias>::const_iterator it = m_registry.begin(), itEnd = m_registry.end(); + it != itEnd; + ++it ) { + std::size_t pos = expandedTestSpec.find( it->first ); + if( pos != std::string::npos ) { + expandedTestSpec = expandedTestSpec.substr( 0, pos ) + + it->second.tag + + expandedTestSpec.substr( pos + it->first.size() ); + } + } + return expandedTestSpec; + } + + void TagAliasRegistry::add( char const* alias, char const* tag, SourceLineInfo const& lineInfo ) { + + if( !startsWith( alias, "[@" ) || !endsWith( alias, "]" ) ) { + std::ostringstream oss; + oss << "error: tag alias, \"" << alias << "\" is not of the form [@alias name].\n" << lineInfo; + throw std::domain_error( oss.str().c_str() ); + } + if( !m_registry.insert( std::make_pair( alias, TagAlias( tag, lineInfo ) ) ).second ) { + std::ostringstream oss; + oss << "error: tag alias, \"" << alias << "\" already registered.\n" + << "\tFirst seen at " << find(alias)->lineInfo << "\n" + << "\tRedefined at " << lineInfo; + throw std::domain_error( oss.str().c_str() ); + } + } + + TagAliasRegistry& TagAliasRegistry::get() { + static TagAliasRegistry instance; + return instance; + + } + + ITagAliasRegistry::~ITagAliasRegistry() {} + ITagAliasRegistry const& ITagAliasRegistry::get() { return TagAliasRegistry::get(); } + + RegistrarForTagAliases::RegistrarForTagAliases( char const* alias, char const* tag, SourceLineInfo const& lineInfo ) { + try { + TagAliasRegistry::get().add( alias, tag, lineInfo ); + } + catch( std::exception& ex ) { + Colour colourGuard( Colour::Red ); + Catch::cerr() << ex.what() << std::endl; + exit(1); + } + } + +} // end namespace Catch + +// #included from: ../reporters/catch_reporter_xml.hpp +#define TWOBLUECUBES_CATCH_REPORTER_XML_HPP_INCLUDED + +// #included from: catch_reporter_bases.hpp +#define TWOBLUECUBES_CATCH_REPORTER_BASES_HPP_INCLUDED + +#include <cstring> + +namespace Catch { + + struct StreamingReporterBase : SharedImpl<IStreamingReporter> { + + StreamingReporterBase( ReporterConfig const& _config ) + : m_config( _config.fullConfig() ), + stream( _config.stream() ) + {} + + virtual ~StreamingReporterBase(); + + virtual void noMatchingTestCases( std::string const& ) {} + + virtual void testRunStarting( TestRunInfo const& _testRunInfo ) { + currentTestRunInfo = _testRunInfo; + } + virtual void testGroupStarting( GroupInfo const& _groupInfo ) { + currentGroupInfo = _groupInfo; + } + + virtual void testCaseStarting( TestCaseInfo const& _testInfo ) { + currentTestCaseInfo = _testInfo; + } + virtual void sectionStarting( SectionInfo const& _sectionInfo ) { + m_sectionStack.push_back( _sectionInfo ); + } + + virtual void sectionEnded( SectionStats const& /* _sectionStats */ ) { + m_sectionStack.pop_back(); + } + virtual void testCaseEnded( TestCaseStats const& /* _testCaseStats */ ) { + currentTestCaseInfo.reset(); + } + virtual void testGroupEnded( TestGroupStats const& /* _testGroupStats */ ) { + currentGroupInfo.reset(); + } + virtual void testRunEnded( TestRunStats const& /* _testRunStats */ ) { + currentTestCaseInfo.reset(); + currentGroupInfo.reset(); + currentTestRunInfo.reset(); + } + + virtual void skipTest( TestCaseInfo const& ) { + // Don't do anything with this by default. + // It can optionally be overridden in the derived class. + } + + Ptr<IConfig> m_config; + std::ostream& stream; + + LazyStat<TestRunInfo> currentTestRunInfo; + LazyStat<GroupInfo> currentGroupInfo; + LazyStat<TestCaseInfo> currentTestCaseInfo; + + std::vector<SectionInfo> m_sectionStack; + }; + + struct CumulativeReporterBase : SharedImpl<IStreamingReporter> { + template<typename T, typename ChildNodeT> + struct Node : SharedImpl<> { + explicit Node( T const& _value ) : value( _value ) {} + virtual ~Node() {} + + typedef std::vector<Ptr<ChildNodeT> > ChildNodes; + T value; + ChildNodes children; + }; + struct SectionNode : SharedImpl<> { + explicit SectionNode( SectionStats const& _stats ) : stats( _stats ) {} + virtual ~SectionNode(); + + bool operator == ( SectionNode const& other ) const { + return stats.sectionInfo.lineInfo == other.stats.sectionInfo.lineInfo; + } + bool operator == ( Ptr<SectionNode> const& other ) const { + return operator==( *other ); + } + + SectionStats stats; + typedef std::vector<Ptr<SectionNode> > ChildSections; + typedef std::vector<AssertionStats> Assertions; + ChildSections childSections; + Assertions assertions; + std::string stdOut; + std::string stdErr; + }; + + struct BySectionInfo { + BySectionInfo( SectionInfo const& other ) : m_other( other ) {} + BySectionInfo( BySectionInfo const& other ) : m_other( other.m_other ) {} + bool operator() ( Ptr<SectionNode> const& node ) const { + return node->stats.sectionInfo.lineInfo == m_other.lineInfo; + } + private: + void operator=( BySectionInfo const& ); + SectionInfo const& m_other; + }; + + typedef Node<TestCaseStats, SectionNode> TestCaseNode; + typedef Node<TestGroupStats, TestCaseNode> TestGroupNode; + typedef Node<TestRunStats, TestGroupNode> TestRunNode; + + CumulativeReporterBase( ReporterConfig const& _config ) + : m_config( _config.fullConfig() ), + stream( _config.stream() ) + {} + ~CumulativeReporterBase(); + + virtual void testRunStarting( TestRunInfo const& ) {} + virtual void testGroupStarting( GroupInfo const& ) {} + + virtual void testCaseStarting( TestCaseInfo const& ) {} + + virtual void sectionStarting( SectionInfo const& sectionInfo ) { + SectionStats incompleteStats( sectionInfo, Counts(), 0, false ); + Ptr<SectionNode> node; + if( m_sectionStack.empty() ) { + if( !m_rootSection ) + m_rootSection = new SectionNode( incompleteStats ); + node = m_rootSection; + } + else { + SectionNode& parentNode = *m_sectionStack.back(); + SectionNode::ChildSections::const_iterator it = + std::find_if( parentNode.childSections.begin(), + parentNode.childSections.end(), + BySectionInfo( sectionInfo ) ); + if( it == parentNode.childSections.end() ) { + node = new SectionNode( incompleteStats ); + parentNode.childSections.push_back( node ); + } + else + node = *it; + } + m_sectionStack.push_back( node ); + m_deepestSection = node; + } + + virtual void assertionStarting( AssertionInfo const& ) {} + + virtual bool assertionEnded( AssertionStats const& assertionStats ) { + assert( !m_sectionStack.empty() ); + SectionNode& sectionNode = *m_sectionStack.back(); + sectionNode.assertions.push_back( assertionStats ); + return true; + } + virtual void sectionEnded( SectionStats const& sectionStats ) { + assert( !m_sectionStack.empty() ); + SectionNode& node = *m_sectionStack.back(); + node.stats = sectionStats; + m_sectionStack.pop_back(); + } + virtual void testCaseEnded( TestCaseStats const& testCaseStats ) { + Ptr<TestCaseNode> node = new TestCaseNode( testCaseStats ); + assert( m_sectionStack.size() == 0 ); + node->children.push_back( m_rootSection ); + m_testCases.push_back( node ); + m_rootSection.reset(); + + assert( m_deepestSection ); + m_deepestSection->stdOut = testCaseStats.stdOut; + m_deepestSection->stdErr = testCaseStats.stdErr; + } + virtual void testGroupEnded( TestGroupStats const& testGroupStats ) { + Ptr<TestGroupNode> node = new TestGroupNode( testGroupStats ); + node->children.swap( m_testCases ); + m_testGroups.push_back( node ); + } + virtual void testRunEnded( TestRunStats const& testRunStats ) { + Ptr<TestRunNode> node = new TestRunNode( testRunStats ); + node->children.swap( m_testGroups ); + m_testRuns.push_back( node ); + testRunEndedCumulative(); + } + virtual void testRunEndedCumulative() = 0; + + virtual void skipTest( TestCaseInfo const& ) {} + + Ptr<IConfig> m_config; + std::ostream& stream; + std::vector<AssertionStats> m_assertions; + std::vector<std::vector<Ptr<SectionNode> > > m_sections; + std::vector<Ptr<TestCaseNode> > m_testCases; + std::vector<Ptr<TestGroupNode> > m_testGroups; + + std::vector<Ptr<TestRunNode> > m_testRuns; + + Ptr<SectionNode> m_rootSection; + Ptr<SectionNode> m_deepestSection; + std::vector<Ptr<SectionNode> > m_sectionStack; + + }; + + template<char C> + char const* getLineOfChars() { + static char line[CATCH_CONFIG_CONSOLE_WIDTH] = {0}; + if( !*line ) { + memset( line, C, CATCH_CONFIG_CONSOLE_WIDTH-1 ); + line[CATCH_CONFIG_CONSOLE_WIDTH-1] = 0; + } + return line; + } + +} // end namespace Catch + +// #included from: ../internal/catch_reporter_registrars.hpp +#define TWOBLUECUBES_CATCH_REPORTER_REGISTRARS_HPP_INCLUDED + +namespace Catch { + + template<typename T> + class LegacyReporterRegistrar { + + class ReporterFactory : public IReporterFactory { + virtual IStreamingReporter* create( ReporterConfig const& config ) const { + return new LegacyReporterAdapter( new T( config ) ); + } + + virtual std::string getDescription() const { + return T::getDescription(); + } + }; + + public: + + LegacyReporterRegistrar( std::string const& name ) { + getMutableRegistryHub().registerReporter( name, new ReporterFactory() ); + } + }; + + template<typename T> + class ReporterRegistrar { + + class ReporterFactory : public IReporterFactory { + + // *** Please Note ***: + // - If you end up here looking at a compiler error because it's trying to register + // your custom reporter class be aware that the native reporter interface has changed + // to IStreamingReporter. The "legacy" interface, IReporter, is still supported via + // an adapter. Just use REGISTER_LEGACY_REPORTER to take advantage of the adapter. + // However please consider updating to the new interface as the old one is now + // deprecated and will probably be removed quite soon! + // Please contact me via github if you have any questions at all about this. + // In fact, ideally, please contact me anyway to let me know you've hit this - as I have + // no idea who is actually using custom reporters at all (possibly no-one!). + // The new interface is designed to minimise exposure to interface changes in the future. + virtual IStreamingReporter* create( ReporterConfig const& config ) const { + return new T( config ); + } + + virtual std::string getDescription() const { + return T::getDescription(); + } + }; + + public: + + ReporterRegistrar( std::string const& name ) { + getMutableRegistryHub().registerReporter( name, new ReporterFactory() ); + } + }; +} + +#define INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) \ + namespace{ Catch::LegacyReporterRegistrar<reporterType> catch_internal_RegistrarFor##reporterType( name ); } +#define INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType ) \ + namespace{ Catch::ReporterRegistrar<reporterType> catch_internal_RegistrarFor##reporterType( name ); } + +// #included from: ../internal/catch_xmlwriter.hpp +#define TWOBLUECUBES_CATCH_XMLWRITER_HPP_INCLUDED + +#include <sstream> +#include <string> +#include <vector> + +namespace Catch { + + class XmlWriter { + public: + + class ScopedElement { + public: + ScopedElement( XmlWriter* writer ) + : m_writer( writer ) + {} + + ScopedElement( ScopedElement const& other ) + : m_writer( other.m_writer ){ + other.m_writer = NULL; + } + + ~ScopedElement() { + if( m_writer ) + m_writer->endElement(); + } + + ScopedElement& writeText( std::string const& text, bool indent = true ) { + m_writer->writeText( text, indent ); + return *this; + } + + template<typename T> + ScopedElement& writeAttribute( std::string const& name, T const& attribute ) { + m_writer->writeAttribute( name, attribute ); + return *this; + } + + private: + mutable XmlWriter* m_writer; + }; + + XmlWriter() + : m_tagIsOpen( false ), + m_needsNewline( false ), + m_os( &Catch::cout() ) + {} + + XmlWriter( std::ostream& os ) + : m_tagIsOpen( false ), + m_needsNewline( false ), + m_os( &os ) + {} + + ~XmlWriter() { + while( !m_tags.empty() ) + endElement(); + } + +//# ifndef CATCH_CPP11_OR_GREATER +// XmlWriter& operator = ( XmlWriter const& other ) { +// XmlWriter temp( other ); +// swap( temp ); +// return *this; +// } +//# else +// XmlWriter( XmlWriter const& ) = default; +// XmlWriter( XmlWriter && ) = default; +// XmlWriter& operator = ( XmlWriter const& ) = default; +// XmlWriter& operator = ( XmlWriter && ) = default; +//# endif +// +// void swap( XmlWriter& other ) { +// std::swap( m_tagIsOpen, other.m_tagIsOpen ); +// std::swap( m_needsNewline, other.m_needsNewline ); +// std::swap( m_tags, other.m_tags ); +// std::swap( m_indent, other.m_indent ); +// std::swap( m_os, other.m_os ); +// } + + XmlWriter& startElement( std::string const& name ) { + ensureTagClosed(); + newlineIfNecessary(); + stream() << m_indent << "<" << name; + m_tags.push_back( name ); + m_indent += " "; + m_tagIsOpen = true; + return *this; + } + + ScopedElement scopedElement( std::string const& name ) { + ScopedElement scoped( this ); + startElement( name ); + return scoped; + } + + XmlWriter& endElement() { + newlineIfNecessary(); + m_indent = m_indent.substr( 0, m_indent.size()-2 ); + if( m_tagIsOpen ) { + stream() << "/>\n"; + m_tagIsOpen = false; + } + else { + stream() << m_indent << "</" << m_tags.back() << ">\n"; + } + m_tags.pop_back(); + return *this; + } + + XmlWriter& writeAttribute( std::string const& name, std::string const& attribute ) { + if( !name.empty() && !attribute.empty() ) { + stream() << " " << name << "=\""; + writeEncodedText( attribute ); + stream() << "\""; + } + return *this; + } + + XmlWriter& writeAttribute( std::string const& name, bool attribute ) { + stream() << " " << name << "=\"" << ( attribute ? "true" : "false" ) << "\""; + return *this; + } + + template<typename T> + XmlWriter& writeAttribute( std::string const& name, T const& attribute ) { + if( !name.empty() ) + stream() << " " << name << "=\"" << attribute << "\""; + return *this; + } + + XmlWriter& writeText( std::string const& text, bool indent = true ) { + if( !text.empty() ){ + bool tagWasOpen = m_tagIsOpen; + ensureTagClosed(); + if( tagWasOpen && indent ) + stream() << m_indent; + writeEncodedText( text ); + m_needsNewline = true; + } + return *this; + } + + XmlWriter& writeComment( std::string const& text ) { + ensureTagClosed(); + stream() << m_indent << "<!--" << text << "-->"; + m_needsNewline = true; + return *this; + } + + XmlWriter& writeBlankLine() { + ensureTagClosed(); + stream() << "\n"; + return *this; + } + + void setStream( std::ostream& os ) { + m_os = &os; + } + + private: + XmlWriter( XmlWriter const& ); + void operator=( XmlWriter const& ); + + std::ostream& stream() { + return *m_os; + } + + void ensureTagClosed() { + if( m_tagIsOpen ) { + stream() << ">\n"; + m_tagIsOpen = false; + } + } + + void newlineIfNecessary() { + if( m_needsNewline ) { + stream() << "\n"; + m_needsNewline = false; + } + } + + void writeEncodedText( std::string const& text ) { + static const char* charsToEncode = "<&\""; + std::string mtext = text; + std::string::size_type pos = mtext.find_first_of( charsToEncode ); + while( pos != std::string::npos ) { + stream() << mtext.substr( 0, pos ); + + switch( mtext[pos] ) { + case '<': + stream() << "<"; + break; + case '&': + stream() << "&"; + break; + case '\"': + stream() << """; + break; + } + mtext = mtext.substr( pos+1 ); + pos = mtext.find_first_of( charsToEncode ); + } + stream() << mtext; + } + + bool m_tagIsOpen; + bool m_needsNewline; + std::vector<std::string> m_tags; + std::string m_indent; + std::ostream* m_os; + }; + +} +namespace Catch { + class XmlReporter : public StreamingReporterBase { + public: + XmlReporter( ReporterConfig const& _config ) + : StreamingReporterBase( _config ), + m_sectionDepth( 0 ) + {} + + virtual ~XmlReporter(); + + static std::string getDescription() { + return "Reports test results as an XML document"; + } + + public: // StreamingReporterBase + virtual ReporterPreferences getPreferences() const { + ReporterPreferences prefs; + prefs.shouldRedirectStdOut = true; + return prefs; + } + + virtual void noMatchingTestCases( std::string const& s ) { + StreamingReporterBase::noMatchingTestCases( s ); + } + + virtual void testRunStarting( TestRunInfo const& testInfo ) { + StreamingReporterBase::testRunStarting( testInfo ); + m_xml.setStream( stream ); + m_xml.startElement( "Catch" ); + if( !m_config->name().empty() ) + m_xml.writeAttribute( "name", m_config->name() ); + } + + virtual void testGroupStarting( GroupInfo const& groupInfo ) { + StreamingReporterBase::testGroupStarting( groupInfo ); + m_xml.startElement( "Group" ) + .writeAttribute( "name", groupInfo.name ); + } + + virtual void testCaseStarting( TestCaseInfo const& testInfo ) { + StreamingReporterBase::testCaseStarting(testInfo); + m_xml.startElement( "TestCase" ).writeAttribute( "name", trim( testInfo.name ) ); + + if ( m_config->showDurations() == ShowDurations::Always ) + m_testCaseTimer.start(); + } + + virtual void sectionStarting( SectionInfo const& sectionInfo ) { + StreamingReporterBase::sectionStarting( sectionInfo ); + if( m_sectionDepth++ > 0 ) { + m_xml.startElement( "Section" ) + .writeAttribute( "name", trim( sectionInfo.name ) ) + .writeAttribute( "description", sectionInfo.description ); + } + } + + virtual void assertionStarting( AssertionInfo const& ) { } + + virtual bool assertionEnded( AssertionStats const& assertionStats ) { + const AssertionResult& assertionResult = assertionStats.assertionResult; + + // Print any info messages in <Info> tags. + if( assertionStats.assertionResult.getResultType() != ResultWas::Ok ) { + for( std::vector<MessageInfo>::const_iterator it = assertionStats.infoMessages.begin(), itEnd = assertionStats.infoMessages.end(); + it != itEnd; + ++it ) { + if( it->type == ResultWas::Info ) { + m_xml.scopedElement( "Info" ) + .writeText( it->message ); + } else if ( it->type == ResultWas::Warning ) { + m_xml.scopedElement( "Warning" ) + .writeText( it->message ); + } + } + } + + // Drop out if result was successful but we're not printing them. + if( !m_config->includeSuccessfulResults() && isOk(assertionResult.getResultType()) ) + return true; + + // Print the expression if there is one. + if( assertionResult.hasExpression() ) { + m_xml.startElement( "Expression" ) + .writeAttribute( "success", assertionResult.succeeded() ) + .writeAttribute( "type", assertionResult.getTestMacroName() ) + .writeAttribute( "filename", assertionResult.getSourceInfo().file ) + .writeAttribute( "line", assertionResult.getSourceInfo().line ); + + m_xml.scopedElement( "Original" ) + .writeText( assertionResult.getExpression() ); + m_xml.scopedElement( "Expanded" ) + .writeText( assertionResult.getExpandedExpression() ); + } + + // And... Print a result applicable to each result type. + switch( assertionResult.getResultType() ) { + case ResultWas::ThrewException: + m_xml.scopedElement( "Exception" ) + .writeAttribute( "filename", assertionResult.getSourceInfo().file ) + .writeAttribute( "line", assertionResult.getSourceInfo().line ) + .writeText( assertionResult.getMessage() ); + break; + case ResultWas::FatalErrorCondition: + m_xml.scopedElement( "Fatal Error Condition" ) + .writeAttribute( "filename", assertionResult.getSourceInfo().file ) + .writeAttribute( "line", assertionResult.getSourceInfo().line ) + .writeText( assertionResult.getMessage() ); + break; + case ResultWas::Info: + m_xml.scopedElement( "Info" ) + .writeText( assertionResult.getMessage() ); + break; + case ResultWas::Warning: + // Warning will already have been written + break; + case ResultWas::ExplicitFailure: + m_xml.scopedElement( "Failure" ) + .writeText( assertionResult.getMessage() ); + break; + default: + break; + } + + if( assertionResult.hasExpression() ) + m_xml.endElement(); + + return true; + } + + virtual void sectionEnded( SectionStats const& sectionStats ) { + StreamingReporterBase::sectionEnded( sectionStats ); + if( --m_sectionDepth > 0 ) { + XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResults" ); + e.writeAttribute( "successes", sectionStats.assertions.passed ); + e.writeAttribute( "failures", sectionStats.assertions.failed ); + e.writeAttribute( "expectedFailures", sectionStats.assertions.failedButOk ); + + if ( m_config->showDurations() == ShowDurations::Always ) + e.writeAttribute( "durationInSeconds", sectionStats.durationInSeconds ); + + m_xml.endElement(); + } + } + + virtual void testCaseEnded( TestCaseStats const& testCaseStats ) { + StreamingReporterBase::testCaseEnded( testCaseStats ); + XmlWriter::ScopedElement e = m_xml.scopedElement( "OverallResult" ); + e.writeAttribute( "success", testCaseStats.totals.assertions.allOk() ); + + if ( m_config->showDurations() == ShowDurations::Always ) + e.writeAttribute( "durationInSeconds", m_testCaseTimer.getElapsedSeconds() ); + + m_xml.endElement(); + } + + virtual void testGroupEnded( TestGroupStats const& testGroupStats ) { + StreamingReporterBase::testGroupEnded( testGroupStats ); + // TODO: Check testGroupStats.aborting and act accordingly. + m_xml.scopedElement( "OverallResults" ) + .writeAttribute( "successes", testGroupStats.totals.assertions.passed ) + .writeAttribute( "failures", testGroupStats.totals.assertions.failed ) + .writeAttribute( "expectedFailures", testGroupStats.totals.assertions.failedButOk ); + m_xml.endElement(); + } + + virtual void testRunEnded( TestRunStats const& testRunStats ) { + StreamingReporterBase::testRunEnded( testRunStats ); + m_xml.scopedElement( "OverallResults" ) + .writeAttribute( "successes", testRunStats.totals.assertions.passed ) + .writeAttribute( "failures", testRunStats.totals.assertions.failed ) + .writeAttribute( "expectedFailures", testRunStats.totals.assertions.failedButOk ); + m_xml.endElement(); + } + + private: + Timer m_testCaseTimer; + XmlWriter m_xml; + int m_sectionDepth; + }; + + INTERNAL_CATCH_REGISTER_REPORTER( "xml", XmlReporter ) + +} // end namespace Catch + +// #included from: ../reporters/catch_reporter_junit.hpp +#define TWOBLUECUBES_CATCH_REPORTER_JUNIT_HPP_INCLUDED + +#include <assert.h> + +namespace Catch { + + class JunitReporter : public CumulativeReporterBase { + public: + JunitReporter( ReporterConfig const& _config ) + : CumulativeReporterBase( _config ), + xml( _config.stream() ) + {} + + ~JunitReporter(); + + static std::string getDescription() { + return "Reports test results in an XML format that looks like Ant's junitreport target"; + } + + virtual void noMatchingTestCases( std::string const& /*spec*/ ) {} + + virtual ReporterPreferences getPreferences() const { + ReporterPreferences prefs; + prefs.shouldRedirectStdOut = true; + return prefs; + } + + virtual void testRunStarting( TestRunInfo const& runInfo ) { + CumulativeReporterBase::testRunStarting( runInfo ); + xml.startElement( "testsuites" ); + } + + virtual void testGroupStarting( GroupInfo const& groupInfo ) { + suiteTimer.start(); + stdOutForSuite.str(""); + stdErrForSuite.str(""); + unexpectedExceptions = 0; + CumulativeReporterBase::testGroupStarting( groupInfo ); + } + + virtual bool assertionEnded( AssertionStats const& assertionStats ) { + if( assertionStats.assertionResult.getResultType() == ResultWas::ThrewException ) + unexpectedExceptions++; + return CumulativeReporterBase::assertionEnded( assertionStats ); + } + + virtual void testCaseEnded( TestCaseStats const& testCaseStats ) { + stdOutForSuite << testCaseStats.stdOut; + stdErrForSuite << testCaseStats.stdErr; + CumulativeReporterBase::testCaseEnded( testCaseStats ); + } + + virtual void testGroupEnded( TestGroupStats const& testGroupStats ) { + double suiteTime = suiteTimer.getElapsedSeconds(); + CumulativeReporterBase::testGroupEnded( testGroupStats ); + writeGroup( *m_testGroups.back(), suiteTime ); + } + + virtual void testRunEndedCumulative() { + xml.endElement(); + } + + void writeGroup( TestGroupNode const& groupNode, double suiteTime ) { + XmlWriter::ScopedElement e = xml.scopedElement( "testsuite" ); + TestGroupStats const& stats = groupNode.value; + xml.writeAttribute( "name", stats.groupInfo.name ); + xml.writeAttribute( "errors", unexpectedExceptions ); + xml.writeAttribute( "failures", stats.totals.assertions.failed-unexpectedExceptions ); + xml.writeAttribute( "tests", stats.totals.assertions.total() ); + xml.writeAttribute( "hostname", "tbd" ); // !TBD + if( m_config->showDurations() == ShowDurations::Never ) + xml.writeAttribute( "time", "" ); + else + xml.writeAttribute( "time", suiteTime ); + xml.writeAttribute( "timestamp", "tbd" ); // !TBD + + // Write test cases + for( TestGroupNode::ChildNodes::const_iterator + it = groupNode.children.begin(), itEnd = groupNode.children.end(); + it != itEnd; + ++it ) + writeTestCase( **it ); + + xml.scopedElement( "system-out" ).writeText( trim( stdOutForSuite.str() ), false ); + xml.scopedElement( "system-err" ).writeText( trim( stdErrForSuite.str() ), false ); + } + + void writeTestCase( TestCaseNode const& testCaseNode ) { + TestCaseStats const& stats = testCaseNode.value; + + // All test cases have exactly one section - which represents the + // test case itself. That section may have 0-n nested sections + assert( testCaseNode.children.size() == 1 ); + SectionNode const& rootSection = *testCaseNode.children.front(); + + std::string className = stats.testInfo.className; + + if( className.empty() ) { + if( rootSection.childSections.empty() ) + className = "global"; + } + writeSection( className, "", rootSection ); + } + + void writeSection( std::string const& className, + std::string const& rootName, + SectionNode const& sectionNode ) { + std::string name = trim( sectionNode.stats.sectionInfo.name ); + if( !rootName.empty() ) + name = rootName + "/" + name; + + if( !sectionNode.assertions.empty() || + !sectionNode.stdOut.empty() || + !sectionNode.stdErr.empty() ) { + XmlWriter::ScopedElement e = xml.scopedElement( "testcase" ); + if( className.empty() ) { + xml.writeAttribute( "classname", name ); + xml.writeAttribute( "name", "root" ); + } + else { + xml.writeAttribute( "classname", className ); + xml.writeAttribute( "name", name ); + } + xml.writeAttribute( "time", Catch::toString( sectionNode.stats.durationInSeconds ) ); + + writeAssertions( sectionNode ); + + if( !sectionNode.stdOut.empty() ) + xml.scopedElement( "system-out" ).writeText( trim( sectionNode.stdOut ), false ); + if( !sectionNode.stdErr.empty() ) + xml.scopedElement( "system-err" ).writeText( trim( sectionNode.stdErr ), false ); + } + for( SectionNode::ChildSections::const_iterator + it = sectionNode.childSections.begin(), + itEnd = sectionNode.childSections.end(); + it != itEnd; + ++it ) + if( className.empty() ) + writeSection( name, "", **it ); + else + writeSection( className, name, **it ); + } + + void writeAssertions( SectionNode const& sectionNode ) { + for( SectionNode::Assertions::const_iterator + it = sectionNode.assertions.begin(), itEnd = sectionNode.assertions.end(); + it != itEnd; + ++it ) + writeAssertion( *it ); + } + void writeAssertion( AssertionStats const& stats ) { + AssertionResult const& result = stats.assertionResult; + if( !result.isOk() ) { + std::string elementName; + switch( result.getResultType() ) { + case ResultWas::ThrewException: + case ResultWas::FatalErrorCondition: + elementName = "error"; + break; + case ResultWas::ExplicitFailure: + elementName = "failure"; + break; + case ResultWas::ExpressionFailed: + elementName = "failure"; + break; + case ResultWas::DidntThrowException: + elementName = "failure"; + break; + + // We should never see these here: + case ResultWas::Info: + case ResultWas::Warning: + case ResultWas::Ok: + case ResultWas::Unknown: + case ResultWas::FailureBit: + case ResultWas::Exception: + elementName = "internalError"; + break; + } + + XmlWriter::ScopedElement e = xml.scopedElement( elementName ); + + xml.writeAttribute( "message", result.getExpandedExpression() ); + xml.writeAttribute( "type", result.getTestMacroName() ); + + std::ostringstream oss; + if( !result.getMessage().empty() ) + oss << result.getMessage() << "\n"; + for( std::vector<MessageInfo>::const_iterator + it = stats.infoMessages.begin(), + itEnd = stats.infoMessages.end(); + it != itEnd; + ++it ) + if( it->type == ResultWas::Info ) + oss << it->message << "\n"; + + oss << "at " << result.getSourceInfo(); + xml.writeText( oss.str(), false ); + } + } + + XmlWriter xml; + Timer suiteTimer; + std::ostringstream stdOutForSuite; + std::ostringstream stdErrForSuite; + unsigned int unexpectedExceptions; + }; + + INTERNAL_CATCH_REGISTER_REPORTER( "junit", JunitReporter ) + +} // end namespace Catch + +// #included from: ../reporters/catch_reporter_console.hpp +#define TWOBLUECUBES_CATCH_REPORTER_CONSOLE_HPP_INCLUDED + +namespace Catch { + + struct ConsoleReporter : StreamingReporterBase { + ConsoleReporter( ReporterConfig const& _config ) + : StreamingReporterBase( _config ), + m_headerPrinted( false ) + {} + + virtual ~ConsoleReporter(); + static std::string getDescription() { + return "Reports test results as plain lines of text"; + } + virtual ReporterPreferences getPreferences() const { + ReporterPreferences prefs; + prefs.shouldRedirectStdOut = false; + return prefs; + } + + virtual void noMatchingTestCases( std::string const& spec ) { + stream << "No test cases matched '" << spec << "'" << std::endl; + } + + virtual void assertionStarting( AssertionInfo const& ) { + } + + virtual bool assertionEnded( AssertionStats const& _assertionStats ) { + AssertionResult const& result = _assertionStats.assertionResult; + + bool printInfoMessages = true; + + // Drop out if result was successful and we're not printing those + if( !m_config->includeSuccessfulResults() && result.isOk() ) { + if( result.getResultType() != ResultWas::Warning ) + return false; + printInfoMessages = false; + } + + lazyPrint(); + + AssertionPrinter printer( stream, _assertionStats, printInfoMessages ); + printer.print(); + stream << std::endl; + return true; + } + + virtual void sectionStarting( SectionInfo const& _sectionInfo ) { + m_headerPrinted = false; + StreamingReporterBase::sectionStarting( _sectionInfo ); + } + virtual void sectionEnded( SectionStats const& _sectionStats ) { + if( _sectionStats.missingAssertions ) { + lazyPrint(); + Colour colour( Colour::ResultError ); + if( m_sectionStack.size() > 1 ) + stream << "\nNo assertions in section"; + else + stream << "\nNo assertions in test case"; + stream << " '" << _sectionStats.sectionInfo.name << "'\n" << std::endl; + } + if( m_headerPrinted ) { + if( m_config->showDurations() == ShowDurations::Always ) + stream << "Completed in " << _sectionStats.durationInSeconds << "s" << std::endl; + m_headerPrinted = false; + } + else { + if( m_config->showDurations() == ShowDurations::Always ) + stream << _sectionStats.sectionInfo.name << " completed in " << _sectionStats.durationInSeconds << "s" << std::endl; + } + StreamingReporterBase::sectionEnded( _sectionStats ); + } + + virtual void testCaseEnded( TestCaseStats const& _testCaseStats ) { + StreamingReporterBase::testCaseEnded( _testCaseStats ); + m_headerPrinted = false; + } + virtual void testGroupEnded( TestGroupStats const& _testGroupStats ) { + if( currentGroupInfo.used ) { + printSummaryDivider(); + stream << "Summary for group '" << _testGroupStats.groupInfo.name << "':\n"; + printTotals( _testGroupStats.totals ); + stream << "\n" << std::endl; + } + StreamingReporterBase::testGroupEnded( _testGroupStats ); + } + virtual void testRunEnded( TestRunStats const& _testRunStats ) { + printTotalsDivider( _testRunStats.totals ); + printTotals( _testRunStats.totals ); + stream << std::endl; + StreamingReporterBase::testRunEnded( _testRunStats ); + } + + private: + + class AssertionPrinter { + void operator= ( AssertionPrinter const& ); + public: + AssertionPrinter( std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages ) + : stream( _stream ), + stats( _stats ), + result( _stats.assertionResult ), + colour( Colour::None ), + message( result.getMessage() ), + messages( _stats.infoMessages ), + printInfoMessages( _printInfoMessages ) + { + switch( result.getResultType() ) { + case ResultWas::Ok: + colour = Colour::Success; + passOrFail = "PASSED"; + //if( result.hasMessage() ) + if( _stats.infoMessages.size() == 1 ) + messageLabel = "with message"; + if( _stats.infoMessages.size() > 1 ) + messageLabel = "with messages"; + break; + case ResultWas::ExpressionFailed: + if( result.isOk() ) { + colour = Colour::Success; + passOrFail = "FAILED - but was ok"; + } + else { + colour = Colour::Error; + passOrFail = "FAILED"; + } + if( _stats.infoMessages.size() == 1 ) + messageLabel = "with message"; + if( _stats.infoMessages.size() > 1 ) + messageLabel = "with messages"; + break; + case ResultWas::ThrewException: + colour = Colour::Error; + passOrFail = "FAILED"; + messageLabel = "due to unexpected exception with message"; + break; + case ResultWas::FatalErrorCondition: + colour = Colour::Error; + passOrFail = "FAILED"; + messageLabel = "due to a fatal error condition"; + break; + case ResultWas::DidntThrowException: + colour = Colour::Error; + passOrFail = "FAILED"; + messageLabel = "because no exception was thrown where one was expected"; + break; + case ResultWas::Info: + messageLabel = "info"; + break; + case ResultWas::Warning: + messageLabel = "warning"; + break; + case ResultWas::ExplicitFailure: + passOrFail = "FAILED"; + colour = Colour::Error; + if( _stats.infoMessages.size() == 1 ) + messageLabel = "explicitly with message"; + if( _stats.infoMessages.size() > 1 ) + messageLabel = "explicitly with messages"; + break; + // These cases are here to prevent compiler warnings + case ResultWas::Unknown: + case ResultWas::FailureBit: + case ResultWas::Exception: + passOrFail = "** internal error **"; + colour = Colour::Error; + break; + } + } + + void print() const { + printSourceInfo(); + if( stats.totals.assertions.total() > 0 ) { + if( result.isOk() ) + stream << "\n"; + printResultType(); + printOriginalExpression(); + printReconstructedExpression(); + } + else { + stream << "\n"; + } + printMessage(); + } + + private: + void printResultType() const { + if( !passOrFail.empty() ) { + Colour colourGuard( colour ); + stream << passOrFail << ":\n"; + } + } + void printOriginalExpression() const { + if( result.hasExpression() ) { + Colour colourGuard( Colour::OriginalExpression ); + stream << " "; + stream << result.getExpressionInMacro(); + stream << "\n"; + } + } + void printReconstructedExpression() const { + if( result.hasExpandedExpression() ) { + stream << "with expansion:\n"; + Colour colourGuard( Colour::ReconstructedExpression ); + stream << Text( result.getExpandedExpression(), TextAttributes().setIndent(2) ) << "\n"; + } + } + void printMessage() const { + if( !messageLabel.empty() ) + stream << messageLabel << ":" << "\n"; + for( std::vector<MessageInfo>::const_iterator it = messages.begin(), itEnd = messages.end(); + it != itEnd; + ++it ) { + // If this assertion is a warning ignore any INFO messages + if( printInfoMessages || it->type != ResultWas::Info ) + stream << Text( it->message, TextAttributes().setIndent(2) ) << "\n"; + } + } + void printSourceInfo() const { + Colour colourGuard( Colour::FileName ); + stream << result.getSourceInfo() << ": "; + } + + std::ostream& stream; + AssertionStats const& stats; + AssertionResult const& result; + Colour::Code colour; + std::string passOrFail; + std::string messageLabel; + std::string message; + std::vector<MessageInfo> messages; + bool printInfoMessages; + }; + + void lazyPrint() { + + if( !currentTestRunInfo.used ) + lazyPrintRunInfo(); + if( !currentGroupInfo.used ) + lazyPrintGroupInfo(); + + if( !m_headerPrinted ) { + printTestCaseAndSectionHeader(); + m_headerPrinted = true; + } + } + void lazyPrintRunInfo() { + stream << "\n" << getLineOfChars<'~'>() << "\n"; + Colour colour( Colour::SecondaryText ); + stream << currentTestRunInfo->name + << " is a Catch v" << libraryVersion.majorVersion << "." + << libraryVersion.minorVersion << " b" + << libraryVersion.buildNumber; + if( libraryVersion.branchName != std::string( "master" ) ) + stream << " (" << libraryVersion.branchName << ")"; + stream << " host application.\n" + << "Run with -? for options\n\n"; + + if( m_config->rngSeed() != 0 ) + stream << "Randomness seeded to: " << m_config->rngSeed() << "\n\n"; + + currentTestRunInfo.used = true; + } + void lazyPrintGroupInfo() { + if( !currentGroupInfo->name.empty() && currentGroupInfo->groupsCounts > 1 ) { + printClosedHeader( "Group: " + currentGroupInfo->name ); + currentGroupInfo.used = true; + } + } + void printTestCaseAndSectionHeader() { + assert( !m_sectionStack.empty() ); + printOpenHeader( currentTestCaseInfo->name ); + + if( m_sectionStack.size() > 1 ) { + Colour colourGuard( Colour::Headers ); + + std::vector<SectionInfo>::const_iterator + it = m_sectionStack.begin()+1, // Skip first section (test case) + itEnd = m_sectionStack.end(); + for( ; it != itEnd; ++it ) + printHeaderString( it->name, 2 ); + } + + SourceLineInfo lineInfo = m_sectionStack.front().lineInfo; + + if( !lineInfo.empty() ){ + stream << getLineOfChars<'-'>() << "\n"; + Colour colourGuard( Colour::FileName ); + stream << lineInfo << "\n"; + } + stream << getLineOfChars<'.'>() << "\n" << std::endl; + } + + void printClosedHeader( std::string const& _name ) { + printOpenHeader( _name ); + stream << getLineOfChars<'.'>() << "\n"; + } + void printOpenHeader( std::string const& _name ) { + stream << getLineOfChars<'-'>() << "\n"; + { + Colour colourGuard( Colour::Headers ); + printHeaderString( _name ); + } + } + + // if string has a : in first line will set indent to follow it on + // subsequent lines + void printHeaderString( std::string const& _string, std::size_t indent = 0 ) { + std::size_t i = _string.find( ": " ); + if( i != std::string::npos ) + i+=2; + else + i = 0; + stream << Text( _string, TextAttributes() + .setIndent( indent+i) + .setInitialIndent( indent ) ) << "\n"; + } + + struct SummaryColumn { + + SummaryColumn( std::string const& _label, Colour::Code _colour ) + : label( _label ), + colour( _colour ) + {} + SummaryColumn addRow( std::size_t count ) { + std::ostringstream oss; + oss << count; + std::string row = oss.str(); + for( std::vector<std::string>::iterator it = rows.begin(); it != rows.end(); ++it ) { + while( it->size() < row.size() ) + *it = " " + *it; + while( it->size() > row.size() ) + row = " " + row; + } + rows.push_back( row ); + return *this; + } + + std::string label; + Colour::Code colour; + std::vector<std::string> rows; + + }; + + void printTotals( Totals const& totals ) { + if( totals.testCases.total() == 0 ) { + stream << Colour( Colour::Warning ) << "No tests ran\n"; + } + else if( totals.assertions.total() > 0 && totals.assertions.allPassed() ) { + stream << Colour( Colour::ResultSuccess ) << "All tests passed"; + stream << " (" + << pluralise( totals.assertions.passed, "assertion" ) << " in " + << pluralise( totals.testCases.passed, "test case" ) << ")" + << "\n"; + } + else { + + std::vector<SummaryColumn> columns; + columns.push_back( SummaryColumn( "", Colour::None ) + .addRow( totals.testCases.total() ) + .addRow( totals.assertions.total() ) ); + columns.push_back( SummaryColumn( "passed", Colour::Success ) + .addRow( totals.testCases.passed ) + .addRow( totals.assertions.passed ) ); + columns.push_back( SummaryColumn( "failed", Colour::ResultError ) + .addRow( totals.testCases.failed ) + .addRow( totals.assertions.failed ) ); + columns.push_back( SummaryColumn( "failed as expected", Colour::ResultExpectedFailure ) + .addRow( totals.testCases.failedButOk ) + .addRow( totals.assertions.failedButOk ) ); + + printSummaryRow( "test cases", columns, 0 ); + printSummaryRow( "assertions", columns, 1 ); + } + } + void printSummaryRow( std::string const& label, std::vector<SummaryColumn> const& cols, std::size_t row ) { + for( std::vector<SummaryColumn>::const_iterator it = cols.begin(); it != cols.end(); ++it ) { + std::string value = it->rows[row]; + if( it->label.empty() ) { + stream << label << ": "; + if( value != "0" ) + stream << value; + else + stream << Colour( Colour::Warning ) << "- none -"; + } + else if( value != "0" ) { + stream << Colour( Colour::LightGrey ) << " | "; + stream << Colour( it->colour ) + << value << " " << it->label; + } + } + stream << "\n"; + } + + static std::size_t makeRatio( std::size_t number, std::size_t total ) { + std::size_t ratio = total > 0 ? CATCH_CONFIG_CONSOLE_WIDTH * number/ total : 0; + return ( ratio == 0 && number > 0 ) ? 1 : ratio; + } + static std::size_t& findMax( std::size_t& i, std::size_t& j, std::size_t& k ) { + if( i > j && i > k ) + return i; + else if( j > k ) + return j; + else + return k; + } + + void printTotalsDivider( Totals const& totals ) { + if( totals.testCases.total() > 0 ) { + std::size_t failedRatio = makeRatio( totals.testCases.failed, totals.testCases.total() ); + std::size_t failedButOkRatio = makeRatio( totals.testCases.failedButOk, totals.testCases.total() ); + std::size_t passedRatio = makeRatio( totals.testCases.passed, totals.testCases.total() ); + while( failedRatio + failedButOkRatio + passedRatio < CATCH_CONFIG_CONSOLE_WIDTH-1 ) + findMax( failedRatio, failedButOkRatio, passedRatio )++; + while( failedRatio + failedButOkRatio + passedRatio > CATCH_CONFIG_CONSOLE_WIDTH-1 ) + findMax( failedRatio, failedButOkRatio, passedRatio )--; + + stream << Colour( Colour::Error ) << std::string( failedRatio, '=' ); + stream << Colour( Colour::ResultExpectedFailure ) << std::string( failedButOkRatio, '=' ); + if( totals.testCases.allPassed() ) + stream << Colour( Colour::ResultSuccess ) << std::string( passedRatio, '=' ); + else + stream << Colour( Colour::Success ) << std::string( passedRatio, '=' ); + } + else { + stream << Colour( Colour::Warning ) << std::string( CATCH_CONFIG_CONSOLE_WIDTH-1, '=' ); + } + stream << "\n"; + } + void printSummaryDivider() { + stream << getLineOfChars<'-'>() << "\n"; + } + + private: + bool m_headerPrinted; + }; + + INTERNAL_CATCH_REGISTER_REPORTER( "console", ConsoleReporter ) + +} // end namespace Catch + +// #included from: ../reporters/catch_reporter_compact.hpp +#define TWOBLUECUBES_CATCH_REPORTER_COMPACT_HPP_INCLUDED + +namespace Catch { + + struct CompactReporter : StreamingReporterBase { + + CompactReporter( ReporterConfig const& _config ) + : StreamingReporterBase( _config ) + {} + + virtual ~CompactReporter(); + + static std::string getDescription() { + return "Reports test results on a single line, suitable for IDEs"; + } + + virtual ReporterPreferences getPreferences() const { + ReporterPreferences prefs; + prefs.shouldRedirectStdOut = false; + return prefs; + } + + virtual void noMatchingTestCases( std::string const& spec ) { + stream << "No test cases matched '" << spec << "'" << std::endl; + } + + virtual void assertionStarting( AssertionInfo const& ) { + } + + virtual bool assertionEnded( AssertionStats const& _assertionStats ) { + AssertionResult const& result = _assertionStats.assertionResult; + + bool printInfoMessages = true; + + // Drop out if result was successful and we're not printing those + if( !m_config->includeSuccessfulResults() && result.isOk() ) { + if( result.getResultType() != ResultWas::Warning ) + return false; + printInfoMessages = false; + } + + AssertionPrinter printer( stream, _assertionStats, printInfoMessages ); + printer.print(); + + stream << std::endl; + return true; + } + + virtual void testRunEnded( TestRunStats const& _testRunStats ) { + printTotals( _testRunStats.totals ); + stream << "\n" << std::endl; + StreamingReporterBase::testRunEnded( _testRunStats ); + } + + private: + class AssertionPrinter { + void operator= ( AssertionPrinter const& ); + public: + AssertionPrinter( std::ostream& _stream, AssertionStats const& _stats, bool _printInfoMessages ) + : stream( _stream ) + , stats( _stats ) + , result( _stats.assertionResult ) + , messages( _stats.infoMessages ) + , itMessage( _stats.infoMessages.begin() ) + , printInfoMessages( _printInfoMessages ) + {} + + void print() { + printSourceInfo(); + + itMessage = messages.begin(); + + switch( result.getResultType() ) { + case ResultWas::Ok: + printResultType( Colour::ResultSuccess, passedString() ); + printOriginalExpression(); + printReconstructedExpression(); + if ( ! result.hasExpression() ) + printRemainingMessages( Colour::None ); + else + printRemainingMessages(); + break; + case ResultWas::ExpressionFailed: + if( result.isOk() ) + printResultType( Colour::ResultSuccess, failedString() + std::string( " - but was ok" ) ); + else + printResultType( Colour::Error, failedString() ); + printOriginalExpression(); + printReconstructedExpression(); + printRemainingMessages(); + break; + case ResultWas::ThrewException: + printResultType( Colour::Error, failedString() ); + printIssue( "unexpected exception with message:" ); + printMessage(); + printExpressionWas(); + printRemainingMessages(); + break; + case ResultWas::FatalErrorCondition: + printResultType( Colour::Error, failedString() ); + printIssue( "fatal error condition with message:" ); + printMessage(); + printExpressionWas(); + printRemainingMessages(); + break; + case ResultWas::DidntThrowException: + printResultType( Colour::Error, failedString() ); + printIssue( "expected exception, got none" ); + printExpressionWas(); + printRemainingMessages(); + break; + case ResultWas::Info: + printResultType( Colour::None, "info" ); + printMessage(); + printRemainingMessages(); + break; + case ResultWas::Warning: + printResultType( Colour::None, "warning" ); + printMessage(); + printRemainingMessages(); + break; + case ResultWas::ExplicitFailure: + printResultType( Colour::Error, failedString() ); + printIssue( "explicitly" ); + printRemainingMessages( Colour::None ); + break; + // These cases are here to prevent compiler warnings + case ResultWas::Unknown: + case ResultWas::FailureBit: + case ResultWas::Exception: + printResultType( Colour::Error, "** internal error **" ); + break; + } + } + + private: + // Colour::LightGrey + + static Colour::Code dimColour() { return Colour::FileName; } + +#ifdef CATCH_PLATFORM_MAC + static const char* failedString() { return "FAILED"; } + static const char* passedString() { return "PASSED"; } +#else + static const char* failedString() { return "failed"; } + static const char* passedString() { return "passed"; } +#endif + + void printSourceInfo() const { + Colour colourGuard( Colour::FileName ); + stream << result.getSourceInfo() << ":"; + } + + void printResultType( Colour::Code colour, std::string passOrFail ) const { + if( !passOrFail.empty() ) { + { + Colour colourGuard( colour ); + stream << " " << passOrFail; + } + stream << ":"; + } + } + + void printIssue( std::string issue ) const { + stream << " " << issue; + } + + void printExpressionWas() { + if( result.hasExpression() ) { + stream << ";"; + { + Colour colour( dimColour() ); + stream << " expression was:"; + } + printOriginalExpression(); + } + } + + void printOriginalExpression() const { + if( result.hasExpression() ) { + stream << " " << result.getExpression(); + } + } + + void printReconstructedExpression() const { + if( result.hasExpandedExpression() ) { + { + Colour colour( dimColour() ); + stream << " for: "; + } + stream << result.getExpandedExpression(); + } + } + + void printMessage() { + if ( itMessage != messages.end() ) { + stream << " '" << itMessage->message << "'"; + ++itMessage; + } + } + + void printRemainingMessages( Colour::Code colour = dimColour() ) { + if ( itMessage == messages.end() ) + return; + + // using messages.end() directly yields compilation error: + std::vector<MessageInfo>::const_iterator itEnd = messages.end(); + const std::size_t N = static_cast<std::size_t>( std::distance( itMessage, itEnd ) ); + + { + Colour colourGuard( colour ); + stream << " with " << pluralise( N, "message" ) << ":"; + } + + for(; itMessage != itEnd; ) { + // If this assertion is a warning ignore any INFO messages + if( printInfoMessages || itMessage->type != ResultWas::Info ) { + stream << " '" << itMessage->message << "'"; + if ( ++itMessage != itEnd ) { + Colour colourGuard( dimColour() ); + stream << " and"; + } + } + } + } + + private: + std::ostream& stream; + AssertionStats const& stats; + AssertionResult const& result; + std::vector<MessageInfo> messages; + std::vector<MessageInfo>::const_iterator itMessage; + bool printInfoMessages; + }; + + // Colour, message variants: + // - white: No tests ran. + // - red: Failed [both/all] N test cases, failed [both/all] M assertions. + // - white: Passed [both/all] N test cases (no assertions). + // - red: Failed N tests cases, failed M assertions. + // - green: Passed [both/all] N tests cases with M assertions. + + std::string bothOrAll( std::size_t count ) const { + return count == 1 ? "" : count == 2 ? "both " : "all " ; + } + + void printTotals( const Totals& totals ) const { + if( totals.testCases.total() == 0 ) { + stream << "No tests ran."; + } + else if( totals.testCases.failed == totals.testCases.total() ) { + Colour colour( Colour::ResultError ); + const std::string qualify_assertions_failed = + totals.assertions.failed == totals.assertions.total() ? + bothOrAll( totals.assertions.failed ) : ""; + stream << + "Failed " << bothOrAll( totals.testCases.failed ) + << pluralise( totals.testCases.failed, "test case" ) << ", " + "failed " << qualify_assertions_failed << + pluralise( totals.assertions.failed, "assertion" ) << "."; + } + else if( totals.assertions.total() == 0 ) { + stream << + "Passed " << bothOrAll( totals.testCases.total() ) + << pluralise( totals.testCases.total(), "test case" ) + << " (no assertions)."; + } + else if( totals.assertions.failed ) { + Colour colour( Colour::ResultError ); + stream << + "Failed " << pluralise( totals.testCases.failed, "test case" ) << ", " + "failed " << pluralise( totals.assertions.failed, "assertion" ) << "."; + } + else { + Colour colour( Colour::ResultSuccess ); + stream << + "Passed " << bothOrAll( totals.testCases.passed ) + << pluralise( totals.testCases.passed, "test case" ) << + " with " << pluralise( totals.assertions.passed, "assertion" ) << "."; + } + } + }; + + INTERNAL_CATCH_REGISTER_REPORTER( "compact", CompactReporter ) + +} // end namespace Catch + +namespace Catch { + NonCopyable::~NonCopyable() {} + IShared::~IShared() {} + StreamBufBase::~StreamBufBase() CATCH_NOEXCEPT {} + IContext::~IContext() {} + IResultCapture::~IResultCapture() {} + ITestCase::~ITestCase() {} + ITestCaseRegistry::~ITestCaseRegistry() {} + IRegistryHub::~IRegistryHub() {} + IMutableRegistryHub::~IMutableRegistryHub() {} + IExceptionTranslator::~IExceptionTranslator() {} + IExceptionTranslatorRegistry::~IExceptionTranslatorRegistry() {} + IReporter::~IReporter() {} + IReporterFactory::~IReporterFactory() {} + IReporterRegistry::~IReporterRegistry() {} + IStreamingReporter::~IStreamingReporter() {} + AssertionStats::~AssertionStats() {} + SectionStats::~SectionStats() {} + TestCaseStats::~TestCaseStats() {} + TestGroupStats::~TestGroupStats() {} + TestRunStats::~TestRunStats() {} + CumulativeReporterBase::SectionNode::~SectionNode() {} + CumulativeReporterBase::~CumulativeReporterBase() {} + + StreamingReporterBase::~StreamingReporterBase() {} + ConsoleReporter::~ConsoleReporter() {} + CompactReporter::~CompactReporter() {} + IRunner::~IRunner() {} + IMutableContext::~IMutableContext() {} + IConfig::~IConfig() {} + XmlReporter::~XmlReporter() {} + JunitReporter::~JunitReporter() {} + TestRegistry::~TestRegistry() {} + FreeFunctionTestCase::~FreeFunctionTestCase() {} + IGeneratorInfo::~IGeneratorInfo() {} + IGeneratorsForTest::~IGeneratorsForTest() {} + TestSpec::Pattern::~Pattern() {} + TestSpec::NamePattern::~NamePattern() {} + TestSpec::TagPattern::~TagPattern() {} + TestSpec::ExcludedPattern::~ExcludedPattern() {} + + Matchers::Impl::StdString::Equals::~Equals() {} + Matchers::Impl::StdString::Contains::~Contains() {} + Matchers::Impl::StdString::StartsWith::~StartsWith() {} + Matchers::Impl::StdString::EndsWith::~EndsWith() {} + + void Config::dummy() {} +} + +#ifdef __clang__ +#pragma clang diagnostic pop +#endif + +#endif + +#ifdef CATCH_CONFIG_MAIN +// #included from: internal/catch_default_main.hpp +#define TWOBLUECUBES_CATCH_DEFAULT_MAIN_HPP_INCLUDED + +#ifndef __OBJC__ + +// Standard C/C++ main entry point +int main (int argc, char * const argv[]) { + return Catch::Session().run( argc, argv ); +} + +#else // __OBJC__ + +// Objective-C entry point +int main (int argc, char * const argv[]) { +#if !CATCH_ARC_ENABLED + NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init]; +#endif + + Catch::registerTestMethods(); + int result = Catch::Session().run( argc, (char* const*)argv ); + +#if !CATCH_ARC_ENABLED + [pool drain]; +#endif + + return result; +} + +#endif // __OBJC__ + +#endif + +#ifdef CLARA_CONFIG_MAIN_NOT_DEFINED +# undef CLARA_CONFIG_MAIN +#endif + +////// + +// If this config identifier is defined then all CATCH macros are prefixed with CATCH_ +#ifdef CATCH_CONFIG_PREFIX_ALL + +#define CATCH_REQUIRE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::Normal, "CATCH_REQUIRE" ) +#define CATCH_REQUIRE_FALSE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, "CATCH_REQUIRE_FALSE" ) + +#define CATCH_REQUIRE_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::Normal, "CATCH_REQUIRE_THROWS" ) +#define CATCH_REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, Catch::ResultDisposition::Normal, "CATCH_REQUIRE_THROWS_AS" ) +#define CATCH_REQUIRE_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, Catch::ResultDisposition::Normal, "CATCH_REQUIRE_NOTHROW" ) + +#define CATCH_CHECK( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK" ) +#define CATCH_CHECK_FALSE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, "CATCH_CHECK_FALSE" ) +#define CATCH_CHECKED_IF( expr ) INTERNAL_CATCH_IF( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECKED_IF" ) +#define CATCH_CHECKED_ELSE( expr ) INTERNAL_CATCH_ELSE( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECKED_ELSE" ) +#define CATCH_CHECK_NOFAIL( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, "CATCH_CHECK_NOFAIL" ) + +#define CATCH_CHECK_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THROWS" ) +#define CATCH_CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THROWS_AS" ) +#define CATCH_CHECK_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_NOTHROW" ) + +#define CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::ContinueOnFailure, "CATCH_CHECK_THAT" ) +#define CATCH_REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::Normal, "CATCH_REQUIRE_THAT" ) + +#define CATCH_INFO( msg ) INTERNAL_CATCH_INFO( msg, "CATCH_INFO" ) +#define CATCH_WARN( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, "CATCH_WARN", msg ) +#define CATCH_SCOPED_INFO( msg ) INTERNAL_CATCH_INFO( msg, "CATCH_INFO" ) +#define CATCH_CAPTURE( msg ) INTERNAL_CATCH_INFO( #msg " := " << msg, "CATCH_CAPTURE" ) +#define CATCH_SCOPED_CAPTURE( msg ) INTERNAL_CATCH_INFO( #msg " := " << msg, "CATCH_CAPTURE" ) + +#ifdef CATCH_CONFIG_VARIADIC_MACROS + #define CATCH_TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ ) + #define CATCH_TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ ) + #define CATCH_METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ ) + #define CATCH_SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ ) + #define CATCH_FAIL( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "CATCH_FAIL", __VA_ARGS__ ) + #define CATCH_SUCCEED( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "CATCH_SUCCEED", __VA_ARGS__ ) +#else + #define CATCH_TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description ) + #define CATCH_TEST_CASE_METHOD( className, name, description ) INTERNAL_CATCH_TEST_CASE_METHOD( className, name, description ) + #define CATCH_METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description ) + #define CATCH_SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description ) + #define CATCH_FAIL( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "CATCH_FAIL", msg ) + #define CATCH_SUCCEED( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "CATCH_SUCCEED", msg ) +#endif +#define CATCH_ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE( "", "" ) + +#define CATCH_REGISTER_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType ) +#define CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) + +#define CATCH_GENERATE( expr) INTERNAL_CATCH_GENERATE( expr ) + +// "BDD-style" convenience wrappers +#ifdef CATCH_CONFIG_VARIADIC_MACROS +#define CATCH_SCENARIO( ... ) CATCH_TEST_CASE( "Scenario: " __VA_ARGS__ ) +#define CATCH_SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ ) +#else +#define CATCH_SCENARIO( name, tags ) CATCH_TEST_CASE( "Scenario: " name, tags ) +#define CATCH_SCENARIO_METHOD( className, name, tags ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " name, tags ) +#endif +#define CATCH_GIVEN( desc ) CATCH_SECTION( "Given: " desc, "" ) +#define CATCH_WHEN( desc ) CATCH_SECTION( " When: " desc, "" ) +#define CATCH_AND_WHEN( desc ) CATCH_SECTION( " And: " desc, "" ) +#define CATCH_THEN( desc ) CATCH_SECTION( " Then: " desc, "" ) +#define CATCH_AND_THEN( desc ) CATCH_SECTION( " And: " desc, "" ) + +// If CATCH_CONFIG_PREFIX_ALL is not defined then the CATCH_ prefix is not required +#else + +#define REQUIRE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::Normal, "REQUIRE" ) +#define REQUIRE_FALSE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::Normal | Catch::ResultDisposition::FalseTest, "REQUIRE_FALSE" ) + +#define REQUIRE_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::Normal, "REQUIRE_THROWS" ) +#define REQUIRE_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, Catch::ResultDisposition::Normal, "REQUIRE_THROWS_AS" ) +#define REQUIRE_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, Catch::ResultDisposition::Normal, "REQUIRE_NOTHROW" ) + +#define CHECK( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure, "CHECK" ) +#define CHECK_FALSE( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::FalseTest, "CHECK_FALSE" ) +#define CHECKED_IF( expr ) INTERNAL_CATCH_IF( expr, Catch::ResultDisposition::ContinueOnFailure, "CHECKED_IF" ) +#define CHECKED_ELSE( expr ) INTERNAL_CATCH_ELSE( expr, Catch::ResultDisposition::ContinueOnFailure, "CHECKED_ELSE" ) +#define CHECK_NOFAIL( expr ) INTERNAL_CATCH_TEST( expr, Catch::ResultDisposition::ContinueOnFailure | Catch::ResultDisposition::SuppressFail, "CHECK_NOFAIL" ) + +#define CHECK_THROWS( expr ) INTERNAL_CATCH_THROWS( expr, Catch::ResultDisposition::ContinueOnFailure, "CHECK_THROWS" ) +#define CHECK_THROWS_AS( expr, exceptionType ) INTERNAL_CATCH_THROWS_AS( expr, exceptionType, Catch::ResultDisposition::ContinueOnFailure, "CHECK_THROWS_AS" ) +#define CHECK_NOTHROW( expr ) INTERNAL_CATCH_NO_THROW( expr, Catch::ResultDisposition::ContinueOnFailure, "CHECK_NOTHROW" ) + +#define CHECK_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::ContinueOnFailure, "CHECK_THAT" ) +#define REQUIRE_THAT( arg, matcher ) INTERNAL_CHECK_THAT( arg, matcher, Catch::ResultDisposition::Normal, "REQUIRE_THAT" ) + +#define INFO( msg ) INTERNAL_CATCH_INFO( msg, "INFO" ) +#define WARN( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Warning, Catch::ResultDisposition::ContinueOnFailure, "WARN", msg ) +#define SCOPED_INFO( msg ) INTERNAL_CATCH_INFO( msg, "INFO" ) +#define CAPTURE( msg ) INTERNAL_CATCH_INFO( #msg " := " << msg, "CAPTURE" ) +#define SCOPED_CAPTURE( msg ) INTERNAL_CATCH_INFO( #msg " := " << msg, "CAPTURE" ) + +#ifdef CATCH_CONFIG_VARIADIC_MACROS + #define TEST_CASE( ... ) INTERNAL_CATCH_TESTCASE( __VA_ARGS__ ) + #define TEST_CASE_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, __VA_ARGS__ ) + #define METHOD_AS_TEST_CASE( method, ... ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, __VA_ARGS__ ) + #define SECTION( ... ) INTERNAL_CATCH_SECTION( __VA_ARGS__ ) + #define FAIL( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "FAIL", __VA_ARGS__ ) + #define SUCCEED( ... ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "SUCCEED", __VA_ARGS__ ) +#else + #define TEST_CASE( name, description ) INTERNAL_CATCH_TESTCASE( name, description ) + #define TEST_CASE_METHOD( className, name, description ) INTERNAL_CATCH_TEST_CASE_METHOD( className, name, description ) + #define METHOD_AS_TEST_CASE( method, name, description ) INTERNAL_CATCH_METHOD_AS_TEST_CASE( method, name, description ) + #define SECTION( name, description ) INTERNAL_CATCH_SECTION( name, description ) + #define FAIL( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::ExplicitFailure, Catch::ResultDisposition::Normal, "FAIL", msg ) + #define SUCCEED( msg ) INTERNAL_CATCH_MSG( Catch::ResultWas::Ok, Catch::ResultDisposition::ContinueOnFailure, "SUCCEED", msg ) +#endif +#define ANON_TEST_CASE() INTERNAL_CATCH_TESTCASE( "", "" ) + +#define REGISTER_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_REPORTER( name, reporterType ) +#define REGISTER_LEGACY_REPORTER( name, reporterType ) INTERNAL_CATCH_REGISTER_LEGACY_REPORTER( name, reporterType ) + +#define GENERATE( expr) INTERNAL_CATCH_GENERATE( expr ) + +#endif + +#define CATCH_TRANSLATE_EXCEPTION( signature ) INTERNAL_CATCH_TRANSLATE_EXCEPTION( signature ) + +// "BDD-style" convenience wrappers +#ifdef CATCH_CONFIG_VARIADIC_MACROS +#define SCENARIO( ... ) TEST_CASE( "Scenario: " __VA_ARGS__ ) +#define SCENARIO_METHOD( className, ... ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " __VA_ARGS__ ) +#else +#define SCENARIO( name, tags ) TEST_CASE( "Scenario: " name, tags ) +#define SCENARIO_METHOD( className, name, tags ) INTERNAL_CATCH_TEST_CASE_METHOD( className, "Scenario: " name, tags ) +#endif +#define GIVEN( desc ) SECTION( " Given: " desc, "" ) +#define WHEN( desc ) SECTION( " When: " desc, "" ) +#define AND_WHEN( desc ) SECTION( "And when: " desc, "" ) +#define THEN( desc ) SECTION( " Then: " desc, "" ) +#define AND_THEN( desc ) SECTION( " And: " desc, "" ) + +using Catch::Detail::Approx; + +// #included from: internal/catch_reenable_warnings.h + +#define TWOBLUECUBES_CATCH_REENABLE_WARNINGS_H_INCLUDED + +#ifdef __clang__ +# ifdef __ICC // icpc defines the __clang__ macro +# pragma warning(pop) +# else +# pragma clang diagnostic pop +# endif +#elif defined __GNUC__ +# pragma GCC diagnostic pop +#endif + +#endif // TWOBLUECUBES_SINGLE_INCLUDE_CATCH_HPP_INCLUDED + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/LICENSE b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/LICENSE new file mode 100755 index 0000000..ca2bfe1 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/LICENSE @@ -0,0 +1,55 @@ +The JsonCpp library's source code, including accompanying documentation, +tests and demonstration applications, are licensed under the following +conditions... + +The author (Baptiste Lepilleur) explicitly disclaims copyright in all +jurisdictions which recognize such a disclaimer. In such jurisdictions, +this software is released into the Public Domain. + +In jurisdictions which do not recognize Public Domain property (e.g. Germany as of +2010), this software is Copyright (c) 2007-2010 by Baptiste Lepilleur, and is +released under the terms of the MIT License (see below). + +In jurisdictions which recognize Public Domain property, the user of this +software may choose to accept it either as 1) Public Domain, 2) under the +conditions of the MIT License (see below), or 3) under the terms of dual +Public Domain/MIT License conditions described here, as they choose. + +The MIT License is about as close to Public Domain as a license can get, and is +described in clear, concise terms at: + + http://en.wikipedia.org/wiki/MIT_License + +The full text of the MIT License follows: + +======================================================================== +Copyright (c) 2007-2010 Baptiste Lepilleur + +Permission is hereby granted, free of charge, to any person +obtaining a copy of this software and associated documentation +files (the "Software"), to deal in the Software without +restriction, including without limitation the rights to use, copy, +modify, merge, publish, distribute, sublicense, and/or sell copies +of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS +BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN +ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. +======================================================================== +(END LICENSE TEXT) + +The MIT license is compatible with both the GPL and commercial +software, affording one all of the rights of Public Domain with the +minor nuisance of being required to keep the above copyright notice +and license text in the source code. Note also that by accepting the +Public Domain "license" you can re-license your copy using whatever +license you like. diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/assertions.h b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/assertions.h new file mode 100755 index 0000000..fbec7ae --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/assertions.h @@ -0,0 +1,54 @@ +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_ASSERTIONS_H_INCLUDED +#define CPPTL_JSON_ASSERTIONS_H_INCLUDED + +#include <stdlib.h> +#include <sstream> + +#if !defined(JSON_IS_AMALGAMATION) +#include "config.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +/** It should not be possible for a maliciously designed file to + * cause an abort() or seg-fault, so these macros are used only + * for pre-condition violations and internal logic errors. + */ +#if JSON_USE_EXCEPTION + +// @todo <= add detail about condition in exception +# define JSON_ASSERT(condition) \ + {if (!(condition)) {Json::throwLogicError( "assert json failed" );}} + +# define JSON_FAIL_MESSAGE(message) \ + { \ + std::ostringstream oss; oss << message; \ + Json::throwLogicError(oss.str()); \ + abort(); \ + } + +#else // JSON_USE_EXCEPTION + +# define JSON_ASSERT(condition) assert(condition) + +// The call to assert() will show the failure message in debug builds. In +// release builds we abort, for a core-dump or debugger. +# define JSON_FAIL_MESSAGE(message) \ + { \ + std::ostringstream oss; oss << message; \ + assert(false && oss.str().c_str()); \ + abort(); \ + } + + +#endif + +#define JSON_ASSERT_MESSAGE(condition, message) \ + if (!(condition)) { \ + JSON_FAIL_MESSAGE(message); \ + } + +#endif // CPPTL_JSON_ASSERTIONS_H_INCLUDED diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/autolink.h b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/autolink.h new file mode 100755 index 0000000..6fcc8af --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/autolink.h @@ -0,0 +1,25 @@ +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_AUTOLINK_H_INCLUDED +#define JSON_AUTOLINK_H_INCLUDED + +#include "config.h" + +#ifdef JSON_IN_CPPTL +#include <cpptl/cpptl_autolink.h> +#endif + +#if !defined(JSON_NO_AUTOLINK) && !defined(JSON_DLL_BUILD) && \ + !defined(JSON_IN_CPPTL) +#define CPPTL_AUTOLINK_NAME "json" +#undef CPPTL_AUTOLINK_DLL +#ifdef JSON_DLL +#define CPPTL_AUTOLINK_DLL +#endif +#include "autolink.h" +#endif + +#endif // JSON_AUTOLINK_H_INCLUDED diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/config.h b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/config.h new file mode 100755 index 0000000..7201ba7 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/config.h @@ -0,0 +1,138 @@ +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_CONFIG_H_INCLUDED +#define JSON_CONFIG_H_INCLUDED + +/// If defined, indicates that json library is embedded in CppTL library. +//# define JSON_IN_CPPTL 1 + +/// If defined, indicates that json may leverage CppTL library +//# define JSON_USE_CPPTL 1 +/// If defined, indicates that cpptl vector based map should be used instead of +/// std::map +/// as Value container. +//# define JSON_USE_CPPTL_SMALLMAP 1 + +// If non-zero, the library uses exceptions to report bad input instead of C +// assertion macros. The default is to use exceptions. +#ifndef JSON_USE_EXCEPTION +#define JSON_USE_EXCEPTION 1 +#endif + +/// If defined, indicates that the source file is amalgated +/// to prevent private header inclusion. +/// Remarks: it is automatically defined in the generated amalgated header. +// #define JSON_IS_AMALGAMATION + +#ifdef JSON_IN_CPPTL +#include <cpptl/config.h> +#ifndef JSON_USE_CPPTL +#define JSON_USE_CPPTL 1 +#endif +#endif + +#ifdef JSON_IN_CPPTL +#define JSON_API CPPTL_API +#elif defined(JSON_DLL_BUILD) +#if defined(_MSC_VER) +#define JSON_API __declspec(dllexport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#endif // if defined(_MSC_VER) +#elif defined(JSON_DLL) +#if defined(_MSC_VER) +#define JSON_API __declspec(dllimport) +#define JSONCPP_DISABLE_DLL_INTERFACE_WARNING +#endif // if defined(_MSC_VER) +#endif // ifdef JSON_IN_CPPTL +#if !defined(JSON_API) +#define JSON_API +#endif + +// If JSON_NO_INT64 is defined, then Json only support C++ "int" type for +// integer +// Storages, and 64 bits integer support is disabled. +// #define JSON_NO_INT64 1 + +#if defined(_MSC_VER) // MSVC +# if _MSC_VER <= 1200 // MSVC 6 + // Microsoft Visual Studio 6 only support conversion from __int64 to double + // (no conversion from unsigned __int64). +# define JSON_USE_INT64_DOUBLE_CONVERSION 1 + // Disable warning 4786 for VS6 caused by STL (identifier was truncated to '255' + // characters in the debug information) + // All projects I've ever seen with VS6 were using this globally (not bothering + // with pragma push/pop). +# pragma warning(disable : 4786) +# endif // MSVC 6 + +# if _MSC_VER >= 1500 // MSVC 2008 + /// Indicates that the following function is deprecated. +# define JSONCPP_DEPRECATED(message) __declspec(deprecated(message)) +# endif + +#endif // defined(_MSC_VER) + + +#ifndef JSON_HAS_RVALUE_REFERENCES + +#if defined(_MSC_VER) && _MSC_VER >= 1600 // MSVC >= 2010 +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // MSVC >= 2010 + +#ifdef __clang__ +#if __has_feature(cxx_rvalue_references) +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // has_feature + +#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) +#if defined(__GXX_EXPERIMENTAL_CXX0X__) || (__cplusplus >= 201103L) +#define JSON_HAS_RVALUE_REFERENCES 1 +#endif // GXX_EXPERIMENTAL + +#endif // __clang__ || __GNUC__ + +#endif // not defined JSON_HAS_RVALUE_REFERENCES + +#ifndef JSON_HAS_RVALUE_REFERENCES +#define JSON_HAS_RVALUE_REFERENCES 0 +#endif + +#ifdef __clang__ +#elif defined __GNUC__ // not clang (gcc comes later since clang emulates gcc) +# if (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +# define JSONCPP_DEPRECATED(message) __attribute__ ((deprecated(message))) +# elif (__GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 1)) +# define JSONCPP_DEPRECATED(message) __attribute__((__deprecated__)) +# endif // GNUC version +#endif // __clang__ || __GNUC__ + +#if !defined(JSONCPP_DEPRECATED) +#define JSONCPP_DEPRECATED(message) +#endif // if !defined(JSONCPP_DEPRECATED) + +namespace Json { +typedef int Int; +typedef unsigned int UInt; +#if defined(JSON_NO_INT64) +typedef int LargestInt; +typedef unsigned int LargestUInt; +#undef JSON_HAS_INT64 +#else // if defined(JSON_NO_INT64) +// For Microsoft Visual use specific types as long long is not supported +#if defined(_MSC_VER) // Microsoft Visual Studio +typedef __int64 Int64; +typedef unsigned __int64 UInt64; +#else // if defined(_MSC_VER) // Other platforms, use long long +typedef long long int Int64; +typedef unsigned long long int UInt64; +#endif // if defined(_MSC_VER) +typedef Int64 LargestInt; +typedef UInt64 LargestUInt; +#define JSON_HAS_INT64 +#endif // if defined(JSON_NO_INT64) +} // end namespace Json + +#endif // JSON_CONFIG_H_INCLUDED diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/forwards.h b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/forwards.h new file mode 100755 index 0000000..ccfe09a --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/forwards.h @@ -0,0 +1,37 @@ +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_FORWARDS_H_INCLUDED +#define JSON_FORWARDS_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "config.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +// writer.h +class FastWriter; +class StyledWriter; + +// reader.h +class Reader; + +// features.h +class Features; + +// value.h +typedef unsigned int ArrayIndex; +class StaticString; +class Path; +class PathArgument; +class Value; +class ValueIteratorBase; +class ValueIterator; +class ValueConstIterator; + +} // namespace Json + +#endif // JSON_FORWARDS_H_INCLUDED diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/json-features.h b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/json-features.h new file mode 100755 index 0000000..1bb7bb6 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/json-features.h @@ -0,0 +1,57 @@ +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_FEATURES_H_INCLUDED +#define CPPTL_JSON_FEATURES_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "forwards.h" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +/** \brief Configuration passed to reader and writer. + * This configuration object can be used to force the Reader or Writer + * to behave in a standard conforming way. + */ +class JSON_API Features { +public: + /** \brief A configuration that allows all features and assumes all strings + * are UTF-8. + * - C & C++ comments are allowed + * - Root object can be any JSON value + * - Assumes Value strings are encoded in UTF-8 + */ + static Features all(); + + /** \brief A configuration that is strictly compatible with the JSON + * specification. + * - Comments are forbidden. + * - Root object must be either an array or an object value. + * - Assumes Value strings are encoded in UTF-8 + */ + static Features strictMode(); + + /** \brief Initialize the configuration like JsonConfig::allFeatures; + */ + Features(); + + /// \c true if comments are allowed. Default: \c true. + bool allowComments_; + + /// \c true if root must be either an array or an object value. Default: \c + /// false. + bool strictRoot_; + + /// \c true if dropped null placeholders are allowed. Default: \c false. + bool allowDroppedNullPlaceholders_; + + /// \c true if numeric object key are allowed. Default: \c false. + bool allowNumericKeys_; +}; + +} // namespace Json + +#endif // CPPTL_JSON_FEATURES_H_INCLUDED diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/json.h b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/json.h new file mode 100755 index 0000000..113add4 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/json.h @@ -0,0 +1,15 @@ +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_JSON_H_INCLUDED +#define JSON_JSON_H_INCLUDED + +#include "autolink.h" +#include "json-features.h" +#include "reader.h" +#include "value.h" +#include "writer.h" + +#endif // JSON_JSON_H_INCLUDED diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/reader.h b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/reader.h new file mode 100755 index 0000000..8bc44ce --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/reader.h @@ -0,0 +1,402 @@ +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_READER_H_INCLUDED +#define CPPTL_JSON_READER_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "json-features.h" +#include "value.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <deque> +#include <iosfwd> +#include <istream> +#include <stack> +#include <string> + +// Disable warning C4251: <data member>: <type> needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +namespace Json { + +/** \brief Unserialize a <a HREF="http://www.json.org">JSON</a> document into a + *Value. + * + * \deprecated Use CharReader and CharReaderBuilder. + */ +class JSON_API Reader { + public: + typedef char Char; + typedef const Char* Location; + + /** \brief An error tagged with where in the JSON text it was encountered. + * + * The offsets give the [start, limit) range of bytes within the text. Note + * that this is bytes, not codepoints. + * + */ + struct StructuredError { + size_t offset_start; + size_t offset_limit; + std::string message; + }; + + /** \brief Constructs a Reader allowing all features + * for parsing. + */ + Reader(); + + /** \brief Constructs a Reader allowing the specified feature set + * for parsing. + */ + Reader(const Features& features); + + /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a> + * document. + * \param document UTF-8 encoded string containing the document to read. + * \param root [out] Contains the root value of the document if it was + * successfully parsed. + * \param collectComments \c true to collect comment and allow writing them + * back during + * serialization, \c false to discard comments. + * This parameter is ignored if + * Features::allowComments_ + * is \c false. + * \return \c true if the document was successfully parsed, \c false if an + * error occurred. + */ + bool parse(const std::string& document, Value& root, + bool collectComments = true); + + /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a> + document. + * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of + the + document to read. + * \param endDoc Pointer on the end of the UTF-8 encoded string of the + document to read. + * Must be >= beginDoc. + * \param root [out] Contains the root value of the document if it was + * successfully parsed. + * \param collectComments \c true to collect comment and allow writing them + back during + * serialization, \c false to discard comments. + * This parameter is ignored if + Features::allowComments_ + * is \c false. + * \return \c true if the document was successfully parsed, \c false if an + error occurred. + */ + bool parse(const char* beginDoc, const char* endDoc, Value& root, + bool collectComments = true); + + /// \brief Parse from input stream. + /// \see Json::operator>>(std::istream&, Json::Value&). + bool parse(std::istream& is, Value& root, bool collectComments = true); + + /** \brief Returns a user friendly string that list errors in the parsed + * document. + * \return Formatted error message with the list of errors with their + * location + * in + * the parsed document. An empty string is returned if no error + * occurred + * during parsing. + * \deprecated Use getFormattedErrorMessages() instead (typo fix). + */ + JSONCPP_DEPRECATED("Use getFormattedErrorMessages() instead.") + std::string getFormatedErrorMessages() const; + + /** \brief Returns a user friendly string that list errors in the parsed + * document. + * \return Formatted error message with the list of errors with their + * location + * in + * the parsed document. An empty string is returned if no error + * occurred + * during parsing. + */ + std::string getFormattedErrorMessages() const; + + /** \brief Returns a vector of structured erros encounted while parsing. + * \return A (possibly empty) vector of StructuredError objects. Currently + * only one error can be returned, but the caller should tolerate + * multiple + * errors. This can occur if the parser recovers from a non-fatal + * parse error and then encounters additional errors. + */ + std::vector<StructuredError> getStructuredErrors() const; + + /** \brief Add a semantic error message. + * \param value JSON Value location associated with the error + * \param message The error message. + * \return \c true if the error was successfully added, \c false if the + * Value offset exceeds the document size. + */ + bool pushError(const Value& value, const std::string& message); + + /** \brief Add a semantic error message with extra context. + * \param value JSON Value location associated with the error + * \param message The error message. + * \param extra Additional JSON Value location to contextualize the error + * \return \c true if the error was successfully added, \c false if either + * Value offset exceeds the document size. + */ + bool pushError(const Value& value, const std::string& message, + const Value& extra); + + /** \brief Return whether there are any errors. + * \return \c true if there are no errors to report \c false if + * errors have occurred. + */ + bool good() const; + + private: + enum TokenType { + tokenEndOfStream = 0, + tokenObjectBegin, + tokenObjectEnd, + tokenArrayBegin, + tokenArrayEnd, + tokenString, + tokenNumber, + tokenTrue, + tokenFalse, + tokenNull, + tokenArraySeparator, + tokenMemberSeparator, + tokenComment, + tokenError + }; + + class Token { + public: + TokenType type_; + Location start_; + Location end_; + }; + + class ErrorInfo { + public: + Token token_; + std::string message_; + Location extra_; + }; + + typedef std::deque<ErrorInfo> Errors; + + bool readToken(Token& token); + void skipSpaces(); + bool match(Location pattern, int patternLength); + bool readComment(); + bool readCStyleComment(); + bool readCppStyleComment(); + bool readString(); + void readNumber(); + bool readValue(); + bool readObject(Token& token); + bool readArray(Token& token); + bool decodeNumber(Token& token); + bool decodeNumber(Token& token, Value& decoded); + bool decodeString(Token& token); + bool decodeString(Token& token, std::string& decoded); + bool decodeDouble(Token& token); + bool decodeDouble(Token& token, Value& decoded); + bool decodeUnicodeCodePoint(Token& token, Location& current, Location end, + unsigned int& unicode); + bool decodeUnicodeEscapeSequence(Token& token, Location& current, + Location end, unsigned int& unicode); + bool addError(const std::string& message, Token& token, Location extra = 0); + bool recoverFromError(TokenType skipUntilToken); + bool addErrorAndRecover(const std::string& message, Token& token, + TokenType skipUntilToken); + void skipUntilSpace(); + Value& currentValue(); + Char getNextChar(); + void getLocationLineAndColumn(Location location, int& line, + int& column) const; + std::string getLocationLineAndColumn(Location location) const; + void addComment(Location begin, Location end, CommentPlacement placement); + void skipCommentTokens(Token& token); + + typedef std::stack<Value*> Nodes; + Nodes nodes_; + Errors errors_; + std::string document_; + Location begin_; + Location end_; + Location current_; + Location lastValueEnd_; + Value* lastValue_; + std::string commentsBefore_; + Features features_; + bool collectComments_; +}; // Reader + +/** Interface for reading JSON from a char array. + */ +class JSON_API CharReader { + public: + virtual ~CharReader() {} + /** \brief Read a Value from a <a HREF="http://www.json.org">JSON</a> + document. + * The document must be a UTF-8 encoded string containing the document to + read. + * + * \param beginDoc Pointer on the beginning of the UTF-8 encoded string of + the + document to read. + * \param endDoc Pointer on the end of the UTF-8 encoded string of the + document to read. + * Must be >= beginDoc. + * \param root [out] Contains the root value of the document if it was + * successfully parsed. + * \param errs [out] Formatted error messages (if not NULL) + * a user friendly string that lists errors in the parsed + * document. + * \return \c true if the document was successfully parsed, \c false if an + error occurred. + */ + virtual bool parse(char const* beginDoc, char const* endDoc, Value* root, + std::string* errs) = 0; + + class JSON_API Factory { + public: + virtual ~Factory() {} + /** \brief Allocate a CharReader via operator new(). + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + virtual CharReader* newCharReader() const = 0; + }; // Factory +}; // CharReader + +/** \brief Build a CharReader implementation. + +Usage: +\code + using namespace Json; + CharReaderBuilder builder; + builder["collectComments"] = false; + Value value; + std::string errs; + bool ok = parseFromStream(builder, std::cin, &value, &errs); +\endcode +*/ +class JSON_API CharReaderBuilder : public CharReader::Factory { + public: + // Note: We use a Json::Value so that we can add data-members to this class + // without a major version bump. + /** Configuration of this builder. + These are case-sensitive. + Available settings (case-sensitive): + - `"collectComments": false or true` + - true to collect comment and allow writing them + back during serialization, false to discard comments. + This parameter is ignored if allowComments is false. + - `"allowComments": false or true` + - true if comments are allowed. + - `"strictRoot": false or true` + - true if root must be either an array or an object value + - `"allowDroppedNullPlaceholders": false or true` + - true if dropped null placeholders are allowed. (See + StreamWriterBuilder.) + - `"allowNumericKeys": false or true` + - true if numeric object keys are allowed. + - `"allowSingleQuotes": false or true` + - true if '' are allowed for strings (both keys and values) + - `"stackLimit": integer` + - Exceeding stackLimit (recursive depth of `readValue()`) will + cause an exception. + - This is a security issue (seg-faults caused by deeply nested JSON), + so the default is low. + - `"failIfExtra": false or true` + - If true, `parse()` returns false when extra non-whitespace trails + the JSON value in the input string. + - `"rejectDupKeys": false or true` + - If true, `parse()` returns false when a key is duplicated within an + object. + - `"allowSpecialFloats": false or true` + - If true, special float values (NaNs and infinities) are allowed + and their values are lossfree restorable. + + You can examine 'settings_` yourself + to see the defaults. You can also write and read them just like any + JSON Value. + \sa setDefaults() + */ + Json::Value settings_; + + CharReaderBuilder(); + ~CharReaderBuilder() override; + + CharReader* newCharReader() const override; + + /** \return true if 'settings' are legal and consistent; + * otherwise, indicate bad settings via 'invalid'. + */ + bool validate(Json::Value* invalid) const; + + /** A simple way to update a specific setting. + */ + Value& operator[](std::string key); + + /** Called by ctor, but you can use this to reset settings_. + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_reader.cpp CharReaderBuilderDefaults + */ + static void setDefaults(Json::Value* settings); + /** Same as old Features::strictMode(). + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_reader.cpp CharReaderBuilderStrictMode + */ + static void strictMode(Json::Value* settings); +}; + +/** Consume entire stream and use its begin/end. + * Someday we might have a real StreamReader, but for now this + * is convenient. + */ +bool JSON_API parseFromStream(CharReader::Factory const&, std::istream&, + Value* root, std::string* errs); + +/** \brief Read from 'sin' into 'root'. + + Always keep comments from the input JSON. + + This can be used to read a file into a particular sub-object. + For example: + \code + Json::Value root; + cin >> root["dir"]["file"]; + cout << root; + \endcode + Result: + \verbatim + { + "dir": { + "file": { + // The input stream JSON would be nested here. + } + } + } + \endverbatim + \throw std::exception on parse error. + \see Json::operator<<() +*/ +JSON_API std::istream& operator>>(std::istream&, Value&); + +} // namespace Json + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // CPPTL_JSON_READER_H_INCLUDED diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/value.h b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/value.h new file mode 100755 index 0000000..1cfda07 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/value.h @@ -0,0 +1,849 @@ +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef CPPTL_JSON_H_INCLUDED +#define CPPTL_JSON_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "forwards.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <string> +#include <vector> +#include <exception> + +#ifndef JSON_USE_CPPTL_SMALLMAP +#include <map> +#else +#include <cpptl/smallmap.h> +#endif +#ifdef JSON_USE_CPPTL +#include <cpptl/forwards.h> +#endif + +// Disable warning C4251: <data member>: <type> needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +/** \brief JSON (JavaScript Object Notation). + */ +namespace Json { + +/** Base class for all exceptions we throw. + * + * We use nothing but these internally. Of course, STL can throw others. + */ +class JSON_API Exception : public std::exception { +public: + Exception(std::string const& msg); + ~Exception() throw() override; + char const* what() const throw() override; +protected: + std::string msg_; +}; + +/** Exceptions which the user cannot easily avoid. + * + * E.g. out-of-memory (when we use malloc), stack-overflow, malicious input + * + * \remark derived from Json::Exception + */ +class JSON_API RuntimeError : public Exception { +public: + RuntimeError(std::string const& msg); +}; + +/** Exceptions thrown by JSON_ASSERT/JSON_FAIL macros. + * + * These are precondition-violations (user bugs) and internal errors (our bugs). + * + * \remark derived from Json::Exception + */ +class JSON_API LogicError : public Exception { +public: + LogicError(std::string const& msg); +}; + +/// used internally +void throwRuntimeError(std::string const& msg); +/// used internally +void throwLogicError(std::string const& msg); + +/** \brief Type of the value held by a Value object. + */ +enum ValueType { + nullValue = 0, ///< 'null' value + intValue, ///< signed integer value + uintValue, ///< unsigned integer value + realValue, ///< double value + stringValue, ///< UTF-8 string value + booleanValue, ///< bool value + arrayValue, ///< array value (ordered list) + objectValue ///< object value (collection of name/value pairs). +}; + +enum CommentPlacement { + commentBefore = 0, ///< a comment placed on the line before a value + commentAfterOnSameLine, ///< a comment just after a value on the same line + commentAfter, ///< a comment on the line after a value (only make sense for + /// root value) + numberOfCommentPlacement +}; + +//# ifdef JSON_USE_CPPTL +// typedef CppTL::AnyEnumerator<const char *> EnumMemberNames; +// typedef CppTL::AnyEnumerator<const Value &> EnumValues; +//# endif + +/** \brief Lightweight wrapper to tag static string. + * + * Value constructor and objectValue member assignement takes advantage of the + * StaticString and avoid the cost of string duplication when storing the + * string or the member name. + * + * Example of usage: + * \code + * Json::Value aValue( StaticString("some text") ); + * Json::Value object; + * static const StaticString code("code"); + * object[code] = 1234; + * \endcode + */ +class JSON_API StaticString { +public: + explicit StaticString(const char* czstring) : c_str_(czstring) {} + + operator const char*() const { return c_str_; } + + const char* c_str() const { return c_str_; } + +private: + const char* c_str_; +}; + +/** \brief Represents a <a HREF="http://www.json.org">JSON</a> value. + * + * This class is a discriminated union wrapper that can represents a: + * - signed integer [range: Value::minInt - Value::maxInt] + * - unsigned integer (range: 0 - Value::maxUInt) + * - double + * - UTF-8 string + * - boolean + * - 'null' + * - an ordered list of Value + * - collection of name/value pairs (javascript object) + * + * The type of the held value is represented by a #ValueType and + * can be obtained using type(). + * + * Values of an #objectValue or #arrayValue can be accessed using operator[]() + * methods. + * Non-const methods will automatically create the a #nullValue element + * if it does not exist. + * The sequence of an #arrayValue will be automatically resized and initialized + * with #nullValue. resize() can be used to enlarge or truncate an #arrayValue. + * + * The get() methods can be used to obtain default value in the case the + * required element does not exist. + * + * It is possible to iterate over the list of a #objectValue values using + * the getMemberNames() method. + * + * \note #Value string-length fit in size_t, but keys must be < 2^30. + * (The reason is an implementation detail.) A #CharReader will raise an + * exception if a bound is exceeded to avoid security holes in your app, + * but the Value API does *not* check bounds. That is the responsibility + * of the caller. + */ +class JSON_API Value { + friend class ValueIteratorBase; +public: + typedef std::vector<std::string> Members; + typedef ValueIterator iterator; + typedef ValueConstIterator const_iterator; + typedef Json::UInt UInt; + typedef Json::Int Int; +#if defined(JSON_HAS_INT64) + typedef Json::UInt64 UInt64; + typedef Json::Int64 Int64; +#endif // defined(JSON_HAS_INT64) + typedef Json::LargestInt LargestInt; + typedef Json::LargestUInt LargestUInt; + typedef Json::ArrayIndex ArrayIndex; + + static const Value& null; ///< We regret this reference to a global instance; prefer the simpler Value(). + static const Value& nullRef; ///< just a kludge for binary-compatibility; same as null + /// Minimum signed integer value that can be stored in a Json::Value. + static const LargestInt minLargestInt; + /// Maximum signed integer value that can be stored in a Json::Value. + static const LargestInt maxLargestInt; + /// Maximum unsigned integer value that can be stored in a Json::Value. + static const LargestUInt maxLargestUInt; + + /// Minimum signed int value that can be stored in a Json::Value. + static const Int minInt; + /// Maximum signed int value that can be stored in a Json::Value. + static const Int maxInt; + /// Maximum unsigned int value that can be stored in a Json::Value. + static const UInt maxUInt; + +#if defined(JSON_HAS_INT64) + /// Minimum signed 64 bits int value that can be stored in a Json::Value. + static const Int64 minInt64; + /// Maximum signed 64 bits int value that can be stored in a Json::Value. + static const Int64 maxInt64; + /// Maximum unsigned 64 bits int value that can be stored in a Json::Value. + static const UInt64 maxUInt64; +#endif // defined(JSON_HAS_INT64) + +private: +#ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION + class CZString { + public: + enum DuplicationPolicy { + noDuplication = 0, + duplicate, + duplicateOnCopy + }; + CZString(ArrayIndex index); + CZString(char const* str, unsigned length, DuplicationPolicy allocate); + CZString(CZString const& other); +#if JSON_HAS_RVALUE_REFERENCES + CZString(CZString&& other); +#endif + ~CZString(); + CZString& operator=(CZString other); + bool operator<(CZString const& other) const; + bool operator==(CZString const& other) const; + ArrayIndex index() const; + //const char* c_str() const; ///< \deprecated + char const* data() const; + unsigned length() const; + bool isStaticString() const; + + private: + void swap(CZString& other); + + struct StringStorage { + unsigned policy_: 2; + unsigned length_: 30; // 1GB max + }; + + char const* cstr_; // actually, a prefixed string, unless policy is noDup + union { + ArrayIndex index_; + StringStorage storage_; + }; + }; + +public: +#ifndef JSON_USE_CPPTL_SMALLMAP + typedef std::map<CZString, Value> ObjectValues; +#else + typedef CppTL::SmallMap<CZString, Value> ObjectValues; +#endif // ifndef JSON_USE_CPPTL_SMALLMAP +#endif // ifndef JSONCPP_DOC_EXCLUDE_IMPLEMENTATION + +public: + /** \brief Create a default Value of the given type. + + This is a very useful constructor. + To create an empty array, pass arrayValue. + To create an empty object, pass objectValue. + Another Value can then be set to this one by assignment. +This is useful since clear() and resize() will not alter types. + + Examples: +\code +Json::Value null_value; // null +Json::Value arr_value(Json::arrayValue); // [] +Json::Value obj_value(Json::objectValue); // {} +\endcode + */ + Value(ValueType type = nullValue); + Value(Int value); + Value(UInt value); +#if defined(JSON_HAS_INT64) + Value(Int64 value); + Value(UInt64 value); +#endif // if defined(JSON_HAS_INT64) + Value(double value); + Value(const char* value); ///< Copy til first 0. (NULL causes to seg-fault.) + Value(const char* begin, const char* end); ///< Copy all, incl zeroes. + /** \brief Constructs a value from a static string. + + * Like other value string constructor but do not duplicate the string for + * internal storage. The given string must remain alive after the call to this + * constructor. + * \note This works only for null-terminated strings. (We cannot change the + * size of this class, so we have nowhere to store the length, + * which might be computed later for various operations.) + * + * Example of usage: + * \code + * static StaticString foo("some text"); + * Json::Value aValue(foo); + * \endcode + */ + Value(const StaticString& value); + Value(const std::string& value); ///< Copy data() til size(). Embedded zeroes too. +#ifdef JSON_USE_CPPTL + Value(const CppTL::ConstString& value); +#endif + Value(bool value); + /// Deep copy. + Value(const Value& other); +#if JSON_HAS_RVALUE_REFERENCES + /// Move constructor + Value(Value&& other); +#endif + ~Value(); + + /// Deep copy, then swap(other). + /// \note Over-write existing comments. To preserve comments, use #swapPayload(). + Value& operator=(Value other); + /// Swap everything. + void swap(Value& other); + /// Swap values but leave comments and source offsets in place. + void swapPayload(Value& other); + + ValueType type() const; + + /// Compare payload only, not comments etc. + bool operator<(const Value& other) const; + bool operator<=(const Value& other) const; + bool operator>=(const Value& other) const; + bool operator>(const Value& other) const; + bool operator==(const Value& other) const; + bool operator!=(const Value& other) const; + int compare(const Value& other) const; + + const char* asCString() const; ///< Embedded zeroes could cause you trouble! + std::string asString() const; ///< Embedded zeroes are possible. + /** Get raw char* of string-value. + * \return false if !string. (Seg-fault if str or end are NULL.) + */ + bool getString( + char const** begin, char const** end) const; +#ifdef JSON_USE_CPPTL + CppTL::ConstString asConstString() const; +#endif + Int asInt() const; + UInt asUInt() const; +#if defined(JSON_HAS_INT64) + Int64 asInt64() const; + UInt64 asUInt64() const; +#endif // if defined(JSON_HAS_INT64) + LargestInt asLargestInt() const; + LargestUInt asLargestUInt() const; + float asFloat() const; + double asDouble() const; + bool asBool() const; + + bool isNull() const; + bool isBool() const; + bool isInt() const; + bool isInt64() const; + bool isUInt() const; + bool isUInt64() const; + bool isIntegral() const; + bool isDouble() const; + bool isNumeric() const; + bool isString() const; + bool isArray() const; + bool isObject() const; + + bool isConvertibleTo(ValueType other) const; + + /// Number of values in array or object + ArrayIndex size() const; + + /// \brief Return true if empty array, empty object, or null; + /// otherwise, false. + bool empty() const; + + /// Return isNull() + bool operator!() const; + + /// Remove all object members and array elements. + /// \pre type() is arrayValue, objectValue, or nullValue + /// \post type() is unchanged + void clear(); + + /// Resize the array to size elements. + /// New elements are initialized to null. + /// May only be called on nullValue or arrayValue. + /// \pre type() is arrayValue or nullValue + /// \post type() is arrayValue + void resize(ArrayIndex size); + + /// Access an array element (zero based index ). + /// If the array contains less than index element, then null value are + /// inserted + /// in the array so that its size is index+1. + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + Value& operator[](ArrayIndex index); + + /// Access an array element (zero based index ). + /// If the array contains less than index element, then null value are + /// inserted + /// in the array so that its size is index+1. + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + Value& operator[](int index); + + /// Access an array element (zero based index ) + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + const Value& operator[](ArrayIndex index) const; + + /// Access an array element (zero based index ) + /// (You may need to say 'value[0u]' to get your compiler to distinguish + /// this from the operator[] which takes a string.) + const Value& operator[](int index) const; + + /// If the array contains at least index+1 elements, returns the element + /// value, + /// otherwise returns defaultValue. + Value get(ArrayIndex index, const Value& defaultValue) const; + /// Return true if index < size(). + bool isValidIndex(ArrayIndex index) const; + /// \brief Append value to array at the end. + /// + /// Equivalent to jsonvalue[jsonvalue.size()] = value; + Value& append(const Value& value); + + /// Access an object value by name, create a null member if it does not exist. + /// \note Because of our implementation, keys are limited to 2^30 -1 chars. + /// Exceeding that will cause an exception. + Value& operator[](const char* key); + /// Access an object value by name, returns null if there is no member with + /// that name. + const Value& operator[](const char* key) const; + /// Access an object value by name, create a null member if it does not exist. + /// \param key may contain embedded nulls. + Value& operator[](const std::string& key); + /// Access an object value by name, returns null if there is no member with + /// that name. + /// \param key may contain embedded nulls. + const Value& operator[](const std::string& key) const; + /** \brief Access an object value by name, create a null member if it does not + exist. + + * If the object has no entry for that name, then the member name used to store + * the new entry is not duplicated. + * Example of use: + * \code + * Json::Value object; + * static const StaticString code("code"); + * object[code] = 1234; + * \endcode + */ + Value& operator[](const StaticString& key); +#ifdef JSON_USE_CPPTL + /// Access an object value by name, create a null member if it does not exist. + Value& operator[](const CppTL::ConstString& key); + /// Access an object value by name, returns null if there is no member with + /// that name. + const Value& operator[](const CppTL::ConstString& key) const; +#endif + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + Value get(const char* key, const Value& defaultValue) const; + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + /// \note key may contain embedded nulls. + Value get(const char* begin, const char* end, const Value& defaultValue) const; + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + /// \param key may contain embedded nulls. + Value get(const std::string& key, const Value& defaultValue) const; +#ifdef JSON_USE_CPPTL + /// Return the member named key if it exist, defaultValue otherwise. + /// \note deep copy + Value get(const CppTL::ConstString& key, const Value& defaultValue) const; +#endif + /// Most general and efficient version of isMember()const, get()const, + /// and operator[]const + /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 + Value const* find(char const* begin, char const* end) const; + /// Most general and efficient version of object-mutators. + /// \note As stated elsewhere, behavior is undefined if (end-begin) >= 2^30 + /// \return non-zero, but JSON_ASSERT if this is neither object nor nullValue. + Value const* demand(char const* begin, char const* end); + /// \brief Remove and return the named member. + /// + /// Do nothing if it did not exist. + /// \return the removed Value, or null. + /// \pre type() is objectValue or nullValue + /// \post type() is unchanged + /// \deprecated + Value removeMember(const char* key); + /// Same as removeMember(const char*) + /// \param key may contain embedded nulls. + /// \deprecated + Value removeMember(const std::string& key); + /// Same as removeMember(const char* begin, const char* end, Value* removed), + /// but 'key' is null-terminated. + bool removeMember(const char* key, Value* removed); + /** \brief Remove the named map member. + + Update 'removed' iff removed. + \param key may contain embedded nulls. + \return true iff removed (no exceptions) + */ + bool removeMember(std::string const& key, Value* removed); + /// Same as removeMember(std::string const& key, Value* removed) + bool removeMember(const char* begin, const char* end, Value* removed); + /** \brief Remove the indexed array element. + + O(n) expensive operations. + Update 'removed' iff removed. + \return true iff removed (no exceptions) + */ + bool removeIndex(ArrayIndex i, Value* removed); + + /// Return true if the object has a member named key. + /// \note 'key' must be null-terminated. + bool isMember(const char* key) const; + /// Return true if the object has a member named key. + /// \param key may contain embedded nulls. + bool isMember(const std::string& key) const; + /// Same as isMember(std::string const& key)const + bool isMember(const char* begin, const char* end) const; +#ifdef JSON_USE_CPPTL + /// Return true if the object has a member named key. + bool isMember(const CppTL::ConstString& key) const; +#endif + + /// \brief Return a list of the member names. + /// + /// If null, return an empty list. + /// \pre type() is objectValue or nullValue + /// \post if type() was nullValue, it remains nullValue + Members getMemberNames() const; + + //# ifdef JSON_USE_CPPTL + // EnumMemberNames enumMemberNames() const; + // EnumValues enumValues() const; + //# endif + + /// \deprecated Always pass len. + JSONCPP_DEPRECATED("Use setComment(std::string const&) instead.") + void setComment(const char* comment, CommentPlacement placement); + /// Comments must be //... or /* ... */ + void setComment(const char* comment, size_t len, CommentPlacement placement); + /// Comments must be //... or /* ... */ + void setComment(const std::string& comment, CommentPlacement placement); + bool hasComment(CommentPlacement placement) const; + /// Include delimiters and embedded newlines. + std::string getComment(CommentPlacement placement) const; + + std::string toStyledString() const; + + const_iterator begin() const; + const_iterator end() const; + + iterator begin(); + iterator end(); + + // Accessors for the [start, limit) range of bytes within the JSON text from + // which this value was parsed, if any. + void setOffsetStart(size_t start); + void setOffsetLimit(size_t limit); + size_t getOffsetStart() const; + size_t getOffsetLimit() const; + +private: + void initBasic(ValueType type, bool allocated = false); + + Value& resolveReference(const char* key); + Value& resolveReference(const char* key, const char* end); + + struct CommentInfo { + CommentInfo(); + ~CommentInfo(); + + void setComment(const char* text, size_t len); + + char* comment_; + }; + + // struct MemberNamesTransform + //{ + // typedef const char *result_type; + // const char *operator()( const CZString &name ) const + // { + // return name.c_str(); + // } + //}; + + union ValueHolder { + LargestInt int_; + LargestUInt uint_; + double real_; + bool bool_; + char* string_; // actually ptr to unsigned, followed by str, unless !allocated_ + ObjectValues* map_; + } value_; + ValueType type_ : 8; + unsigned int allocated_ : 1; // Notes: if declared as bool, bitfield is useless. + // If not allocated_, string_ must be null-terminated. + CommentInfo* comments_; + + // [start, limit) byte offsets in the source JSON text from which this Value + // was extracted. + size_t start_; + size_t limit_; +}; + +/** \brief Experimental and untested: represents an element of the "path" to + * access a node. + */ +class JSON_API PathArgument { +public: + friend class Path; + + PathArgument(); + PathArgument(ArrayIndex index); + PathArgument(const char* key); + PathArgument(const std::string& key); + +private: + enum Kind { + kindNone = 0, + kindIndex, + kindKey + }; + std::string key_; + ArrayIndex index_; + Kind kind_; +}; + +/** \brief Experimental and untested: represents a "path" to access a node. + * + * Syntax: + * - "." => root node + * - ".[n]" => elements at index 'n' of root node (an array value) + * - ".name" => member named 'name' of root node (an object value) + * - ".name1.name2.name3" + * - ".[0][1][2].name1[3]" + * - ".%" => member name is provided as parameter + * - ".[%]" => index is provied as parameter + */ +class JSON_API Path { +public: + Path(const std::string& path, + const PathArgument& a1 = PathArgument(), + const PathArgument& a2 = PathArgument(), + const PathArgument& a3 = PathArgument(), + const PathArgument& a4 = PathArgument(), + const PathArgument& a5 = PathArgument()); + + const Value& resolve(const Value& root) const; + Value resolve(const Value& root, const Value& defaultValue) const; + /// Creates the "path" to access the specified node and returns a reference on + /// the node. + Value& make(Value& root) const; + +private: + typedef std::vector<const PathArgument*> InArgs; + typedef std::vector<PathArgument> Args; + + void makePath(const std::string& path, const InArgs& in); + void addPathInArg(const std::string& path, + const InArgs& in, + InArgs::const_iterator& itInArg, + PathArgument::Kind kind); + void invalidPath(const std::string& path, int location); + + Args args_; +}; + +/** \brief base class for Value iterators. + * + */ +class JSON_API ValueIteratorBase { +public: + typedef std::bidirectional_iterator_tag iterator_category; + typedef unsigned int size_t; + typedef int difference_type; + typedef ValueIteratorBase SelfType; + + bool operator==(const SelfType& other) const { return isEqual(other); } + + bool operator!=(const SelfType& other) const { return !isEqual(other); } + + difference_type operator-(const SelfType& other) const { + return other.computeDistance(*this); + } + + /// Return either the index or the member name of the referenced value as a + /// Value. + Value key() const; + + /// Return the index of the referenced Value, or -1 if it is not an arrayValue. + UInt index() const; + + /// Return the member name of the referenced Value, or "" if it is not an + /// objectValue. + /// \note Avoid `c_str()` on result, as embedded zeroes are possible. + std::string name() const; + + /// Return the member name of the referenced Value. "" if it is not an + /// objectValue. + /// \deprecated This cannot be used for UTF-8 strings, since there can be embedded nulls. + JSONCPP_DEPRECATED("Use `key = name();` instead.") + char const* memberName() const; + /// Return the member name of the referenced Value, or NULL if it is not an + /// objectValue. + /// \note Better version than memberName(). Allows embedded nulls. + char const* memberName(char const** end) const; + +protected: + Value& deref() const; + + void increment(); + + void decrement(); + + difference_type computeDistance(const SelfType& other) const; + + bool isEqual(const SelfType& other) const; + + void copy(const SelfType& other); + +private: + Value::ObjectValues::iterator current_; + // Indicates that iterator is for a null value. + bool isNull_; + +public: + // For some reason, BORLAND needs these at the end, rather + // than earlier. No idea why. + ValueIteratorBase(); + explicit ValueIteratorBase(const Value::ObjectValues::iterator& current); +}; + +/** \brief const iterator for object and array value. + * + */ +class JSON_API ValueConstIterator : public ValueIteratorBase { + friend class Value; + +public: + typedef const Value value_type; + //typedef unsigned int size_t; + //typedef int difference_type; + typedef const Value& reference; + typedef const Value* pointer; + typedef ValueConstIterator SelfType; + + ValueConstIterator(); + ValueConstIterator(ValueIterator const& other); + +private: +/*! \internal Use by Value to create an iterator. + */ + explicit ValueConstIterator(const Value::ObjectValues::iterator& current); +public: + SelfType& operator=(const ValueIteratorBase& other); + + SelfType operator++(int) { + SelfType temp(*this); + ++*this; + return temp; + } + + SelfType operator--(int) { + SelfType temp(*this); + --*this; + return temp; + } + + SelfType& operator--() { + decrement(); + return *this; + } + + SelfType& operator++() { + increment(); + return *this; + } + + reference operator*() const { return deref(); } + + pointer operator->() const { return &deref(); } +}; + +/** \brief Iterator for object and array value. + */ +class JSON_API ValueIterator : public ValueIteratorBase { + friend class Value; + +public: + typedef Value value_type; + typedef unsigned int size_t; + typedef int difference_type; + typedef Value& reference; + typedef Value* pointer; + typedef ValueIterator SelfType; + + ValueIterator(); + explicit ValueIterator(const ValueConstIterator& other); + ValueIterator(const ValueIterator& other); + +private: +/*! \internal Use by Value to create an iterator. + */ + explicit ValueIterator(const Value::ObjectValues::iterator& current); +public: + SelfType& operator=(const SelfType& other); + + SelfType operator++(int) { + SelfType temp(*this); + ++*this; + return temp; + } + + SelfType operator--(int) { + SelfType temp(*this); + --*this; + return temp; + } + + SelfType& operator--() { + decrement(); + return *this; + } + + SelfType& operator++() { + increment(); + return *this; + } + + reference operator*() const { return deref(); } + + pointer operator->() const { return &deref(); } +}; + +} // namespace Json + + +namespace std { +/// Specialize std::swap() for Json::Value. +template<> +inline void swap(Json::Value& a, Json::Value& b) { a.swap(b); } +} + + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // CPPTL_JSON_H_INCLUDED diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/version.h b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/version.h new file mode 100755 index 0000000..9df36d7 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/version.h @@ -0,0 +1,13 @@ +// DO NOT EDIT. This file (and "version") is generated by CMake. +// Run CMake configure step to update it. +#ifndef JSON_VERSION_H_INCLUDED +# define JSON_VERSION_H_INCLUDED + +# define JSONCPP_VERSION_STRING "1.6.5" +# define JSONCPP_VERSION_MAJOR 1 +# define JSONCPP_VERSION_MINOR 6 +# define JSONCPP_VERSION_PATCH 5 +# define JSONCPP_VERSION_QUALIFIER +# define JSONCPP_VERSION_HEXA ((JSONCPP_VERSION_MAJOR << 24) | (JSONCPP_VERSION_MINOR << 16) | (JSONCPP_VERSION_PATCH << 8)) + +#endif // JSON_VERSION_H_INCLUDED diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/writer.h b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/writer.h new file mode 100755 index 0000000..f94aa1f --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/include/writer.h @@ -0,0 +1,331 @@ +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef JSON_WRITER_H_INCLUDED +#define JSON_WRITER_H_INCLUDED + +#if !defined(JSON_IS_AMALGAMATION) +#include "value.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <vector> +#include <string> +#include <ostream> + +// Disable warning C4251: <data member>: <type> needs to have dll-interface to +// be used by... +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(push) +#pragma warning(disable : 4251) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +namespace Json { + +class Value; + +/** + +Usage: +\code + using namespace Json; + void writeToStdout(StreamWriter::Factory const& factory, Value const& value) { + std::unique_ptr<StreamWriter> const writer( + factory.newStreamWriter()); + writer->write(value, &std::cout); + std::cout << std::endl; // add lf and flush + } +\endcode +*/ +class JSON_API StreamWriter { +protected: + std::ostream* sout_; // not owned; will not delete +public: + StreamWriter(); + virtual ~StreamWriter(); + /** Write Value into document as configured in sub-class. + Do not take ownership of sout, but maintain a reference during function. + \pre sout != NULL + \return zero on success (For now, we always return zero, so check the stream instead.) + \throw std::exception possibly, depending on configuration + */ + virtual int write(Value const& root, std::ostream* sout) = 0; + + /** \brief A simple abstract factory. + */ + class JSON_API Factory { + public: + virtual ~Factory(); + /** \brief Allocate a CharReader via operator new(). + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + virtual StreamWriter* newStreamWriter() const = 0; + }; // Factory +}; // StreamWriter + +/** \brief Write into stringstream, then return string, for convenience. + * A StreamWriter will be created from the factory, used, and then deleted. + */ +std::string JSON_API writeString(StreamWriter::Factory const& factory, Value const& root); + + +/** \brief Build a StreamWriter implementation. + +Usage: +\code + using namespace Json; + Value value = ...; + StreamWriterBuilder builder; + builder["commentStyle"] = "None"; + builder["indentation"] = " "; // or whatever you like + std::unique_ptr<Json::StreamWriter> writer( + builder.newStreamWriter()); + writer->write(value, &std::cout); + std::cout << std::endl; // add lf and flush +\endcode +*/ +class JSON_API StreamWriterBuilder : public StreamWriter::Factory { +public: + // Note: We use a Json::Value so that we can add data-members to this class + // without a major version bump. + /** Configuration of this builder. + Available settings (case-sensitive): + - "commentStyle": "None" or "All" + - "indentation": "<anything>" + - "enableYAMLCompatibility": false or true + - slightly change the whitespace around colons + - "dropNullPlaceholders": false or true + - Drop the "null" string from the writer's output for nullValues. + Strictly speaking, this is not valid JSON. But when the output is being + fed to a browser's Javascript, it makes for smaller output and the + browser can handle the output just fine. + - "useSpecialFloats": false or true + - If true, outputs non-finite floating point values in the following way: + NaN values as "NaN", positive infinity as "Infinity", and negative infinity + as "-Infinity". + + You can examine 'settings_` yourself + to see the defaults. You can also write and read them just like any + JSON Value. + \sa setDefaults() + */ + Json::Value settings_; + + StreamWriterBuilder(); + ~StreamWriterBuilder() override; + + /** + * \throw std::exception if something goes wrong (e.g. invalid settings) + */ + StreamWriter* newStreamWriter() const override; + + /** \return true if 'settings' are legal and consistent; + * otherwise, indicate bad settings via 'invalid'. + */ + bool validate(Json::Value* invalid) const; + /** A simple way to update a specific setting. + */ + Value& operator[](std::string key); + + /** Called by ctor, but you can use this to reset settings_. + * \pre 'settings' != NULL (but Json::null is fine) + * \remark Defaults: + * \snippet src/lib_json/json_writer.cpp StreamWriterBuilderDefaults + */ + static void setDefaults(Json::Value* settings); +}; + +/** \brief Abstract class for writers. + * \deprecated Use StreamWriter. (And really, this is an implementation detail.) + */ +class JSON_API Writer { +public: + virtual ~Writer(); + + virtual std::string write(const Value& root) = 0; +}; + +/** \brief Outputs a Value in <a HREF="http://www.json.org">JSON</a> format + *without formatting (not human friendly). + * + * The JSON document is written in a single line. It is not intended for 'human' + *consumption, + * but may be usefull to support feature such as RPC where bandwith is limited. + * \sa Reader, Value + * \deprecated Use StreamWriterBuilder. + */ +class JSON_API FastWriter : public Writer { + +public: + FastWriter(); + ~FastWriter() override {} + + void enableYAMLCompatibility(); + + /** \brief Drop the "null" string from the writer's output for nullValues. + * Strictly speaking, this is not valid JSON. But when the output is being + * fed to a browser's Javascript, it makes for smaller output and the + * browser can handle the output just fine. + */ + void dropNullPlaceholders(); + + void omitEndingLineFeed(); + +public: // overridden from Writer + std::string write(const Value& root) override; + +private: + void writeValue(const Value& value); + + std::string document_; + bool yamlCompatiblityEnabled_; + bool dropNullPlaceholders_; + bool omitEndingLineFeed_; +}; + +/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a + *human friendly way. + * + * The rules for line break and indent are as follow: + * - Object value: + * - if empty then print {} without indent and line break + * - if not empty the print '{', line break & indent, print one value per + *line + * and then unindent and line break and print '}'. + * - Array value: + * - if empty then print [] without indent and line break + * - if the array contains no object value, empty array or some other value + *types, + * and all the values fit on one lines, then print the array on a single + *line. + * - otherwise, it the values do not fit on one line, or the array contains + * object or non empty array, then print one value per line. + * + * If the Value have comments then they are outputed according to their + *#CommentPlacement. + * + * \sa Reader, Value, Value::setComment() + * \deprecated Use StreamWriterBuilder. + */ +class JSON_API StyledWriter : public Writer { +public: + StyledWriter(); + ~StyledWriter() override {} + +public: // overridden from Writer + /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format. + * \param root Value to serialize. + * \return String containing the JSON document that represents the root value. + */ + std::string write(const Value& root) override; + +private: + void writeValue(const Value& value); + void writeArrayValue(const Value& value); + bool isMultineArray(const Value& value); + void pushValue(const std::string& value); + void writeIndent(); + void writeWithIndent(const std::string& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(const Value& root); + void writeCommentAfterValueOnSameLine(const Value& root); + bool hasCommentForValue(const Value& value); + static std::string normalizeEOL(const std::string& text); + + typedef std::vector<std::string> ChildValues; + + ChildValues childValues_; + std::string document_; + std::string indentString_; + int rightMargin_; + int indentSize_; + bool addChildValues_; +}; + +/** \brief Writes a Value in <a HREF="http://www.json.org">JSON</a> format in a + human friendly way, + to a stream rather than to a string. + * + * The rules for line break and indent are as follow: + * - Object value: + * - if empty then print {} without indent and line break + * - if not empty the print '{', line break & indent, print one value per + line + * and then unindent and line break and print '}'. + * - Array value: + * - if empty then print [] without indent and line break + * - if the array contains no object value, empty array or some other value + types, + * and all the values fit on one lines, then print the array on a single + line. + * - otherwise, it the values do not fit on one line, or the array contains + * object or non empty array, then print one value per line. + * + * If the Value have comments then they are outputed according to their + #CommentPlacement. + * + * \param indentation Each level will be indented by this amount extra. + * \sa Reader, Value, Value::setComment() + * \deprecated Use StreamWriterBuilder. + */ +class JSON_API StyledStreamWriter { +public: + StyledStreamWriter(std::string indentation = "\t"); + ~StyledStreamWriter() {} + +public: + /** \brief Serialize a Value in <a HREF="http://www.json.org">JSON</a> format. + * \param out Stream to write to. (Can be ostringstream, e.g.) + * \param root Value to serialize. + * \note There is no point in deriving from Writer, since write() should not + * return a value. + */ + void write(std::ostream& out, const Value& root); + +private: + void writeValue(const Value& value); + void writeArrayValue(const Value& value); + bool isMultineArray(const Value& value); + void pushValue(const std::string& value); + void writeIndent(); + void writeWithIndent(const std::string& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(const Value& root); + void writeCommentAfterValueOnSameLine(const Value& root); + bool hasCommentForValue(const Value& value); + static std::string normalizeEOL(const std::string& text); + + typedef std::vector<std::string> ChildValues; + + ChildValues childValues_; + std::ostream* document_; + std::string indentString_; + int rightMargin_; + std::string indentation_; + bool addChildValues_ : 1; + bool indented_ : 1; +}; + +#if defined(JSON_HAS_INT64) +std::string JSON_API valueToString(Int value); +std::string JSON_API valueToString(UInt value); +#endif // if defined(JSON_HAS_INT64) +std::string JSON_API valueToString(LargestInt value); +std::string JSON_API valueToString(LargestUInt value); +std::string JSON_API valueToString(double value); +std::string JSON_API valueToString(bool value); +std::string JSON_API valueToQuotedString(const char* value); + +/// \brief Output using the StyledStreamWriter. +/// \see Json::operator>>() +JSON_API std::ostream& operator<<(std::ostream&, const Value& root); + +} // namespace Json + +#if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) +#pragma warning(pop) +#endif // if defined(JSONCPP_DISABLE_DLL_INTERFACE_WARNING) + +#endif // JSON_WRITER_H_INCLUDED diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_reader.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_reader.cpp new file mode 100755 index 0000000..0453574 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_reader.cpp @@ -0,0 +1,2032 @@ +// Copyright 2007-2011 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#if !defined(JSON_IS_AMALGAMATION) +#include "../include/assertions.h" +#include "../include/reader.h" +#include "../include/value.h" +#include "json_tool.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <utility> +#include <cstdio> +#include <cassert> +#include <cstring> +#include <istream> +#include <sstream> +#include <memory> +#include <set> +#include <limits> + +#if defined(_MSC_VER) +#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above +#define snprintf sprintf_s +#elif _MSC_VER >= 1900 // VC++ 14.0 and above +#define snprintf std::snprintf +#else +#define snprintf _snprintf +#endif +#elif defined(__ANDROID__) || defined(__QNXNTO__) +#define snprintf snprintf +#elif __cplusplus >= 201103L +#define snprintf std::snprintf +#endif + +#if defined(__QNXNTO__) +#define sscanf std::sscanf +#endif + +#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0 +// Disable warning about strdup being deprecated. +#pragma warning(disable : 4996) +#endif + +static int const stackLimit_g = 1000; +static int stackDepth_g = 0; // see readValue() + +namespace Json { + +#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520) +typedef std::unique_ptr<CharReader> CharReaderPtr; +#else +typedef std::auto_ptr<CharReader> CharReaderPtr; +#endif + +// Implementation of class Features +// //////////////////////////////// + +Features::Features() + : allowComments_(true), strictRoot_(false), + allowDroppedNullPlaceholders_(false), allowNumericKeys_(false) {} + +Features Features::all() { return Features(); } + +Features Features::strictMode() { + Features features; + features.allowComments_ = false; + features.strictRoot_ = true; + features.allowDroppedNullPlaceholders_ = false; + features.allowNumericKeys_ = false; + return features; +} + +// Implementation of class Reader +// //////////////////////////////// + +static bool containsNewLine(Reader::Location begin, Reader::Location end) { + for (; begin < end; ++begin) + if (*begin == '\n' || *begin == '\r') + return true; + return false; +} + +// Class Reader +// ////////////////////////////////////////////////////////////////// + +Reader::Reader() + : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), + lastValue_(), commentsBefore_(), features_(Features::all()), + collectComments_() {} + +Reader::Reader(const Features& features) + : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), + lastValue_(), commentsBefore_(), features_(features), collectComments_() { +} + +bool +Reader::parse(const std::string& document, Value& root, bool collectComments) { + document_ = document; + const char* begin = document_.c_str(); + const char* end = begin + document_.length(); + return parse(begin, end, root, collectComments); +} + +bool Reader::parse(std::istream& sin, Value& root, bool collectComments) { + // std::istream_iterator<char> begin(sin); + // std::istream_iterator<char> end; + // Those would allow streamed input from a file, if parse() were a + // template function. + + // Since std::string is reference-counted, this at least does not + // create an extra copy. + std::string doc; + std::getline(sin, doc, (char)EOF); + return parse(doc, root, collectComments); +} + +bool Reader::parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments) { + if (!features_.allowComments_) { + collectComments = false; + } + + begin_ = beginDoc; + end_ = endDoc; + collectComments_ = collectComments; + current_ = begin_; + lastValueEnd_ = 0; + lastValue_ = 0; + commentsBefore_ = ""; + errors_.clear(); + while (!nodes_.empty()) + nodes_.pop(); + nodes_.push(&root); + + stackDepth_g = 0; // Yes, this is bad coding, but options are limited. + bool successful = readValue(); + Token token; + skipCommentTokens(token); + if (collectComments_ && !commentsBefore_.empty()) + root.setComment(commentsBefore_, commentAfter); + if (features_.strictRoot_) { + if (!root.isArray() && !root.isObject()) { + // Set error location to start of doc, ideally should be first token found + // in doc + token.type_ = tokenError; + token.start_ = beginDoc; + token.end_ = endDoc; + addError( + "A valid JSON document must be either an array or an object value.", + token); + return false; + } + } + return successful; +} + +bool Reader::readValue() { + // This is a non-reentrant way to support a stackLimit. Terrible! + // But this deprecated class has a security problem: Bad input can + // cause a seg-fault. This seems like a fair, binary-compatible way + // to prevent the problem. + if (stackDepth_g >= stackLimit_g) throwRuntimeError("Exceeded stackLimit in readValue()."); + ++stackDepth_g; + + Token token; + skipCommentTokens(token); + bool successful = true; + + if (collectComments_ && !commentsBefore_.empty()) { + currentValue().setComment(commentsBefore_, commentBefore); + commentsBefore_ = ""; + } + + switch (token.type_) { + case tokenObjectBegin: + successful = readObject(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenArrayBegin: + successful = readArray(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenNumber: + successful = decodeNumber(token); + break; + case tokenString: + successful = decodeString(token); + break; + case tokenTrue: + { + Value v(true); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenFalse: + { + Value v(false); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNull: + { + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenArraySeparator: + case tokenObjectEnd: + case tokenArrayEnd: + if (features_.allowDroppedNullPlaceholders_) { + // "Un-read" the current token and mark the current value as a null + // token. + current_--; + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(current_ - begin_ - 1); + currentValue().setOffsetLimit(current_ - begin_); + break; + } // Else, fall through... + default: + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return addError("Syntax error: value, object or array expected.", token); + } + + if (collectComments_) { + lastValueEnd_ = current_; + lastValue_ = ¤tValue(); + } + + --stackDepth_g; + return successful; +} + +void Reader::skipCommentTokens(Token& token) { + if (features_.allowComments_) { + do { + readToken(token); + } while (token.type_ == tokenComment); + } else { + readToken(token); + } +} + +bool Reader::readToken(Token& token) { + skipSpaces(); + token.start_ = current_; + Char c = getNextChar(); + bool ok = true; + switch (c) { + case '{': + token.type_ = tokenObjectBegin; + break; + case '}': + token.type_ = tokenObjectEnd; + break; + case '[': + token.type_ = tokenArrayBegin; + break; + case ']': + token.type_ = tokenArrayEnd; + break; + case '"': + token.type_ = tokenString; + ok = readString(); + break; + case '/': + token.type_ = tokenComment; + ok = readComment(); + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + case '-': + token.type_ = tokenNumber; + readNumber(); + break; + case 't': + token.type_ = tokenTrue; + ok = match("rue", 3); + break; + case 'f': + token.type_ = tokenFalse; + ok = match("alse", 4); + break; + case 'n': + token.type_ = tokenNull; + ok = match("ull", 3); + break; + case ',': + token.type_ = tokenArraySeparator; + break; + case ':': + token.type_ = tokenMemberSeparator; + break; + case 0: + token.type_ = tokenEndOfStream; + break; + default: + ok = false; + break; + } + if (!ok) + token.type_ = tokenError; + token.end_ = current_; + return true; +} + +void Reader::skipSpaces() { + while (current_ != end_) { + Char c = *current_; + if (c == ' ' || c == '\t' || c == '\r' || c == '\n') + ++current_; + else + break; + } +} + +bool Reader::match(Location pattern, int patternLength) { + if (end_ - current_ < patternLength) + return false; + int index = patternLength; + while (index--) + if (current_[index] != pattern[index]) + return false; + current_ += patternLength; + return true; +} + +bool Reader::readComment() { + Location commentBegin = current_ - 1; + Char c = getNextChar(); + bool successful = false; + if (c == '*') + successful = readCStyleComment(); + else if (c == '/') + successful = readCppStyleComment(); + if (!successful) + return false; + + if (collectComments_) { + CommentPlacement placement = commentBefore; + if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) { + if (c != '*' || !containsNewLine(commentBegin, current_)) + placement = commentAfterOnSameLine; + } + + addComment(commentBegin, current_, placement); + } + return true; +} + +static std::string normalizeEOL(Reader::Location begin, Reader::Location end) { + std::string normalized; + normalized.reserve(end - begin); + Reader::Location current = begin; + while (current != end) { + char c = *current++; + if (c == '\r') { + if (current != end && *current == '\n') + // convert dos EOL + ++current; + // convert Mac EOL + normalized += '\n'; + } else { + normalized += c; + } + } + return normalized; +} + +void +Reader::addComment(Location begin, Location end, CommentPlacement placement) { + assert(collectComments_); + const std::string& normalized = normalizeEOL(begin, end); + if (placement == commentAfterOnSameLine) { + assert(lastValue_ != 0); + lastValue_->setComment(normalized, placement); + } else { + commentsBefore_ += normalized; + } +} + +bool Reader::readCStyleComment() { + while (current_ != end_) { + Char c = getNextChar(); + if (c == '*' && *current_ == '/') + break; + } + return getNextChar() == '/'; +} + +bool Reader::readCppStyleComment() { + while (current_ != end_) { + Char c = getNextChar(); + if (c == '\n') + break; + if (c == '\r') { + // Consume DOS EOL. It will be normalized in addComment. + if (current_ != end_ && *current_ == '\n') + getNextChar(); + // Break on Moc OS 9 EOL. + break; + } + } + return true; +} + +void Reader::readNumber() { + const char *p = current_; + char c = '0'; // stopgap for already consumed character + // integral part + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + // fractional part + if (c == '.') { + c = (current_ = p) < end_ ? *p++ : 0; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + } + // exponential part + if (c == 'e' || c == 'E') { + c = (current_ = p) < end_ ? *p++ : 0; + if (c == '+' || c == '-') + c = (current_ = p) < end_ ? *p++ : 0; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + } +} + +bool Reader::readString() { + Char c = 0; + while (current_ != end_) { + c = getNextChar(); + if (c == '\\') + getNextChar(); + else if (c == '"') + break; + } + return c == '"'; +} + +bool Reader::readObject(Token& tokenStart) { + Token tokenName; + std::string name; + Value init(objectValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + while (readToken(tokenName)) { + bool initialTokenOk = true; + while (tokenName.type_ == tokenComment && initialTokenOk) + initialTokenOk = readToken(tokenName); + if (!initialTokenOk) + break; + if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object + return true; + name = ""; + if (tokenName.type_ == tokenString) { + if (!decodeString(tokenName, name)) + return recoverFromError(tokenObjectEnd); + } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) { + Value numberName; + if (!decodeNumber(tokenName, numberName)) + return recoverFromError(tokenObjectEnd); + name = numberName.asString(); + } else { + break; + } + + Token colon; + if (!readToken(colon) || colon.type_ != tokenMemberSeparator) { + return addErrorAndRecover( + "Missing ':' after object member name", colon, tokenObjectEnd); + } + Value& value = currentValue()[name]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenObjectEnd); + + Token comma; + if (!readToken(comma) || + (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator && + comma.type_ != tokenComment)) { + return addErrorAndRecover( + "Missing ',' or '}' in object declaration", comma, tokenObjectEnd); + } + bool finalizeTokenOk = true; + while (comma.type_ == tokenComment && finalizeTokenOk) + finalizeTokenOk = readToken(comma); + if (comma.type_ == tokenObjectEnd) + return true; + } + return addErrorAndRecover( + "Missing '}' or object member name", tokenName, tokenObjectEnd); +} + +bool Reader::readArray(Token& tokenStart) { + Value init(arrayValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + skipSpaces(); + if (*current_ == ']') // empty array + { + Token endArray; + readToken(endArray); + return true; + } + int index = 0; + for (;;) { + Value& value = currentValue()[index++]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenArrayEnd); + + Token token; + // Accept Comment after last item in the array. + ok = readToken(token); + while (token.type_ == tokenComment && ok) { + ok = readToken(token); + } + bool badTokenType = + (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd); + if (!ok || badTokenType) { + return addErrorAndRecover( + "Missing ',' or ']' in array declaration", token, tokenArrayEnd); + } + if (token.type_ == tokenArrayEnd) + break; + } + return true; +} + +bool Reader::decodeNumber(Token& token) { + Value decoded; + if (!decodeNumber(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool Reader::decodeNumber(Token& token, Value& decoded) { + // Attempts to parse the number as an integer. If the number is + // larger than the maximum supported value of an integer then + // we decode the number as a double. + Location current = token.start_; + bool isNegative = *current == '-'; + if (isNegative) + ++current; + // TODO: Help the compiler do the div and mod at compile time or get rid of them. + Value::LargestUInt maxIntegerValue = + isNegative ? Value::LargestUInt(Value::maxLargestInt) + 1 + : Value::maxLargestUInt; + Value::LargestUInt threshold = maxIntegerValue / 10; + Value::LargestUInt value = 0; + while (current < token.end_) { + Char c = *current++; + if (c < '0' || c > '9') + return decodeDouble(token, decoded); + Value::UInt digit(c - '0'); + if (value >= threshold) { + // We've hit or exceeded the max value divided by 10 (rounded down). If + // a) we've only just touched the limit, b) this is the last digit, and + // c) it's small enough to fit in that rounding delta, we're okay. + // Otherwise treat this number as a double to avoid overflow. + if (value > threshold || current != token.end_ || + digit > maxIntegerValue % 10) { + return decodeDouble(token, decoded); + } + } + value = value * 10 + digit; + } + if (isNegative && value == maxIntegerValue) + decoded = Value::minLargestInt; + else if (isNegative) + decoded = -Value::LargestInt(value); + else if (value <= Value::LargestUInt(Value::maxInt)) + decoded = Value::LargestInt(value); + else + decoded = value; + return true; +} + +bool Reader::decodeDouble(Token& token) { + Value decoded; + if (!decodeDouble(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool Reader::decodeDouble(Token& token, Value& decoded) { + double value = 0; + std::string buffer(token.start_, token.end_); + std::istringstream is(buffer); + if (!(is >> value)) + return addError("'" + std::string(token.start_, token.end_) + + "' is not a number.", + token); + decoded = value; + return true; +} + +bool Reader::decodeString(Token& token) { + std::string decoded_string; + if (!decodeString(token, decoded_string)) + return false; + Value decoded(decoded_string); + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool Reader::decodeString(Token& token, std::string& decoded) { + decoded.reserve(token.end_ - token.start_ - 2); + Location current = token.start_ + 1; // skip '"' + Location end = token.end_ - 1; // do not include '"' + while (current != end) { + Char c = *current++; + if (c == '"') + break; + else if (c == '\\') { + if (current == end) + return addError("Empty escape sequence in string", token, current); + Char escape = *current++; + switch (escape) { + case '"': + decoded += '"'; + break; + case '/': + decoded += '/'; + break; + case '\\': + decoded += '\\'; + break; + case 'b': + decoded += '\b'; + break; + case 'f': + decoded += '\f'; + break; + case 'n': + decoded += '\n'; + break; + case 'r': + decoded += '\r'; + break; + case 't': + decoded += '\t'; + break; + case 'u': { + unsigned int unicode; + if (!decodeUnicodeCodePoint(token, current, end, unicode)) + return false; + decoded += codePointToUTF8(unicode); + } break; + default: + return addError("Bad escape sequence in string", token, current); + } + } else { + decoded += c; + } + } + return true; +} + +bool Reader::decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode) { + + if (!decodeUnicodeEscapeSequence(token, current, end, unicode)) + return false; + if (unicode >= 0xD800 && unicode <= 0xDBFF) { + // surrogate pairs + if (end - current < 6) + return addError( + "additional six characters expected to parse unicode surrogate pair.", + token, + current); + unsigned int surrogatePair; + if (*(current++) == '\\' && *(current++) == 'u') { + if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) { + unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF); + } else + return false; + } else + return addError("expecting another \\u token to begin the second half of " + "a unicode surrogate pair", + token, + current); + } + return true; +} + +bool Reader::decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& unicode) { + if (end - current < 4) + return addError( + "Bad unicode escape sequence in string: four digits expected.", + token, + current); + unicode = 0; + for (int index = 0; index < 4; ++index) { + Char c = *current++; + unicode *= 16; + if (c >= '0' && c <= '9') + unicode += c - '0'; + else if (c >= 'a' && c <= 'f') + unicode += c - 'a' + 10; + else if (c >= 'A' && c <= 'F') + unicode += c - 'A' + 10; + else + return addError( + "Bad unicode escape sequence in string: hexadecimal digit expected.", + token, + current); + } + return true; +} + +bool +Reader::addError(const std::string& message, Token& token, Location extra) { + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = extra; + errors_.push_back(info); + return false; +} + +bool Reader::recoverFromError(TokenType skipUntilToken) { + int errorCount = int(errors_.size()); + Token skip; + for (;;) { + if (!readToken(skip)) + errors_.resize(errorCount); // discard errors caused by recovery + if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream) + break; + } + errors_.resize(errorCount); + return false; +} + +bool Reader::addErrorAndRecover(const std::string& message, + Token& token, + TokenType skipUntilToken) { + addError(message, token); + return recoverFromError(skipUntilToken); +} + +Value& Reader::currentValue() { return *(nodes_.top()); } + +Reader::Char Reader::getNextChar() { + if (current_ == end_) + return 0; + return *current_++; +} + +void Reader::getLocationLineAndColumn(Location location, + int& line, + int& column) const { + Location current = begin_; + Location lastLineStart = current; + line = 0; + while (current < location && current != end_) { + Char c = *current++; + if (c == '\r') { + if (*current == '\n') + ++current; + lastLineStart = current; + ++line; + } else if (c == '\n') { + lastLineStart = current; + ++line; + } + } + // column & line start at 1 + column = int(location - lastLineStart) + 1; + ++line; +} + +std::string Reader::getLocationLineAndColumn(Location location) const { + int line, column; + getLocationLineAndColumn(location, line, column); + char buffer[18 + 16 + 16 + 1]; + snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column); + return buffer; +} + +// Deprecated. Preserved for backward compatibility +std::string Reader::getFormatedErrorMessages() const { + return getFormattedErrorMessages(); +} + +std::string Reader::getFormattedErrorMessages() const { + std::string formattedMessage; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + formattedMessage += + "* " + getLocationLineAndColumn(error.token_.start_) + "\n"; + formattedMessage += " " + error.message_ + "\n"; + if (error.extra_) + formattedMessage += + "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n"; + } + return formattedMessage; +} + +std::vector<Reader::StructuredError> Reader::getStructuredErrors() const { + std::vector<Reader::StructuredError> allErrors; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + Reader::StructuredError structured; + structured.offset_start = error.token_.start_ - begin_; + structured.offset_limit = error.token_.end_ - begin_; + structured.message = error.message_; + allErrors.push_back(structured); + } + return allErrors; +} + +bool Reader::pushError(const Value& value, const std::string& message) { + size_t length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = end_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = 0; + errors_.push_back(info); + return true; +} + +bool Reader::pushError(const Value& value, const std::string& message, const Value& extra) { + size_t length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length + || extra.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = begin_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = begin_ + extra.getOffsetStart(); + errors_.push_back(info); + return true; +} + +bool Reader::good() const { + return !errors_.size(); +} + +// exact copy of Features +class OurFeatures { +public: + static OurFeatures all(); + bool allowComments_; + bool strictRoot_; + bool allowDroppedNullPlaceholders_; + bool allowNumericKeys_; + bool allowSingleQuotes_; + bool failIfExtra_; + bool rejectDupKeys_; + bool allowSpecialFloats_; + int stackLimit_; +}; // OurFeatures + +// exact copy of Implementation of class Features +// //////////////////////////////// + +OurFeatures OurFeatures::all() { return OurFeatures(); } + +// Implementation of class Reader +// //////////////////////////////// + +// exact copy of Reader, renamed to OurReader +class OurReader { +public: + typedef char Char; + typedef const Char* Location; + struct StructuredError { + size_t offset_start; + size_t offset_limit; + std::string message; + }; + + OurReader(OurFeatures const& features); + bool parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments = true); + std::string getFormattedErrorMessages() const; + std::vector<StructuredError> getStructuredErrors() const; + bool pushError(const Value& value, const std::string& message); + bool pushError(const Value& value, const std::string& message, const Value& extra); + bool good() const; + +private: + OurReader(OurReader const&); // no impl + void operator=(OurReader const&); // no impl + + enum TokenType { + tokenEndOfStream = 0, + tokenObjectBegin, + tokenObjectEnd, + tokenArrayBegin, + tokenArrayEnd, + tokenString, + tokenNumber, + tokenTrue, + tokenFalse, + tokenNull, + tokenNaN, + tokenPosInf, + tokenNegInf, + tokenArraySeparator, + tokenMemberSeparator, + tokenComment, + tokenError + }; + + class Token { + public: + TokenType type_; + Location start_; + Location end_; + }; + + class ErrorInfo { + public: + Token token_; + std::string message_; + Location extra_; + }; + + typedef std::deque<ErrorInfo> Errors; + + bool readToken(Token& token); + void skipSpaces(); + bool match(Location pattern, int patternLength); + bool readComment(); + bool readCStyleComment(); + bool readCppStyleComment(); + bool readString(); + bool readStringSingleQuote(); + bool readNumber(bool checkInf); + bool readValue(); + bool readObject(Token& token); + bool readArray(Token& token); + bool decodeNumber(Token& token); + bool decodeNumber(Token& token, Value& decoded); + bool decodeString(Token& token); + bool decodeString(Token& token, std::string& decoded); + bool decodeDouble(Token& token); + bool decodeDouble(Token& token, Value& decoded); + bool decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& unicode); + bool addError(const std::string& message, Token& token, Location extra = 0); + bool recoverFromError(TokenType skipUntilToken); + bool addErrorAndRecover(const std::string& message, + Token& token, + TokenType skipUntilToken); + void skipUntilSpace(); + Value& currentValue(); + Char getNextChar(); + void + getLocationLineAndColumn(Location location, int& line, int& column) const; + std::string getLocationLineAndColumn(Location location) const; + void addComment(Location begin, Location end, CommentPlacement placement); + void skipCommentTokens(Token& token); + + typedef std::stack<Value*> Nodes; + Nodes nodes_; + Errors errors_; + std::string document_; + Location begin_; + Location end_; + Location current_; + Location lastValueEnd_; + Value* lastValue_; + std::string commentsBefore_; + int stackDepth_; + + OurFeatures const features_; + bool collectComments_; +}; // OurReader + +// complete copy of Read impl, for OurReader + +OurReader::OurReader(OurFeatures const& features) + : errors_(), document_(), begin_(), end_(), current_(), lastValueEnd_(), + lastValue_(), commentsBefore_(), + stackDepth_(0), + features_(features), collectComments_() { +} + +bool OurReader::parse(const char* beginDoc, + const char* endDoc, + Value& root, + bool collectComments) { + if (!features_.allowComments_) { + collectComments = false; + } + + begin_ = beginDoc; + end_ = endDoc; + collectComments_ = collectComments; + current_ = begin_; + lastValueEnd_ = 0; + lastValue_ = 0; + commentsBefore_ = ""; + errors_.clear(); + while (!nodes_.empty()) + nodes_.pop(); + nodes_.push(&root); + + stackDepth_ = 0; + bool successful = readValue(); + Token token; + skipCommentTokens(token); + if (features_.failIfExtra_) { + if (token.type_ != tokenError && token.type_ != tokenEndOfStream) { + addError("Extra non-whitespace after JSON value.", token); + return false; + } + } + if (collectComments_ && !commentsBefore_.empty()) + root.setComment(commentsBefore_, commentAfter); + if (features_.strictRoot_) { + if (!root.isArray() && !root.isObject()) { + // Set error location to start of doc, ideally should be first token found + // in doc + token.type_ = tokenError; + token.start_ = beginDoc; + token.end_ = endDoc; + addError( + "A valid JSON document must be either an array or an object value.", + token); + return false; + } + } + return successful; +} + +bool OurReader::readValue() { + if (stackDepth_ >= features_.stackLimit_) throwRuntimeError("Exceeded stackLimit in readValue()."); + ++stackDepth_; + Token token; + skipCommentTokens(token); + bool successful = true; + + if (collectComments_ && !commentsBefore_.empty()) { + currentValue().setComment(commentsBefore_, commentBefore); + commentsBefore_ = ""; + } + + switch (token.type_) { + case tokenObjectBegin: + successful = readObject(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenArrayBegin: + successful = readArray(token); + currentValue().setOffsetLimit(current_ - begin_); + break; + case tokenNumber: + successful = decodeNumber(token); + break; + case tokenString: + successful = decodeString(token); + break; + case tokenTrue: + { + Value v(true); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenFalse: + { + Value v(false); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNull: + { + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNaN: + { + Value v(std::numeric_limits<double>::quiet_NaN()); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenPosInf: + { + Value v(std::numeric_limits<double>::infinity()); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenNegInf: + { + Value v(-std::numeric_limits<double>::infinity()); + currentValue().swapPayload(v); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + } + break; + case tokenArraySeparator: + case tokenObjectEnd: + case tokenArrayEnd: + if (features_.allowDroppedNullPlaceholders_) { + // "Un-read" the current token and mark the current value as a null + // token. + current_--; + Value v; + currentValue().swapPayload(v); + currentValue().setOffsetStart(current_ - begin_ - 1); + currentValue().setOffsetLimit(current_ - begin_); + break; + } // else, fall through ... + default: + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return addError("Syntax error: value, object or array expected.", token); + } + + if (collectComments_) { + lastValueEnd_ = current_; + lastValue_ = ¤tValue(); + } + + --stackDepth_; + return successful; +} + +void OurReader::skipCommentTokens(Token& token) { + if (features_.allowComments_) { + do { + readToken(token); + } while (token.type_ == tokenComment); + } else { + readToken(token); + } +} + +bool OurReader::readToken(Token& token) { + skipSpaces(); + token.start_ = current_; + Char c = getNextChar(); + bool ok = true; + switch (c) { + case '{': + token.type_ = tokenObjectBegin; + break; + case '}': + token.type_ = tokenObjectEnd; + break; + case '[': + token.type_ = tokenArrayBegin; + break; + case ']': + token.type_ = tokenArrayEnd; + break; + case '"': + token.type_ = tokenString; + ok = readString(); + break; + case '\'': + if (features_.allowSingleQuotes_) { + token.type_ = tokenString; + ok = readStringSingleQuote(); + break; + } // else continue + case '/': + token.type_ = tokenComment; + ok = readComment(); + break; + case '0': + case '1': + case '2': + case '3': + case '4': + case '5': + case '6': + case '7': + case '8': + case '9': + token.type_ = tokenNumber; + readNumber(false); + break; + case '-': + if (readNumber(true)) { + token.type_ = tokenNumber; + } else { + token.type_ = tokenNegInf; + ok = features_.allowSpecialFloats_ && match("nfinity", 7); + } + break; + case 't': + token.type_ = tokenTrue; + ok = match("rue", 3); + break; + case 'f': + token.type_ = tokenFalse; + ok = match("alse", 4); + break; + case 'n': + token.type_ = tokenNull; + ok = match("ull", 3); + break; + case 'N': + if (features_.allowSpecialFloats_) { + token.type_ = tokenNaN; + ok = match("aN", 2); + } else { + ok = false; + } + break; + case 'I': + if (features_.allowSpecialFloats_) { + token.type_ = tokenPosInf; + ok = match("nfinity", 7); + } else { + ok = false; + } + break; + case ',': + token.type_ = tokenArraySeparator; + break; + case ':': + token.type_ = tokenMemberSeparator; + break; + case 0: + token.type_ = tokenEndOfStream; + break; + default: + ok = false; + break; + } + if (!ok) + token.type_ = tokenError; + token.end_ = current_; + return true; +} + +void OurReader::skipSpaces() { + while (current_ != end_) { + Char c = *current_; + if (c == ' ' || c == '\t' || c == '\r' || c == '\n') + ++current_; + else + break; + } +} + +bool OurReader::match(Location pattern, int patternLength) { + if (end_ - current_ < patternLength) + return false; + int index = patternLength; + while (index--) + if (current_[index] != pattern[index]) + return false; + current_ += patternLength; + return true; +} + +bool OurReader::readComment() { + Location commentBegin = current_ - 1; + Char c = getNextChar(); + bool successful = false; + if (c == '*') + successful = readCStyleComment(); + else if (c == '/') + successful = readCppStyleComment(); + if (!successful) + return false; + + if (collectComments_) { + CommentPlacement placement = commentBefore; + if (lastValueEnd_ && !containsNewLine(lastValueEnd_, commentBegin)) { + if (c != '*' || !containsNewLine(commentBegin, current_)) + placement = commentAfterOnSameLine; + } + + addComment(commentBegin, current_, placement); + } + return true; +} + +void +OurReader::addComment(Location begin, Location end, CommentPlacement placement) { + assert(collectComments_); + const std::string& normalized = normalizeEOL(begin, end); + if (placement == commentAfterOnSameLine) { + assert(lastValue_ != 0); + lastValue_->setComment(normalized, placement); + } else { + commentsBefore_ += normalized; + } +} + +bool OurReader::readCStyleComment() { + while (current_ != end_) { + Char c = getNextChar(); + if (c == '*' && *current_ == '/') + break; + } + return getNextChar() == '/'; +} + +bool OurReader::readCppStyleComment() { + while (current_ != end_) { + Char c = getNextChar(); + if (c == '\n') + break; + if (c == '\r') { + // Consume DOS EOL. It will be normalized in addComment. + if (current_ != end_ && *current_ == '\n') + getNextChar(); + // Break on Moc OS 9 EOL. + break; + } + } + return true; +} + +bool OurReader::readNumber(bool checkInf) { + const char *p = current_; + if (checkInf && p != end_ && *p == 'I') { + current_ = ++p; + return false; + } + char c = '0'; // stopgap for already consumed character + // integral part + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + // fractional part + if (c == '.') { + c = (current_ = p) < end_ ? *p++ : 0; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + } + // exponential part + if (c == 'e' || c == 'E') { + c = (current_ = p) < end_ ? *p++ : 0; + if (c == '+' || c == '-') + c = (current_ = p) < end_ ? *p++ : 0; + while (c >= '0' && c <= '9') + c = (current_ = p) < end_ ? *p++ : 0; + } + return true; +} +bool OurReader::readString() { + Char c = 0; + while (current_ != end_) { + c = getNextChar(); + if (c == '\\') + getNextChar(); + else if (c == '"') + break; + } + return c == '"'; +} + + +bool OurReader::readStringSingleQuote() { + Char c = 0; + while (current_ != end_) { + c = getNextChar(); + if (c == '\\') + getNextChar(); + else if (c == '\'') + break; + } + return c == '\''; +} + +bool OurReader::readObject(Token& tokenStart) { + Token tokenName; + std::string name; + Value init(objectValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + while (readToken(tokenName)) { + bool initialTokenOk = true; + while (tokenName.type_ == tokenComment && initialTokenOk) + initialTokenOk = readToken(tokenName); + if (!initialTokenOk) + break; + if (tokenName.type_ == tokenObjectEnd && name.empty()) // empty object + return true; + name = ""; + if (tokenName.type_ == tokenString) { + if (!decodeString(tokenName, name)) + return recoverFromError(tokenObjectEnd); + } else if (tokenName.type_ == tokenNumber && features_.allowNumericKeys_) { + Value numberName; + if (!decodeNumber(tokenName, numberName)) + return recoverFromError(tokenObjectEnd); + name = numberName.asString(); + } else { + break; + } + + Token colon; + if (!readToken(colon) || colon.type_ != tokenMemberSeparator) { + return addErrorAndRecover( + "Missing ':' after object member name", colon, tokenObjectEnd); + } + if (name.length() >= (1U<<30)) throwRuntimeError("keylength >= 2^30"); + if (features_.rejectDupKeys_ && currentValue().isMember(name)) { + std::string msg = "Duplicate key: '" + name + "'"; + return addErrorAndRecover( + msg, tokenName, tokenObjectEnd); + } + Value& value = currentValue()[name]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenObjectEnd); + + Token comma; + if (!readToken(comma) || + (comma.type_ != tokenObjectEnd && comma.type_ != tokenArraySeparator && + comma.type_ != tokenComment)) { + return addErrorAndRecover( + "Missing ',' or '}' in object declaration", comma, tokenObjectEnd); + } + bool finalizeTokenOk = true; + while (comma.type_ == tokenComment && finalizeTokenOk) + finalizeTokenOk = readToken(comma); + if (comma.type_ == tokenObjectEnd) + return true; + } + return addErrorAndRecover( + "Missing '}' or object member name", tokenName, tokenObjectEnd); +} + +bool OurReader::readArray(Token& tokenStart) { + Value init(arrayValue); + currentValue().swapPayload(init); + currentValue().setOffsetStart(tokenStart.start_ - begin_); + skipSpaces(); + if (*current_ == ']') // empty array + { + Token endArray; + readToken(endArray); + return true; + } + int index = 0; + for (;;) { + Value& value = currentValue()[index++]; + nodes_.push(&value); + bool ok = readValue(); + nodes_.pop(); + if (!ok) // error already set + return recoverFromError(tokenArrayEnd); + + Token token; + // Accept Comment after last item in the array. + ok = readToken(token); + while (token.type_ == tokenComment && ok) { + ok = readToken(token); + } + bool badTokenType = + (token.type_ != tokenArraySeparator && token.type_ != tokenArrayEnd); + if (!ok || badTokenType) { + return addErrorAndRecover( + "Missing ',' or ']' in array declaration", token, tokenArrayEnd); + } + if (token.type_ == tokenArrayEnd) + break; + } + return true; +} + +bool OurReader::decodeNumber(Token& token) { + Value decoded; + if (!decodeNumber(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool OurReader::decodeNumber(Token& token, Value& decoded) { + // Attempts to parse the number as an integer. If the number is + // larger than the maximum supported value of an integer then + // we decode the number as a double. + Location current = token.start_; + bool isNegative = *current == '-'; + if (isNegative) + ++current; + // TODO: Help the compiler do the div and mod at compile time or get rid of them. + Value::LargestUInt maxIntegerValue = + isNegative ? Value::LargestUInt(-Value::minLargestInt) + : Value::maxLargestUInt; + Value::LargestUInt threshold = maxIntegerValue / 10; + Value::LargestUInt value = 0; + while (current < token.end_) { + Char c = *current++; + if (c < '0' || c > '9') + return decodeDouble(token, decoded); + Value::UInt digit(c - '0'); + if (value >= threshold) { + // We've hit or exceeded the max value divided by 10 (rounded down). If + // a) we've only just touched the limit, b) this is the last digit, and + // c) it's small enough to fit in that rounding delta, we're okay. + // Otherwise treat this number as a double to avoid overflow. + if (value > threshold || current != token.end_ || + digit > maxIntegerValue % 10) { + return decodeDouble(token, decoded); + } + } + value = value * 10 + digit; + } + if (isNegative) + decoded = -Value::LargestInt(value); + else if (value <= Value::LargestUInt(Value::maxInt)) + decoded = Value::LargestInt(value); + else + decoded = value; + return true; +} + +bool OurReader::decodeDouble(Token& token) { + Value decoded; + if (!decodeDouble(token, decoded)) + return false; + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool OurReader::decodeDouble(Token& token, Value& decoded) { + double value = 0; + const int bufferSize = 32; + int count; + int length = int(token.end_ - token.start_); + + // Sanity check to avoid buffer overflow exploits. + if (length < 0) { + return addError("Unable to parse token length", token); + } + + // Avoid using a string constant for the format control string given to + // sscanf, as this can cause hard to debug crashes on OS X. See here for more + // info: + // + // http://developer.apple.com/library/mac/#DOCUMENTATION/DeveloperTools/gcc-4.0.1/gcc/Incompatibilities.html + char format[] = "%lf"; + + if (length <= bufferSize) { + Char buffer[bufferSize + 1]; + memcpy(buffer, token.start_, length); + buffer[length] = 0; + count = sscanf(buffer, format, &value); + } else { + std::string buffer(token.start_, token.end_); + count = sscanf(buffer.c_str(), format, &value); + } + + if (count != 1) + return addError("'" + std::string(token.start_, token.end_) + + "' is not a number.", + token); + decoded = value; + return true; +} + +bool OurReader::decodeString(Token& token) { + std::string decoded_string; + if (!decodeString(token, decoded_string)) + return false; + Value decoded(decoded_string); + currentValue().swapPayload(decoded); + currentValue().setOffsetStart(token.start_ - begin_); + currentValue().setOffsetLimit(token.end_ - begin_); + return true; +} + +bool OurReader::decodeString(Token& token, std::string& decoded) { + decoded.reserve(token.end_ - token.start_ - 2); + Location current = token.start_ + 1; // skip '"' + Location end = token.end_ - 1; // do not include '"' + while (current != end) { + Char c = *current++; + if (c == '"') + break; + else if (c == '\\') { + if (current == end) + return addError("Empty escape sequence in string", token, current); + Char escape = *current++; + switch (escape) { + case '"': + decoded += '"'; + break; + case '/': + decoded += '/'; + break; + case '\\': + decoded += '\\'; + break; + case 'b': + decoded += '\b'; + break; + case 'f': + decoded += '\f'; + break; + case 'n': + decoded += '\n'; + break; + case 'r': + decoded += '\r'; + break; + case 't': + decoded += '\t'; + break; + case 'u': { + unsigned int unicode; + if (!decodeUnicodeCodePoint(token, current, end, unicode)) + return false; + decoded += codePointToUTF8(unicode); + } break; + default: + return addError("Bad escape sequence in string", token, current); + } + } else { + decoded += c; + } + } + return true; +} + +bool OurReader::decodeUnicodeCodePoint(Token& token, + Location& current, + Location end, + unsigned int& unicode) { + + if (!decodeUnicodeEscapeSequence(token, current, end, unicode)) + return false; + if (unicode >= 0xD800 && unicode <= 0xDBFF) { + // surrogate pairs + if (end - current < 6) + return addError( + "additional six characters expected to parse unicode surrogate pair.", + token, + current); + unsigned int surrogatePair; + if (*(current++) == '\\' && *(current++) == 'u') { + if (decodeUnicodeEscapeSequence(token, current, end, surrogatePair)) { + unicode = 0x10000 + ((unicode & 0x3FF) << 10) + (surrogatePair & 0x3FF); + } else + return false; + } else + return addError("expecting another \\u token to begin the second half of " + "a unicode surrogate pair", + token, + current); + } + return true; +} + +bool OurReader::decodeUnicodeEscapeSequence(Token& token, + Location& current, + Location end, + unsigned int& unicode) { + if (end - current < 4) + return addError( + "Bad unicode escape sequence in string: four digits expected.", + token, + current); + unicode = 0; + for (int index = 0; index < 4; ++index) { + Char c = *current++; + unicode *= 16; + if (c >= '0' && c <= '9') + unicode += c - '0'; + else if (c >= 'a' && c <= 'f') + unicode += c - 'a' + 10; + else if (c >= 'A' && c <= 'F') + unicode += c - 'A' + 10; + else + return addError( + "Bad unicode escape sequence in string: hexadecimal digit expected.", + token, + current); + } + return true; +} + +bool +OurReader::addError(const std::string& message, Token& token, Location extra) { + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = extra; + errors_.push_back(info); + return false; +} + +bool OurReader::recoverFromError(TokenType skipUntilToken) { + int errorCount = int(errors_.size()); + Token skip; + for (;;) { + if (!readToken(skip)) + errors_.resize(errorCount); // discard errors caused by recovery + if (skip.type_ == skipUntilToken || skip.type_ == tokenEndOfStream) + break; + } + errors_.resize(errorCount); + return false; +} + +bool OurReader::addErrorAndRecover(const std::string& message, + Token& token, + TokenType skipUntilToken) { + addError(message, token); + return recoverFromError(skipUntilToken); +} + +Value& OurReader::currentValue() { return *(nodes_.top()); } + +OurReader::Char OurReader::getNextChar() { + if (current_ == end_) + return 0; + return *current_++; +} + +void OurReader::getLocationLineAndColumn(Location location, + int& line, + int& column) const { + Location current = begin_; + Location lastLineStart = current; + line = 0; + while (current < location && current != end_) { + Char c = *current++; + if (c == '\r') { + if (*current == '\n') + ++current; + lastLineStart = current; + ++line; + } else if (c == '\n') { + lastLineStart = current; + ++line; + } + } + // column & line start at 1 + column = int(location - lastLineStart) + 1; + ++line; +} + +std::string OurReader::getLocationLineAndColumn(Location location) const { + int line, column; + getLocationLineAndColumn(location, line, column); + char buffer[18 + 16 + 16 + 1]; + snprintf(buffer, sizeof(buffer), "Line %d, Column %d", line, column); + return buffer; +} + +std::string OurReader::getFormattedErrorMessages() const { + std::string formattedMessage; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + formattedMessage += + "* " + getLocationLineAndColumn(error.token_.start_) + "\n"; + formattedMessage += " " + error.message_ + "\n"; + if (error.extra_) + formattedMessage += + "See " + getLocationLineAndColumn(error.extra_) + " for detail.\n"; + } + return formattedMessage; +} + +std::vector<OurReader::StructuredError> OurReader::getStructuredErrors() const { + std::vector<OurReader::StructuredError> allErrors; + for (Errors::const_iterator itError = errors_.begin(); + itError != errors_.end(); + ++itError) { + const ErrorInfo& error = *itError; + OurReader::StructuredError structured; + structured.offset_start = error.token_.start_ - begin_; + structured.offset_limit = error.token_.end_ - begin_; + structured.message = error.message_; + allErrors.push_back(structured); + } + return allErrors; +} + +bool OurReader::pushError(const Value& value, const std::string& message) { + size_t length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = end_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = 0; + errors_.push_back(info); + return true; +} + +bool OurReader::pushError(const Value& value, const std::string& message, const Value& extra) { + size_t length = end_ - begin_; + if(value.getOffsetStart() > length + || value.getOffsetLimit() > length + || extra.getOffsetLimit() > length) + return false; + Token token; + token.type_ = tokenError; + token.start_ = begin_ + value.getOffsetStart(); + token.end_ = begin_ + value.getOffsetLimit(); + ErrorInfo info; + info.token_ = token; + info.message_ = message; + info.extra_ = begin_ + extra.getOffsetStart(); + errors_.push_back(info); + return true; +} + +bool OurReader::good() const { + return !errors_.size(); +} + + +class OurCharReader : public CharReader { + bool const collectComments_; + OurReader reader_; +public: + OurCharReader( + bool collectComments, + OurFeatures const& features) + : collectComments_(collectComments) + , reader_(features) + {} + bool parse( + char const* beginDoc, char const* endDoc, + Value* root, std::string* errs) override { + bool ok = reader_.parse(beginDoc, endDoc, *root, collectComments_); + if (errs) { + *errs = reader_.getFormattedErrorMessages(); + } + return ok; + } +}; + +CharReaderBuilder::CharReaderBuilder() +{ + setDefaults(&settings_); +} +CharReaderBuilder::~CharReaderBuilder() +{} +CharReader* CharReaderBuilder::newCharReader() const +{ + bool collectComments = settings_["collectComments"].asBool(); + OurFeatures features = OurFeatures::all(); + features.allowComments_ = settings_["allowComments"].asBool(); + features.strictRoot_ = settings_["strictRoot"].asBool(); + features.allowDroppedNullPlaceholders_ = settings_["allowDroppedNullPlaceholders"].asBool(); + features.allowNumericKeys_ = settings_["allowNumericKeys"].asBool(); + features.allowSingleQuotes_ = settings_["allowSingleQuotes"].asBool(); + features.stackLimit_ = settings_["stackLimit"].asInt(); + features.failIfExtra_ = settings_["failIfExtra"].asBool(); + features.rejectDupKeys_ = settings_["rejectDupKeys"].asBool(); + features.allowSpecialFloats_ = settings_["allowSpecialFloats"].asBool(); + return new OurCharReader(collectComments, features); +} +static void getValidReaderKeys(std::set<std::string>* valid_keys) +{ + valid_keys->clear(); + valid_keys->insert("collectComments"); + valid_keys->insert("allowComments"); + valid_keys->insert("strictRoot"); + valid_keys->insert("allowDroppedNullPlaceholders"); + valid_keys->insert("allowNumericKeys"); + valid_keys->insert("allowSingleQuotes"); + valid_keys->insert("stackLimit"); + valid_keys->insert("failIfExtra"); + valid_keys->insert("rejectDupKeys"); + valid_keys->insert("allowSpecialFloats"); +} +bool CharReaderBuilder::validate(Json::Value* invalid) const +{ + Json::Value my_invalid; + if (!invalid) invalid = &my_invalid; // so we do not need to test for NULL + Json::Value& inv = *invalid; + std::set<std::string> valid_keys; + getValidReaderKeys(&valid_keys); + Value::Members keys = settings_.getMemberNames(); + size_t n = keys.size(); + for (size_t i = 0; i < n; ++i) { + std::string const& key = keys[i]; + if (valid_keys.find(key) == valid_keys.end()) { + inv[key] = settings_[key]; + } + } + return 0u == inv.size(); +} +Value& CharReaderBuilder::operator[](std::string key) +{ + return settings_[key]; +} +// static +void CharReaderBuilder::strictMode(Json::Value* settings) +{ +//! [CharReaderBuilderStrictMode] + (*settings)["allowComments"] = false; + (*settings)["strictRoot"] = true; + (*settings)["allowDroppedNullPlaceholders"] = false; + (*settings)["allowNumericKeys"] = false; + (*settings)["allowSingleQuotes"] = false; + (*settings)["stackLimit"] = 1000; + (*settings)["failIfExtra"] = true; + (*settings)["rejectDupKeys"] = true; + (*settings)["allowSpecialFloats"] = false; +//! [CharReaderBuilderStrictMode] +} +// static +void CharReaderBuilder::setDefaults(Json::Value* settings) +{ +//! [CharReaderBuilderDefaults] + (*settings)["collectComments"] = true; + (*settings)["allowComments"] = true; + (*settings)["strictRoot"] = false; + (*settings)["allowDroppedNullPlaceholders"] = false; + (*settings)["allowNumericKeys"] = false; + (*settings)["allowSingleQuotes"] = false; + (*settings)["stackLimit"] = 1000; + (*settings)["failIfExtra"] = false; + (*settings)["rejectDupKeys"] = false; + (*settings)["allowSpecialFloats"] = false; +//! [CharReaderBuilderDefaults] +} + +////////////////////////////////// +// global functions + +bool parseFromStream( + CharReader::Factory const& fact, std::istream& sin, + Value* root, std::string* errs) +{ + std::ostringstream ssin; + ssin << sin.rdbuf(); + std::string doc = ssin.str(); + char const* begin = doc.data(); + char const* end = begin + doc.size(); + // Note that we do not actually need a null-terminator. + CharReaderPtr const reader(fact.newCharReader()); + return reader->parse(begin, end, root, errs); +} + +std::istream& operator>>(std::istream& sin, Value& root) { + CharReaderBuilder b; + std::string errs; + bool ok = parseFromStream(b, sin, &root, &errs); + if (!ok) { + fprintf(stderr, + "Error from reader: %s", + errs.c_str()); + + throwRuntimeError(errs); + } + return sin; +} + +} // namespace Json diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_tool.h b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_tool.h new file mode 100755 index 0000000..e65e51b --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_tool.h @@ -0,0 +1,87 @@ +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#ifndef LIB_JSONCPP_JSON_TOOL_H_INCLUDED +#define LIB_JSONCPP_JSON_TOOL_H_INCLUDED + +/* This header provides common string manipulation support, such as UTF-8, + * portable conversion from/to string... + * + * It is an internal header that must not be exposed. + */ + +namespace Json { + +/// Converts a unicode code-point to UTF-8. +static inline std::string codePointToUTF8(unsigned int cp) { + std::string result; + + // based on description from http://en.wikipedia.org/wiki/UTF-8 + + if (cp <= 0x7f) { + result.resize(1); + result[0] = static_cast<char>(cp); + } else if (cp <= 0x7FF) { + result.resize(2); + result[1] = static_cast<char>(0x80 | (0x3f & cp)); + result[0] = static_cast<char>(0xC0 | (0x1f & (cp >> 6))); + } else if (cp <= 0xFFFF) { + result.resize(3); + result[2] = static_cast<char>(0x80 | (0x3f & cp)); + result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 6))); + result[0] = static_cast<char>(0xE0 | (0xf & (cp >> 12))); + } else if (cp <= 0x10FFFF) { + result.resize(4); + result[3] = static_cast<char>(0x80 | (0x3f & cp)); + result[2] = static_cast<char>(0x80 | (0x3f & (cp >> 6))); + result[1] = static_cast<char>(0x80 | (0x3f & (cp >> 12))); + result[0] = static_cast<char>(0xF0 | (0x7 & (cp >> 18))); + } + + return result; +} + +/// Returns true if ch is a control character (in range [1,31]). +static inline bool isControlCharacter(char ch) { return ch > 0 && ch <= 0x1F; } + +enum { + /// Constant that specify the size of the buffer that must be passed to + /// uintToString. + uintToStringBufferSize = 3 * sizeof(LargestUInt) + 1 +}; + +// Defines a char buffer for use with uintToString(). +typedef char UIntToStringBuffer[uintToStringBufferSize]; + +/** Converts an unsigned integer to string. + * @param value Unsigned interger to convert to string + * @param current Input/Output string buffer. + * Must have at least uintToStringBufferSize chars free. + */ +static inline void uintToString(LargestUInt value, char*& current) { + *--current = 0; + do { + *--current = static_cast<signed char>(value % 10U + static_cast<unsigned>('0')); + value /= 10; + } while (value != 0); +} + +/** Change ',' to '.' everywhere in buffer. + * + * We had a sophisticated way, but it did not work in WinCE. + * @see https://github.com/open-source-parsers/jsoncpp/pull/9 + */ +static inline void fixNumericLocale(char* begin, char* end) { + while (begin < end) { + if (*begin == ',') { + *begin = '.'; + } + ++begin; + } +} + +} // namespace Json { + +#endif // LIB_JSONCPP_JSON_TOOL_H_INCLUDED diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_value.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_value.cpp new file mode 100755 index 0000000..616c809 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_value.cpp @@ -0,0 +1,1541 @@ +// Copyright 2011 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#if !defined(JSON_IS_AMALGAMATION) +#include "../include/assertions.h" +#include "../include/value.h" +#include "../include/writer.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <math.h> +#include <sstream> +#include <utility> +#include <cstring> +#include <cassert> +#ifdef JSON_USE_CPPTL +#include <cpptl/conststring.h> +#endif +#include <cstddef> // size_t +#include <algorithm> // min() + +#define JSON_ASSERT_UNREACHABLE assert(false) + +namespace Json { + +// This is a walkaround to avoid the static initialization of Value::null. +// kNull must be word-aligned to avoid crashing on ARM. We use an alignment of +// 8 (instead of 4) as a bit of future-proofing. +#if defined(__ARMEL__) +#define ALIGNAS(byte_alignment) __attribute__((aligned(byte_alignment))) +#else +#define ALIGNAS(byte_alignment) +#endif +static const unsigned char ALIGNAS(8) kNull[sizeof(Value)] = { 0 }; +const unsigned char& kNullRef = kNull[0]; +const Value& Value::null = reinterpret_cast<const Value&>(kNullRef); +const Value& Value::nullRef = null; + +const Int Value::minInt = Int(~(UInt(-1) / 2)); +const Int Value::maxInt = Int(UInt(-1) / 2); +const UInt Value::maxUInt = UInt(-1); +#if defined(JSON_HAS_INT64) +const Int64 Value::minInt64 = Int64(~(UInt64(-1) / 2)); +const Int64 Value::maxInt64 = Int64(UInt64(-1) / 2); +const UInt64 Value::maxUInt64 = UInt64(-1); +// The constant is hard-coded because some compiler have trouble +// converting Value::maxUInt64 to a double correctly (AIX/xlC). +// Assumes that UInt64 is a 64 bits integer. +static const double maxUInt64AsDouble = 18446744073709551615.0; +#endif // defined(JSON_HAS_INT64) +const LargestInt Value::minLargestInt = LargestInt(~(LargestUInt(-1) / 2)); +const LargestInt Value::maxLargestInt = LargestInt(LargestUInt(-1) / 2); +const LargestUInt Value::maxLargestUInt = LargestUInt(-1); + +#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) +template <typename T, typename U> +static inline bool InRange(double d, T min, U max) { + return d >= min && d <= max; +} +#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) +static inline double integerToDouble(Json::UInt64 value) { + return static_cast<double>(Int64(value / 2)) * 2.0 + Int64(value & 1); +} + +template <typename T> static inline double integerToDouble(T value) { + return static_cast<double>(value); +} + +template <typename T, typename U> +static inline bool InRange(double d, T min, U max) { + return d >= integerToDouble(min) && d <= integerToDouble(max); +} +#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + +/** Duplicates the specified string value. + * @param value Pointer to the string to duplicate. Must be zero-terminated if + * length is "unknown". + * @param length Length of the value. if equals to unknown, then it will be + * computed using strlen(value). + * @return Pointer on the duplicate instance of string. + */ +static inline char* duplicateStringValue(const char* value, + size_t length) { + // Avoid an integer overflow in the call to malloc below by limiting length + // to a sane value. + if (length >= (size_t)Value::maxInt) + length = Value::maxInt - 1; + + char* newString = static_cast<char*>(malloc(length + 1)); + if (newString == NULL) { + throwRuntimeError( + "in Json::Value::duplicateStringValue(): " + "Failed to allocate string value buffer"); + } + memcpy(newString, value, length); + newString[length] = 0; + return newString; +} + +/* Record the length as a prefix. + */ +static inline char* duplicateAndPrefixStringValue( + const char* value, + unsigned int length) +{ + // Avoid an integer overflow in the call to malloc below by limiting length + // to a sane value. + JSON_ASSERT_MESSAGE(length <= (unsigned)Value::maxInt - sizeof(unsigned) - 1U, + "in Json::Value::duplicateAndPrefixStringValue(): " + "length too big for prefixing"); + unsigned actualLength = length + static_cast<unsigned>(sizeof(unsigned)) + 1U; + char* newString = static_cast<char*>(malloc(actualLength)); + if (newString == 0) { + throwRuntimeError( + "in Json::Value::duplicateAndPrefixStringValue(): " + "Failed to allocate string value buffer"); + } + *reinterpret_cast<unsigned*>(newString) = length; + memcpy(newString + sizeof(unsigned), value, length); + newString[actualLength - 1U] = 0; // to avoid buffer over-run accidents by users later + return newString; +} +inline static void decodePrefixedString( + bool isPrefixed, char const* prefixed, + unsigned* length, char const** value) +{ + if (!isPrefixed) { + *length = static_cast<unsigned>(strlen(prefixed)); + *value = prefixed; + } else { + *length = *reinterpret_cast<unsigned const*>(prefixed); + *value = prefixed + sizeof(unsigned); + } +} +/** Free the string duplicated by duplicateStringValue()/duplicateAndPrefixStringValue(). + */ +static inline void releaseStringValue(char* value) { free(value); } + +} // namespace Json + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ValueInternals... +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +#if !defined(JSON_IS_AMALGAMATION) + +#include "json_valueiterator.inl" +#endif // if !defined(JSON_IS_AMALGAMATION) + +namespace Json { + +Exception::Exception(std::string const& msg) + : msg_(msg) +{} +Exception::~Exception() throw() +{} +char const* Exception::what() const throw() +{ + return msg_.c_str(); +} +RuntimeError::RuntimeError(std::string const& msg) + : Exception(msg) +{} +LogicError::LogicError(std::string const& msg) + : Exception(msg) +{} +void throwRuntimeError(std::string const& msg) +{ + throw RuntimeError(msg); +} +void throwLogicError(std::string const& msg) +{ + throw LogicError(msg); +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class Value::CommentInfo +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +Value::CommentInfo::CommentInfo() : comment_(0) {} + +Value::CommentInfo::~CommentInfo() { + if (comment_) + releaseStringValue(comment_); +} + +void Value::CommentInfo::setComment(const char* text, size_t len) { + if (comment_) { + releaseStringValue(comment_); + comment_ = 0; + } + JSON_ASSERT(text != 0); + JSON_ASSERT_MESSAGE( + text[0] == '\0' || text[0] == '/', + "in Json::Value::setComment(): Comments must start with /"); + // It seems that /**/ style comments are acceptable as well. + comment_ = duplicateStringValue(text, len); +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class Value::CZString +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +// Notes: policy_ indicates if the string was allocated when +// a string is stored. + +Value::CZString::CZString(ArrayIndex aindex) : cstr_(0), index_(aindex) {} + +Value::CZString::CZString(char const* str, unsigned ulength, DuplicationPolicy allocate) + : cstr_(str) { + // allocate != duplicate + storage_.policy_ = allocate & 0x3; + storage_.length_ = ulength & 0x3FFFFFFF; +} + +Value::CZString::CZString(const CZString& other) + : cstr_(other.storage_.policy_ != noDuplication && other.cstr_ != 0 + ? duplicateStringValue(other.cstr_, other.storage_.length_) + : other.cstr_) { + storage_.policy_ = (other.cstr_ + ? (static_cast<DuplicationPolicy>(other.storage_.policy_) == noDuplication + ? noDuplication : duplicate) + : static_cast<DuplicationPolicy>(other.storage_.policy_)); + storage_.length_ = other.storage_.length_; +} + +#if JSON_HAS_RVALUE_REFERENCES +Value::CZString::CZString(CZString&& other) + : cstr_(other.cstr_), index_(other.index_) { + other.cstr_ = nullptr; +} +#endif + +Value::CZString::~CZString() { + if (cstr_ && storage_.policy_ == duplicate) + releaseStringValue(const_cast<char*>(cstr_)); +} + +void Value::CZString::swap(CZString& other) { + std::swap(cstr_, other.cstr_); + std::swap(index_, other.index_); +} + +Value::CZString& Value::CZString::operator=(CZString other) { + swap(other); + return *this; +} + +bool Value::CZString::operator<(const CZString& other) const { + if (!cstr_) return index_ < other.index_; + //return strcmp(cstr_, other.cstr_) < 0; + // Assume both are strings. + unsigned this_len = this->storage_.length_; + unsigned other_len = other.storage_.length_; + unsigned min_len = std::min(this_len, other_len); + int comp = memcmp(this->cstr_, other.cstr_, min_len); + if (comp < 0) return true; + if (comp > 0) return false; + return (this_len < other_len); +} + +bool Value::CZString::operator==(const CZString& other) const { + if (!cstr_) return index_ == other.index_; + //return strcmp(cstr_, other.cstr_) == 0; + // Assume both are strings. + unsigned this_len = this->storage_.length_; + unsigned other_len = other.storage_.length_; + if (this_len != other_len) return false; + int comp = memcmp(this->cstr_, other.cstr_, this_len); + return comp == 0; +} + +ArrayIndex Value::CZString::index() const { return index_; } + +//const char* Value::CZString::c_str() const { return cstr_; } +const char* Value::CZString::data() const { return cstr_; } +unsigned Value::CZString::length() const { return storage_.length_; } +bool Value::CZString::isStaticString() const { return storage_.policy_ == noDuplication; } + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class Value::Value +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +/*! \internal Default constructor initialization must be equivalent to: + * memset( this, 0, sizeof(Value) ) + * This optimization is used in ValueInternalMap fast allocator. + */ +Value::Value(ValueType vtype) { + initBasic(vtype); + switch (vtype) { + case nullValue: + break; + case intValue: + case uintValue: + value_.int_ = 0; + break; + case realValue: + value_.real_ = 0.0; + break; + case stringValue: + value_.string_ = 0; + break; + case arrayValue: + case objectValue: + value_.map_ = new ObjectValues(); + break; + case booleanValue: + value_.bool_ = false; + break; + default: + JSON_ASSERT_UNREACHABLE; + } +} + +Value::Value(Int value) { + initBasic(intValue); + value_.int_ = value; +} + +Value::Value(UInt value) { + initBasic(uintValue); + value_.uint_ = value; +} +#if defined(JSON_HAS_INT64) +Value::Value(Int64 value) { + initBasic(intValue); + value_.int_ = value; +} +Value::Value(UInt64 value) { + initBasic(uintValue); + value_.uint_ = value; +} +#endif // defined(JSON_HAS_INT64) + +Value::Value(double value) { + initBasic(realValue); + value_.real_ = value; +} + +Value::Value(const char* value) { + initBasic(stringValue, true); + value_.string_ = duplicateAndPrefixStringValue(value, static_cast<unsigned>(strlen(value))); +} + +Value::Value(const char* beginValue, const char* endValue) { + initBasic(stringValue, true); + value_.string_ = + duplicateAndPrefixStringValue(beginValue, static_cast<unsigned>(endValue - beginValue)); +} + +Value::Value(const std::string& value) { + initBasic(stringValue, true); + value_.string_ = + duplicateAndPrefixStringValue(value.data(), static_cast<unsigned>(value.length())); +} + +Value::Value(const StaticString& value) { + initBasic(stringValue); + value_.string_ = const_cast<char*>(value.c_str()); +} + +#ifdef JSON_USE_CPPTL +Value::Value(const CppTL::ConstString& value) { + initBasic(stringValue, true); + value_.string_ = duplicateAndPrefixStringValue(value, static_cast<unsigned>(value.length())); +} +#endif + +Value::Value(bool value) { + initBasic(booleanValue); + value_.bool_ = value; +} + +Value::Value(Value const& other) + : type_(other.type_), allocated_(false) + , + comments_(0), start_(other.start_), limit_(other.limit_) +{ + switch (type_) { + case nullValue: + case intValue: + case uintValue: + case realValue: + case booleanValue: + value_ = other.value_; + break; + case stringValue: + if (other.value_.string_ && other.allocated_) { + unsigned len; + char const* str; + decodePrefixedString(other.allocated_, other.value_.string_, + &len, &str); + value_.string_ = duplicateAndPrefixStringValue(str, len); + allocated_ = true; + } else { + value_.string_ = other.value_.string_; + allocated_ = false; + } + break; + case arrayValue: + case objectValue: + value_.map_ = new ObjectValues(*other.value_.map_); + break; + default: + JSON_ASSERT_UNREACHABLE; + } + if (other.comments_) { + comments_ = new CommentInfo[numberOfCommentPlacement]; + for (int comment = 0; comment < numberOfCommentPlacement; ++comment) { + const CommentInfo& otherComment = other.comments_[comment]; + if (otherComment.comment_) + comments_[comment].setComment( + otherComment.comment_, strlen(otherComment.comment_)); + } + } +} + +#if JSON_HAS_RVALUE_REFERENCES +// Move constructor +Value::Value(Value&& other) { + initBasic(nullValue); + swap(other); +} +#endif + +Value::~Value() { + switch (type_) { + case nullValue: + case intValue: + case uintValue: + case realValue: + case booleanValue: + break; + case stringValue: + if (allocated_) + releaseStringValue(value_.string_); + break; + case arrayValue: + case objectValue: + delete value_.map_; + break; + default: + JSON_ASSERT_UNREACHABLE; + } + + if (comments_) + delete[] comments_; +} + +Value& Value::operator=(Value other) { + swap(other); + return *this; +} + +void Value::swapPayload(Value& other) { + ValueType temp = type_; + type_ = other.type_; + other.type_ = temp; + std::swap(value_, other.value_); + int temp2 = allocated_; + allocated_ = other.allocated_; + other.allocated_ = temp2 & 0x1; +} + +void Value::swap(Value& other) { + swapPayload(other); + std::swap(comments_, other.comments_); + std::swap(start_, other.start_); + std::swap(limit_, other.limit_); +} + +ValueType Value::type() const { return type_; } + +int Value::compare(const Value& other) const { + if (*this < other) + return -1; + if (*this > other) + return 1; + return 0; +} + +bool Value::operator<(const Value& other) const { + int typeDelta = type_ - other.type_; + if (typeDelta) + return typeDelta < 0 ? true : false; + switch (type_) { + case nullValue: + return false; + case intValue: + return value_.int_ < other.value_.int_; + case uintValue: + return value_.uint_ < other.value_.uint_; + case realValue: + return value_.real_ < other.value_.real_; + case booleanValue: + return value_.bool_ < other.value_.bool_; + case stringValue: + { + if ((value_.string_ == 0) || (other.value_.string_ == 0)) { + if (other.value_.string_) return true; + else return false; + } + unsigned this_len; + unsigned other_len; + char const* this_str; + char const* other_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str); + unsigned min_len = std::min(this_len, other_len); + int comp = memcmp(this_str, other_str, min_len); + if (comp < 0) return true; + if (comp > 0) return false; + return (this_len < other_len); + } + case arrayValue: + case objectValue: { + int delta = int(value_.map_->size() - other.value_.map_->size()); + if (delta) + return delta < 0; + return (*value_.map_) < (*other.value_.map_); + } + default: + JSON_ASSERT_UNREACHABLE; + } + return false; // unreachable +} + +bool Value::operator<=(const Value& other) const { return !(other < *this); } + +bool Value::operator>=(const Value& other) const { return !(*this < other); } + +bool Value::operator>(const Value& other) const { return other < *this; } + +bool Value::operator==(const Value& other) const { + // if ( type_ != other.type_ ) + // GCC 2.95.3 says: + // attempt to take address of bit-field structure member `Json::Value::type_' + // Beats me, but a temp solves the problem. + int temp = other.type_; + if (type_ != temp) + return false; + switch (type_) { + case nullValue: + return true; + case intValue: + return value_.int_ == other.value_.int_; + case uintValue: + return value_.uint_ == other.value_.uint_; + case realValue: + return value_.real_ == other.value_.real_; + case booleanValue: + return value_.bool_ == other.value_.bool_; + case stringValue: + { + if ((value_.string_ == 0) || (other.value_.string_ == 0)) { + return (value_.string_ == other.value_.string_); + } + unsigned this_len; + unsigned other_len; + char const* this_str; + char const* other_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + decodePrefixedString(other.allocated_, other.value_.string_, &other_len, &other_str); + if (this_len != other_len) return false; + int comp = memcmp(this_str, other_str, this_len); + return comp == 0; + } + case arrayValue: + case objectValue: + return value_.map_->size() == other.value_.map_->size() && + (*value_.map_) == (*other.value_.map_); + default: + JSON_ASSERT_UNREACHABLE; + } + return false; // unreachable +} + +bool Value::operator!=(const Value& other) const { return !(*this == other); } + +const char* Value::asCString() const { + JSON_ASSERT_MESSAGE(type_ == stringValue, + "in Json::Value::asCString(): requires stringValue"); + if (value_.string_ == 0) return 0; + unsigned this_len; + char const* this_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + return this_str; +} + +bool Value::getString(char const** str, char const** cend) const { + if (type_ != stringValue) return false; + if (value_.string_ == 0) return false; + unsigned length; + decodePrefixedString(this->allocated_, this->value_.string_, &length, str); + *cend = *str + length; + return true; +} + +std::string Value::asString() const { + switch (type_) { + case nullValue: + return ""; + case stringValue: + { + if (value_.string_ == 0) return ""; + unsigned this_len; + char const* this_str; + decodePrefixedString(this->allocated_, this->value_.string_, &this_len, &this_str); + return std::string(this_str, this_len); + } + case booleanValue: + return value_.bool_ ? "true" : "false"; + case intValue: + return valueToString(value_.int_); + case uintValue: + return valueToString(value_.uint_); + case realValue: + return valueToString(value_.real_); + default: + JSON_FAIL_MESSAGE("Type is not convertible to string"); + } +} + +#ifdef JSON_USE_CPPTL +CppTL::ConstString Value::asConstString() const { + unsigned len; + char const* str; + decodePrefixedString(allocated_, value_.string_, + &len, &str); + return CppTL::ConstString(str, len); +} +#endif + +Value::Int Value::asInt() const { + switch (type_) { + case intValue: + JSON_ASSERT_MESSAGE(isInt(), "LargestInt out of Int range"); + return Int(value_.int_); + case uintValue: + JSON_ASSERT_MESSAGE(isInt(), "LargestUInt out of Int range"); + return Int(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt, maxInt), + "double out of Int range"); + return Int(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to Int."); +} + +Value::UInt Value::asUInt() const { + switch (type_) { + case intValue: + JSON_ASSERT_MESSAGE(isUInt(), "LargestInt out of UInt range"); + return UInt(value_.int_); + case uintValue: + JSON_ASSERT_MESSAGE(isUInt(), "LargestUInt out of UInt range"); + return UInt(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt), + "double out of UInt range"); + return UInt(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to UInt."); +} + +#if defined(JSON_HAS_INT64) + +Value::Int64 Value::asInt64() const { + switch (type_) { + case intValue: + return Int64(value_.int_); + case uintValue: + JSON_ASSERT_MESSAGE(isInt64(), "LargestUInt out of Int64 range"); + return Int64(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, minInt64, maxInt64), + "double out of Int64 range"); + return Int64(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to Int64."); +} + +Value::UInt64 Value::asUInt64() const { + switch (type_) { + case intValue: + JSON_ASSERT_MESSAGE(isUInt64(), "LargestInt out of UInt64 range"); + return UInt64(value_.int_); + case uintValue: + return UInt64(value_.uint_); + case realValue: + JSON_ASSERT_MESSAGE(InRange(value_.real_, 0, maxUInt64), + "double out of UInt64 range"); + return UInt64(value_.real_); + case nullValue: + return 0; + case booleanValue: + return value_.bool_ ? 1 : 0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to UInt64."); +} +#endif // if defined(JSON_HAS_INT64) + +LargestInt Value::asLargestInt() const { +#if defined(JSON_NO_INT64) + return asInt(); +#else + return asInt64(); +#endif +} + +LargestUInt Value::asLargestUInt() const { +#if defined(JSON_NO_INT64) + return asUInt(); +#else + return asUInt64(); +#endif +} + +double Value::asDouble() const { + switch (type_) { + case intValue: + return static_cast<double>(value_.int_); + case uintValue: +#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return static_cast<double>(value_.uint_); +#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return integerToDouble(value_.uint_); +#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + case realValue: + return value_.real_; + case nullValue: + return 0.0; + case booleanValue: + return value_.bool_ ? 1.0 : 0.0; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to double."); +} + +float Value::asFloat() const { + switch (type_) { + case intValue: + return static_cast<float>(value_.int_); + case uintValue: +#if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return static_cast<float>(value_.uint_); +#else // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + return integerToDouble(value_.uint_); +#endif // if !defined(JSON_USE_INT64_DOUBLE_CONVERSION) + case realValue: + return static_cast<float>(value_.real_); + case nullValue: + return 0.0; + case booleanValue: + return value_.bool_ ? 1.0f : 0.0f; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to float."); +} + +bool Value::asBool() const { + switch (type_) { + case booleanValue: + return value_.bool_; + case nullValue: + return false; + case intValue: + return value_.int_ ? true : false; + case uintValue: + return value_.uint_ ? true : false; + case realValue: + // This is kind of strange. Not recommended. + return (value_.real_ != 0.0) ? true : false; + default: + break; + } + JSON_FAIL_MESSAGE("Value is not convertible to bool."); +} + +bool Value::isConvertibleTo(ValueType other) const { + switch (other) { + case nullValue: + return (isNumeric() && asDouble() == 0.0) || + (type_ == booleanValue && value_.bool_ == false) || + (type_ == stringValue && asString() == "") || + (type_ == arrayValue && value_.map_->size() == 0) || + (type_ == objectValue && value_.map_->size() == 0) || + type_ == nullValue; + case intValue: + return isInt() || + (type_ == realValue && InRange(value_.real_, minInt, maxInt)) || + type_ == booleanValue || type_ == nullValue; + case uintValue: + return isUInt() || + (type_ == realValue && InRange(value_.real_, 0, maxUInt)) || + type_ == booleanValue || type_ == nullValue; + case realValue: + return isNumeric() || type_ == booleanValue || type_ == nullValue; + case booleanValue: + return isNumeric() || type_ == booleanValue || type_ == nullValue; + case stringValue: + return isNumeric() || type_ == booleanValue || type_ == stringValue || + type_ == nullValue; + case arrayValue: + return type_ == arrayValue || type_ == nullValue; + case objectValue: + return type_ == objectValue || type_ == nullValue; + } + JSON_ASSERT_UNREACHABLE; + return false; +} + +/// Number of values in array or object +ArrayIndex Value::size() const { + switch (type_) { + case nullValue: + case intValue: + case uintValue: + case realValue: + case booleanValue: + case stringValue: + return 0; + case arrayValue: // size of the array is highest index + 1 + if (!value_.map_->empty()) { + ObjectValues::const_iterator itLast = value_.map_->end(); + --itLast; + return (*itLast).first.index() + 1; + } + return 0; + case objectValue: + return ArrayIndex(value_.map_->size()); + } + JSON_ASSERT_UNREACHABLE; + return 0; // unreachable; +} + +bool Value::empty() const { + if (isNull() || isArray() || isObject()) + return size() == 0u; + else + return false; +} + +bool Value::operator!() const { return isNull(); } + +void Value::clear() { + JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue || + type_ == objectValue, + "in Json::Value::clear(): requires complex value"); + start_ = 0; + limit_ = 0; + switch (type_) { + case arrayValue: + case objectValue: + value_.map_->clear(); + break; + default: + break; + } +} + +void Value::resize(ArrayIndex newSize) { + JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == arrayValue, + "in Json::Value::resize(): requires arrayValue"); + if (type_ == nullValue) + *this = Value(arrayValue); + ArrayIndex oldSize = size(); + if (newSize == 0) + clear(); + else if (newSize > oldSize) + (*this)[newSize - 1]; + else { + for (ArrayIndex index = newSize; index < oldSize; ++index) { + value_.map_->erase(index); + } + assert(size() == newSize); + } +} + +Value& Value::operator[](ArrayIndex index) { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == arrayValue, + "in Json::Value::operator[](ArrayIndex): requires arrayValue"); + if (type_ == nullValue) + *this = Value(arrayValue); + CZString key(index); + ObjectValues::iterator it = value_.map_->lower_bound(key); + if (it != value_.map_->end() && (*it).first == key) + return (*it).second; + + ObjectValues::value_type defaultValue(key, nullRef); + it = value_.map_->insert(it, defaultValue); + return (*it).second; +} + +Value& Value::operator[](int index) { + JSON_ASSERT_MESSAGE( + index >= 0, + "in Json::Value::operator[](int index): index cannot be negative"); + return (*this)[ArrayIndex(index)]; +} + +const Value& Value::operator[](ArrayIndex index) const { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == arrayValue, + "in Json::Value::operator[](ArrayIndex)const: requires arrayValue"); + if (type_ == nullValue) + return nullRef; + CZString key(index); + ObjectValues::const_iterator it = value_.map_->find(key); + if (it == value_.map_->end()) + return nullRef; + return (*it).second; +} + +const Value& Value::operator[](int index) const { + JSON_ASSERT_MESSAGE( + index >= 0, + "in Json::Value::operator[](int index) const: index cannot be negative"); + return (*this)[ArrayIndex(index)]; +} + +void Value::initBasic(ValueType vtype, bool allocated) { + type_ = vtype; + allocated_ = allocated; + comments_ = 0; + start_ = 0; + limit_ = 0; +} + +// Access an object value by name, create a null member if it does not exist. +// @pre Type of '*this' is object or null. +// @param key is null-terminated. +Value& Value::resolveReference(const char* key) { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::resolveReference(): requires objectValue"); + if (type_ == nullValue) + *this = Value(objectValue); + CZString actualKey( + key, static_cast<unsigned>(strlen(key)), CZString::noDuplication); // NOTE! + ObjectValues::iterator it = value_.map_->lower_bound(actualKey); + if (it != value_.map_->end() && (*it).first == actualKey) + return (*it).second; + + ObjectValues::value_type defaultValue(actualKey, nullRef); + it = value_.map_->insert(it, defaultValue); + Value& value = (*it).second; + return value; +} + +// @param key is not null-terminated. +Value& Value::resolveReference(char const* key, char const* cend) +{ + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::resolveReference(key, end): requires objectValue"); + if (type_ == nullValue) + *this = Value(objectValue); + CZString actualKey( + key, static_cast<unsigned>(cend-key), CZString::duplicateOnCopy); + ObjectValues::iterator it = value_.map_->lower_bound(actualKey); + if (it != value_.map_->end() && (*it).first == actualKey) + return (*it).second; + + ObjectValues::value_type defaultValue(actualKey, nullRef); + it = value_.map_->insert(it, defaultValue); + Value& value = (*it).second; + return value; +} + +Value Value::get(ArrayIndex index, const Value& defaultValue) const { + const Value* value = &((*this)[index]); + return value == &nullRef ? defaultValue : *value; +} + +bool Value::isValidIndex(ArrayIndex index) const { return index < size(); } + +Value const* Value::find(char const* key, char const* cend) const +{ + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::find(key, end, found): requires objectValue or nullValue"); + if (type_ == nullValue) return NULL; + CZString actualKey(key, static_cast<unsigned>(cend-key), CZString::noDuplication); + ObjectValues::const_iterator it = value_.map_->find(actualKey); + if (it == value_.map_->end()) return NULL; + return &(*it).second; +} +const Value& Value::operator[](const char* key) const +{ + Value const* found = find(key, key + strlen(key)); + if (!found) return nullRef; + return *found; +} +Value const& Value::operator[](std::string const& key) const +{ + Value const* found = find(key.data(), key.data() + key.length()); + if (!found) return nullRef; + return *found; +} + +Value& Value::operator[](const char* key) { + return resolveReference(key, key + strlen(key)); +} + +Value& Value::operator[](const std::string& key) { + return resolveReference(key.data(), key.data() + key.length()); +} + +Value& Value::operator[](const StaticString& key) { + return resolveReference(key.c_str()); +} + +#ifdef JSON_USE_CPPTL +Value& Value::operator[](const CppTL::ConstString& key) { + return resolveReference(key.c_str(), key.end_c_str()); +} +Value const& Value::operator[](CppTL::ConstString const& key) const +{ + Value const* found = find(key.c_str(), key.end_c_str()); + if (!found) return nullRef; + return *found; +} +#endif + +Value& Value::append(const Value& value) { return (*this)[size()] = value; } + +Value Value::get(char const* key, char const* cend, Value const& defaultValue) const +{ + Value const* found = find(key, cend); + return !found ? defaultValue : *found; +} +Value Value::get(char const* key, Value const& defaultValue) const +{ + return get(key, key + strlen(key), defaultValue); +} +Value Value::get(std::string const& key, Value const& defaultValue) const +{ + return get(key.data(), key.data() + key.length(), defaultValue); +} + + +bool Value::removeMember(const char* key, const char* cend, Value* removed) +{ + if (type_ != objectValue) { + return false; + } + CZString actualKey(key, static_cast<unsigned>(cend-key), CZString::noDuplication); + ObjectValues::iterator it = value_.map_->find(actualKey); + if (it == value_.map_->end()) + return false; + *removed = it->second; + value_.map_->erase(it); + return true; +} +bool Value::removeMember(const char* key, Value* removed) +{ + return removeMember(key, key + strlen(key), removed); +} +bool Value::removeMember(std::string const& key, Value* removed) +{ + return removeMember(key.data(), key.data() + key.length(), removed); +} +Value Value::removeMember(const char* key) +{ + JSON_ASSERT_MESSAGE(type_ == nullValue || type_ == objectValue, + "in Json::Value::removeMember(): requires objectValue"); + if (type_ == nullValue) + return nullRef; + + Value removed; // null + removeMember(key, key + strlen(key), &removed); + return removed; // still null if removeMember() did nothing +} +Value Value::removeMember(const std::string& key) +{ + return removeMember(key.c_str()); +} + +bool Value::removeIndex(ArrayIndex index, Value* removed) { + if (type_ != arrayValue) { + return false; + } + CZString key(index); + ObjectValues::iterator it = value_.map_->find(key); + if (it == value_.map_->end()) { + return false; + } + *removed = it->second; + ArrayIndex oldSize = size(); + // shift left all items left, into the place of the "removed" + for (ArrayIndex i = index; i < (oldSize - 1); ++i){ + CZString keey(i); + (*value_.map_)[keey] = (*this)[i + 1]; + } + // erase the last one ("leftover") + CZString keyLast(oldSize - 1); + ObjectValues::iterator itLast = value_.map_->find(keyLast); + value_.map_->erase(itLast); + return true; +} + +#ifdef JSON_USE_CPPTL +Value Value::get(const CppTL::ConstString& key, + const Value& defaultValue) const { + return get(key.c_str(), key.end_c_str(), defaultValue); +} +#endif + +bool Value::isMember(char const* key, char const* cend) const +{ + Value const* value = find(key, cend); + return NULL != value; +} +bool Value::isMember(char const* key) const +{ + return isMember(key, key + strlen(key)); +} +bool Value::isMember(std::string const& key) const +{ + return isMember(key.data(), key.data() + key.length()); +} + +#ifdef JSON_USE_CPPTL +bool Value::isMember(const CppTL::ConstString& key) const { + return isMember(key.c_str(), key.end_c_str()); +} +#endif + +Value::Members Value::getMemberNames() const { + JSON_ASSERT_MESSAGE( + type_ == nullValue || type_ == objectValue, + "in Json::Value::getMemberNames(), value must be objectValue"); + if (type_ == nullValue) + return Value::Members(); + Members members; + members.reserve(value_.map_->size()); + ObjectValues::const_iterator it = value_.map_->begin(); + ObjectValues::const_iterator itEnd = value_.map_->end(); + for (; it != itEnd; ++it) { + members.push_back(std::string((*it).first.data(), + (*it).first.length())); + } + return members; +} +// +//# ifdef JSON_USE_CPPTL +// EnumMemberNames +// Value::enumMemberNames() const +//{ +// if ( type_ == objectValue ) +// { +// return CppTL::Enum::any( CppTL::Enum::transform( +// CppTL::Enum::keys( *(value_.map_), CppTL::Type<const CZString &>() ), +// MemberNamesTransform() ) ); +// } +// return EnumMemberNames(); +//} +// +// +// EnumValues +// Value::enumValues() const +//{ +// if ( type_ == objectValue || type_ == arrayValue ) +// return CppTL::Enum::anyValues( *(value_.map_), +// CppTL::Type<const Value &>() ); +// return EnumValues(); +//} +// +//# endif + +static bool IsIntegral(double d) { + double integral_part; + return modf(d, &integral_part) == 0.0; +} + +bool Value::isNull() const { return type_ == nullValue; } + +bool Value::isBool() const { return type_ == booleanValue; } + +bool Value::isInt() const { + switch (type_) { + case intValue: + return value_.int_ >= minInt && value_.int_ <= maxInt; + case uintValue: + return value_.uint_ <= UInt(maxInt); + case realValue: + return value_.real_ >= minInt && value_.real_ <= maxInt && + IsIntegral(value_.real_); + default: + break; + } + return false; +} + +bool Value::isUInt() const { + switch (type_) { + case intValue: + return value_.int_ >= 0 && LargestUInt(value_.int_) <= LargestUInt(maxUInt); + case uintValue: + return value_.uint_ <= maxUInt; + case realValue: + return value_.real_ >= 0 && value_.real_ <= maxUInt && + IsIntegral(value_.real_); + default: + break; + } + return false; +} + +bool Value::isInt64() const { +#if defined(JSON_HAS_INT64) + switch (type_) { + case intValue: + return true; + case uintValue: + return value_.uint_ <= UInt64(maxInt64); + case realValue: + // Note that maxInt64 (= 2^63 - 1) is not exactly representable as a + // double, so double(maxInt64) will be rounded up to 2^63. Therefore we + // require the value to be strictly less than the limit. + return value_.real_ >= double(minInt64) && + value_.real_ < double(maxInt64) && IsIntegral(value_.real_); + default: + break; + } +#endif // JSON_HAS_INT64 + return false; +} + +bool Value::isUInt64() const { +#if defined(JSON_HAS_INT64) + switch (type_) { + case intValue: + return value_.int_ >= 0; + case uintValue: + return true; + case realValue: + // Note that maxUInt64 (= 2^64 - 1) is not exactly representable as a + // double, so double(maxUInt64) will be rounded up to 2^64. Therefore we + // require the value to be strictly less than the limit. + return value_.real_ >= 0 && value_.real_ < maxUInt64AsDouble && + IsIntegral(value_.real_); + default: + break; + } +#endif // JSON_HAS_INT64 + return false; +} + +bool Value::isIntegral() const { +#if defined(JSON_HAS_INT64) + return isInt64() || isUInt64(); +#else + return isInt() || isUInt(); +#endif +} + +bool Value::isDouble() const { return type_ == realValue || isIntegral(); } + +bool Value::isNumeric() const { return isIntegral() || isDouble(); } + +bool Value::isString() const { return type_ == stringValue; } + +bool Value::isArray() const { return type_ == arrayValue; } + +bool Value::isObject() const { return type_ == objectValue; } + +void Value::setComment(const char* comment, size_t len, CommentPlacement placement) { + if (!comments_) + comments_ = new CommentInfo[numberOfCommentPlacement]; + if ((len > 0) && (comment[len-1] == '\n')) { + // Always discard trailing newline, to aid indentation. + len -= 1; + } + comments_[placement].setComment(comment, len); +} + +void Value::setComment(const char* comment, CommentPlacement placement) { + setComment(comment, strlen(comment), placement); +} + +void Value::setComment(const std::string& comment, CommentPlacement placement) { + setComment(comment.c_str(), comment.length(), placement); +} + +bool Value::hasComment(CommentPlacement placement) const { + return comments_ != 0 && comments_[placement].comment_ != 0; +} + +std::string Value::getComment(CommentPlacement placement) const { + if (hasComment(placement)) + return comments_[placement].comment_; + return ""; +} + +void Value::setOffsetStart(size_t start) { start_ = start; } + +void Value::setOffsetLimit(size_t limit) { limit_ = limit; } + +size_t Value::getOffsetStart() const { return start_; } + +size_t Value::getOffsetLimit() const { return limit_; } + +std::string Value::toStyledString() const { + StyledWriter writer; + return writer.write(*this); +} + +Value::const_iterator Value::begin() const { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return const_iterator(value_.map_->begin()); + break; + default: + break; + } + return const_iterator(); +} + +Value::const_iterator Value::end() const { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return const_iterator(value_.map_->end()); + break; + default: + break; + } + return const_iterator(); +} + +Value::iterator Value::begin() { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return iterator(value_.map_->begin()); + break; + default: + break; + } + return iterator(); +} + +Value::iterator Value::end() { + switch (type_) { + case arrayValue: + case objectValue: + if (value_.map_) + return iterator(value_.map_->end()); + break; + default: + break; + } + return iterator(); +} + +// class PathArgument +// ////////////////////////////////////////////////////////////////// + +PathArgument::PathArgument() : key_(), index_(), kind_(kindNone) {} + +PathArgument::PathArgument(ArrayIndex index) + : key_(), index_(index), kind_(kindIndex) {} + +PathArgument::PathArgument(const char* key) + : key_(key), index_(), kind_(kindKey) {} + +PathArgument::PathArgument(const std::string& key) + : key_(key.c_str()), index_(), kind_(kindKey) {} + +// class Path +// ////////////////////////////////////////////////////////////////// + +Path::Path(const std::string& path, + const PathArgument& a1, + const PathArgument& a2, + const PathArgument& a3, + const PathArgument& a4, + const PathArgument& a5) { + InArgs in; + in.push_back(&a1); + in.push_back(&a2); + in.push_back(&a3); + in.push_back(&a4); + in.push_back(&a5); + makePath(path, in); +} + +void Path::makePath(const std::string& path, const InArgs& in) { + const char* current = path.c_str(); + const char* end = current + path.length(); + InArgs::const_iterator itInArg = in.begin(); + while (current != end) { + if (*current == '[') { + ++current; + if (*current == '%') + addPathInArg(path, in, itInArg, PathArgument::kindIndex); + else { + ArrayIndex index = 0; + for (; current != end && *current >= '0' && *current <= '9'; ++current) + index = index * 10 + ArrayIndex(*current - '0'); + args_.push_back(index); + } + if (current == end || *current++ != ']') + invalidPath(path, int(current - path.c_str())); + } else if (*current == '%') { + addPathInArg(path, in, itInArg, PathArgument::kindKey); + ++current; + } else if (*current == '.') { + ++current; + } else { + const char* beginName = current; + while (current != end && !strchr("[.", *current)) + ++current; + args_.push_back(std::string(beginName, current)); + } + } +} + +void Path::addPathInArg(const std::string& /*path*/, + const InArgs& in, + InArgs::const_iterator& itInArg, + PathArgument::Kind kind) { + if (itInArg == in.end()) { + // Error: missing argument %d + } else if ((*itInArg)->kind_ != kind) { + // Error: bad argument type + } else { + args_.push_back(**itInArg); + } +} + +void Path::invalidPath(const std::string& /*path*/, int /*location*/) { + // Error: invalid path. +} + +const Value& Path::resolve(const Value& root) const { + const Value* node = &root; + for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { + const PathArgument& arg = *it; + if (arg.kind_ == PathArgument::kindIndex) { + if (!node->isArray() || !node->isValidIndex(arg.index_)) { + // Error: unable to resolve path (array value expected at position... + } + node = &((*node)[arg.index_]); + } else if (arg.kind_ == PathArgument::kindKey) { + if (!node->isObject()) { + // Error: unable to resolve path (object value expected at position...) + } + node = &((*node)[arg.key_]); + if (node == &Value::nullRef) { + // Error: unable to resolve path (object has no member named '' at + // position...) + } + } + } + return *node; +} + +Value Path::resolve(const Value& root, const Value& defaultValue) const { + const Value* node = &root; + for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { + const PathArgument& arg = *it; + if (arg.kind_ == PathArgument::kindIndex) { + if (!node->isArray() || !node->isValidIndex(arg.index_)) + return defaultValue; + node = &((*node)[arg.index_]); + } else if (arg.kind_ == PathArgument::kindKey) { + if (!node->isObject()) + return defaultValue; + node = &((*node)[arg.key_]); + if (node == &Value::nullRef) + return defaultValue; + } + } + return *node; +} + +Value& Path::make(Value& root) const { + Value* node = &root; + for (Args::const_iterator it = args_.begin(); it != args_.end(); ++it) { + const PathArgument& arg = *it; + if (arg.kind_ == PathArgument::kindIndex) { + if (!node->isArray()) { + // Error: node is not an array at position ... + } + node = &((*node)[arg.index_]); + } else if (arg.kind_ == PathArgument::kindKey) { + if (!node->isObject()) { + // Error: node is not an object at position... + } + node = &((*node)[arg.key_]); + } + } + return *node; +} + +} // namespace Json diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_valueiterator.inl b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_valueiterator.inl new file mode 100755 index 0000000..ec9c851 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_valueiterator.inl @@ -0,0 +1,167 @@ +// Copyright 2007-2010 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +// included by json_value.cpp + +namespace Json { + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class ValueIteratorBase +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +ValueIteratorBase::ValueIteratorBase() + : current_(), isNull_(true) { +} + +ValueIteratorBase::ValueIteratorBase( + const Value::ObjectValues::iterator& current) + : current_(current), isNull_(false) {} + +Value& ValueIteratorBase::deref() const { + return current_->second; +} + +void ValueIteratorBase::increment() { + ++current_; +} + +void ValueIteratorBase::decrement() { + --current_; +} + +ValueIteratorBase::difference_type +ValueIteratorBase::computeDistance(const SelfType& other) const { +#ifdef JSON_USE_CPPTL_SMALLMAP + return other.current_ - current_; +#else + // Iterator for null value are initialized using the default + // constructor, which initialize current_ to the default + // std::map::iterator. As begin() and end() are two instance + // of the default std::map::iterator, they can not be compared. + // To allow this, we handle this comparison specifically. + if (isNull_ && other.isNull_) { + return 0; + } + + // Usage of std::distance is not portable (does not compile with Sun Studio 12 + // RogueWave STL, + // which is the one used by default). + // Using a portable hand-made version for non random iterator instead: + // return difference_type( std::distance( current_, other.current_ ) ); + difference_type myDistance = 0; + for (Value::ObjectValues::iterator it = current_; it != other.current_; + ++it) { + ++myDistance; + } + return myDistance; +#endif +} + +bool ValueIteratorBase::isEqual(const SelfType& other) const { + if (isNull_) { + return other.isNull_; + } + return current_ == other.current_; +} + +void ValueIteratorBase::copy(const SelfType& other) { + current_ = other.current_; + isNull_ = other.isNull_; +} + +Value ValueIteratorBase::key() const { + const Value::CZString czstring = (*current_).first; + if (czstring.data()) { + if (czstring.isStaticString()) + return Value(StaticString(czstring.data())); + return Value(czstring.data(), czstring.data() + czstring.length()); + } + return Value(czstring.index()); +} + +UInt ValueIteratorBase::index() const { + const Value::CZString czstring = (*current_).first; + if (!czstring.data()) + return czstring.index(); + return Value::UInt(-1); +} + +std::string ValueIteratorBase::name() const { + char const* keey; + char const* end; + keey = memberName(&end); + if (!keey) return std::string(); + return std::string(keey, end); +} + +char const* ValueIteratorBase::memberName() const { + const char* cname = (*current_).first.data(); + return cname ? cname : ""; +} + +char const* ValueIteratorBase::memberName(char const** end) const { + const char* cname = (*current_).first.data(); + if (!cname) { + *end = NULL; + return NULL; + } + *end = cname + (*current_).first.length(); + return cname; +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class ValueConstIterator +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +ValueConstIterator::ValueConstIterator() {} + +ValueConstIterator::ValueConstIterator( + const Value::ObjectValues::iterator& current) + : ValueIteratorBase(current) {} + +ValueConstIterator::ValueConstIterator(ValueIterator const& other) + : ValueIteratorBase(other) {} + +ValueConstIterator& ValueConstIterator:: +operator=(const ValueIteratorBase& other) { + copy(other); + return *this; +} + +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// class ValueIterator +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// +// ////////////////////////////////////////////////////////////////// + +ValueIterator::ValueIterator() {} + +ValueIterator::ValueIterator(const Value::ObjectValues::iterator& current) + : ValueIteratorBase(current) {} + +ValueIterator::ValueIterator(const ValueConstIterator& other) + : ValueIteratorBase(other) { + throwRuntimeError("ConstIterator to Iterator should never be allowed."); +} + +ValueIterator::ValueIterator(const ValueIterator& other) + : ValueIteratorBase(other) {} + +ValueIterator& ValueIterator::operator=(const SelfType& other) { + copy(other); + return *this; +} + +} // namespace Json diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_writer.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_writer.cpp new file mode 100755 index 0000000..0751b06 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/dependencies/jsoncpp/src/json_writer.cpp @@ -0,0 +1,1214 @@ +// Copyright 2011 Baptiste Lepilleur +// Distributed under MIT license, or public domain if desired and +// recognized in your jurisdiction. +// See file LICENSE for detail or copy at http://jsoncpp.sourceforge.net/LICENSE + +#if !defined(JSON_IS_AMALGAMATION) +#include "../include/writer.h" +#include "json_tool.h" +#endif // if !defined(JSON_IS_AMALGAMATION) +#include <iomanip> +#include <memory> +#include <sstream> +#include <utility> +#include <set> +#include <cassert> +#include <cstring> +#include <cstdio> + +#if defined(_MSC_VER) && _MSC_VER >= 1200 && _MSC_VER < 1800 // Between VC++ 6.0 and VC++ 11.0 +#include <float.h> +#define isfinite _finite +#elif defined(__sun) && defined(__SVR4) //Solaris +#if !defined(isfinite) +#include <ieeefp.h> +#define isfinite finite +#endif +#elif defined(_AIX) +#if !defined(isfinite) +#include <math.h> +#define isfinite finite +#endif +#elif defined(__hpux) +#if !defined(isfinite) +#if defined(__ia64) && !defined(finite) +#define isfinite(x) ((sizeof(x) == sizeof(float) ? \ + _Isfinitef(x) : _IsFinite(x))) +#else +#include <math.h> +#define isfinite finite +#endif +#endif +#else +#include <cmath> +#if !(defined(__QNXNTO__)) // QNX already defines isfinite +#define isfinite std::isfinite +#endif +#endif + +#if defined(_MSC_VER) +#if !defined(WINCE) && defined(__STDC_SECURE_LIB__) && _MSC_VER >= 1500 // VC++ 9.0 and above +#define snprintf sprintf_s +#elif _MSC_VER >= 1900 // VC++ 14.0 and above +#define snprintf std::snprintf +#else +#define snprintf _snprintf +#endif +#elif defined(__ANDROID__) || defined(__QNXNTO__) +#define snprintf snprintf +#elif __cplusplus >= 201103L +#define snprintf std::snprintf +#endif + +#if defined(__BORLANDC__) +#include <float.h> +#define isfinite _finite +#define snprintf _snprintf +#endif + +#if defined(_MSC_VER) && _MSC_VER >= 1400 // VC++ 8.0 +// Disable warning about strdup being deprecated. +#pragma warning(disable : 4996) +#endif + +namespace Json { + +#if __cplusplus >= 201103L || (defined(_CPPLIB_VER) && _CPPLIB_VER >= 520) +typedef std::unique_ptr<StreamWriter> StreamWriterPtr; +#else +typedef std::auto_ptr<StreamWriter> StreamWriterPtr; +#endif + +static bool containsControlCharacter(const char* str) { + while (*str) { + if (isControlCharacter(*(str++))) + return true; + } + return false; +} + +static bool containsControlCharacter0(const char* str, unsigned len) { + char const* end = str + len; + while (end != str) { + if (isControlCharacter(*str) || 0==*str) + return true; + ++str; + } + return false; +} + +std::string valueToString(LargestInt value) { + UIntToStringBuffer buffer; + char* current = buffer + sizeof(buffer); + if (value == Value::minLargestInt) { + uintToString(LargestUInt(Value::maxLargestInt) + 1, current); + *--current = '-'; + } else if (value < 0) { + uintToString(LargestUInt(-value), current); + *--current = '-'; + } else { + uintToString(LargestUInt(value), current); + } + assert(current >= buffer); + return current; +} + +std::string valueToString(LargestUInt value) { + UIntToStringBuffer buffer; + char* current = buffer + sizeof(buffer); + uintToString(value, current); + assert(current >= buffer); + return current; +} + +#if defined(JSON_HAS_INT64) + +std::string valueToString(Int value) { + return valueToString(LargestInt(value)); +} + +std::string valueToString(UInt value) { + return valueToString(LargestUInt(value)); +} + +#endif // # if defined(JSON_HAS_INT64) + +std::string valueToString(double value, bool useSpecialFloats, unsigned int precision) { + // Allocate a buffer that is more than large enough to store the 16 digits of + // precision requested below. + char buffer[32]; + int len = -1; + + char formatString[6]; + sprintf(formatString, "%%.%dg", precision); + + // Print into the buffer. We need not request the alternative representation + // that always has a decimal point because JSON doesn't distingish the + // concepts of reals and integers. + if (isfinite(value)) { + len = snprintf(buffer, sizeof(buffer), formatString, value); + } else { + // IEEE standard states that NaN values will not compare to themselves + if (value != value) { + len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "NaN" : "null"); + } else if (value < 0) { + len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "-Infinity" : "-1e+9999"); + } else { + len = snprintf(buffer, sizeof(buffer), useSpecialFloats ? "Infinity" : "1e+9999"); + } + // For those, we do not need to call fixNumLoc, but it is fast. + } + assert(len >= 0); + fixNumericLocale(buffer, buffer + len); + return buffer; +} + +std::string valueToString(double value) { return valueToString(value, false, 17); } + +std::string valueToString(bool value) { return value ? "true" : "false"; } + +std::string valueToQuotedString(const char* value) { + if (value == NULL) + return ""; + // Not sure how to handle unicode... + if (strpbrk(value, "\"\\\b\f\n\r\t") == NULL && + !containsControlCharacter(value)) + return std::string("\"") + value + "\""; + // We have to walk value and escape any special characters. + // Appending to std::string is not efficient, but this should be rare. + // (Note: forward slashes are *not* rare, but I am not escaping them.) + std::string::size_type maxsize = + strlen(value) * 2 + 3; // allescaped+quotes+NULL + std::string result; + result.reserve(maxsize); // to avoid lots of mallocs + result += "\""; + for (const char* c = value; *c != 0; ++c) { + switch (*c) { + case '\"': + result += "\\\""; + break; + case '\\': + result += "\\\\"; + break; + case '\b': + result += "\\b"; + break; + case '\f': + result += "\\f"; + break; + case '\n': + result += "\\n"; + break; + case '\r': + result += "\\r"; + break; + case '\t': + result += "\\t"; + break; + // case '/': + // Even though \/ is considered a legal escape in JSON, a bare + // slash is also legal, so I see no reason to escape it. + // (I hope I am not misunderstanding something. + // blep notes: actually escaping \/ may be useful in javascript to avoid </ + // sequence. + // Should add a flag to allow this compatibility mode and prevent this + // sequence from occurring. + default: + if (isControlCharacter(*c)) { + std::ostringstream oss; + oss << "\\u" << std::hex << std::uppercase << std::setfill('0') + << std::setw(4) << static_cast<int>(*c); + result += oss.str(); + } else { + result += *c; + } + break; + } + } + result += "\""; + return result; +} + +// https://github.com/upcaste/upcaste/blob/master/src/upcore/src/cstring/strnpbrk.cpp +static char const* strnpbrk(char const* s, char const* accept, size_t n) { + assert((s || !n) && accept); + + char const* const end = s + n; + for (char const* cur = s; cur < end; ++cur) { + int const c = *cur; + for (char const* a = accept; *a; ++a) { + if (*a == c) { + return cur; + } + } + } + return NULL; +} +static std::string valueToQuotedStringN(const char* value, unsigned length) { + if (value == NULL) + return ""; + // Not sure how to handle unicode... + if (strnpbrk(value, "\"\\\b\f\n\r\t", length) == NULL && + !containsControlCharacter0(value, length)) + return std::string("\"") + value + "\""; + // We have to walk value and escape any special characters. + // Appending to std::string is not efficient, but this should be rare. + // (Note: forward slashes are *not* rare, but I am not escaping them.) + std::string::size_type maxsize = + length * 2 + 3; // allescaped+quotes+NULL + std::string result; + result.reserve(maxsize); // to avoid lots of mallocs + result += "\""; + char const* end = value + length; + for (const char* c = value; c != end; ++c) { + switch (*c) { + case '\"': + result += "\\\""; + break; + case '\\': + result += "\\\\"; + break; + case '\b': + result += "\\b"; + break; + case '\f': + result += "\\f"; + break; + case '\n': + result += "\\n"; + break; + case '\r': + result += "\\r"; + break; + case '\t': + result += "\\t"; + break; + // case '/': + // Even though \/ is considered a legal escape in JSON, a bare + // slash is also legal, so I see no reason to escape it. + // (I hope I am not misunderstanding something.) + // blep notes: actually escaping \/ may be useful in javascript to avoid </ + // sequence. + // Should add a flag to allow this compatibility mode and prevent this + // sequence from occurring. + default: + if ((isControlCharacter(*c)) || (*c == 0)) { + std::ostringstream oss; + oss << "\\u" << std::hex << std::uppercase << std::setfill('0') + << std::setw(4) << static_cast<int>(*c); + result += oss.str(); + } else { + result += *c; + } + break; + } + } + result += "\""; + return result; +} + +// Class Writer +// ////////////////////////////////////////////////////////////////// +Writer::~Writer() {} + +// Class FastWriter +// ////////////////////////////////////////////////////////////////// + +FastWriter::FastWriter() + : yamlCompatiblityEnabled_(false), dropNullPlaceholders_(false), + omitEndingLineFeed_(false) {} + +void FastWriter::enableYAMLCompatibility() { yamlCompatiblityEnabled_ = true; } + +void FastWriter::dropNullPlaceholders() { dropNullPlaceholders_ = true; } + +void FastWriter::omitEndingLineFeed() { omitEndingLineFeed_ = true; } + +std::string FastWriter::write(const Value& root) { + document_ = ""; + writeValue(root); + if (!omitEndingLineFeed_) + document_ += "\n"; + return document_; +} + +void FastWriter::writeValue(const Value& value) { + switch (value.type()) { + case nullValue: + if (!dropNullPlaceholders_) + document_ += "null"; + break; + case intValue: + document_ += valueToString(value.asLargestInt()); + break; + case uintValue: + document_ += valueToString(value.asLargestUInt()); + break; + case realValue: + document_ += valueToString(value.asDouble()); + break; + case stringValue: + { + // Is NULL possible for value.string_? + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) document_ += valueToQuotedStringN(str, static_cast<unsigned>(end-str)); + break; + } + case booleanValue: + document_ += valueToString(value.asBool()); + break; + case arrayValue: { + document_ += '['; + int size = value.size(); + for (int index = 0; index < size; ++index) { + if (index > 0) + document_ += ','; + writeValue(value[index]); + } + document_ += ']'; + } break; + case objectValue: { + Value::Members members(value.getMemberNames()); + document_ += '{'; + for (Value::Members::iterator it = members.begin(); it != members.end(); + ++it) { + const std::string& name = *it; + if (it != members.begin()) + document_ += ','; + document_ += valueToQuotedStringN(name.data(), static_cast<unsigned>(name.length())); + document_ += yamlCompatiblityEnabled_ ? ": " : ":"; + writeValue(value[name]); + } + document_ += '}'; + } break; + } +} + +// Class StyledWriter +// ////////////////////////////////////////////////////////////////// + +StyledWriter::StyledWriter() + : rightMargin_(74), indentSize_(3), addChildValues_() {} + +std::string StyledWriter::write(const Value& root) { + document_ = ""; + addChildValues_ = false; + indentString_ = ""; + writeCommentBeforeValue(root); + writeValue(root); + writeCommentAfterValueOnSameLine(root); + document_ += "\n"; + return document_; +} + +void StyledWriter::writeValue(const Value& value) { + switch (value.type()) { + case nullValue: + pushValue("null"); + break; + case intValue: + pushValue(valueToString(value.asLargestInt())); + break; + case uintValue: + pushValue(valueToString(value.asLargestUInt())); + break; + case realValue: + pushValue(valueToString(value.asDouble())); + break; + case stringValue: + { + // Is NULL possible for value.string_? + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str))); + else pushValue(""); + break; + } + case booleanValue: + pushValue(valueToString(value.asBool())); + break; + case arrayValue: + writeArrayValue(value); + break; + case objectValue: { + Value::Members members(value.getMemberNames()); + if (members.empty()) + pushValue("{}"); + else { + writeWithIndent("{"); + indent(); + Value::Members::iterator it = members.begin(); + for (;;) { + const std::string& name = *it; + const Value& childValue = value[name]; + writeCommentBeforeValue(childValue); + writeWithIndent(valueToQuotedString(name.c_str())); + document_ += " : "; + writeValue(childValue); + if (++it == members.end()) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + document_ += ','; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("}"); + } + } break; + } +} + +void StyledWriter::writeArrayValue(const Value& value) { + unsigned size = value.size(); + if (size == 0) + pushValue("[]"); + else { + bool isArrayMultiLine = isMultineArray(value); + if (isArrayMultiLine) { + writeWithIndent("["); + indent(); + bool hasChildValue = !childValues_.empty(); + unsigned index = 0; + for (;;) { + const Value& childValue = value[index]; + writeCommentBeforeValue(childValue); + if (hasChildValue) + writeWithIndent(childValues_[index]); + else { + writeIndent(); + writeValue(childValue); + } + if (++index == size) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + document_ += ','; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("]"); + } else // output on a single line + { + assert(childValues_.size() == size); + document_ += "[ "; + for (unsigned index = 0; index < size; ++index) { + if (index > 0) + document_ += ", "; + document_ += childValues_[index]; + } + document_ += " ]"; + } + } +} + +bool StyledWriter::isMultineArray(const Value& value) { + int size = value.size(); + bool isMultiLine = size * 3 >= rightMargin_; + childValues_.clear(); + for (int index = 0; index < size && !isMultiLine; ++index) { + const Value& childValue = value[index]; + isMultiLine = ((childValue.isArray() || childValue.isObject()) && + childValue.size() > 0); + } + if (!isMultiLine) // check if line length > max line length + { + childValues_.reserve(size); + addChildValues_ = true; + int lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' + for (int index = 0; index < size; ++index) { + if (hasCommentForValue(value[index])) { + isMultiLine = true; + } + writeValue(value[index]); + lineLength += int(childValues_[index].length()); + } + addChildValues_ = false; + isMultiLine = isMultiLine || lineLength >= rightMargin_; + } + return isMultiLine; +} + +void StyledWriter::pushValue(const std::string& value) { + if (addChildValues_) + childValues_.push_back(value); + else + document_ += value; +} + +void StyledWriter::writeIndent() { + if (!document_.empty()) { + char last = document_[document_.length() - 1]; + if (last == ' ') // already indented + return; + if (last != '\n') // Comments may add new-line + document_ += '\n'; + } + document_ += indentString_; +} + +void StyledWriter::writeWithIndent(const std::string& value) { + writeIndent(); + document_ += value; +} + +void StyledWriter::indent() { indentString_ += std::string(indentSize_, ' '); } + +void StyledWriter::unindent() { + assert(int(indentString_.size()) >= indentSize_); + indentString_.resize(indentString_.size() - indentSize_); +} + +void StyledWriter::writeCommentBeforeValue(const Value& root) { + if (!root.hasComment(commentBefore)) + return; + + document_ += "\n"; + writeIndent(); + const std::string& comment = root.getComment(commentBefore); + std::string::const_iterator iter = comment.begin(); + while (iter != comment.end()) { + document_ += *iter; + if (*iter == '\n' && + (iter != comment.end() && *(iter + 1) == '/')) + writeIndent(); + ++iter; + } + + // Comments are stripped of trailing newlines, so add one here + document_ += "\n"; +} + +void StyledWriter::writeCommentAfterValueOnSameLine(const Value& root) { + if (root.hasComment(commentAfterOnSameLine)) + document_ += " " + root.getComment(commentAfterOnSameLine); + + if (root.hasComment(commentAfter)) { + document_ += "\n"; + document_ += root.getComment(commentAfter); + document_ += "\n"; + } +} + +bool StyledWriter::hasCommentForValue(const Value& value) { + return value.hasComment(commentBefore) || + value.hasComment(commentAfterOnSameLine) || + value.hasComment(commentAfter); +} + +// Class StyledStreamWriter +// ////////////////////////////////////////////////////////////////// + +StyledStreamWriter::StyledStreamWriter(std::string indentation) + : document_(NULL), rightMargin_(74), indentation_(indentation), + addChildValues_() {} + +void StyledStreamWriter::write(std::ostream& out, const Value& root) { + document_ = &out; + addChildValues_ = false; + indentString_ = ""; + indented_ = true; + writeCommentBeforeValue(root); + if (!indented_) writeIndent(); + indented_ = true; + writeValue(root); + writeCommentAfterValueOnSameLine(root); + *document_ << "\n"; + document_ = NULL; // Forget the stream, for safety. +} + +void StyledStreamWriter::writeValue(const Value& value) { + switch (value.type()) { + case nullValue: + pushValue("null"); + break; + case intValue: + pushValue(valueToString(value.asLargestInt())); + break; + case uintValue: + pushValue(valueToString(value.asLargestUInt())); + break; + case realValue: + pushValue(valueToString(value.asDouble())); + break; + case stringValue: + { + // Is NULL possible for value.string_? + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str))); + else pushValue(""); + break; + } + case booleanValue: + pushValue(valueToString(value.asBool())); + break; + case arrayValue: + writeArrayValue(value); + break; + case objectValue: { + Value::Members members(value.getMemberNames()); + if (members.empty()) + pushValue("{}"); + else { + writeWithIndent("{"); + indent(); + Value::Members::iterator it = members.begin(); + for (;;) { + const std::string& name = *it; + const Value& childValue = value[name]; + writeCommentBeforeValue(childValue); + writeWithIndent(valueToQuotedString(name.c_str())); + *document_ << " : "; + writeValue(childValue); + if (++it == members.end()) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *document_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("}"); + } + } break; + } +} + +void StyledStreamWriter::writeArrayValue(const Value& value) { + unsigned size = value.size(); + if (size == 0) + pushValue("[]"); + else { + bool isArrayMultiLine = isMultineArray(value); + if (isArrayMultiLine) { + writeWithIndent("["); + indent(); + bool hasChildValue = !childValues_.empty(); + unsigned index = 0; + for (;;) { + const Value& childValue = value[index]; + writeCommentBeforeValue(childValue); + if (hasChildValue) + writeWithIndent(childValues_[index]); + else { + if (!indented_) writeIndent(); + indented_ = true; + writeValue(childValue); + indented_ = false; + } + if (++index == size) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *document_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("]"); + } else // output on a single line + { + assert(childValues_.size() == size); + *document_ << "[ "; + for (unsigned index = 0; index < size; ++index) { + if (index > 0) + *document_ << ", "; + *document_ << childValues_[index]; + } + *document_ << " ]"; + } + } +} + +bool StyledStreamWriter::isMultineArray(const Value& value) { + int size = value.size(); + bool isMultiLine = size * 3 >= rightMargin_; + childValues_.clear(); + for (int index = 0; index < size && !isMultiLine; ++index) { + const Value& childValue = value[index]; + isMultiLine = ((childValue.isArray() || childValue.isObject()) && + childValue.size() > 0); + } + if (!isMultiLine) // check if line length > max line length + { + childValues_.reserve(size); + addChildValues_ = true; + int lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' + for (int index = 0; index < size; ++index) { + if (hasCommentForValue(value[index])) { + isMultiLine = true; + } + writeValue(value[index]); + lineLength += int(childValues_[index].length()); + } + addChildValues_ = false; + isMultiLine = isMultiLine || lineLength >= rightMargin_; + } + return isMultiLine; +} + +void StyledStreamWriter::pushValue(const std::string& value) { + if (addChildValues_) + childValues_.push_back(value); + else + *document_ << value; +} + +void StyledStreamWriter::writeIndent() { + // blep intended this to look at the so-far-written string + // to determine whether we are already indented, but + // with a stream we cannot do that. So we rely on some saved state. + // The caller checks indented_. + *document_ << '\n' << indentString_; +} + +void StyledStreamWriter::writeWithIndent(const std::string& value) { + if (!indented_) writeIndent(); + *document_ << value; + indented_ = false; +} + +void StyledStreamWriter::indent() { indentString_ += indentation_; } + +void StyledStreamWriter::unindent() { + assert(indentString_.size() >= indentation_.size()); + indentString_.resize(indentString_.size() - indentation_.size()); +} + +void StyledStreamWriter::writeCommentBeforeValue(const Value& root) { + if (!root.hasComment(commentBefore)) + return; + + if (!indented_) writeIndent(); + const std::string& comment = root.getComment(commentBefore); + std::string::const_iterator iter = comment.begin(); + while (iter != comment.end()) { + *document_ << *iter; + if (*iter == '\n' && + (iter != comment.end() && *(iter + 1) == '/')) + // writeIndent(); // would include newline + *document_ << indentString_; + ++iter; + } + indented_ = false; +} + +void StyledStreamWriter::writeCommentAfterValueOnSameLine(const Value& root) { + if (root.hasComment(commentAfterOnSameLine)) + *document_ << ' ' << root.getComment(commentAfterOnSameLine); + + if (root.hasComment(commentAfter)) { + writeIndent(); + *document_ << root.getComment(commentAfter); + } + indented_ = false; +} + +bool StyledStreamWriter::hasCommentForValue(const Value& value) { + return value.hasComment(commentBefore) || + value.hasComment(commentAfterOnSameLine) || + value.hasComment(commentAfter); +} + +////////////////////////// +// BuiltStyledStreamWriter + +/// Scoped enums are not available until C++11. +struct CommentStyle { + /// Decide whether to write comments. + enum Enum { + None, ///< Drop all comments. + Most, ///< Recover odd behavior of previous versions (not implemented yet). + All ///< Keep all comments. + }; +}; + +struct BuiltStyledStreamWriter : public StreamWriter +{ + BuiltStyledStreamWriter( + std::string const& indentation, + CommentStyle::Enum cs, + std::string const& colonSymbol, + std::string const& nullSymbol, + std::string const& endingLineFeedSymbol, + bool useSpecialFloats, + unsigned int precision); + int write(Value const& root, std::ostream* sout) override; +private: + void writeValue(Value const& value); + void writeArrayValue(Value const& value); + bool isMultineArray(Value const& value); + void pushValue(std::string const& value); + void writeIndent(); + void writeWithIndent(std::string const& value); + void indent(); + void unindent(); + void writeCommentBeforeValue(Value const& root); + void writeCommentAfterValueOnSameLine(Value const& root); + static bool hasCommentForValue(const Value& value); + + typedef std::vector<std::string> ChildValues; + + ChildValues childValues_; + std::string indentString_; + int rightMargin_; + std::string indentation_; + CommentStyle::Enum cs_; + std::string colonSymbol_; + std::string nullSymbol_; + std::string endingLineFeedSymbol_; + bool addChildValues_ : 1; + bool indented_ : 1; + bool useSpecialFloats_ : 1; + unsigned int precision_; +}; +BuiltStyledStreamWriter::BuiltStyledStreamWriter( + std::string const& indentation, + CommentStyle::Enum cs, + std::string const& colonSymbol, + std::string const& nullSymbol, + std::string const& endingLineFeedSymbol, + bool useSpecialFloats, + unsigned int precision) + : rightMargin_(74) + , indentation_(indentation) + , cs_(cs) + , colonSymbol_(colonSymbol) + , nullSymbol_(nullSymbol) + , endingLineFeedSymbol_(endingLineFeedSymbol) + , addChildValues_(false) + , indented_(false) + , useSpecialFloats_(useSpecialFloats) + , precision_(precision) +{ +} +int BuiltStyledStreamWriter::write(Value const& root, std::ostream* sout) +{ + sout_ = sout; + addChildValues_ = false; + indented_ = true; + indentString_ = ""; + writeCommentBeforeValue(root); + if (!indented_) writeIndent(); + indented_ = true; + writeValue(root); + writeCommentAfterValueOnSameLine(root); + *sout_ << endingLineFeedSymbol_; + sout_ = NULL; + return 0; +} +void BuiltStyledStreamWriter::writeValue(Value const& value) { + switch (value.type()) { + case nullValue: + pushValue(nullSymbol_); + break; + case intValue: + pushValue(valueToString(value.asLargestInt())); + break; + case uintValue: + pushValue(valueToString(value.asLargestUInt())); + break; + case realValue: + pushValue(valueToString(value.asDouble(), useSpecialFloats_, precision_)); + break; + case stringValue: + { + // Is NULL is possible for value.string_? + char const* str; + char const* end; + bool ok = value.getString(&str, &end); + if (ok) pushValue(valueToQuotedStringN(str, static_cast<unsigned>(end-str))); + else pushValue(""); + break; + } + case booleanValue: + pushValue(valueToString(value.asBool())); + break; + case arrayValue: + writeArrayValue(value); + break; + case objectValue: { + Value::Members members(value.getMemberNames()); + if (members.empty()) + pushValue("{}"); + else { + writeWithIndent("{"); + indent(); + Value::Members::iterator it = members.begin(); + for (;;) { + std::string const& name = *it; + Value const& childValue = value[name]; + writeCommentBeforeValue(childValue); + writeWithIndent(valueToQuotedStringN(name.data(), static_cast<unsigned>(name.length()))); + *sout_ << colonSymbol_; + writeValue(childValue); + if (++it == members.end()) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *sout_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("}"); + } + } break; + } +} + +void BuiltStyledStreamWriter::writeArrayValue(Value const& value) { + unsigned size = value.size(); + if (size == 0) + pushValue("[]"); + else { + bool isMultiLine = (cs_ == CommentStyle::All) || isMultineArray(value); + if (isMultiLine) { + writeWithIndent("["); + indent(); + bool hasChildValue = !childValues_.empty(); + unsigned index = 0; + for (;;) { + Value const& childValue = value[index]; + writeCommentBeforeValue(childValue); + if (hasChildValue) + writeWithIndent(childValues_[index]); + else { + if (!indented_) writeIndent(); + indented_ = true; + writeValue(childValue); + indented_ = false; + } + if (++index == size) { + writeCommentAfterValueOnSameLine(childValue); + break; + } + *sout_ << ","; + writeCommentAfterValueOnSameLine(childValue); + } + unindent(); + writeWithIndent("]"); + } else // output on a single line + { + assert(childValues_.size() == size); + *sout_ << "["; + if (!indentation_.empty()) *sout_ << " "; + for (unsigned index = 0; index < size; ++index) { + if (index > 0) + *sout_ << ", "; + *sout_ << childValues_[index]; + } + if (!indentation_.empty()) *sout_ << " "; + *sout_ << "]"; + } + } +} + +bool BuiltStyledStreamWriter::isMultineArray(Value const& value) { + int size = value.size(); + bool isMultiLine = size * 3 >= rightMargin_; + childValues_.clear(); + for (int index = 0; index < size && !isMultiLine; ++index) { + Value const& childValue = value[index]; + isMultiLine = ((childValue.isArray() || childValue.isObject()) && + childValue.size() > 0); + } + if (!isMultiLine) // check if line length > max line length + { + childValues_.reserve(size); + addChildValues_ = true; + int lineLength = 4 + (size - 1) * 2; // '[ ' + ', '*n + ' ]' + for (int index = 0; index < size; ++index) { + if (hasCommentForValue(value[index])) { + isMultiLine = true; + } + writeValue(value[index]); + lineLength += int(childValues_[index].length()); + } + addChildValues_ = false; + isMultiLine = isMultiLine || lineLength >= rightMargin_; + } + return isMultiLine; +} + +void BuiltStyledStreamWriter::pushValue(std::string const& value) { + if (addChildValues_) + childValues_.push_back(value); + else + *sout_ << value; +} + +void BuiltStyledStreamWriter::writeIndent() { + // blep intended this to look at the so-far-written string + // to determine whether we are already indented, but + // with a stream we cannot do that. So we rely on some saved state. + // The caller checks indented_. + + if (!indentation_.empty()) { + // In this case, drop newlines too. + *sout_ << '\n' << indentString_; + } +} + +void BuiltStyledStreamWriter::writeWithIndent(std::string const& value) { + if (!indented_) writeIndent(); + *sout_ << value; + indented_ = false; +} + +void BuiltStyledStreamWriter::indent() { indentString_ += indentation_; } + +void BuiltStyledStreamWriter::unindent() { + assert(indentString_.size() >= indentation_.size()); + indentString_.resize(indentString_.size() - indentation_.size()); +} + +void BuiltStyledStreamWriter::writeCommentBeforeValue(Value const& root) { + if (cs_ == CommentStyle::None) return; + if (!root.hasComment(commentBefore)) + return; + + if (!indented_) writeIndent(); + const std::string& comment = root.getComment(commentBefore); + std::string::const_iterator iter = comment.begin(); + while (iter != comment.end()) { + *sout_ << *iter; + if (*iter == '\n' && + (iter != comment.end() && *(iter + 1) == '/')) + // writeIndent(); // would write extra newline + *sout_ << indentString_; + ++iter; + } + indented_ = false; +} + +void BuiltStyledStreamWriter::writeCommentAfterValueOnSameLine(Value const& root) { + if (cs_ == CommentStyle::None) return; + if (root.hasComment(commentAfterOnSameLine)) + *sout_ << " " + root.getComment(commentAfterOnSameLine); + + if (root.hasComment(commentAfter)) { + writeIndent(); + *sout_ << root.getComment(commentAfter); + } +} + +// static +bool BuiltStyledStreamWriter::hasCommentForValue(const Value& value) { + return value.hasComment(commentBefore) || + value.hasComment(commentAfterOnSameLine) || + value.hasComment(commentAfter); +} + +/////////////// +// StreamWriter + +StreamWriter::StreamWriter() + : sout_(NULL) +{ +} +StreamWriter::~StreamWriter() +{ +} +StreamWriter::Factory::~Factory() +{} +StreamWriterBuilder::StreamWriterBuilder() +{ + setDefaults(&settings_); +} +StreamWriterBuilder::~StreamWriterBuilder() +{} +StreamWriter* StreamWriterBuilder::newStreamWriter() const +{ + std::string indentation = settings_["indentation"].asString(); + std::string cs_str = settings_["commentStyle"].asString(); + bool eyc = settings_["enableYAMLCompatibility"].asBool(); + bool dnp = settings_["dropNullPlaceholders"].asBool(); + bool usf = settings_["useSpecialFloats"].asBool(); + unsigned int pre = settings_["precision"].asUInt(); + CommentStyle::Enum cs = CommentStyle::All; + if (cs_str == "All") { + cs = CommentStyle::All; + } else if (cs_str == "None") { + cs = CommentStyle::None; + } else { + throwRuntimeError("commentStyle must be 'All' or 'None'"); + } + std::string colonSymbol = " : "; + if (eyc) { + colonSymbol = ": "; + } else if (indentation.empty()) { + colonSymbol = ":"; + } + std::string nullSymbol = "null"; + if (dnp) { + nullSymbol = ""; + } + if (pre > 17) pre = 17; + std::string endingLineFeedSymbol = ""; + return new BuiltStyledStreamWriter( + indentation, cs, + colonSymbol, nullSymbol, endingLineFeedSymbol, usf, pre); +} +static void getValidWriterKeys(std::set<std::string>* valid_keys) +{ + valid_keys->clear(); + valid_keys->insert("indentation"); + valid_keys->insert("commentStyle"); + valid_keys->insert("enableYAMLCompatibility"); + valid_keys->insert("dropNullPlaceholders"); + valid_keys->insert("useSpecialFloats"); + valid_keys->insert("precision"); +} +bool StreamWriterBuilder::validate(Json::Value* invalid) const +{ + Json::Value my_invalid; + if (!invalid) invalid = &my_invalid; // so we do not need to test for NULL + Json::Value& inv = *invalid; + std::set<std::string> valid_keys; + getValidWriterKeys(&valid_keys); + Value::Members keys = settings_.getMemberNames(); + size_t n = keys.size(); + for (size_t i = 0; i < n; ++i) { + std::string const& key = keys[i]; + if (valid_keys.find(key) == valid_keys.end()) { + inv[key] = settings_[key]; + } + } + return 0u == inv.size(); +} +Value& StreamWriterBuilder::operator[](std::string key) +{ + return settings_[key]; +} +// static +void StreamWriterBuilder::setDefaults(Json::Value* settings) +{ + //! [StreamWriterBuilderDefaults] + (*settings)["commentStyle"] = "All"; + (*settings)["indentation"] = "\t"; + (*settings)["enableYAMLCompatibility"] = false; + (*settings)["dropNullPlaceholders"] = false; + (*settings)["useSpecialFloats"] = false; + (*settings)["precision"] = 17; + //! [StreamWriterBuilderDefaults] +} + +std::string writeString(StreamWriter::Factory const& builder, Value const& root) { + std::ostringstream sout; + StreamWriterPtr const writer(builder.newStreamWriter()); + writer->write(root, &sout); + return sout.str(); +} + +std::ostream& operator<<(std::ostream& sout, Value const& root) { + StreamWriterBuilder builder; + StreamWriterPtr const writer(builder.newStreamWriter()); + writer->write(root, &sout); + return sout; +} + +} // namespace Json diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/Doxyfile b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/Doxyfile new file mode 100644 index 0000000..b76bccd --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/Doxyfile @@ -0,0 +1,2401 @@ +# Doxyfile 1.8.10 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "XMM - Probabilistic Models for Motion Recognition and Mapping" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = 1.0-beta + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = doc-misc/xmm_featured.jpg + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = ./ + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = YES + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = NO + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if <section_label> ... \endif and \cond <section_label> +# ... \endcond blocks. + +ENABLED_SECTIONS = DEVDOC + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = doc-misc/XmmDoxygenLayout.xml + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = YES + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = ../src/ \ + ../src/core/common \ + ../src/core/trainingset \ + ../src/core/model \ + ../src/core/distributions \ + ../src/models/kmeans \ + ../src/models/gmm \ + ../src/models/hmm \ + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, +# *.vhdl, *.ucf, *.qsf, *.as and *.js. + +FILE_PATTERNS = *.hpp + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = doc-misc + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = doc-misc + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# <filter> <input-file> +# +# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = doc-misc/header.html + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = doc-misc/footer.html + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = doc-misc/jdoxygen.css + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = doc-misc/jtabs.css + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = YES + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use <access key> + S +# (what the <access key> is depends on the OS and browser, but it is typically +# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down +# key> to jump into the search results window, the results can be navigated +# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel +# the search. The filter options can be selected when the cursor is inside the +# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> +# to select a filter and <Enter> or <escape> to activate or cancel the filter +# option. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +SEARCHENGINE = NO + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a web server instead of a web client using Javascript. There +# are two flavors of web server based searching depending on the EXTERNAL_SEARCH +# setting. When disabled, doxygen will generate a PHP script for searching and +# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing +# and searching needs to be provided by external tools. See the section +# "External Indexing and Searching" for details. +# The default value is: NO. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SERVER_BASED_SEARCH = NO + +# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP +# script for searching. Instead the search results are written to an XML file +# which needs to be processed by an external indexer. Doxygen will invoke an +# external search engine pointed to by the SEARCHENGINE_URL option to obtain the +# search results. +# +# Doxygen ships with an example indexer (doxyindexer) and search engine +# (doxysearch.cgi) which are based on the open source search engine library +# Xapian (see: http://xapian.org/). +# +# See the section "External Indexing and Searching" for details. +# The default value is: NO. +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTERNAL_SEARCH = NO + +# The SEARCHENGINE_URL should point to a search engine hosted by a web server +# which will return the search results when EXTERNAL_SEARCH is enabled. +# +# Doxygen ships with an example indexer (doxyindexer) and search engine +# (doxysearch.cgi) which are based on the open source search engine library +# Xapian (see: http://xapian.org/). See the section "External Indexing and +# Searching" for details. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SEARCHENGINE_URL = + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed +# search data is written to a file for indexing by an external tool. With the +# SEARCHDATA_FILE tag the name of this file can be specified. +# The default file is: searchdata.xml. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SEARCHDATA_FILE = searchdata.xml + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the +# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is +# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple +# projects and redirect the results back to the right project. +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTERNAL_SEARCH_ID = + +# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen +# projects other than the one defined by this configuration file, but that are +# all added to the same external search index. Each project needs to have a +# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of +# to a relative location where the documentation can be found. The format is: +# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTRA_SEARCH_MAPPINGS = + +#--------------------------------------------------------------------------- +# Configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. +# The default value is: YES. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: latex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. +# +# Note that when enabling USE_PDFLATEX this option is only used for generating +# bitmaps for formulas in the HTML output, but not in the Makefile that is +# written to the output directory. +# The default file is: latex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate +# index for LaTeX. +# The default file is: makeindex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX +# documents. This may be useful for small projects and may help to save some +# trees in general. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used by the +# printer. +# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x +# 14 inches) and executive (7.25 x 10.5 inches). +# The default value is: a4. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names +# that should be included in the LaTeX output. The package can be specified just +# by its name or with the correct syntax as to be used with the LaTeX +# \usepackage command. To get the times font for instance you can specify : +# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} +# To use the option intlimits with the amsmath package you can specify: +# EXTRA_PACKAGES=[intlimits]{amsmath} +# If left blank no extra packages will be included. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the +# generated LaTeX document. The header should contain everything until the first +# chapter. If it is left blank doxygen will generate a standard header. See +# section "Doxygen usage" for information on how to let doxygen write the +# default header to a separate file. +# +# Note: Only use a user-defined header if you know what you are doing! The +# following commands have a special meaning inside the header: $title, +# $datetime, $date, $doxygenversion, $projectname, $projectnumber, +# $projectbrief, $projectlogo. Doxygen will replace $title with the empty +# string, for the replacement values of the other commands the user is referred +# to HTML_HEADER. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the +# generated LaTeX document. The footer should contain everything after the last +# chapter. If it is left blank doxygen will generate a standard footer. See +# LATEX_HEADER for more information on how to generate a default footer and what +# special commands can be used inside the footer. +# +# Note: Only use a user-defined footer if you know what you are doing! +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_FOOTER = + +# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# LaTeX style sheets that are included after the standard style sheets created +# by doxygen. Using this option one can overrule certain style aspects. Doxygen +# will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_STYLESHEET = + +# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the LATEX_OUTPUT output +# directory. Note that the files will be copied as-is; there are no commands or +# markers available. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_FILES = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is +# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will +# contain links (just like the HTML output) instead of page references. This +# makes the output suitable for online browsing using a PDF viewer. +# The default value is: YES. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate +# the PDF file directly from the LaTeX files. Set this option to YES, to get a +# higher quality PDF documentation. +# The default value is: YES. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode +# command to the generated LaTeX files. This will instruct LaTeX to keep running +# if errors occur, instead of asking the user for help. This option is also used +# when generating formulas in HTML. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_BATCHMODE = NO + +# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the +# index chapters (such as File Index, Compound Index, etc.) in the output. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_HIDE_INDICES = NO + +# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source +# code with syntax highlighting in the LaTeX output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. See +# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. +# The default value is: plain. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_BIB_STYLE = plain + +#--------------------------------------------------------------------------- +# Configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The +# RTF output is optimized for Word 97 and may not look too pretty with other RTF +# readers/editors. +# The default value is: NO. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: rtf. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF +# documents. This may be useful for small projects and may help to save some +# trees in general. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will +# contain hyperlink fields. The RTF file will contain links (just like the HTML +# output) instead of page references. This makes the output suitable for online +# browsing using Word or some other Word compatible readers that support those +# fields. +# +# Note: WordPad (write) and others do not support links. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's config +# file, i.e. a series of assignments. You only have to provide replacements, +# missing definitions are set to their default value. +# +# See also section "Doxygen usage" for information on how to generate the +# default style sheet that doxygen normally uses. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an RTF document. Syntax is +# similar to doxygen's config file. A template extensions file can be generated +# using doxygen -e rtf extensionFile. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_EXTENSIONS_FILE = + +# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code +# with syntax highlighting in the RTF output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for +# classes and files. +# The default value is: NO. + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. A directory man3 will be created inside the directory specified by +# MAN_OUTPUT. +# The default directory is: man. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to the generated +# man pages. In case the manual section does not start with a number, the number +# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is +# optional. +# The default value is: .3. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_EXTENSION = .3 + +# The MAN_SUBDIR tag determines the name of the directory created within +# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by +# MAN_EXTENSION with the initial . removed. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_SUBDIR = + +# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it +# will generate one additional man file for each entity documented in the real +# man page(s). These additional files only source the real man page, but without +# them the man command would be unable to find the correct page. +# The default value is: NO. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that +# captures the structure of the code including all documentation. +# The default value is: NO. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: xml. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_OUTPUT = xml + +# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program +# listings (including syntax highlighting and cross-referencing information) to +# the XML output. Note that enabling this will significantly increase the size +# of the XML output. +# The default value is: YES. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- + +# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files +# that can be used to generate PDF. +# The default value is: NO. + +GENERATE_DOCBOOK = NO + +# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in +# front of it. +# The default directory is: docbook. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_OUTPUT = docbook + +# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the +# program listings (including syntax highlighting and cross-referencing +# information) to the DOCBOOK output. Note that enabling this will significantly +# increase the size of the DOCBOOK output. +# The default value is: NO. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_PROGRAMLISTING = NO + +#--------------------------------------------------------------------------- +# Configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an +# AutoGen Definitions (see http://autogen.sf.net) file that captures the +# structure of the code including all documentation. Note that this feature is +# still experimental and incomplete at the moment. +# The default value is: NO. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module +# file that captures the structure of the code including all documentation. +# +# Note that this feature is still experimental and incomplete at the moment. +# The default value is: NO. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary +# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI +# output from the Perl module output. +# The default value is: NO. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely +# formatted so it can be parsed by a human reader. This is useful if you want to +# understand what is going on. On the other hand, if this tag is set to NO, the +# size of the Perl module output will be much smaller and Perl will parse it +# just the same. +# The default value is: YES. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file are +# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful +# so different doxyrules.make files included by the same Makefile don't +# overwrite each other's variables. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all +# C-preprocessor directives found in the sources and include files. +# The default value is: YES. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names +# in the source code. If set to NO, only conditional compilation will be +# performed. Macro expansion can be done in a controlled way by setting +# EXPAND_ONLY_PREDEF to YES. +# The default value is: NO. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then +# the macro expansion is limited to the macros specified with the PREDEFINED and +# EXPAND_AS_DEFINED tags. +# The default value is: NO. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES, the include files in the +# INCLUDE_PATH will be searched if a #include is found. +# The default value is: YES. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by the +# preprocessor. +# This tag requires that the tag SEARCH_INCLUDES is set to YES. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will be +# used. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that are +# defined before the preprocessor is started (similar to the -D option of e.g. +# gcc). The argument of the tag is a list of macros of the form: name or +# name=definition (no spaces). If the definition and the "=" are omitted, "=1" +# is assumed. To prevent a macro definition from being undefined via #undef or +# recursively expanded use the := operator instead of the = operator. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +PREDEFINED = SWIGPYTHON USE_ARMA + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this +# tag can be used to specify a list of macro names that should be expanded. The +# macro definition that is found in the sources will be used. Use the PREDEFINED +# tag if you want to use a different macro definition that overrules the +# definition found in the source code. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will +# remove all references to function-like macros that are alone on a line, have +# an all uppercase name, and do not end with a semicolon. Such function macros +# are typically used for boiler-plate code, and will confuse the parser if not +# removed. +# The default value is: YES. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES tag can be used to specify one or more tag files. For each tag +# file the location of the external documentation should be added. The format of +# a tag file without this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where loc1 and loc2 can be relative or absolute paths or URLs. See the +# section "Linking to external documentation" for more information about the use +# of tag files. +# Note: Each tag file must have a unique name (where the name does NOT include +# the path). If a tag file is not located in the directory in which doxygen is +# run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create a +# tag file that is based on the input files it reads. See section "Linking to +# external documentation" for more information about the usage of tag files. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES, all external class will be listed in +# the class index. If set to NO, only the inherited external classes will be +# listed. +# The default value is: NO. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will be +# listed. +# The default value is: YES. + +EXTERNAL_GROUPS = YES + +# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in +# the related pages index. If set to NO, only the current project's pages will +# be listed. +# The default value is: YES. + +EXTERNAL_PAGES = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of 'which perl'). +# The default file (with absolute path) is: /usr/bin/perl. + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram +# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to +# NO turns the diagrams off. Note that this option also works with HAVE_DOT +# disabled, but it is recommended to install and use dot, since it yields more +# powerful graphs. +# The default value is: YES. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see: +# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# You can include diagrams made with dia in doxygen documentation. Doxygen will +# then run dia to produce the diagram and insert it in the documentation. The +# DIA_PATH tag allows you to specify the directory where the dia binary resides. +# If left empty dia is assumed to be found in the default search path. + +DIA_PATH = + +# If set to YES the inheritance and collaboration graphs will hide inheritance +# and usage relations if the target is undocumented or is not a class. +# The default value is: YES. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz (see: +# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent +# Bell Labs. The other options in this section have no effect if this option is +# set to NO +# The default value is: NO. + +HAVE_DOT = NO + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed +# to run in parallel. When set to 0 doxygen will base this on the number of +# processors available in the system. You can set it explicitly to a value +# larger than 0 to get control over the balance between CPU load and processing +# speed. +# Minimum value: 0, maximum value: 32, default value: 0. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_NUM_THREADS = 0 + +# When you want a differently looking font in the dot files that doxygen +# generates you can specify the font name using DOT_FONTNAME. You need to make +# sure dot is able to find the font, which can be done by putting it in a +# standard location or by setting the DOTFONTPATH environment variable or by +# setting DOT_FONTPATH to the directory containing the font. +# The default value is: Helvetica. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of +# dot graphs. +# Minimum value: 4, maximum value: 24, default value: 10. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the default font as specified with +# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set +# the path where dot can find it using this tag. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTPATH = + +# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for +# each documented class showing the direct and indirect inheritance relations. +# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a +# graph for each documented class showing the direct and indirect implementation +# dependencies (inheritance, containment, and class references variables) of the +# class with other documented classes. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for +# groups, showing the direct groups dependencies. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +UML_LOOK = NO + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside the +# class node. If there are many fields or methods and many nodes the graph may +# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the +# number of items for each type to make the size more manageable. Set this to 0 +# for no limit. Note that the threshold may be exceeded by 50% before the limit +# is enforced. So when you set the threshold to 10, up to 15 fields may appear, +# but if the number exceeds 15, the total amount of fields shown is limited to +# 10. +# Minimum value: 0, maximum value: 100, default value: 10. +# This tag requires that the tag HAVE_DOT is set to YES. + +UML_LIMIT_NUM_FIELDS = 10 + +# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and +# collaboration graphs will show the relations between templates and their +# instances. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +TEMPLATE_RELATIONS = NO + +# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to +# YES then doxygen will generate a graph for each documented file showing the +# direct and indirect include dependencies of the file with other documented +# files. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +INCLUDE_GRAPH = YES + +# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are +# set to YES then doxygen will generate a graph for each documented file showing +# the direct and indirect include dependencies of the file with other documented +# files. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH tag is set to YES then doxygen will generate a call +# dependency graph for every global function or class method. +# +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. Disabling a call graph can be +# accomplished by means of the command \hidecallgraph. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller +# dependency graph for every global function or class method. +# +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. Disabling a caller graph can be +# accomplished by means of the command \hidecallergraph. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical +# hierarchy of all classes instead of a textual one. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the +# dependencies a directory has on other directories in a graphical way. The +# dependency relations are determined by the #include relations between the +# files in the directories. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. For an explanation of the image formats see the section +# output formats in the documentation of the dot tool (Graphviz (see: +# http://www.graphviz.org/)). +# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order +# to make the SVG files visible in IE 9+ (other browsers do not have this +# requirement). +# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo, +# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and +# png:gdiplus:gdiplus. +# The default value is: png. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_IMAGE_FORMAT = svg + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# +# Note that this requires a modern browser other than Internet Explorer. Tested +# and working are Firefox, Chrome, Safari, and Opera. +# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make +# the SVG files visible. Older versions of IE do not have SVG support. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +INTERACTIVE_SVG = NO + +# The DOT_PATH tag can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the \dotfile +# command). +# This tag requires that the tag HAVE_DOT is set to YES. + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the \mscfile +# command). + +MSCFILE_DIRS = + +# The DIAFILE_DIRS tag can be used to specify one or more directories that +# contain dia files that are included in the documentation (see the \diafile +# command). + +DIAFILE_DIRS = + +# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the +# path where java can find the plantuml.jar file. If left blank, it is assumed +# PlantUML is not used or called during a preprocessing step. Doxygen will +# generate a warning when it encounters a \startuml command in this case and +# will not generate output for the diagram. + +PLANTUML_JAR_PATH = + +# When using plantuml, the specified paths are searched for files specified by +# the !include statement in a plantuml block. + +PLANTUML_INCLUDE_PATH = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes +# that will be shown in the graph. If the number of nodes in a graph becomes +# larger than this value, doxygen will truncate the graph, which is visualized +# by representing a node as a red box. Note that doxygen if the number of direct +# children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that +# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. +# Minimum value: 0, maximum value: 10000, default value: 50. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs +# generated by dot. A depth value of 3 means that only nodes reachable from the +# root by following a path via at most 3 edges will be shown. Nodes that lay +# further from the root node will be omitted. Note that setting this option to 1 +# or 2 may greatly reduce the computation time needed for large code bases. Also +# note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. +# Minimum value: 0, maximum value: 1000, default value: 0. +# This tag requires that the tag HAVE_DOT is set to YES. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not seem +# to support this out of the box. +# +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) support +# this, this feature is disabled by default. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page +# explaining the meaning of the various boxes and arrows in the dot generated +# graphs. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot +# files that are used to generate the various graphs. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_CLEANUP = YES diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/Doxyfile-dot b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/Doxyfile-dot new file mode 100644 index 0000000..8bd04ce --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/Doxyfile-dot @@ -0,0 +1,2434 @@ +# Doxyfile 1.8.10 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project. +# +# All text after a double hash (##) is considered a comment and is placed in +# front of the TAG it is preceding. +# +# All text after a single hash (#) is considered a comment and will be ignored. +# The format is: +# TAG = value [value, ...] +# For lists, items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (\" \"). + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +# This tag specifies the encoding used for all characters in the config file +# that follow. The default is UTF-8 which is also the encoding used for all text +# before the first occurrence of this tag. Doxygen uses libiconv (or the iconv +# built into libc) for the transcoding. See http://www.gnu.org/software/libiconv +# for the list of possible encodings. +# The default value is: UTF-8. + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by +# double-quotes, unless you are using Doxywizard) that should identify the +# project for which the documentation is generated. This name is used in the +# title of most generated pages and in a few other places. +# The default value is: My Project. + +PROJECT_NAME = "XMM - Probabilistic Models for Motion Recognition and Mapping" + +# The PROJECT_NUMBER tag can be used to enter a project or revision number. This +# could be handy for archiving the generated documentation or if some version +# control system is used. + +PROJECT_NUMBER = 1.0-beta + +# Using the PROJECT_BRIEF tag one can provide an optional one line description +# for a project that appears at the top of each page and should give viewer a +# quick idea about the purpose of the project. Keep the description short. + +PROJECT_BRIEF = + +# With the PROJECT_LOGO tag one can specify a logo or an icon that is included +# in the documentation. The maximum height of the logo should not exceed 55 +# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy +# the logo to the output directory. + +PROJECT_LOGO = doc-misc/xmm_featured.jpg + +# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path +# into which the generated documentation will be written. If a relative path is +# entered, it will be relative to the location where doxygen was started. If +# left blank the current directory will be used. + +OUTPUT_DIRECTORY = ./ + +# If the CREATE_SUBDIRS tag is set to YES then doxygen will create 4096 sub- +# directories (in 2 levels) under the output directory of each output format and +# will distribute the generated files over these directories. Enabling this +# option can be useful when feeding doxygen a huge amount of source files, where +# putting all generated files in the same directory would otherwise causes +# performance problems for the file system. +# The default value is: NO. + +CREATE_SUBDIRS = NO + +# If the ALLOW_UNICODE_NAMES tag is set to YES, doxygen will allow non-ASCII +# characters to appear in the names of generated files. If set to NO, non-ASCII +# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode +# U+3044. +# The default value is: NO. + +ALLOW_UNICODE_NAMES = NO + +# The OUTPUT_LANGUAGE tag is used to specify the language in which all +# documentation generated by doxygen is written. Doxygen will use this +# information to generate all constant output in the proper language. +# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Catalan, Chinese, +# Chinese-Traditional, Croatian, Czech, Danish, Dutch, English (United States), +# Esperanto, Farsi (Persian), Finnish, French, German, Greek, Hungarian, +# Indonesian, Italian, Japanese, Japanese-en (Japanese with English messages), +# Korean, Korean-en (Korean with English messages), Latvian, Lithuanian, +# Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese, Romanian, Russian, +# Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish, Swedish, Turkish, +# Ukrainian and Vietnamese. +# The default value is: English. + +OUTPUT_LANGUAGE = English + +# If the BRIEF_MEMBER_DESC tag is set to YES, doxygen will include brief member +# descriptions after the members that are listed in the file and class +# documentation (similar to Javadoc). Set to NO to disable this. +# The default value is: YES. + +BRIEF_MEMBER_DESC = YES + +# If the REPEAT_BRIEF tag is set to YES, doxygen will prepend the brief +# description of a member or function before the detailed description +# +# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the +# brief descriptions will be completely suppressed. +# The default value is: YES. + +REPEAT_BRIEF = YES + +# This tag implements a quasi-intelligent brief description abbreviator that is +# used to form the text in various listings. Each string in this list, if found +# as the leading text of the brief description, will be stripped from the text +# and the result, after processing the whole list, is used as the annotated +# text. Otherwise, the brief description is used as-is. If left blank, the +# following values are used ($name is automatically replaced with the name of +# the entity):The $name class, The $name widget, The $name file, is, provides, +# specifies, contains, represents, a, an and the. + +ABBREVIATE_BRIEF = "The $name class" \ + "The $name widget" \ + "The $name file" \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# doxygen will generate a detailed section even if there is only a brief +# description. +# The default value is: NO. + +ALWAYS_DETAILED_SEC = NO + +# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all +# inherited members of a class in the documentation of that class as if those +# members were ordinary class members. Constructors, destructors and assignment +# operators of the base classes will not be shown. +# The default value is: NO. + +INLINE_INHERITED_MEMB = YES + +# If the FULL_PATH_NAMES tag is set to YES, doxygen will prepend the full path +# before files name in the file list and in the header files. If set to NO the +# shortest path that makes the file name unique will be used +# The default value is: YES. + +FULL_PATH_NAMES = NO + +# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path. +# Stripping is only done if one of the specified strings matches the left-hand +# part of the path. The tag can be used to show relative paths in the file list. +# If left blank the directory from which doxygen is run is used as the path to +# strip. +# +# Note that you can specify absolute paths here, but also relative paths, which +# will be relative from the directory where doxygen is started. +# This tag requires that the tag FULL_PATH_NAMES is set to YES. + +STRIP_FROM_PATH = + +# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the +# path mentioned in the documentation of a class, which tells the reader which +# header file to include in order to use a class. If left blank only the name of +# the header file containing the class definition is used. Otherwise one should +# specify the list of include paths that are normally passed to the compiler +# using the -I flag. + +STRIP_FROM_INC_PATH = + +# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter (but +# less readable) file names. This can be useful is your file systems doesn't +# support long names like on DOS, Mac, or CD-ROM. +# The default value is: NO. + +SHORT_NAMES = NO + +# If the JAVADOC_AUTOBRIEF tag is set to YES then doxygen will interpret the +# first line (until the first dot) of a Javadoc-style comment as the brief +# description. If set to NO, the Javadoc-style will behave just like regular Qt- +# style comments (thus requiring an explicit @brief command for a brief +# description.) +# The default value is: NO. + +JAVADOC_AUTOBRIEF = NO + +# If the QT_AUTOBRIEF tag is set to YES then doxygen will interpret the first +# line (until the first dot) of a Qt-style comment as the brief description. If +# set to NO, the Qt-style will behave just like regular Qt-style comments (thus +# requiring an explicit \brief command for a brief description.) +# The default value is: NO. + +QT_AUTOBRIEF = NO + +# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make doxygen treat a +# multi-line C++ special comment block (i.e. a block of //! or /// comments) as +# a brief description. This used to be the default behavior. The new default is +# to treat a multi-line C++ comment block as a detailed description. Set this +# tag to YES if you prefer the old behavior instead. +# +# Note that setting this tag to YES also means that rational rose comments are +# not recognized any more. +# The default value is: NO. + +MULTILINE_CPP_IS_BRIEF = NO + +# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the +# documentation from any documented member that it re-implements. +# The default value is: YES. + +INHERIT_DOCS = YES + +# If the SEPARATE_MEMBER_PAGES tag is set to YES then doxygen will produce a new +# page for each member. If set to NO, the documentation of a member will be part +# of the file/class/namespace that contains it. +# The default value is: NO. + +SEPARATE_MEMBER_PAGES = NO + +# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen +# uses this value to replace tabs by spaces in code fragments. +# Minimum value: 1, maximum value: 16, default value: 4. + +TAB_SIZE = 4 + +# This tag can be used to specify a number of aliases that act as commands in +# the documentation. An alias has the form: +# name=value +# For example adding +# "sideeffect=@par Side Effects:\n" +# will allow you to put the command \sideeffect (or @sideeffect) in the +# documentation, which will result in a user-defined paragraph with heading +# "Side Effects:". You can put \n's in the value part of an alias to insert +# newlines. + +ALIASES = + +# This tag can be used to specify a number of word-keyword mappings (TCL only). +# A mapping has the form "name=value". For example adding "class=itcl::class" +# will allow you to use the command class in the itcl::class meaning. + +TCL_SUBST = + +# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources +# only. Doxygen will then generate output that is more tailored for C. For +# instance, some of the names that are used will be different. The list of all +# members will be omitted, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_FOR_C = NO + +# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or +# Python sources only. Doxygen will then generate output that is more tailored +# for that language. For instance, namespaces will be presented as packages, +# qualified scopes will look different, etc. +# The default value is: NO. + +OPTIMIZE_OUTPUT_JAVA = NO + +# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran +# sources. Doxygen will then generate output that is tailored for Fortran. +# The default value is: NO. + +OPTIMIZE_FOR_FORTRAN = NO + +# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL +# sources. Doxygen will then generate output that is tailored for VHDL. +# The default value is: NO. + +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen selects the parser to use depending on the extension of the files it +# parses. With this tag you can assign which parser to use for a given +# extension. Doxygen has a built-in mapping, but you can override or extend it +# using this tag. The format is ext=language, where ext is a file extension, and +# language is one of the parsers supported by doxygen: IDL, Java, Javascript, +# C#, C, C++, D, PHP, Objective-C, Python, Fortran (fixed format Fortran: +# FortranFixed, free formatted Fortran: FortranFree, unknown formatted Fortran: +# Fortran. In the later case the parser tries to guess whether the code is fixed +# or free formatted code, this is the default for Fortran type files), VHDL. For +# instance to make doxygen treat .inc files as Fortran files (default is PHP), +# and .f files as C (default is Fortran), use: inc=Fortran f=C. +# +# Note: For files without extension you can use no_extension as a placeholder. +# +# Note that for custom extensions you also need to set FILE_PATTERNS otherwise +# the files are not read by doxygen. + +EXTENSION_MAPPING = + +# If the MARKDOWN_SUPPORT tag is enabled then doxygen pre-processes all comments +# according to the Markdown format, which allows for more readable +# documentation. See http://daringfireball.net/projects/markdown/ for details. +# The output of markdown processing is further processed by doxygen, so you can +# mix doxygen, HTML, and XML commands with Markdown formatting. Disable only in +# case of backward compatibilities issues. +# The default value is: YES. + +MARKDOWN_SUPPORT = YES + +# When enabled doxygen tries to link words that correspond to documented +# classes, or namespaces to their corresponding documentation. Such a link can +# be prevented in individual cases by putting a % sign in front of the word or +# globally by setting AUTOLINK_SUPPORT to NO. +# The default value is: YES. + +AUTOLINK_SUPPORT = NO + +# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want +# to include (a tag file for) the STL sources as input, then you should set this +# tag to YES in order to let doxygen match functions declarations and +# definitions whose arguments contain STL classes (e.g. func(std::string); +# versus func(std::string) {}). This also make the inheritance and collaboration +# diagrams that involve STL classes more complete and accurate. +# The default value is: NO. + +BUILTIN_STL_SUPPORT = NO + +# If you use Microsoft's C++/CLI language, you should set this option to YES to +# enable parsing support. +# The default value is: NO. + +CPP_CLI_SUPPORT = NO + +# Set the SIP_SUPPORT tag to YES if your project consists of sip (see: +# http://www.riverbankcomputing.co.uk/software/sip/intro) sources only. Doxygen +# will parse them like normal C++ but will assume all classes use public instead +# of private inheritance when no explicit protection keyword is present. +# The default value is: NO. + +SIP_SUPPORT = NO + +# For Microsoft's IDL there are propget and propput attributes to indicate +# getter and setter methods for a property. Setting this option to YES will make +# doxygen to replace the get and set methods by a property in the documentation. +# This will only work if the methods are indeed getting or setting a simple +# type. If this is not the case, or you want to show the methods anyway, you +# should set this option to NO. +# The default value is: YES. + +IDL_PROPERTY_SUPPORT = YES + +# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC +# tag is set to YES then doxygen will reuse the documentation of the first +# member in the group (if any) for the other members of the group. By default +# all members of a group must be documented explicitly. +# The default value is: NO. + +DISTRIBUTE_GROUP_DOC = NO + +# If one adds a struct or class to a group and this option is enabled, then also +# any nested class or struct is added to the same group. By default this option +# is disabled and one has to add nested compounds explicitly via \ingroup. +# The default value is: NO. + +GROUP_NESTED_COMPOUNDS = NO + +# Set the SUBGROUPING tag to YES to allow class member groups of the same type +# (for instance a group of public functions) to be put as a subgroup of that +# type (e.g. under the Public Functions section). Set it to NO to prevent +# subgrouping. Alternatively, this can be done per class using the +# \nosubgrouping command. +# The default value is: YES. + +SUBGROUPING = YES + +# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions +# are shown inside the group in which they are included (e.g. using \ingroup) +# instead of on a separate page (for HTML and Man pages) or section (for LaTeX +# and RTF). +# +# Note that this feature does not work in combination with +# SEPARATE_MEMBER_PAGES. +# The default value is: NO. + +INLINE_GROUPED_CLASSES = NO + +# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions +# with only public data fields or simple typedef fields will be shown inline in +# the documentation of the scope in which they are defined (i.e. file, +# namespace, or group documentation), provided this scope is documented. If set +# to NO, structs, classes, and unions are shown on a separate page (for HTML and +# Man pages) or section (for LaTeX and RTF). +# The default value is: NO. + +INLINE_SIMPLE_STRUCTS = NO + +# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or +# enum is documented as struct, union, or enum with the name of the typedef. So +# typedef struct TypeS {} TypeT, will appear in the documentation as a struct +# with name TypeT. When disabled the typedef will appear as a member of a file, +# namespace, or class. And the struct will be named TypeS. This can typically be +# useful for C code in case the coding convention dictates that all compound +# types are typedef'ed and only the typedef is referenced, never the tag name. +# The default value is: NO. + +TYPEDEF_HIDES_STRUCT = NO + +# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This +# cache is used to resolve symbols given their name and scope. Since this can be +# an expensive process and often the same symbol appears multiple times in the +# code, doxygen keeps a cache of pre-resolved symbols. If the cache is too small +# doxygen will become slower. If the cache is too large, memory is wasted. The +# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range +# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536 +# symbols. At the end of a run doxygen will report the cache usage and suggest +# the optimal cache size from a speed point of view. +# Minimum value: 0, maximum value: 9, default value: 0. + +LOOKUP_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +# If the EXTRACT_ALL tag is set to YES, doxygen will assume all entities in +# documentation are documented, even if no documentation was available. Private +# class members and static file members will be hidden unless the +# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES. +# Note: This will also disable the warnings about undocumented members that are +# normally produced when WARNINGS is set to YES. +# The default value is: NO. + +EXTRACT_ALL = YES + +# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will +# be included in the documentation. +# The default value is: NO. + +EXTRACT_PRIVATE = YES + +# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal +# scope will be included in the documentation. +# The default value is: NO. + +EXTRACT_PACKAGE = NO + +# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be +# included in the documentation. +# The default value is: NO. + +EXTRACT_STATIC = NO + +# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined +# locally in source files will be included in the documentation. If set to NO, +# only classes defined in header files are included. Does not have any effect +# for Java sources. +# The default value is: YES. + +EXTRACT_LOCAL_CLASSES = YES + +# This flag is only useful for Objective-C code. If set to YES, local methods, +# which are defined in the implementation section but not in the interface are +# included in the documentation. If set to NO, only methods in the interface are +# included. +# The default value is: NO. + +EXTRACT_LOCAL_METHODS = NO + +# If this flag is set to YES, the members of anonymous namespaces will be +# extracted and appear in the documentation as a namespace called +# 'anonymous_namespace{file}', where file will be replaced with the base name of +# the file that contains the anonymous namespace. By default anonymous namespace +# are hidden. +# The default value is: NO. + +EXTRACT_ANON_NSPACES = NO + +# If the HIDE_UNDOC_MEMBERS tag is set to YES, doxygen will hide all +# undocumented members inside documented classes or files. If set to NO these +# members will be included in the various overviews, but no documentation +# section is generated. This option has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_MEMBERS = NO + +# If the HIDE_UNDOC_CLASSES tag is set to YES, doxygen will hide all +# undocumented classes that are normally visible in the class hierarchy. If set +# to NO, these classes will be included in the various overviews. This option +# has no effect if EXTRACT_ALL is enabled. +# The default value is: NO. + +HIDE_UNDOC_CLASSES = NO + +# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, doxygen will hide all friend +# (class|struct|union) declarations. If set to NO, these declarations will be +# included in the documentation. +# The default value is: NO. + +HIDE_FRIEND_COMPOUNDS = NO + +# If the HIDE_IN_BODY_DOCS tag is set to YES, doxygen will hide any +# documentation blocks found inside the body of a function. If set to NO, these +# blocks will be appended to the function's detailed documentation block. +# The default value is: NO. + +HIDE_IN_BODY_DOCS = NO + +# The INTERNAL_DOCS tag determines if documentation that is typed after a +# \internal command is included. If the tag is set to NO then the documentation +# will be excluded. Set it to YES to include the internal documentation. +# The default value is: NO. + +INTERNAL_DOCS = NO + +# If the CASE_SENSE_NAMES tag is set to NO then doxygen will only generate file +# names in lower-case letters. If set to YES, upper-case letters are also +# allowed. This is useful if you have classes or files whose names only differ +# in case and if your file system supports case sensitive file names. Windows +# and Mac users are advised to set this option to NO. +# The default value is: system dependent. + +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO then doxygen will show members with +# their full class and namespace scopes in the documentation. If set to YES, the +# scope will be hidden. +# The default value is: NO. + +HIDE_SCOPE_NAMES = NO + +# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then doxygen will +# append additional text to a page's title, such as Class Reference. If set to +# YES the compound reference will be hidden. +# The default value is: NO. + +HIDE_COMPOUND_REFERENCE= NO + +# If the SHOW_INCLUDE_FILES tag is set to YES then doxygen will put a list of +# the files that are included by a file in the documentation of that file. +# The default value is: YES. + +SHOW_INCLUDE_FILES = YES + +# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each +# grouped member an include statement to the documentation, telling the reader +# which file to include in order to use the member. +# The default value is: NO. + +SHOW_GROUPED_MEMB_INC = NO + +# If the FORCE_LOCAL_INCLUDES tag is set to YES then doxygen will list include +# files with double quotes in the documentation rather than with sharp brackets. +# The default value is: NO. + +FORCE_LOCAL_INCLUDES = NO + +# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the +# documentation for inline members. +# The default value is: YES. + +INLINE_INFO = YES + +# If the SORT_MEMBER_DOCS tag is set to YES then doxygen will sort the +# (detailed) documentation of file and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. +# The default value is: YES. + +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the brief +# descriptions of file, namespace and class members alphabetically by member +# name. If set to NO, the members will appear in declaration order. Note that +# this will also influence the order of the classes in the class list. +# The default value is: NO. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the +# (brief and detailed) documentation of class members so that constructors and +# destructors are listed first. If set to NO the constructors will appear in the +# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS. +# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief +# member documentation. +# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting +# detailed member documentation. +# The default value is: NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the hierarchy +# of group names into alphabetical order. If set to NO the group names will +# appear in their defined order. +# The default value is: NO. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by +# fully-qualified names, including namespaces. If set to NO, the class list will +# be sorted only by class name, not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the alphabetical +# list. +# The default value is: NO. + +SORT_BY_SCOPE_NAME = NO + +# If the STRICT_PROTO_MATCHING option is enabled and doxygen fails to do proper +# type resolution of all parameters of a function it will reject a match between +# the prototype and the implementation of a member function even if there is +# only one candidate or it is obvious which candidate to choose by doing a +# simple string match. By disabling STRICT_PROTO_MATCHING doxygen will still +# accept a match between prototype and implementation in such cases. +# The default value is: NO. + +STRICT_PROTO_MATCHING = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo +# list. This list is created by putting \todo commands in the documentation. +# The default value is: YES. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test +# list. This list is created by putting \test commands in the documentation. +# The default value is: YES. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug +# list. This list is created by putting \bug commands in the documentation. +# The default value is: YES. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO) +# the deprecated list. This list is created by putting \deprecated commands in +# the documentation. +# The default value is: YES. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional documentation +# sections, marked by \if <section_label> ... \endif and \cond <section_label> +# ... \endcond blocks. + +ENABLED_SECTIONS = DEVDOC + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the +# initial value of a variable or macro / define can have for it to appear in the +# documentation. If the initializer consists of more lines than specified here +# it will be hidden. Use a value of 0 to hide initializers completely. The +# appearance of the value of individual variables and macros / defines can be +# controlled using \showinitializer or \hideinitializer command in the +# documentation regardless of this setting. +# Minimum value: 0, maximum value: 10000, default value: 30. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at +# the bottom of the documentation of classes and structs. If set to YES, the +# list will mention the files that were used to generate the documentation. +# The default value is: YES. + +SHOW_USED_FILES = YES + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This +# will remove the Files entry from the Quick Index and from the Folder Tree View +# (if specified). +# The default value is: YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces +# page. This will remove the Namespaces entry from the Quick Index and from the +# Folder Tree View (if specified). +# The default value is: YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command command input-file, where command is the value of the +# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided +# by doxygen. Whatever the program writes to standard output is used as the file +# version. For an example see the documentation. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed +# by doxygen. The layout file controls the global structure of the generated +# output files in an output format independent way. To create the layout file +# that represents doxygen's defaults, run doxygen with the -l option. You can +# optionally specify a file name after the option, if omitted DoxygenLayout.xml +# will be used as the name of the layout file. +# +# Note that if you run doxygen from a directory containing a file called +# DoxygenLayout.xml, doxygen will parse it automatically even if the LAYOUT_FILE +# tag is left empty. + +LAYOUT_FILE = doc-misc/XmmDoxygenLayout.xml + +# The CITE_BIB_FILES tag can be used to specify one or more bib files containing +# the reference definitions. This must be a list of .bib files. The .bib +# extension is automatically appended if omitted. This requires the bibtex tool +# to be installed. See also http://en.wikipedia.org/wiki/BibTeX for more info. +# For LaTeX the style of the bibliography can be controlled using +# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the +# search path. See also \cite for info how to create references. + +CITE_BIB_FILES = + +#--------------------------------------------------------------------------- +# Configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated to +# standard output by doxygen. If QUIET is set to YES this implies that the +# messages are off. +# The default value is: NO. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated to standard error (stderr) by doxygen. If WARNINGS is set to YES +# this implies that the warnings are on. +# +# Tip: Turn warnings on while writing the documentation. +# The default value is: YES. + +WARNINGS = YES + +# If the WARN_IF_UNDOCUMENTED tag is set to YES then doxygen will generate +# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag +# will automatically be disabled. +# The default value is: YES. + +WARN_IF_UNDOCUMENTED = YES + +# If the WARN_IF_DOC_ERROR tag is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some parameters +# in a documented function, or documenting parameters that don't exist or using +# markup commands wrongly. +# The default value is: YES. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that +# are documented, but have no documentation for their parameters or return +# value. If set to NO, doxygen will only warn about wrong or incomplete +# parameter documentation, but not about the absence of documentation. +# The default value is: NO. + +WARN_NO_PARAMDOC = YES + +# The WARN_FORMAT tag determines the format of the warning messages that doxygen +# can produce. The string should contain the $file, $line, and $text tags, which +# will be replaced by the file and line number from which the warning originated +# and the warning text. Optionally the format may contain $version, which will +# be replaced by the version of the file (if it could be obtained via +# FILE_VERSION_FILTER) +# The default value is: $file:$line: $text. + +WARN_FORMAT = "$file:$line: $text" + +# The WARN_LOGFILE tag can be used to specify a file to which warning and error +# messages should be written. If left blank the output is written to standard +# error (stderr). + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# Configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag is used to specify the files and/or directories that contain +# documented source files. You may enter file names like myfile.cpp or +# directories like /usr/src/myproject. Separate the files or directories with +# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING +# Note: If this tag is empty the current directory is searched. + +INPUT = ../src/ \ + ../src/core/common \ + ../src/core/trainingset \ + ../src/core/model \ + ../src/core/distributions \ + ../src/models/kmeans \ + ../src/models/gmm \ + ../src/models/hmm \ + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding. Doxygen uses +# libiconv (or the iconv built into libc) for the transcoding. See the libiconv +# documentation (see: http://www.gnu.org/software/libiconv) for the list of +# possible encodings. +# The default value is: UTF-8. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and +# *.h) to filter out the source-files in the directories. +# +# Note that for custom extensions or not directly supported extensions you also +# need to set EXTENSION_MAPPING for the extension otherwise the files are not +# read by doxygen. +# +# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cpp, +# *.c++, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl, *.idl, *.ddl, *.odl, *.h, +# *.hh, *.hxx, *.hpp, *.h++, *.cs, *.d, *.php, *.php4, *.php5, *.phtml, *.inc, +# *.m, *.markdown, *.md, *.mm, *.dox, *.py, *.f90, *.f, *.for, *.tcl, *.vhd, +# *.vhdl, *.ucf, *.qsf, *.as and *.js. + +FILE_PATTERNS = *.c \ + *.cc \ + *.cxx \ + *.cpp \ + *.c++ \ + *.d \ + *.java \ + *.ii \ + *.ixx \ + *.ipp \ + *.i++ \ + *.inl \ + *.h \ + *.hh \ + *.hxx \ + *.hpp \ + *.h++ \ + *.idl \ + *.odl \ + *.cs \ + *.php \ + *.php3 \ + *.inc \ + *.m \ + *.markdown \ + *.md \ + *.mm \ + *.dox \ + *.py \ + *.f90 \ + *.f \ + *.for \ + *.vhd \ + *.vhdl + +# The RECURSIVE tag can be used to specify whether or not subdirectories should +# be searched for input files as well. +# The default value is: NO. + +RECURSIVE = NO + +# The EXCLUDE tag can be used to specify files and/or directories that should be +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. +# +# Note that relative paths are relative to the directory from which doxygen is +# run. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or +# directories that are symbolic links (a Unix file system feature) are excluded +# from the input. +# The default value is: NO. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test +# +# Note that the wildcards are matched against the file with absolute path, so to +# exclude all test directories use the pattern */test/* + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or directories +# that contain example code fragments that are included (see the \include +# command). + +EXAMPLE_PATH = doc-misc + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and +# *.h) to filter out the source-files in the directories. If left blank all +# files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude commands +# irrespective of the value of the RECURSIVE tag. +# The default value is: NO. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or directories +# that contain images that are to be included in the documentation (see the +# \image command). + +IMAGE_PATH = doc-misc + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command: +# +# <filter> <input-file> +# +# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the +# name of an input file. Doxygen will then use the output that the filter +# program writes to standard output. If FILTER_PATTERNS is specified, this tag +# will be ignored. +# +# Note that the filter must not add or remove lines; it is applied before the +# code is scanned, but not when the output code is generated. If lines are added +# or removed, the anchors will not be placed correctly. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. The filters are a list of the form: pattern=filter +# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how +# filters are used. If the FILTER_PATTERNS tag is empty or if none of the +# patterns match the file name, INPUT_FILTER is applied. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will also be used to filter the input files that are used for +# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES). +# The default value is: NO. + +FILTER_SOURCE_FILES = NO + +# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file +# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and +# it is also possible to disable source filtering for a specific pattern using +# *.ext= (so without naming a filter). +# This tag requires that the tag FILTER_SOURCE_FILES is set to YES. + +FILTER_SOURCE_PATTERNS = + +# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that +# is part of the input, its contents will be placed on the main page +# (index.html). This can be useful if you have a project on for instance GitHub +# and want to reuse the introduction page also for the doxygen output. + +USE_MDFILE_AS_MAINPAGE = + +#--------------------------------------------------------------------------- +# Configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will be +# generated. Documented entities will be cross-referenced with these sources. +# +# Note: To get rid of all source code in the generated output, make sure that +# also VERBATIM_HEADERS is set to NO. +# The default value is: NO. + +SOURCE_BROWSER = NO + +# Setting the INLINE_SOURCES tag to YES will include the body of functions, +# classes and enums directly into the documentation. +# The default value is: NO. + +INLINE_SOURCES = NO + +# Setting the STRIP_CODE_COMMENTS tag to YES will instruct doxygen to hide any +# special comment blocks from generated source code fragments. Normal C, C++ and +# Fortran comments will always remain visible. +# The default value is: YES. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES then for each documented +# function all documented functions referencing it will be listed. +# The default value is: NO. + +REFERENCED_BY_RELATION = NO + +# If the REFERENCES_RELATION tag is set to YES then for each documented function +# all documented entities called/used by that function will be listed. +# The default value is: NO. + +REFERENCES_RELATION = NO + +# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set +# to YES then the hyperlinks from functions in REFERENCES_RELATION and +# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will +# link to the documentation. +# The default value is: YES. + +REFERENCES_LINK_SOURCE = YES + +# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the +# source code will show a tooltip with additional information such as prototype, +# brief description and links to the definition and documentation. Since this +# will make the HTML file larger and loading of large files a bit slower, you +# can opt to disable this feature. +# The default value is: YES. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +SOURCE_TOOLTIPS = YES + +# If the USE_HTAGS tag is set to YES then the references to source code will +# point to the HTML generated by the htags(1) tool instead of doxygen built-in +# source browser. The htags tool is part of GNU's global source tagging system +# (see http://www.gnu.org/software/global/global.html). You will need version +# 4.8.6 or higher. +# +# To use it do the following: +# - Install the latest version of global +# - Enable SOURCE_BROWSER and USE_HTAGS in the config file +# - Make sure the INPUT points to the root of the source tree +# - Run doxygen as normal +# +# Doxygen will invoke htags (and that will in turn invoke gtags), so these +# tools must be available from the command line (i.e. in the search path). +# +# The result: instead of the source browser generated by doxygen, the links to +# source code will now point to the output of htags. +# The default value is: NO. +# This tag requires that the tag SOURCE_BROWSER is set to YES. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set the YES then doxygen will generate a +# verbatim copy of the header file for each class for which an include is +# specified. Set to NO to disable this. +# See also: Section \class. +# The default value is: YES. + +VERBATIM_HEADERS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all +# compounds will be generated. Enable this if the project contains a lot of +# classes, structs, unions or interfaces. +# The default value is: YES. + +ALPHABETICAL_INDEX = YES + +# The COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns in +# which the alphabetical index list will be split. +# Minimum value: 1, maximum value: 20, default value: 5. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all classes will +# be put under the same header in the alphabetical index. The IGNORE_PREFIX tag +# can be used to specify a prefix (or a list of prefixes) that should be ignored +# while generating the index headers. +# This tag requires that the tag ALPHABETICAL_INDEX is set to YES. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES, doxygen will generate HTML output +# The default value is: YES. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each +# generated HTML page (for example: .htm, .php, .asp). +# The default value is: .html. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a user-defined HTML header file for +# each generated HTML page. If the tag is left blank doxygen will generate a +# standard header. +# +# To get valid HTML the header file that includes any scripts and style sheets +# that doxygen needs, which is dependent on the configuration options used (e.g. +# the setting GENERATE_TREEVIEW). It is highly recommended to start with a +# default header using +# doxygen -w html new_header.html new_footer.html new_stylesheet.css +# YourConfigFile +# and then modify the file new_header.html. See also section "Doxygen usage" +# for information on how to generate the default header that doxygen normally +# uses. +# Note: The header is subject to change so you typically have to regenerate the +# default header when upgrading to a newer version of doxygen. For a description +# of the possible markers and block names see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_HEADER = doc-misc/header.html + +# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each +# generated HTML page. If the tag is left blank doxygen will generate a standard +# footer. See HTML_HEADER for more information on how to generate a default +# footer and what special commands can be used inside the footer. See also +# section "Doxygen usage" for information on how to generate the default footer +# that doxygen normally uses. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_FOOTER = doc-misc/footer.html + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style +# sheet that is used by each HTML page. It can be used to fine-tune the look of +# the HTML output. If left blank doxygen will generate a default style sheet. +# See also section "Doxygen usage" for information on how to generate the style +# sheet that doxygen normally uses. +# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as +# it is more robust and this tag (HTML_STYLESHEET) will in the future become +# obsolete. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_STYLESHEET = doc-misc/jdoxygen.css + +# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# cascading style sheets that are included after the standard style sheets +# created by doxygen. Using this option one can overrule certain style aspects. +# This is preferred over using HTML_STYLESHEET since it does not replace the +# standard style sheet and is therefore more robust against future updates. +# Doxygen will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). For an example see the documentation. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_STYLESHEET = doc-misc/jtabs.css + +# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the HTML output directory. Note +# that these files will be copied to the base HTML output directory. Use the +# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these +# files. In the HTML_STYLESHEET file, use the file name only. Also note that the +# files will be copied as-is; there are no commands or markers available. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_EXTRA_FILES = + +# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen +# will adjust the colors in the style sheet and background images according to +# this color. Hue is specified as an angle on a colorwheel, see +# http://en.wikipedia.org/wiki/Hue for more information. For instance the value +# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300 +# purple, and 360 is red again. +# Minimum value: 0, maximum value: 359, default value: 220. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_HUE = 220 + +# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors +# in the HTML output. For a value of 0 the output will use grayscales only. A +# value of 255 will produce the most vivid colors. +# Minimum value: 0, maximum value: 255, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_SAT = 100 + +# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the +# luminance component of the colors in the HTML output. Values below 100 +# gradually make the output lighter, whereas values above 100 make the output +# darker. The value divided by 100 is the actual gamma applied, so 80 represents +# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not +# change the gamma. +# Minimum value: 40, maximum value: 240, default value: 80. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_COLORSTYLE_GAMMA = 80 + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting this +# to YES can help to show when doxygen was last run and thus if the +# documentation is up to date. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_TIMESTAMP = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_DYNAMIC_SECTIONS = NO + +# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries +# shown in the various tree structured indices initially; the user can expand +# and collapse entries dynamically later on. Doxygen will expand the tree to +# such a level that at most the specified number of entries are visible (unless +# a fully collapsed tree already exceeds this amount). So setting the number of +# entries 1 will produce a full collapsed tree by default. 0 is a special value +# representing an infinite number of entries and will result in a full expanded +# tree by default. +# Minimum value: 0, maximum value: 9999, default value: 100. +# This tag requires that the tag GENERATE_HTML is set to YES. + +HTML_INDEX_NUM_ENTRIES = 100 + +# If the GENERATE_DOCSET tag is set to YES, additional index files will be +# generated that can be used as input for Apple's Xcode 3 integrated development +# environment (see: http://developer.apple.com/tools/xcode/), introduced with +# OSX 10.5 (Leopard). To create a documentation set, doxygen will generate a +# Makefile in the HTML output directory. Running make will produce the docset in +# that directory and running make install will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at +# startup. See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html +# for more information. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_DOCSET = NO + +# This tag determines the name of the docset feed. A documentation feed provides +# an umbrella under which multiple documentation sets from a single provider +# (such as a company or product suite) can be grouped. +# The default value is: Doxygen generated docs. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# This tag specifies a string that should uniquely identify the documentation +# set bundle. This should be a reverse domain-name style string, e.g. +# com.mycompany.MyDocSet. Doxygen will append .docset to the name. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify +# the documentation publisher. This should be a reverse domain-name style +# string, e.g. com.mycompany.MyDocSet.documentation. +# The default value is: org.doxygen.Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_ID = org.doxygen.Publisher + +# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher. +# The default value is: Publisher. +# This tag requires that the tag GENERATE_DOCSET is set to YES. + +DOCSET_PUBLISHER_NAME = Publisher + +# If the GENERATE_HTMLHELP tag is set to YES then doxygen generates three +# additional HTML index files: index.hhp, index.hhc, and index.hhk. The +# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop +# (see: http://www.microsoft.com/en-us/download/details.aspx?id=21138) on +# Windows. +# +# The HTML Help Workshop contains a compiler that can convert all HTML output +# generated by doxygen into a single compiled HTML file (.chm). Compiled HTML +# files are now used as the Windows 98 help format, and will replace the old +# Windows help format (.hlp) on all Windows platforms in the future. Compressed +# HTML files also contain an index, a table of contents, and you can search for +# words in the documentation. The HTML workshop also contains a viewer for +# compressed HTML files. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_HTMLHELP = NO + +# The CHM_FILE tag can be used to specify the file name of the resulting .chm +# file. You can add a path in front of the file if the result should not be +# written to the html output directory. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_FILE = + +# The HHC_LOCATION tag can be used to specify the location (absolute path +# including file name) of the HTML help compiler (hhc.exe). If non-empty, +# doxygen will try to run the HTML help compiler on the generated index.hhp. +# The file has to be specified with full path. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +HHC_LOCATION = + +# The GENERATE_CHI flag controls if a separate .chi index file is generated +# (YES) or that it should be included in the master .chm file (NO). +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +GENERATE_CHI = NO + +# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc) +# and project file content. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +CHM_INDEX_ENCODING = + +# The BINARY_TOC flag controls whether a binary table of contents is generated +# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it +# enables the Previous and Next buttons. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members to +# the table of contents of the HTML help documentation and to the tree view. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTMLHELP is set to YES. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and +# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that +# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help +# (.qch) of the generated HTML documentation. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify +# the file name of the resulting .qch file. The path specified is relative to +# the HTML output folder. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help +# Project output. For more information please see Qt Help Project / Namespace +# (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#namespace). +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt +# Help Project output. For more information please see Qt Help Project / Virtual +# Folders (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#virtual- +# folders). +# The default value is: doc. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_VIRTUAL_FOLDER = doc + +# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom +# filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the +# custom filter to add. For more information please see Qt Help Project / Custom +# Filters (see: http://qt-project.org/doc/qt-4.8/qthelpproject.html#custom- +# filters). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this +# project's filter section matches. Qt Help Project / Filter Attributes (see: +# http://qt-project.org/doc/qt-4.8/qthelpproject.html#filter-attributes). +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHP_SECT_FILTER_ATTRS = + +# The QHG_LOCATION tag can be used to specify the location of Qt's +# qhelpgenerator. If non-empty doxygen will try to run qhelpgenerator on the +# generated .qhp file. +# This tag requires that the tag GENERATE_QHP is set to YES. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be +# generated, together with the HTML files, they form an Eclipse help plugin. To +# install this plugin and make it available under the help contents menu in +# Eclipse, the contents of the directory containing the HTML and XML files needs +# to be copied into the plugins directory of eclipse. The name of the directory +# within the plugins directory should be the same as the ECLIPSE_DOC_ID value. +# After copying Eclipse needs to be restarted before the help appears. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the Eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have this +# name. Each documentation set should have its own identifier. +# The default value is: org.doxygen.Project. +# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# If you want full control over the layout of the generated HTML pages it might +# be necessary to disable the index and replace it with your own. The +# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top +# of each HTML page. A value of NO enables the index and the value YES disables +# it. Since the tabs in the index contain the same information as the navigation +# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +DISABLE_INDEX = NO + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. If the tag +# value is set to YES, a side panel will be generated containing a tree-like +# index structure (just like the one that is generated for HTML Help). For this +# to work a browser that supports JavaScript, DHTML, CSS and frames is required +# (i.e. any modern browser). Windows users are probably better off using the +# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can +# further fine-tune the look of the index. As an example, the default style +# sheet generated by doxygen has an example that shows how to put an image at +# the root of the tree instead of the PROJECT_NAME. Since the tree basically has +# the same information as the tab index, you could consider setting +# DISABLE_INDEX to YES when enabling this option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +GENERATE_TREEVIEW = NO + +# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that +# doxygen will group on one line in the generated HTML documentation. +# +# Note that a value of 0 will completely suppress the enum values from appearing +# in the overview section. +# Minimum value: 0, maximum value: 20, default value: 4. +# This tag requires that the tag GENERATE_HTML is set to YES. + +ENUM_VALUES_PER_LINE = 4 + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used +# to set the initial width (in pixels) of the frame in which the tree is shown. +# Minimum value: 0, maximum value: 1500, default value: 250. +# This tag requires that the tag GENERATE_HTML is set to YES. + +TREEVIEW_WIDTH = 250 + +# If the EXT_LINKS_IN_WINDOW option is set to YES, doxygen will open links to +# external symbols imported via tag files in a separate window. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +EXT_LINKS_IN_WINDOW = NO + +# Use this tag to change the font size of LaTeX formulas included as images in +# the HTML documentation. When you change the font size after a successful +# doxygen run you need to manually remove any form_*.png images from the HTML +# output directory to force them to be regenerated. +# Minimum value: 8, maximum value: 50, default value: 10. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_FONTSIZE = 10 + +# Use the FORMULA_TRANPARENT tag to determine whether or not the images +# generated for formulas are transparent PNGs. Transparent PNGs are not +# supported properly for IE 6.0, but are supported on all modern browsers. +# +# Note that when changing this option you need to delete any form_*.png files in +# the HTML output directory before the changes have effect. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +FORMULA_TRANSPARENT = YES + +# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see +# http://www.mathjax.org) which uses client side Javascript for the rendering +# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX +# installed or if you want to formulas look prettier in the HTML output. When +# enabled you may also need to install MathJax separately and configure the path +# to it using the MATHJAX_RELPATH option. +# The default value is: NO. +# This tag requires that the tag GENERATE_HTML is set to YES. + +USE_MATHJAX = YES + +# When MathJax is enabled you can set the default output format to be used for +# the MathJax output. See the MathJax site (see: +# http://docs.mathjax.org/en/latest/output.html) for more details. +# Possible values are: HTML-CSS (which is slower, but has the best +# compatibility), NativeMML (i.e. MathML) and SVG. +# The default value is: HTML-CSS. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_FORMAT = HTML-CSS + +# When MathJax is enabled you need to specify the location relative to the HTML +# output directory using the MATHJAX_RELPATH option. The destination directory +# should contain the MathJax.js script. For instance, if the mathjax directory +# is located at the same level as the HTML output directory, then +# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax +# Content Delivery Network so you can quickly see the result without installing +# MathJax. However, it is strongly recommended to install a local copy of +# MathJax from http://www.mathjax.org before deployment. +# The default value is: http://cdn.mathjax.org/mathjax/latest. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_RELPATH = http://cdn.mathjax.org/mathjax/latest + +# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax +# extension names that should be enabled during MathJax rendering. For example +# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_EXTENSIONS = + +# The MATHJAX_CODEFILE tag can be used to specify a file with javascript pieces +# of code that will be used on startup of the MathJax code. See the MathJax site +# (see: http://docs.mathjax.org/en/latest/output.html) for more details. For an +# example see the documentation. +# This tag requires that the tag USE_MATHJAX is set to YES. + +MATHJAX_CODEFILE = + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for +# the HTML output. The underlying search engine uses javascript and DHTML and +# should work on any modern browser. Note that when using HTML help +# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) +# there is already a search function so this one should typically be disabled. +# For large projects the javascript based search engine can be slow, then +# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to +# search using the keyboard; to jump to the search box use <access key> + S +# (what the <access key> is depends on the OS and browser, but it is typically +# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down +# key> to jump into the search results window, the results can be navigated +# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel +# the search. The filter options can be selected when the cursor is inside the +# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys> +# to select a filter and <Enter> or <escape> to activate or cancel the filter +# option. +# The default value is: YES. +# This tag requires that the tag GENERATE_HTML is set to YES. + +SEARCHENGINE = NO + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be +# implemented using a web server instead of a web client using Javascript. There +# are two flavors of web server based searching depending on the EXTERNAL_SEARCH +# setting. When disabled, doxygen will generate a PHP script for searching and +# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing +# and searching needs to be provided by external tools. See the section +# "External Indexing and Searching" for details. +# The default value is: NO. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SERVER_BASED_SEARCH = NO + +# When EXTERNAL_SEARCH tag is enabled doxygen will no longer generate the PHP +# script for searching. Instead the search results are written to an XML file +# which needs to be processed by an external indexer. Doxygen will invoke an +# external search engine pointed to by the SEARCHENGINE_URL option to obtain the +# search results. +# +# Doxygen ships with an example indexer (doxyindexer) and search engine +# (doxysearch.cgi) which are based on the open source search engine library +# Xapian (see: http://xapian.org/). +# +# See the section "External Indexing and Searching" for details. +# The default value is: NO. +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTERNAL_SEARCH = NO + +# The SEARCHENGINE_URL should point to a search engine hosted by a web server +# which will return the search results when EXTERNAL_SEARCH is enabled. +# +# Doxygen ships with an example indexer (doxyindexer) and search engine +# (doxysearch.cgi) which are based on the open source search engine library +# Xapian (see: http://xapian.org/). See the section "External Indexing and +# Searching" for details. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SEARCHENGINE_URL = + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed +# search data is written to a file for indexing by an external tool. With the +# SEARCHDATA_FILE tag the name of this file can be specified. +# The default file is: searchdata.xml. +# This tag requires that the tag SEARCHENGINE is set to YES. + +SEARCHDATA_FILE = searchdata.xml + +# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the +# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is +# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple +# projects and redirect the results back to the right project. +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTERNAL_SEARCH_ID = + +# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through doxygen +# projects other than the one defined by this configuration file, but that are +# all added to the same external search index. Each project needs to have a +# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of +# to a relative location where the documentation can be found. The format is: +# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ... +# This tag requires that the tag SEARCHENGINE is set to YES. + +EXTRA_SEARCH_MAPPINGS = + +#--------------------------------------------------------------------------- +# Configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +# If the GENERATE_LATEX tag is set to YES, doxygen will generate LaTeX output. +# The default value is: YES. + +GENERATE_LATEX = NO + +# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: latex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_OUTPUT = latex + +# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be +# invoked. +# +# Note that when enabling USE_PDFLATEX this option is only used for generating +# bitmaps for formulas in the HTML output, but not in the Makefile that is +# written to the output directory. +# The default file is: latex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_CMD_NAME = latex + +# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate +# index for LaTeX. +# The default file is: makeindex. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +MAKEINDEX_CMD_NAME = makeindex + +# If the COMPACT_LATEX tag is set to YES, doxygen generates more compact LaTeX +# documents. This may be useful for small projects and may help to save some +# trees in general. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +COMPACT_LATEX = NO + +# The PAPER_TYPE tag can be used to set the paper type that is used by the +# printer. +# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x +# 14 inches) and executive (7.25 x 10.5 inches). +# The default value is: a4. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +PAPER_TYPE = a4 + +# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names +# that should be included in the LaTeX output. The package can be specified just +# by its name or with the correct syntax as to be used with the LaTeX +# \usepackage command. To get the times font for instance you can specify : +# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times} +# To use the option intlimits with the amsmath package you can specify: +# EXTRA_PACKAGES=[intlimits]{amsmath} +# If left blank no extra packages will be included. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +EXTRA_PACKAGES = + +# The LATEX_HEADER tag can be used to specify a personal LaTeX header for the +# generated LaTeX document. The header should contain everything until the first +# chapter. If it is left blank doxygen will generate a standard header. See +# section "Doxygen usage" for information on how to let doxygen write the +# default header to a separate file. +# +# Note: Only use a user-defined header if you know what you are doing! The +# following commands have a special meaning inside the header: $title, +# $datetime, $date, $doxygenversion, $projectname, $projectnumber, +# $projectbrief, $projectlogo. Doxygen will replace $title with the empty +# string, for the replacement values of the other commands the user is referred +# to HTML_HEADER. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_HEADER = + +# The LATEX_FOOTER tag can be used to specify a personal LaTeX footer for the +# generated LaTeX document. The footer should contain everything after the last +# chapter. If it is left blank doxygen will generate a standard footer. See +# LATEX_HEADER for more information on how to generate a default footer and what +# special commands can be used inside the footer. +# +# Note: Only use a user-defined footer if you know what you are doing! +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_FOOTER = + +# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined +# LaTeX style sheets that are included after the standard style sheets created +# by doxygen. Using this option one can overrule certain style aspects. Doxygen +# will copy the style sheet files to the output directory. +# Note: The order of the extra style sheet files is of importance (e.g. the last +# style sheet in the list overrules the setting of the previous ones in the +# list). +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_STYLESHEET = + +# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or +# other source files which should be copied to the LATEX_OUTPUT output +# directory. Note that the files will be copied as-is; there are no commands or +# markers available. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_EXTRA_FILES = + +# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is +# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will +# contain links (just like the HTML output) instead of page references. This +# makes the output suitable for online browsing using a PDF viewer. +# The default value is: YES. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +PDF_HYPERLINKS = YES + +# If the USE_PDFLATEX tag is set to YES, doxygen will use pdflatex to generate +# the PDF file directly from the LaTeX files. Set this option to YES, to get a +# higher quality PDF documentation. +# The default value is: YES. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +USE_PDFLATEX = YES + +# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \batchmode +# command to the generated LaTeX files. This will instruct LaTeX to keep running +# if errors occur, instead of asking the user for help. This option is also used +# when generating formulas in HTML. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_BATCHMODE = NO + +# If the LATEX_HIDE_INDICES tag is set to YES then doxygen will not include the +# index chapters (such as File Index, Compound Index, etc.) in the output. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_HIDE_INDICES = NO + +# If the LATEX_SOURCE_CODE tag is set to YES then doxygen will include source +# code with syntax highlighting in the LaTeX output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_SOURCE_CODE = NO + +# The LATEX_BIB_STYLE tag can be used to specify the style to use for the +# bibliography, e.g. plainnat, or ieeetr. See +# http://en.wikipedia.org/wiki/BibTeX and \cite for more info. +# The default value is: plain. +# This tag requires that the tag GENERATE_LATEX is set to YES. + +LATEX_BIB_STYLE = plain + +#--------------------------------------------------------------------------- +# Configuration options related to the RTF output +#--------------------------------------------------------------------------- + +# If the GENERATE_RTF tag is set to YES, doxygen will generate RTF output. The +# RTF output is optimized for Word 97 and may not look too pretty with other RTF +# readers/editors. +# The default value is: NO. + +GENERATE_RTF = NO + +# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: rtf. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_OUTPUT = rtf + +# If the COMPACT_RTF tag is set to YES, doxygen generates more compact RTF +# documents. This may be useful for small projects and may help to save some +# trees in general. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +COMPACT_RTF = NO + +# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will +# contain hyperlink fields. The RTF file will contain links (just like the HTML +# output) instead of page references. This makes the output suitable for online +# browsing using Word or some other Word compatible readers that support those +# fields. +# +# Note: WordPad (write) and others do not support links. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_HYPERLINKS = NO + +# Load stylesheet definitions from file. Syntax is similar to doxygen's config +# file, i.e. a series of assignments. You only have to provide replacements, +# missing definitions are set to their default value. +# +# See also section "Doxygen usage" for information on how to generate the +# default style sheet that doxygen normally uses. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_STYLESHEET_FILE = + +# Set optional variables used in the generation of an RTF document. Syntax is +# similar to doxygen's config file. A template extensions file can be generated +# using doxygen -e rtf extensionFile. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_EXTENSIONS_FILE = + +# If the RTF_SOURCE_CODE tag is set to YES then doxygen will include source code +# with syntax highlighting in the RTF output. +# +# Note that which sources are shown also depends on other settings such as +# SOURCE_BROWSER. +# The default value is: NO. +# This tag requires that the tag GENERATE_RTF is set to YES. + +RTF_SOURCE_CODE = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the man page output +#--------------------------------------------------------------------------- + +# If the GENERATE_MAN tag is set to YES, doxygen will generate man pages for +# classes and files. +# The default value is: NO. + +GENERATE_MAN = NO + +# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. A directory man3 will be created inside the directory specified by +# MAN_OUTPUT. +# The default directory is: man. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_OUTPUT = man + +# The MAN_EXTENSION tag determines the extension that is added to the generated +# man pages. In case the manual section does not start with a number, the number +# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is +# optional. +# The default value is: .3. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_EXTENSION = .3 + +# The MAN_SUBDIR tag determines the name of the directory created within +# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by +# MAN_EXTENSION with the initial . removed. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_SUBDIR = + +# If the MAN_LINKS tag is set to YES and doxygen generates man output, then it +# will generate one additional man file for each entity documented in the real +# man page(s). These additional files only source the real man page, but without +# them the man command would be unable to find the correct page. +# The default value is: NO. +# This tag requires that the tag GENERATE_MAN is set to YES. + +MAN_LINKS = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the XML output +#--------------------------------------------------------------------------- + +# If the GENERATE_XML tag is set to YES, doxygen will generate an XML file that +# captures the structure of the code including all documentation. +# The default value is: NO. + +GENERATE_XML = NO + +# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a +# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of +# it. +# The default directory is: xml. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_OUTPUT = xml + +# If the XML_PROGRAMLISTING tag is set to YES, doxygen will dump the program +# listings (including syntax highlighting and cross-referencing information) to +# the XML output. Note that enabling this will significantly increase the size +# of the XML output. +# The default value is: YES. +# This tag requires that the tag GENERATE_XML is set to YES. + +XML_PROGRAMLISTING = YES + +#--------------------------------------------------------------------------- +# Configuration options related to the DOCBOOK output +#--------------------------------------------------------------------------- + +# If the GENERATE_DOCBOOK tag is set to YES, doxygen will generate Docbook files +# that can be used to generate PDF. +# The default value is: NO. + +GENERATE_DOCBOOK = NO + +# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in +# front of it. +# The default directory is: docbook. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_OUTPUT = docbook + +# If the DOCBOOK_PROGRAMLISTING tag is set to YES, doxygen will include the +# program listings (including syntax highlighting and cross-referencing +# information) to the DOCBOOK output. Note that enabling this will significantly +# increase the size of the DOCBOOK output. +# The default value is: NO. +# This tag requires that the tag GENERATE_DOCBOOK is set to YES. + +DOCBOOK_PROGRAMLISTING = NO + +#--------------------------------------------------------------------------- +# Configuration options for the AutoGen Definitions output +#--------------------------------------------------------------------------- + +# If the GENERATE_AUTOGEN_DEF tag is set to YES, doxygen will generate an +# AutoGen Definitions (see http://autogen.sf.net) file that captures the +# structure of the code including all documentation. Note that this feature is +# still experimental and incomplete at the moment. +# The default value is: NO. + +GENERATE_AUTOGEN_DEF = NO + +#--------------------------------------------------------------------------- +# Configuration options related to the Perl module output +#--------------------------------------------------------------------------- + +# If the GENERATE_PERLMOD tag is set to YES, doxygen will generate a Perl module +# file that captures the structure of the code including all documentation. +# +# Note that this feature is still experimental and incomplete at the moment. +# The default value is: NO. + +GENERATE_PERLMOD = NO + +# If the PERLMOD_LATEX tag is set to YES, doxygen will generate the necessary +# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI +# output from the Perl module output. +# The default value is: NO. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_LATEX = NO + +# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely +# formatted so it can be parsed by a human reader. This is useful if you want to +# understand what is going on. On the other hand, if this tag is set to NO, the +# size of the Perl module output will be much smaller and Perl will parse it +# just the same. +# The default value is: YES. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_PRETTY = YES + +# The names of the make variables in the generated doxyrules.make file are +# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful +# so different doxyrules.make files included by the same Makefile don't +# overwrite each other's variables. +# This tag requires that the tag GENERATE_PERLMOD is set to YES. + +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES, doxygen will evaluate all +# C-preprocessor directives found in the sources and include files. +# The default value is: YES. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES, doxygen will expand all macro names +# in the source code. If set to NO, only conditional compilation will be +# performed. Macro expansion can be done in a controlled way by setting +# EXPAND_ONLY_PREDEF to YES. +# The default value is: NO. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +MACRO_EXPANSION = NO + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then +# the macro expansion is limited to the macros specified with the PREDEFINED and +# EXPAND_AS_DEFINED tags. +# The default value is: NO. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +EXPAND_ONLY_PREDEF = NO + +# If the SEARCH_INCLUDES tag is set to YES, the include files in the +# INCLUDE_PATH will be searched if a #include is found. +# The default value is: YES. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by the +# preprocessor. +# This tag requires that the tag SEARCH_INCLUDES is set to YES. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will be +# used. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that are +# defined before the preprocessor is started (similar to the -D option of e.g. +# gcc). The argument of the tag is a list of macros of the form: name or +# name=definition (no spaces). If the definition and the "=" are omitted, "=1" +# is assumed. To prevent a macro definition from being undefined via #undef or +# recursively expanded use the := operator instead of the = operator. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +PREDEFINED = SWIGPYTHON + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this +# tag can be used to specify a list of macro names that should be expanded. The +# macro definition that is found in the sources will be used. Use the PREDEFINED +# tag if you want to use a different macro definition that overrules the +# definition found in the source code. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +EXPAND_AS_DEFINED = + +# If the SKIP_FUNCTION_MACROS tag is set to YES then doxygen's preprocessor will +# remove all references to function-like macros that are alone on a line, have +# an all uppercase name, and do not end with a semicolon. Such function macros +# are typically used for boiler-plate code, and will confuse the parser if not +# removed. +# The default value is: YES. +# This tag requires that the tag ENABLE_PREPROCESSING is set to YES. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration options related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES tag can be used to specify one or more tag files. For each tag +# file the location of the external documentation should be added. The format of +# a tag file without this location is as follows: +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where loc1 and loc2 can be relative or absolute paths or URLs. See the +# section "Linking to external documentation" for more information about the use +# of tag files. +# Note: Each tag file must have a unique name (where the name does NOT include +# the path). If a tag file is not located in the directory in which doxygen is +# run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create a +# tag file that is based on the input files it reads. See section "Linking to +# external documentation" for more information about the usage of tag files. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES, all external class will be listed in +# the class index. If set to NO, only the inherited external classes will be +# listed. +# The default value is: NO. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will be +# listed. +# The default value is: YES. + +EXTERNAL_GROUPS = YES + +# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in +# the related pages index. If set to NO, only the current project's pages will +# be listed. +# The default value is: YES. + +EXTERNAL_PAGES = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of 'which perl'). +# The default file (with absolute path) is: /usr/bin/perl. + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES, doxygen will generate a class diagram +# (in HTML and LaTeX) for classes with base or super classes. Setting the tag to +# NO turns the diagrams off. Note that this option also works with HAVE_DOT +# disabled, but it is recommended to install and use dot, since it yields more +# powerful graphs. +# The default value is: YES. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see: +# http://www.mcternan.me.uk/mscgen/)) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# You can include diagrams made with dia in doxygen documentation. Doxygen will +# then run dia to produce the diagram and insert it in the documentation. The +# DIA_PATH tag allows you to specify the directory where the dia binary resides. +# If left empty dia is assumed to be found in the default search path. + +DIA_PATH = + +# If set to YES the inheritance and collaboration graphs will hide inheritance +# and usage relations if the target is undocumented or is not a class. +# The default value is: YES. + +HIDE_UNDOC_RELATIONS = YES + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz (see: +# http://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent +# Bell Labs. The other options in this section have no effect if this option is +# set to NO +# The default value is: NO. + +HAVE_DOT = YES + +# The DOT_NUM_THREADS specifies the number of dot invocations doxygen is allowed +# to run in parallel. When set to 0 doxygen will base this on the number of +# processors available in the system. You can set it explicitly to a value +# larger than 0 to get control over the balance between CPU load and processing +# speed. +# Minimum value: 0, maximum value: 32, default value: 0. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_NUM_THREADS = 0 + +# When you want a differently looking font in the dot files that doxygen +# generates you can specify the font name using DOT_FONTNAME. You need to make +# sure dot is able to find the font, which can be done by putting it in a +# standard location or by setting the DOTFONTPATH environment variable or by +# setting DOT_FONTPATH to the directory containing the font. +# The default value is: Helvetica. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTNAME = Helvetica + +# The DOT_FONTSIZE tag can be used to set the size (in points) of the font of +# dot graphs. +# Minimum value: 4, maximum value: 24, default value: 10. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the default font as specified with +# DOT_FONTNAME. If you specify a different font using DOT_FONTNAME you can set +# the path where dot can find it using this tag. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_FONTPATH = + +# If the CLASS_GRAPH tag is set to YES then doxygen will generate a graph for +# each documented class showing the direct and indirect inheritance relations. +# Setting this tag to YES will force the CLASS_DIAGRAMS tag to NO. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH tag is set to YES then doxygen will generate a +# graph for each documented class showing the direct and indirect implementation +# dependencies (inheritance, containment, and class references variables) of the +# class with other documented classes. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +COLLABORATION_GRAPH = YES + +# If the GROUP_GRAPHS tag is set to YES then doxygen will generate a graph for +# groups, showing the direct groups dependencies. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES, doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +UML_LOOK = NO + +# If the UML_LOOK tag is enabled, the fields and methods are shown inside the +# class node. If there are many fields or methods and many nodes the graph may +# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the +# number of items for each type to make the size more manageable. Set this to 0 +# for no limit. Note that the threshold may be exceeded by 50% before the limit +# is enforced. So when you set the threshold to 10, up to 15 fields may appear, +# but if the number exceeds 15, the total amount of fields shown is limited to +# 10. +# Minimum value: 0, maximum value: 100, default value: 10. +# This tag requires that the tag HAVE_DOT is set to YES. + +UML_LIMIT_NUM_FIELDS = 10 + +# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and +# collaboration graphs will show the relations between templates and their +# instances. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +TEMPLATE_RELATIONS = NO + +# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to +# YES then doxygen will generate a graph for each documented file showing the +# direct and indirect include dependencies of the file with other documented +# files. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +INCLUDE_GRAPH = YES + +# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are +# set to YES then doxygen will generate a graph for each documented file showing +# the direct and indirect include dependencies of the file with other documented +# files. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH tag is set to YES then doxygen will generate a call +# dependency graph for every global function or class method. +# +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable call graphs for selected +# functions only using the \callgraph command. Disabling a call graph can be +# accomplished by means of the command \hidecallgraph. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +CALL_GRAPH = NO + +# If the CALLER_GRAPH tag is set to YES then doxygen will generate a caller +# dependency graph for every global function or class method. +# +# Note that enabling this option will significantly increase the time of a run. +# So in most cases it will be better to enable caller graphs for selected +# functions only using the \callergraph command. Disabling a caller graph can be +# accomplished by means of the command \hidecallergraph. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +CALLER_GRAPH = NO + +# If the GRAPHICAL_HIERARCHY tag is set to YES then doxygen will graphical +# hierarchy of all classes instead of a textual one. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH tag is set to YES then doxygen will show the +# dependencies a directory has on other directories in a graphical way. The +# dependency relations are determined by the #include relations between the +# files in the directories. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. For an explanation of the image formats see the section +# output formats in the documentation of the dot tool (Graphviz (see: +# http://www.graphviz.org/)). +# Note: If you choose svg you need to set HTML_FILE_EXTENSION to xhtml in order +# to make the SVG files visible in IE 9+ (other browsers do not have this +# requirement). +# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo, +# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus and +# png:gdiplus:gdiplus. +# The default value is: png. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_IMAGE_FORMAT = svg + +# If DOT_IMAGE_FORMAT is set to svg, then this option can be set to YES to +# enable generation of interactive SVG images that allow zooming and panning. +# +# Note that this requires a modern browser other than Internet Explorer. Tested +# and working are Firefox, Chrome, Safari, and Opera. +# Note: For IE 9+ you need to set HTML_FILE_EXTENSION to xhtml in order to make +# the SVG files visible. Older versions of IE do not have SVG support. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +INTERACTIVE_SVG = NO + +# The DOT_PATH tag can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the \dotfile +# command). +# This tag requires that the tag HAVE_DOT is set to YES. + +DOTFILE_DIRS = + +# The MSCFILE_DIRS tag can be used to specify one or more directories that +# contain msc files that are included in the documentation (see the \mscfile +# command). + +MSCFILE_DIRS = + +# The DIAFILE_DIRS tag can be used to specify one or more directories that +# contain dia files that are included in the documentation (see the \diafile +# command). + +DIAFILE_DIRS = + +# When using plantuml, the PLANTUML_JAR_PATH tag should be used to specify the +# path where java can find the plantuml.jar file. If left blank, it is assumed +# PlantUML is not used or called during a preprocessing step. Doxygen will +# generate a warning when it encounters a \startuml command in this case and +# will not generate output for the diagram. + +PLANTUML_JAR_PATH = + +# When using plantuml, the specified paths are searched for files specified by +# the !include statement in a plantuml block. + +PLANTUML_INCLUDE_PATH = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes +# that will be shown in the graph. If the number of nodes in a graph becomes +# larger than this value, doxygen will truncate the graph, which is visualized +# by representing a node as a red box. Note that doxygen if the number of direct +# children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that +# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. +# Minimum value: 0, maximum value: 10000, default value: 50. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs +# generated by dot. A depth value of 3 means that only nodes reachable from the +# root by following a path via at most 3 edges will be shown. Nodes that lay +# further from the root node will be omitted. Note that setting this option to 1 +# or 2 may greatly reduce the computation time needed for large code bases. Also +# note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. +# Minimum value: 0, maximum value: 1000, default value: 0. +# This tag requires that the tag HAVE_DOT is set to YES. + +MAX_DOT_GRAPH_DEPTH = 0 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not seem +# to support this out of the box. +# +# Warning: Depending on the platform used, enabling this option may lead to +# badly anti-aliased labels on the edges of a graph (i.e. they become hard to +# read). +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) support +# this, this feature is disabled by default. +# The default value is: NO. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES doxygen will generate a legend page +# explaining the meaning of the various boxes and arrows in the dot generated +# graphs. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +GENERATE_LEGEND = YES + +# If the DOT_CLEANUP tag is set to YES, doxygen will remove the intermediate dot +# files that are used to generate the various graphs. +# The default value is: YES. +# This tag requires that the tag HAVE_DOT is set to YES. + +DOT_CLEANUP = YES diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/QuickStart_Python.html b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/QuickStart_Python.html new file mode 100644 index 0000000..24b9938 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/QuickStart_Python.html @@ -0,0 +1,2086 @@ +<!DOCTYPE html> +<html> +<head><meta charset="utf-8" /> +<title>QuickStart_Python</title> + +<script src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.1.10/require.min.js"></script> +<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script> + +<style type="text/css"> + /*! +* +* Twitter Bootstrap +* +*//*! normalize.css v3.0.2 | MIT License | git.io/normalize */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%;font-size:10px;-webkit-tap-highlight-color:transparent}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}abbr[title]{border-bottom:1px dotted}b,optgroup,strong{font-weight:700}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0;vertical-align:middle}svg:not(:root){overflow:hidden}hr{-moz-box-sizing:content-box;box-sizing:content-box;height:0}pre,textarea{overflow:auto}code,kbd,pre,samp{font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input{line-height:normal}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}/*! Source: https://github.com/h5bp/html5-boilerplate/blob/master/src/css/main.css */@media print{*,:after,:before{background:0 0!important;color:#000!important;box-shadow:none!important;text-shadow:none!important}a,a:visited{text-decoration:underline}a[href]:after{content:" (" attr(href)")"}abbr[title]:after{content:" (" attr(title)")"}a[href^="javascript:"]:after,a[href^="#"]:after{content:""}blockquote,pre{border:1px solid #999;page-break-inside:avoid}thead{display:table-header-group}img,tr{page-break-inside:avoid}img{max-width:100%!important}h2,h3,p{orphans:3;widows:3}h2,h3{page-break-after:avoid}select{background:#fff!important}.navbar{display:none}.btn>.caret,.dropup>.btn>.caret{border-top-color:#000!important}.label{border:1px solid #000}.table{border-collapse:collapse!important}.table td,.table th{background-color:#fff!important}.table-bordered td,.table-bordered th{border:1px solid #ddd!important}}@font-face{font-family:'Glyphicons Halflings';src:url(../components/bootstrap/fonts/glyphicons-halflings-regular.eot);src:url(../components/bootstrap/fonts/glyphicons-halflings-regular.eot?#iefix)format('embedded-opentype'),url(../components/bootstrap/fonts/glyphicons-halflings-regular.woff2)format('woff2'),url(../components/bootstrap/fonts/glyphicons-halflings-regular.woff)format('woff'),url(../components/bootstrap/fonts/glyphicons-halflings-regular.ttf)format('truetype'),url(../components/bootstrap/fonts/glyphicons-halflings-regular.svg#glyphicons_halflingsregular)format('svg')}.glyphicon{position:relative;top:1px;display:inline-block;font-family:'Glyphicons Halflings';font-style:normal;font-weight:400;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.glyphicon-asterisk:before{content:"\2a"}.glyphicon-plus:before{content:"\2b"}.glyphicon-eur:before,.glyphicon-euro:before{content:"\20ac"}.glyphicon-minus:before{content:"\2212"}.glyphicon-cloud:before{content:"\2601"}.glyphicon-envelope:before{content:"\2709"}.glyphicon-pencil:before{content:"\270f"}.glyphicon-glass:before{content:"\e001"}.glyphicon-music:before{content:"\e002"}.glyphicon-search:before{content:"\e003"}.glyphicon-heart:before{content:"\e005"}.glyphicon-star:before{content:"\e006"}.glyphicon-star-empty:before{content:"\e007"}.glyphicon-user:before{content:"\e008"}.glyphicon-film:before{content:"\e009"}.glyphicon-th-large:before{content:"\e010"}.glyphicon-th:before{content:"\e011"}.glyphicon-th-list:before{content:"\e012"}.glyphicon-ok:before{content:"\e013"}.glyphicon-remove:before{content:"\e014"}.glyphicon-zoom-in:before{content:"\e015"}.glyphicon-zoom-out:before{content:"\e016"}.glyphicon-off:before{content:"\e017"}.glyphicon-signal:before{content:"\e018"}.glyphicon-cog:before{content:"\e019"}.glyphicon-trash:before{content:"\e020"}.glyphicon-home:before{content:"\e021"}.glyphicon-file:before{content:"\e022"}.glyphicon-time:before{content:"\e023"}.glyphicon-road:before{content:"\e024"}.glyphicon-download-alt:before{content:"\e025"}.glyphicon-download:before{content:"\e026"}.glyphicon-upload:before{content:"\e027"}.glyphicon-inbox:before{content:"\e028"}.glyphicon-play-circle:before{content:"\e029"}.glyphicon-repeat:before{content:"\e030"}.glyphicon-refresh:before{content:"\e031"}.glyphicon-list-alt:before{content:"\e032"}.glyphicon-lock:before{content:"\e033"}.glyphicon-flag:before{content:"\e034"}.glyphicon-headphones:before{content:"\e035"}.glyphicon-volume-off:before{content:"\e036"}.glyphicon-volume-down:before{content:"\e037"}.glyphicon-volume-up:before{content:"\e038"}.glyphicon-qrcode:before{content:"\e039"}.glyphicon-barcode:before{content:"\e040"}.glyphicon-tag:before{content:"\e041"}.glyphicon-tags:before{content:"\e042"}.glyphicon-book:before{content:"\e043"}.glyphicon-bookmark:before{content:"\e044"}.glyphicon-print:before{content:"\e045"}.glyphicon-camera:before{content:"\e046"}.glyphicon-font:before{content:"\e047"}.glyphicon-bold:before{content:"\e048"}.glyphicon-italic:before{content:"\e049"}.glyphicon-text-height:before{content:"\e050"}.glyphicon-text-width:before{content:"\e051"}.glyphicon-align-left:before{content:"\e052"}.glyphicon-align-center:before{content:"\e053"}.glyphicon-align-right:before{content:"\e054"}.glyphicon-align-justify:before{content:"\e055"}.glyphicon-list:before{content:"\e056"}.glyphicon-indent-left:before{content:"\e057"}.glyphicon-indent-right:before{content:"\e058"}.glyphicon-facetime-video:before{content:"\e059"}.glyphicon-picture:before{content:"\e060"}.glyphicon-map-marker:before{content:"\e062"}.glyphicon-adjust:before{content:"\e063"}.glyphicon-tint:before{content:"\e064"}.glyphicon-edit:before{content:"\e065"}.glyphicon-share:before{content:"\e066"}.glyphicon-check:before{content:"\e067"}.glyphicon-move:before{content:"\e068"}.glyphicon-step-backward:before{content:"\e069"}.glyphicon-fast-backward:before{content:"\e070"}.glyphicon-backward:before{content:"\e071"}.glyphicon-play:before{content:"\e072"}.glyphicon-pause:before{content:"\e073"}.glyphicon-stop:before{content:"\e074"}.glyphicon-forward:before{content:"\e075"}.glyphicon-fast-forward:before{content:"\e076"}.glyphicon-step-forward:before{content:"\e077"}.glyphicon-eject:before{content:"\e078"}.glyphicon-chevron-left:before{content:"\e079"}.glyphicon-chevron-right:before{content:"\e080"}.glyphicon-plus-sign:before{content:"\e081"}.glyphicon-minus-sign:before{content:"\e082"}.glyphicon-remove-sign:before{content:"\e083"}.glyphicon-ok-sign:before{content:"\e084"}.glyphicon-question-sign:before{content:"\e085"}.glyphicon-info-sign:before{content:"\e086"}.glyphicon-screenshot:before{content:"\e087"}.glyphicon-remove-circle:before{content:"\e088"}.glyphicon-ok-circle:before{content:"\e089"}.glyphicon-ban-circle:before{content:"\e090"}.glyphicon-arrow-left:before{content:"\e091"}.glyphicon-arrow-right:before{content:"\e092"}.glyphicon-arrow-up:before{content:"\e093"}.glyphicon-arrow-down:before{content:"\e094"}.glyphicon-share-alt:before{content:"\e095"}.glyphicon-resize-full:before{content:"\e096"}.glyphicon-resize-small:before{content:"\e097"}.glyphicon-exclamation-sign:before{content:"\e101"}.glyphicon-gift:before{content:"\e102"}.glyphicon-leaf:before{content:"\e103"}.glyphicon-fire:before{content:"\e104"}.glyphicon-eye-open:before{content:"\e105"}.glyphicon-eye-close:before{content:"\e106"}.glyphicon-warning-sign:before{content:"\e107"}.glyphicon-plane:before{content:"\e108"}.glyphicon-calendar:before{content:"\e109"}.glyphicon-random:before{content:"\e110"}.glyphicon-comment:before{content:"\e111"}.glyphicon-magnet:before{content:"\e112"}.glyphicon-chevron-up:before{content:"\e113"}.glyphicon-chevron-down:before{content:"\e114"}.glyphicon-retweet:before{content:"\e115"}.glyphicon-shopping-cart:before{content:"\e116"}.glyphicon-folder-close:before{content:"\e117"}.glyphicon-folder-open:before{content:"\e118"}.glyphicon-resize-vertical:before{content:"\e119"}.glyphicon-resize-horizontal:before{content:"\e120"}.glyphicon-hdd:before{content:"\e121"}.glyphicon-bullhorn:before{content:"\e122"}.glyphicon-bell:before{content:"\e123"}.glyphicon-certificate:before{content:"\e124"}.glyphicon-thumbs-up:before{content:"\e125"}.glyphicon-thumbs-down:before{content:"\e126"}.glyphicon-hand-right:before{content:"\e127"}.glyphicon-hand-left:before{content:"\e128"}.glyphicon-hand-up:before{content:"\e129"}.glyphicon-hand-down:before{content:"\e130"}.glyphicon-circle-arrow-right:before{content:"\e131"}.glyphicon-circle-arrow-left:before{content:"\e132"}.glyphicon-circle-arrow-up:before{content:"\e133"}.glyphicon-circle-arrow-down:before{content:"\e134"}.glyphicon-globe:before{content:"\e135"}.glyphicon-wrench:before{content:"\e136"}.glyphicon-tasks:before{content:"\e137"}.glyphicon-filter:before{content:"\e138"}.glyphicon-briefcase:before{content:"\e139"}.glyphicon-fullscreen:before{content:"\e140"}.glyphicon-dashboard:before{content:"\e141"}.glyphicon-paperclip:before{content:"\e142"}.glyphicon-heart-empty:before{content:"\e143"}.glyphicon-link:before{content:"\e144"}.glyphicon-phone:before{content:"\e145"}.glyphicon-pushpin:before{content:"\e146"}.glyphicon-usd:before{content:"\e148"}.glyphicon-gbp:before{content:"\e149"}.glyphicon-sort:before{content:"\e150"}.glyphicon-sort-by-alphabet:before{content:"\e151"}.glyphicon-sort-by-alphabet-alt:before{content:"\e152"}.glyphicon-sort-by-order:before{content:"\e153"}.glyphicon-sort-by-order-alt:before{content:"\e154"}.glyphicon-sort-by-attributes:before{content:"\e155"}.glyphicon-sort-by-attributes-alt:before{content:"\e156"}.glyphicon-unchecked:before{content:"\e157"}.glyphicon-expand:before{content:"\e158"}.glyphicon-collapse-down:before{content:"\e159"}.glyphicon-collapse-up:before{content:"\e160"}.glyphicon-log-in:before{content:"\e161"}.glyphicon-flash:before{content:"\e162"}.glyphicon-log-out:before{content:"\e163"}.glyphicon-new-window:before{content:"\e164"}.glyphicon-record:before{content:"\e165"}.glyphicon-save:before{content:"\e166"}.glyphicon-open:before{content:"\e167"}.glyphicon-saved:before{content:"\e168"}.glyphicon-import:before{content:"\e169"}.glyphicon-export:before{content:"\e170"}.glyphicon-send:before{content:"\e171"}.glyphicon-floppy-disk:before{content:"\e172"}.glyphicon-floppy-saved:before{content:"\e173"}.glyphicon-floppy-remove:before{content:"\e174"}.glyphicon-floppy-save:before{content:"\e175"}.glyphicon-floppy-open:before{content:"\e176"}.glyphicon-credit-card:before{content:"\e177"}.glyphicon-transfer:before{content:"\e178"}.glyphicon-cutlery:before{content:"\e179"}.glyphicon-header:before{content:"\e180"}.glyphicon-compressed:before{content:"\e181"}.glyphicon-earphone:before{content:"\e182"}.glyphicon-phone-alt:before{content:"\e183"}.glyphicon-tower:before{content:"\e184"}.glyphicon-stats:before{content:"\e185"}.glyphicon-sd-video:before{content:"\e186"}.glyphicon-hd-video:before{content:"\e187"}.glyphicon-subtitles:before{content:"\e188"}.glyphicon-sound-stereo:before{content:"\e189"}.glyphicon-sound-dolby:before{content:"\e190"}.glyphicon-sound-5-1:before{content:"\e191"}.glyphicon-sound-6-1:before{content:"\e192"}.glyphicon-sound-7-1:before{content:"\e193"}.glyphicon-copyright-mark:before{content:"\e194"}.glyphicon-registration-mark:before{content:"\e195"}.glyphicon-cloud-download:before{content:"\e197"}.glyphicon-cloud-upload:before{content:"\e198"}.glyphicon-tree-conifer:before{content:"\e199"}.glyphicon-tree-deciduous:before{content:"\e200"}.glyphicon-cd:before{content:"\e201"}.glyphicon-save-file:before{content:"\e202"}.glyphicon-open-file:before{content:"\e203"}.glyphicon-level-up:before{content:"\e204"}.glyphicon-copy:before{content:"\e205"}.glyphicon-paste:before{content:"\e206"}.glyphicon-alert:before{content:"\e209"}.glyphicon-equalizer:before{content:"\e210"}.glyphicon-king:before{content:"\e211"}.glyphicon-queen:before{content:"\e212"}.glyphicon-pawn:before{content:"\e213"}.glyphicon-bishop:before{content:"\e214"}.glyphicon-knight:before{content:"\e215"}.glyphicon-baby-formula:before{content:"\e216"}.glyphicon-tent:before{content:"\26fa"}.glyphicon-blackboard:before{content:"\e218"}.glyphicon-bed:before{content:"\e219"}.glyphicon-apple:before{content:"\f8ff"}.glyphicon-erase:before{content:"\e221"}.glyphicon-hourglass:before{content:"\231b"}.glyphicon-lamp:before{content:"\e223"}.glyphicon-duplicate:before{content:"\e224"}.glyphicon-piggy-bank:before{content:"\e225"}.glyphicon-scissors:before{content:"\e226"}.glyphicon-bitcoin:before,.glyphicon-btc:before,.glyphicon-xbt:before{content:"\e227"}.glyphicon-jpy:before,.glyphicon-yen:before{content:"\00a5"}.glyphicon-rub:before,.glyphicon-ruble:before{content:"\20bd"}.glyphicon-scale:before{content:"\e230"}.glyphicon-ice-lolly:before{content:"\e231"}.glyphicon-ice-lolly-tasted:before{content:"\e232"}.glyphicon-education:before{content:"\e233"}.glyphicon-option-horizontal:before{content:"\e234"}.glyphicon-option-vertical:before{content:"\e235"}.glyphicon-menu-hamburger:before{content:"\e236"}.glyphicon-modal-window:before{content:"\e237"}.glyphicon-oil:before{content:"\e238"}.glyphicon-grain:before{content:"\e239"}.glyphicon-sunglasses:before{content:"\e240"}.glyphicon-text-size:before{content:"\e241"}.glyphicon-text-color:before{content:"\e242"}.glyphicon-text-background:before{content:"\e243"}.glyphicon-object-align-top:before{content:"\e244"}.glyphicon-object-align-bottom:before{content:"\e245"}.glyphicon-object-align-horizontal:before{content:"\e246"}.glyphicon-object-align-left:before{content:"\e247"}.glyphicon-object-align-vertical:before{content:"\e248"}.glyphicon-object-align-right:before{content:"\e249"}.glyphicon-triangle-right:before{content:"\e250"}.glyphicon-triangle-left:before{content:"\e251"}.glyphicon-triangle-bottom:before{content:"\e252"}.glyphicon-triangle-top:before{content:"\e253"}.glyphicon-console:before{content:"\e254"}.glyphicon-superscript:before{content:"\e255"}.glyphicon-subscript:before{content:"\e256"}.glyphicon-menu-left:before{content:"\e257"}.glyphicon-menu-right:before{content:"\e258"}.glyphicon-menu-down:before{content:"\e259"}.glyphicon-menu-up:before{content:"\e260"}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:1.42857143;color:#000;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}figure{margin:0}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive,.thumbnail a>img,.thumbnail>img{display:block;max-width:100%;height:auto}.img-rounded{border-radius:3px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:2px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:18px;margin-bottom:18px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:18px;margin-bottom:9px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:9px;margin-bottom:9px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:33px}.h2,h2{font-size:27px}.h3,h3{font-size:23px}.h4,h4{font-size:17px}.h5,h5{font-size:13px}.h6,h6{font-size:12px}p{margin:0 0 9px}.lead{margin-bottom:18px;font-size:14px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:19.5px}}.small,small{font-size:92%}.mark,mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:8px;margin:36px 0 18px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:9px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:18px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:541px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:9px 18px;margin:0 0 18px;font-size:inherit;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:18px;font-style:normal;line-height:1.42857143}code,kbd,pre,samp{font-family:monospace}code{padding:2px 4px;font-size:90%;background-color:#f9f2f4;border-radius:2px}kbd{padding:2px 4px;font-size:90%;color:#fff;background-color:#333;border-radius:1px;box-shadow:inset 0 -1px 0 rgba(0,0,0,.25)}kbd kbd{padding:0;font-size:100%;font-weight:700;box-shadow:none}pre{display:block;padding:8.5px;margin:0 0 9px;word-break:break-all;word-wrap:break-word;color:#333;background-color:#f5f5f5;border:1px solid #ccc;border-radius:2px}pre code{padding:0;font-size:inherit;color:inherit;white-space:pre-wrap;background-color:transparent;border-radius:0}.pre-scrollable{max-height:340px;overflow-y:scroll}.container{margin-right:auto;margin-left:auto;padding-left:0;padding-right:0}@media (min-width:768px){.container{width:768px}}@media (min-width:992px){.container{width:940px}}@media (min-width:1200px){.container{width:1140px}}.container-fluid{margin-right:auto;margin-left:auto;padding-left:0;padding-right:0}.row{margin-left:0;margin-right:0}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:0;padding-right:0}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}table{background-color:transparent}caption{padding-top:8px;padding-bottom:8px;color:#777;text-align:left}th{text-align:left}.table{width:100%;max-width:100%;margin-bottom:18px}.table>tbody>tr>td,.table>tbody>tr>th,.table>tfoot>tr>td,.table>tfoot>tr>th,.table>thead>tr>td,.table>thead>tr>th{padding:8px;line-height:1.42857143;vertical-align:top;border-top:1px solid #ddd}.table>thead>tr>th{vertical-align:bottom;border-bottom:2px solid #ddd}.table>caption+thead>tr:first-child>td,.table>caption+thead>tr:first-child>th,.table>colgroup+thead>tr:first-child>td,.table>colgroup+thead>tr:first-child>th,.table>thead:first-child>tr:first-child>td,.table>thead:first-child>tr:first-child>th{border-top:0}.table>tbody+tbody{border-top:2px solid #ddd}.table .table{background-color:#fff}.table-condensed>tbody>tr>td,.table-condensed>tbody>tr>th,.table-condensed>tfoot>tr>td,.table-condensed>tfoot>tr>th,.table-condensed>thead>tr>td,.table-condensed>thead>tr>th{padding:5px}.table-bordered,.table-bordered>tbody>tr>td,.table-bordered>tbody>tr>th,.table-bordered>tfoot>tr>td,.table-bordered>tfoot>tr>th,.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border:1px solid #ddd}.table-bordered>thead>tr>td,.table-bordered>thead>tr>th{border-bottom-width:2px}.table-striped>tbody>tr:nth-of-type(odd){background-color:#f9f9f9}.table-hover>tbody>tr:hover{background-color:#f5f5f5}table col[class*=col-]{position:static;float:none;display:table-column}table td[class*=col-],table th[class*=col-]{position:static;float:none;display:table-cell}.table>tbody>tr.active>td,.table>tbody>tr.active>th,.table>tbody>tr>td.active,.table>tbody>tr>th.active,.table>tfoot>tr.active>td,.table>tfoot>tr.active>th,.table>tfoot>tr>td.active,.table>tfoot>tr>th.active,.table>thead>tr.active>td,.table>thead>tr.active>th,.table>thead>tr>td.active,.table>thead>tr>th.active{background-color:#f5f5f5}.table-hover>tbody>tr.active:hover>td,.table-hover>tbody>tr.active:hover>th,.table-hover>tbody>tr:hover>.active,.table-hover>tbody>tr>td.active:hover,.table-hover>tbody>tr>th.active:hover{background-color:#e8e8e8}.table>tbody>tr.success>td,.table>tbody>tr.success>th,.table>tbody>tr>td.success,.table>tbody>tr>th.success,.table>tfoot>tr.success>td,.table>tfoot>tr.success>th,.table>tfoot>tr>td.success,.table>tfoot>tr>th.success,.table>thead>tr.success>td,.table>thead>tr.success>th,.table>thead>tr>td.success,.table>thead>tr>th.success{background-color:#dff0d8}.table-hover>tbody>tr.success:hover>td,.table-hover>tbody>tr.success:hover>th,.table-hover>tbody>tr:hover>.success,.table-hover>tbody>tr>td.success:hover,.table-hover>tbody>tr>th.success:hover{background-color:#d0e9c6}.table>tbody>tr.info>td,.table>tbody>tr.info>th,.table>tbody>tr>td.info,.table>tbody>tr>th.info,.table>tfoot>tr.info>td,.table>tfoot>tr.info>th,.table>tfoot>tr>td.info,.table>tfoot>tr>th.info,.table>thead>tr.info>td,.table>thead>tr.info>th,.table>thead>tr>td.info,.table>thead>tr>th.info{background-color:#d9edf7}.table-hover>tbody>tr.info:hover>td,.table-hover>tbody>tr.info:hover>th,.table-hover>tbody>tr:hover>.info,.table-hover>tbody>tr>td.info:hover,.table-hover>tbody>tr>th.info:hover{background-color:#c4e3f3}.table>tbody>tr.warning>td,.table>tbody>tr.warning>th,.table>tbody>tr>td.warning,.table>tbody>tr>th.warning,.table>tfoot>tr.warning>td,.table>tfoot>tr.warning>th,.table>tfoot>tr>td.warning,.table>tfoot>tr>th.warning,.table>thead>tr.warning>td,.table>thead>tr.warning>th,.table>thead>tr>td.warning,.table>thead>tr>th.warning{background-color:#fcf8e3}.table-hover>tbody>tr.warning:hover>td,.table-hover>tbody>tr.warning:hover>th,.table-hover>tbody>tr:hover>.warning,.table-hover>tbody>tr>td.warning:hover,.table-hover>tbody>tr>th.warning:hover{background-color:#faf2cc}.table>tbody>tr.danger>td,.table>tbody>tr.danger>th,.table>tbody>tr>td.danger,.table>tbody>tr>th.danger,.table>tfoot>tr.danger>td,.table>tfoot>tr.danger>th,.table>tfoot>tr>td.danger,.table>tfoot>tr>th.danger,.table>thead>tr.danger>td,.table>thead>tr.danger>th,.table>thead>tr>td.danger,.table>thead>tr>th.danger{background-color:#f2dede}.table-hover>tbody>tr.danger:hover>td,.table-hover>tbody>tr.danger:hover>th,.table-hover>tbody>tr:hover>.danger,.table-hover>tbody>tr>td.danger:hover,.table-hover>tbody>tr>th.danger:hover{background-color:#ebcccc}.table-responsive{overflow-x:auto;min-height:.01%}@media screen and (max-width:767px){.table-responsive{width:100%;margin-bottom:13.5px;overflow-y:hidden;-ms-overflow-style:-ms-autohiding-scrollbar;border:1px solid #ddd}.table-responsive>.table{margin-bottom:0}.table-responsive>.table>tbody>tr>td,.table-responsive>.table>tbody>tr>th,.table-responsive>.table>tfoot>tr>td,.table-responsive>.table>tfoot>tr>th,.table-responsive>.table>thead>tr>td,.table-responsive>.table>thead>tr>th{white-space:nowrap}.table-responsive>.table-bordered{border:0}.table-responsive>.table-bordered>tbody>tr>td:first-child,.table-responsive>.table-bordered>tbody>tr>th:first-child,.table-responsive>.table-bordered>tfoot>tr>td:first-child,.table-responsive>.table-bordered>tfoot>tr>th:first-child,.table-responsive>.table-bordered>thead>tr>td:first-child,.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.table-responsive>.table-bordered>tbody>tr>td:last-child,.table-responsive>.table-bordered>tbody>tr>th:last-child,.table-responsive>.table-bordered>tfoot>tr>td:last-child,.table-responsive>.table-bordered>tfoot>tr>th:last-child,.table-responsive>.table-bordered>thead>tr>td:last-child,.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.table-responsive>.table-bordered>tbody>tr:last-child>td,.table-responsive>.table-bordered>tbody>tr:last-child>th,.table-responsive>.table-bordered>tfoot>tr:last-child>td,.table-responsive>.table-bordered>tfoot>tr:last-child>th{border-bottom:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:18px;font-size:19.5px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-appearance:none}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{display:block;padding-top:7px;font-size:13px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:32px;padding:6px 12px;font-size:13px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date],input[type=time],input[type=datetime-local],input[type=month]{line-height:32px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:45px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:18px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px \9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:31px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:1px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:1px}select.form-group-sm .form-control{height:30px;line-height:30px}select[multiple].form-group-sm .form-control,textarea.form-group-sm .form-control{height:auto}.form-group-sm .form-control-static{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;min-height:30px}.input-lg{height:45px;padding:10px 16px;font-size:17px;line-height:1.3333333;border-radius:3px}select.input-lg{height:45px;line-height:45px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:45px;padding:10px 16px;font-size:17px;line-height:1.3333333;border-radius:3px}select.form-group-lg .form-control{height:45px;line-height:45px}select[multiple].form-group-lg .form-control,textarea.form-group-lg .form-control{height:auto}.form-group-lg .form-control-static{height:45px;padding:10px 16px;font-size:17px;line-height:1.3333333;min-height:35px}.has-feedback{position:relative}.has-feedback .form-control{padding-right:40px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:32px;height:32px;line-height:32px;text-align:center;pointer-events:none}.input-lg+.form-control-feedback{width:45px;height:45px;line-height:45px}.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:23px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#404040}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:25px}.form-horizontal .form-group{margin-left:0;margin-right:0}.form-horizontal .has-feedback .form-control-feedback{right:0}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}.form-horizontal .form-group-lg .control-label{padding-top:14.33px}.form-horizontal .form-group-sm .control-label{padding-top:6px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:13px;line-height:1.42857143;border-radius:2px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:dotted thin;outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#333;text-decoration:none}.btn.active,.btn:active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;pointer-events:none;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}.btn-default{color:#333;background-color:#fff;border-color:#ccc}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#333;background-color:#e6e6e6;border-color:#adadad}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled,.btn-default.disabled.active,.btn-default.disabled.focus,.btn-default.disabled:active,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled],.btn-default[disabled].active,.btn-default[disabled].focus,.btn-default[disabled]:active,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default,fieldset[disabled] .btn-default.active,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:active,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#fff;border-color:#ccc}.btn-default .badge{color:#fff;background-color:#333}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.active,.btn-primary.focus,.btn-primary:active,.btn-primary:focus,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled,.btn-primary.disabled.active,.btn-primary.disabled.focus,.btn-primary.disabled:active,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled],.btn-primary[disabled].active,.btn-primary[disabled].focus,.btn-primary[disabled]:active,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary,fieldset[disabled] .btn-primary.active,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:active,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.active,.btn-success.focus,.btn-success:active,.btn-success:focus,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled,.btn-success.disabled.active,.btn-success.disabled.focus,.btn-success.disabled:active,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled],.btn-success[disabled].active,.btn-success[disabled].focus,.btn-success[disabled]:active,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success,fieldset[disabled] .btn-success.active,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:active,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.active,.btn-info.focus,.btn-info:active,.btn-info:focus,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled,.btn-info.disabled.active,.btn-info.disabled.focus,.btn-info.disabled:active,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled],.btn-info[disabled].active,.btn-info[disabled].focus,.btn-info[disabled]:active,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info,fieldset[disabled] .btn-info.active,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:active,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.active,.btn-warning.focus,.btn-warning:active,.btn-warning:focus,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled,.btn-warning.disabled.active,.btn-warning.disabled.focus,.btn-warning.disabled:active,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled],.btn-warning[disabled].active,.btn-warning[disabled].focus,.btn-warning[disabled]:active,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning,fieldset[disabled] .btn-warning.active,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:active,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.active,.btn-danger.focus,.btn-danger:active,.btn-danger:focus,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled,.btn-danger.disabled.active,.btn-danger.disabled.focus,.btn-danger.disabled:active,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled],.btn-danger[disabled].active,.btn-danger[disabled].focus,.btn-danger[disabled]:active,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger,fieldset[disabled] .btn-danger.active,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:active,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-group-lg>.btn,.btn-lg{padding:10px 16px;font-size:17px;line-height:1.3333333;border-radius:3px}.btn-group-sm>.btn,.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:1px}.btn-group-xs>.btn,.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:1px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.fade{opacity:0;-webkit-transition:opacity .15s linear;-o-transition:opacity .15s linear;transition:opacity .15s linear}.fade.in{opacity:1}.collapse{display:none}.collapse.in{display:block}tr.collapse.in{display:table-row}tbody.collapse.in{display:table-row-group}.collapsing{position:relative;height:0;overflow:hidden;-webkit-transition-property:height,visibility;transition-property:height,visibility;-webkit-transition-duration:.35s;transition-duration:.35s;-webkit-transition-timing-function:ease;transition-timing-function:ease}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:13px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:2px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:8px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:3px 20px;clear:both;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px solid;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:541px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.btn-group,.btn-group-vertical{position:relative;display:inline-block;vertical-align:middle}.btn-group-vertical>.btn,.btn-group>.btn{position:relative;float:left}.btn-group-vertical>.btn.active,.btn-group-vertical>.btn:active,.btn-group-vertical>.btn:focus,.btn-group-vertical>.btn:hover,.btn-group>.btn.active,.btn-group>.btn:active,.btn-group>.btn:focus,.btn-group>.btn:hover{z-index:2}.btn-group .btn+.btn,.btn-group .btn+.btn-group,.btn-group .btn-group+.btn,.btn-group .btn-group+.btn-group{margin-left:-1px}.btn-toolbar{margin-left:-5px}.btn-toolbar .btn-group,.btn-toolbar .input-group{float:left}.btn-toolbar>.btn,.btn-toolbar>.btn-group,.btn-toolbar>.input-group{margin-left:5px}.btn-group>.btn:not(:first-child):not(:last-child):not(.dropdown-toggle){border-radius:0}.btn-group>.btn:first-child{margin-left:0}.btn-group>.btn:first-child:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn:last-child:not(:first-child),.btn-group>.dropdown-toggle:not(:first-child){border-bottom-left-radius:0;border-top-left-radius:0}.btn-group>.btn-group{float:left}.btn-group>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-top-right-radius:0}.btn-group>.btn-group:last-child:not(:first-child)>.btn:first-child{border-bottom-left-radius:0;border-top-left-radius:0}.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0}.btn-group>.btn+.dropdown-toggle{padding-left:8px;padding-right:8px}.btn-group>.btn-lg+.dropdown-toggle{padding-left:12px;padding-right:12px}.btn-group.open .dropdown-toggle{-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn-group.open .dropdown-toggle.btn-link{-webkit-box-shadow:none;box-shadow:none}.btn .caret{margin-left:0}.btn-lg .caret{border-width:5px 5px 0}.dropup .btn-lg .caret{border-width:0 5px 5px}.btn-group-vertical>.btn,.btn-group-vertical>.btn-group,.btn-group-vertical>.btn-group>.btn{display:block;float:none;width:100%;max-width:100%}.btn-group-vertical>.btn-group>.btn{float:none}.btn-group-vertical>.btn+.btn,.btn-group-vertical>.btn+.btn-group,.btn-group-vertical>.btn-group+.btn,.btn-group-vertical>.btn-group+.btn-group{margin-top:-1px;margin-left:0}.btn-group-vertical>.btn:not(:first-child):not(:last-child){border-radius:0}.btn-group-vertical>.btn:first-child:not(:last-child){border-top-right-radius:2px;border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn:last-child:not(:first-child){border-bottom-left-radius:2px;border-top-right-radius:0;border-top-left-radius:0}.btn-group-vertical>.btn-group:not(:first-child):not(:last-child)>.btn{border-radius:0}.btn-group-vertical>.btn-group:first-child:not(:last-child)>.btn:last-child,.btn-group-vertical>.btn-group:first-child:not(:last-child)>.dropdown-toggle{border-bottom-right-radius:0;border-bottom-left-radius:0}.btn-group-vertical>.btn-group:last-child:not(:first-child)>.btn:first-child{border-top-right-radius:0;border-top-left-radius:0}.btn-group-justified{display:table;width:100%;table-layout:fixed;border-collapse:separate}.btn-group-justified>.btn,.btn-group-justified>.btn-group{float:none;display:table-cell;width:1%}.btn-group-justified>.btn-group .btn{width:100%}.btn-group-justified>.btn-group .dropdown-menu{left:auto}[data-toggle=buttons]>.btn input[type=checkbox],[data-toggle=buttons]>.btn input[type=radio],[data-toggle=buttons]>.btn-group>.btn input[type=checkbox],[data-toggle=buttons]>.btn-group>.btn input[type=radio]{position:absolute;clip:rect(0,0,0,0);pointer-events:none}.input-group{position:relative;display:table;border-collapse:separate}.input-group[class*=col-]{float:none;padding-left:0;padding-right:0}.input-group .form-control{position:relative;z-index:2;float:left;width:100%;margin-bottom:0}.input-group-lg>.form-control,.input-group-lg>.input-group-addon,.input-group-lg>.input-group-btn>.btn{height:45px;padding:10px 16px;font-size:17px;line-height:1.3333333;border-radius:3px}select.input-group-lg>.form-control,select.input-group-lg>.input-group-addon,select.input-group-lg>.input-group-btn>.btn{height:45px;line-height:45px}select[multiple].input-group-lg>.form-control,select[multiple].input-group-lg>.input-group-addon,select[multiple].input-group-lg>.input-group-btn>.btn,textarea.input-group-lg>.form-control,textarea.input-group-lg>.input-group-addon,textarea.input-group-lg>.input-group-btn>.btn{height:auto}.input-group-sm>.form-control,.input-group-sm>.input-group-addon,.input-group-sm>.input-group-btn>.btn{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:1px}select.input-group-sm>.form-control,select.input-group-sm>.input-group-addon,select.input-group-sm>.input-group-btn>.btn{height:30px;line-height:30px}select[multiple].input-group-sm>.form-control,select[multiple].input-group-sm>.input-group-addon,select[multiple].input-group-sm>.input-group-btn>.btn,textarea.input-group-sm>.form-control,textarea.input-group-sm>.input-group-addon,textarea.input-group-sm>.input-group-btn>.btn{height:auto}.input-group .form-control,.input-group-addon,.input-group-btn{display:table-cell}.input-group .form-control:not(:first-child):not(:last-child),.input-group-addon:not(:first-child):not(:last-child),.input-group-btn:not(:first-child):not(:last-child){border-radius:0}.input-group-addon,.input-group-btn{width:1%;white-space:nowrap;vertical-align:middle}.input-group-addon{padding:6px 12px;font-size:13px;font-weight:400;line-height:1;color:#555;text-align:center;background-color:#eee;border:1px solid #ccc;border-radius:2px}.input-group-addon.input-sm{padding:5px 10px;font-size:12px;border-radius:1px}.input-group-addon.input-lg{padding:10px 16px;font-size:17px;border-radius:3px}.input-group-addon input[type=checkbox],.input-group-addon input[type=radio]{margin-top:0}.input-group .form-control:first-child,.input-group-addon:first-child,.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group>.btn,.input-group-btn:first-child>.dropdown-toggle,.input-group-btn:last-child>.btn-group:not(:last-child)>.btn,.input-group-btn:last-child>.btn:not(:last-child):not(.dropdown-toggle){border-bottom-right-radius:0;border-top-right-radius:0}.input-group-addon:first-child{border-right:0}.input-group .form-control:last-child,.input-group-addon:last-child,.input-group-btn:first-child>.btn-group:not(:first-child)>.btn,.input-group-btn:first-child>.btn:not(:first-child),.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group>.btn,.input-group-btn:last-child>.dropdown-toggle{border-bottom-left-radius:0;border-top-left-radius:0}.input-group-addon:last-child{border-left:0}.input-group-btn{position:relative;font-size:0;white-space:nowrap}.input-group-btn>.btn{position:relative}.input-group-btn>.btn+.btn{margin-left:-1px}.input-group-btn>.btn:active,.input-group-btn>.btn:focus,.input-group-btn>.btn:hover{z-index:2}.input-group-btn:first-child>.btn,.input-group-btn:first-child>.btn-group{margin-right:-1px}.input-group-btn:last-child>.btn,.input-group-btn:last-child>.btn-group{margin-left:-1px}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:8px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:2px 2px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px;margin-right:0;border-radius:2px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0;border-bottom:1px solid #ddd;border-radius:2px 2px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:2px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:2px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:2px 2px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:30px;margin-bottom:18px;border:1px solid transparent}.navbar-collapse{overflow-x:visible;padding-right:0;padding-left:0;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:540px)and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-static-top{z-index:1000;border-width:0 0 1px}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:541px){.navbar{border-radius:2px}.navbar-header{float:left}.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}.navbar-fixed-bottom,.navbar-fixed-top,.navbar-static-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:6px 0;font-size:17px;line-height:18px;height:30px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}.navbar-toggle{position:relative;float:right;margin-right:0;padding:9px 10px;margin-top:-2px;margin-bottom:-2px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:2px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:541px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:0}.navbar-toggle{display:none}}.navbar-nav{margin:3px 0}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:18px}@media (max-width:540px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:18px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:541px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:6px;padding-bottom:6px}}.navbar-form{padding:10px 0;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);margin:-1px 0}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:540px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:2px 2px 0 0}.navbar-btn{margin-top:-1px;margin-bottom:-1px}.navbar-btn.btn-sm{margin-top:0;margin-bottom:0}.navbar-btn.btn-xs{margin-top:4px;margin-bottom:4px}.navbar-text{margin-top:6px;margin-bottom:6px}@media (min-width:541px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}.navbar-text{float:left;margin-left:0;margin-right:0}.navbar-left{float:left!important;float:left}.navbar-right{float:right!important;float:right;margin-right:0}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#f8f8f8;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#777}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#5e5e5e;background-color:transparent}.navbar-default .navbar-nav>li>a,.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:#e7e7e7;color:#555}@media (max-width:540px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#777}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#555;background-color:#e7e7e7}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#777}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#777}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#080808;color:#fff}@media (max-width:540px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.breadcrumb{padding:8px 15px;margin-bottom:18px;list-style:none;background-color:#f5f5f5;border-radius:2px}.breadcrumb>li{display:inline-block}.breadcrumb>li+li:before{content:"/\00a0";padding:0 5px;color:#5e5e5e}.breadcrumb>.active{color:#777}.pagination{display:inline-block;padding-left:0;margin:18px 0;border-radius:2px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:2px;border-top-left-radius:2px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:2px;border-top-right-radius:2px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:17px}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:1px;border-top-left-radius:1px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:1px;border-top-right-radius:1px}.pager{padding-left:0;margin:18px 0;list-style:none;text-align:center}.pager li{display:inline}.pager li>a,.pager li>span{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;border-radius:15px}.pager li>a:focus,.pager li>a:hover{text-decoration:none;background-color:#eee}.pager .next>a,.pager .next>span{float:right}.pager .previous>a,.pager .previous>span{float:left}.pager .disabled>a,.pager .disabled>a:focus,.pager .disabled>a:hover,.pager .disabled>span{color:#777;background-color:#fff;cursor:not-allowed}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:baseline;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding:30px 15px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:20px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:3px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding:48px 0}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron .h1,.jumbotron h1{font-size:58.5px}}.thumbnail{display:block;padding:4px;margin-bottom:18px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:2px;-webkit-transition:border .2s ease-in-out;-o-transition:border .2s ease-in-out;transition:border .2s ease-in-out}.thumbnail a>img,.thumbnail>img{margin-left:auto;margin-right:auto}a.thumbnail.active,a.thumbnail:focus,a.thumbnail:hover{border-color:#337ab7}.thumbnail .caption{padding:9px;color:#000}.alert{padding:15px;margin-bottom:18px;border:1px solid transparent;border-radius:2px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}@-webkit-keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}@keyframes progress-bar-stripes{from{background-position:40px 0}to{background-position:0 0}}.progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f5f5f5;border-radius:2px;-webkit-box-shadow:inset 0 1px 2px rgba(0,0,0,.1);box-shadow:inset 0 1px 2px rgba(0,0,0,.1)}.progress-bar{float:left;width:0;height:100%;font-size:12px;line-height:18px;color:#fff;text-align:center;background-color:#337ab7;-webkit-box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);box-shadow:inset 0 -1px 0 rgba(0,0,0,.15);-webkit-transition:width .6s ease;-o-transition:width .6s ease;transition:width .6s ease}.progress-bar-striped,.progress-striped .progress-bar{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-size:40px 40px}.progress-bar.active,.progress.active .progress-bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-o-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite}.progress-bar-success{background-color:#5cb85c}.progress-striped .progress-bar-success{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-info{background-color:#5bc0de}.progress-striped .progress-bar-info{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-warning{background-color:#f0ad4e}.progress-striped .progress-bar-warning{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.progress-bar-danger{background-color:#d9534f}.progress-striped .progress-bar-danger{background-image:-webkit-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:-o-linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent);background-image:linear-gradient(45deg,rgba(255,255,255,.15) 25%,transparent 25%,transparent 50%,rgba(255,255,255,.15) 50%,rgba(255,255,255,.15) 75%,transparent 75%,transparent)}.media{margin-top:15px}.media:first-child{margin-top:0}.media,.media-body{zoom:1;overflow:hidden}.media-body{width:10000px}.media-object{display:block}.media-right,.media>.pull-right{padding-left:10px}.media-left,.media>.pull-left{padding-right:10px}.media-body,.media-left,.media-right{display:table-cell;vertical-align:top}.media-middle{vertical-align:middle}.media-bottom{vertical-align:bottom}.media-heading{margin-top:0;margin-bottom:5px}.media-list{padding-left:0;list-style:none}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:2px;border-top-left-radius:2px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:2px;border-bottom-left-radius:2px}a.list-group-item{color:#555}a.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.panel{margin-bottom:18px;background-color:#fff;border:1px solid transparent;border-radius:2px;-webkit-box-shadow:0 1px 1px rgba(0,0,0,.05);box-shadow:0 1px 1px rgba(0,0,0,.05)}.panel-body{padding:15px}.panel-heading{padding:10px 15px;border-bottom:1px solid transparent;border-top-right-radius:1px;border-top-left-radius:1px}.panel-heading>.dropdown .dropdown-toggle{color:inherit}.panel-title{margin-top:0;margin-bottom:0;font-size:15px;color:inherit}.panel-title>.small,.panel-title>.small>a,.panel-title>a,.panel-title>small,.panel-title>small>a{color:inherit}.panel-footer{padding:10px 15px;background-color:#f5f5f5;border-top:1px solid #ddd;border-bottom-right-radius:1px;border-bottom-left-radius:1px}.panel>.list-group,.panel>.panel-collapse>.list-group{margin-bottom:0}.panel>.list-group .list-group-item,.panel>.panel-collapse>.list-group .list-group-item{border-width:1px 0;border-radius:0}.panel>.list-group:first-child .list-group-item:first-child,.panel>.panel-collapse>.list-group:first-child .list-group-item:first-child{border-top:0;border-top-right-radius:1px;border-top-left-radius:1px}.panel>.list-group:last-child .list-group-item:last-child,.panel>.panel-collapse>.list-group:last-child .list-group-item:last-child{border-bottom:0;border-bottom-right-radius:1px;border-bottom-left-radius:1px}.list-group+.panel-footer,.panel-heading+.list-group .list-group-item:first-child{border-top-width:0}.panel>.panel-collapse>.table,.panel>.table,.panel>.table-responsive>.table{margin-bottom:0}.panel>.panel-collapse>.table caption,.panel>.table caption,.panel>.table-responsive>.table caption{padding-left:15px;padding-right:15px}.panel>.table-responsive:first-child>.table:first-child,.panel>.table:first-child{border-top-right-radius:1px;border-top-left-radius:1px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child,.panel>.table:first-child>thead:first-child>tr:first-child{border-top-left-radius:1px;border-top-right-radius:1px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:first-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:first-child,.panel>.table:first-child>thead:first-child>tr:first-child td:first-child,.panel>.table:first-child>thead:first-child>tr:first-child th:first-child{border-top-left-radius:1px}.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table-responsive:first-child>.table:first-child>thead:first-child>tr:first-child th:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child td:last-child,.panel>.table:first-child>tbody:first-child>tr:first-child th:last-child,.panel>.table:first-child>thead:first-child>tr:first-child td:last-child,.panel>.table:first-child>thead:first-child>tr:first-child th:last-child{border-top-right-radius:1px}.panel>.table-responsive:last-child>.table:last-child,.panel>.table:last-child{border-bottom-right-radius:1px;border-bottom-left-radius:1px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child{border-bottom-left-radius:1px;border-bottom-right-radius:1px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:first-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:first-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:first-child{border-bottom-left-radius:1px}.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table-responsive:last-child>.table:last-child>tfoot:last-child>tr:last-child th:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child td:last-child,.panel>.table:last-child>tbody:last-child>tr:last-child th:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child td:last-child,.panel>.table:last-child>tfoot:last-child>tr:last-child th:last-child{border-bottom-right-radius:1px}.panel>.panel-body+.table,.panel>.panel-body+.table-responsive,.panel>.table+.panel-body,.panel>.table-responsive+.panel-body{border-top:1px solid #ddd}.panel>.table>tbody:first-child>tr:first-child td,.panel>.table>tbody:first-child>tr:first-child th{border-top:0}.panel>.table-bordered,.panel>.table-responsive>.table-bordered{border:0}.panel>.table-bordered>tbody>tr>td:first-child,.panel>.table-bordered>tbody>tr>th:first-child,.panel>.table-bordered>tfoot>tr>td:first-child,.panel>.table-bordered>tfoot>tr>th:first-child,.panel>.table-bordered>thead>tr>td:first-child,.panel>.table-bordered>thead>tr>th:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:first-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:first-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:first-child,.panel>.table-responsive>.table-bordered>thead>tr>td:first-child,.panel>.table-responsive>.table-bordered>thead>tr>th:first-child{border-left:0}.panel>.table-bordered>tbody>tr>td:last-child,.panel>.table-bordered>tbody>tr>th:last-child,.panel>.table-bordered>tfoot>tr>td:last-child,.panel>.table-bordered>tfoot>tr>th:last-child,.panel>.table-bordered>thead>tr>td:last-child,.panel>.table-bordered>thead>tr>th:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>td:last-child,.panel>.table-responsive>.table-bordered>tbody>tr>th:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>td:last-child,.panel>.table-responsive>.table-bordered>tfoot>tr>th:last-child,.panel>.table-responsive>.table-bordered>thead>tr>td:last-child,.panel>.table-responsive>.table-bordered>thead>tr>th:last-child{border-right:0}.panel>.table-bordered>tbody>tr:first-child>td,.panel>.table-bordered>tbody>tr:first-child>th,.panel>.table-bordered>tbody>tr:last-child>td,.panel>.table-bordered>tbody>tr:last-child>th,.panel>.table-bordered>tfoot>tr:last-child>td,.panel>.table-bordered>tfoot>tr:last-child>th,.panel>.table-bordered>thead>tr:first-child>td,.panel>.table-bordered>thead>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:first-child>th,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>td,.panel>.table-responsive>.table-bordered>tbody>tr:last-child>th,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>td,.panel>.table-responsive>.table-bordered>tfoot>tr:last-child>th,.panel>.table-responsive>.table-bordered>thead>tr:first-child>td,.panel>.table-responsive>.table-bordered>thead>tr:first-child>th{border-bottom:0}.panel>.table-responsive{border:0;margin-bottom:0}.panel-group{margin-bottom:18px}.panel-group .panel{margin-bottom:0;border-radius:2px}.panel-group .panel+.panel{margin-top:5px}.panel-group .panel-heading{border-bottom:0}.panel-group .panel-heading+.panel-collapse>.list-group,.panel-group .panel-heading+.panel-collapse>.panel-body{border-top:1px solid #ddd}.panel-group .panel-footer{border-top:0}.panel-group .panel-footer+.panel-collapse .panel-body{border-bottom:1px solid #ddd}.panel-default{border-color:#ddd}.panel-default>.panel-heading{color:#333;background-color:#f5f5f5;border-color:#ddd}.panel-default>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ddd}.panel-default>.panel-heading .badge{color:#f5f5f5;background-color:#333}.panel-default>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ddd}.panel-primary{border-color:#337ab7}.panel-primary>.panel-heading{color:#fff;background-color:#337ab7;border-color:#337ab7}.panel-primary>.panel-heading+.panel-collapse>.panel-body{border-top-color:#337ab7}.panel-primary>.panel-heading .badge{color:#337ab7;background-color:#fff}.panel-primary>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#337ab7}.panel-success{border-color:#d6e9c6}.panel-success>.panel-heading{color:#3c763d;background-color:#dff0d8;border-color:#d6e9c6}.panel-success>.panel-heading+.panel-collapse>.panel-body{border-top-color:#d6e9c6}.panel-success>.panel-heading .badge{color:#dff0d8;background-color:#3c763d}.panel-success>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#d6e9c6}.panel-info{border-color:#bce8f1}.panel-info>.panel-heading{color:#31708f;background-color:#d9edf7;border-color:#bce8f1}.panel-info>.panel-heading+.panel-collapse>.panel-body{border-top-color:#bce8f1}.panel-info>.panel-heading .badge{color:#d9edf7;background-color:#31708f}.panel-info>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#bce8f1}.panel-warning{border-color:#faebcc}.panel-warning>.panel-heading{color:#8a6d3b;background-color:#fcf8e3;border-color:#faebcc}.panel-warning>.panel-heading+.panel-collapse>.panel-body{border-top-color:#faebcc}.panel-warning>.panel-heading .badge{color:#fcf8e3;background-color:#8a6d3b}.panel-warning>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#faebcc}.panel-danger{border-color:#ebccd1}.panel-danger>.panel-heading{color:#a94442;background-color:#f2dede;border-color:#ebccd1}.panel-danger>.panel-heading+.panel-collapse>.panel-body{border-top-color:#ebccd1}.panel-danger>.panel-heading .badge{color:#f2dede;background-color:#a94442}.panel-danger>.panel-footer+.panel-collapse>.panel-body{border-bottom-color:#ebccd1}.embed-responsive{position:relative;display:block;height:0;padding:0;overflow:hidden}.embed-responsive .embed-responsive-item,.embed-responsive embed,.embed-responsive iframe,.embed-responsive object,.embed-responsive video{position:absolute;top:0;left:0;bottom:0;height:100%;width:100%;border:0}.embed-responsive-16by9{padding-bottom:56.25%}.embed-responsive-4by3{padding-bottom:75%}.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #e3e3e3;border-radius:2px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.05);box-shadow:inset 0 1px 1px rgba(0,0,0,.05)}.well blockquote{border-color:#ddd;border-color:rgba(0,0,0,.15)}.well-lg{padding:24px;border-radius:3px}.well-sm{padding:9px;border-radius:1px}.close{float:right;font-size:19.5px;font-weight:700;line-height:1;color:#000;text-shadow:0 1px 0 #fff;opacity:.2;filter:alpha(opacity=20)}.close:focus,.close:hover{color:#000;text-decoration:none;cursor:pointer;opacity:.5;filter:alpha(opacity=50)}button.close{padding:0;cursor:pointer;background:0 0;border:0;-webkit-appearance:none}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:3px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5;min-height:16.43px}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:12px;font-weight:400;line-height:1.4;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;text-decoration:none;background-color:#000;border-radius:2px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:400;line-height:1.42857143;text-align:left;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:3px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2);white-space:normal}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:13px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:2px 2px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000;-moz-perspective:1000;perspective:1000}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;margin-top:-10px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:transparent}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-15px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-15px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-15px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.btn-group-vertical>.btn-group:after,.btn-group-vertical>.btn-group:before,.btn-toolbar:after,.btn-toolbar:before,.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.item_buttons:after,.item_buttons:before,.modal-footer:after,.modal-footer:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.pager:after,.pager:before,.panel-body:after,.panel-body:before,.row:after,.row:before{content:" ";display:table}.btn-group-vertical>.btn-group:after,.btn-toolbar:after,.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.item_buttons:after,.modal-footer:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.pager:after,.panel-body:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}@-ms-viewport{width:device-width}.visible-lg,.visible-lg-block,.visible-lg-inline,.visible-lg-inline-block,.visible-md,.visible-md-block,.visible-md-inline,.visible-md-inline-block,.visible-sm,.visible-sm-block,.visible-sm-inline,.visible-sm-inline-block,.visible-xs,.visible-xs-block,.visible-xs-inline,.visible-xs-inline-block{display:none!important}@media (max-width:767px){.visible-xs{display:block!important}table.visible-xs{display:table}tr.visible-xs{display:table-row!important}td.visible-xs,th.visible-xs{display:table-cell!important}.visible-xs-block{display:block!important}.visible-xs-inline{display:inline!important}.visible-xs-inline-block{display:inline-block!important}}@media (min-width:768px)and (max-width:991px){.visible-sm{display:block!important}table.visible-sm{display:table}tr.visible-sm{display:table-row!important}td.visible-sm,th.visible-sm{display:table-cell!important}.visible-sm-block{display:block!important}.visible-sm-inline{display:inline!important}.visible-sm-inline-block{display:inline-block!important}}@media (min-width:992px)and (max-width:1199px){.visible-md{display:block!important}table.visible-md{display:table}tr.visible-md{display:table-row!important}td.visible-md,th.visible-md{display:table-cell!important}.visible-md-block{display:block!important}.visible-md-inline{display:inline!important}.visible-md-inline-block{display:inline-block!important}}@media (min-width:1200px){.visible-lg{display:block!important}table.visible-lg{display:table}tr.visible-lg{display:table-row!important}td.visible-lg,th.visible-lg{display:table-cell!important}.visible-lg-block{display:block!important}.visible-lg-inline{display:inline!important}.visible-lg-inline-block{display:inline-block!important}}@media (max-width:767px){.hidden-xs{display:none!important}}@media (min-width:768px)and (max-width:991px){.hidden-sm{display:none!important}}@media (min-width:992px)and (max-width:1199px){.hidden-md{display:none!important}}@media (min-width:1200px){.hidden-lg{display:none!important}}.visible-print{display:none!important}@media print{.visible-print{display:block!important}table.visible-print{display:table}tr.visible-print{display:table-row!important}td.visible-print,th.visible-print{display:table-cell!important}}.visible-print-block{display:none!important}@media print{.visible-print-block{display:block!important}}.visible-print-inline{display:none!important}@media print{.visible-print-inline{display:inline!important}}.visible-print-inline-block{display:none!important}@media print{.visible-print-inline-block{display:inline-block!important}.hidden-print{display:none!important}}/*! +* +* Font Awesome +* +*//*! + * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome + * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) + */@font-face{font-family:'FontAwesome';src:url(../components/font-awesome/fonts/fontawesome-webfont.eot?v=4.2.0);src:url(../components/font-awesome/fonts/fontawesome-webfont.eot?#iefix&v=4.2.0)format('embedded-opentype'),url(../components/font-awesome/fonts/fontawesome-webfont.woff?v=4.2.0)format('woff'),url(../components/font-awesome/fonts/fontawesome-webfont.ttf?v=4.2.0)format('truetype'),url(../components/font-awesome/fonts/fontawesome-webfont.svg?v=4.2.0#fontawesomeregular)format('svg');font-weight:400;font-style:normal}.fa{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.fa-lg{font-size:1.33333333em;line-height:.75em;vertical-align:-15%}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-fw{width:1.28571429em;text-align:center}.fa-ul{padding-left:0;margin-left:2.14285714em;list-style-type:none}.fa-ul>li{position:relative}.fa-li{position:absolute;left:-2.14285714em;width:2.14285714em;top:.14285714em;text-align:center}.fa-li.fa-lg{left:-1.85714286em}.fa-border{padding:.2em .25em .15em;border:.08em solid #eee;border-radius:.1em}.fa.pull-left{margin-right:.3em}.fa.pull-right{margin-left:.3em}.fa-spin{-webkit-animation:fa-spin 2s infinite linear;animation:fa-spin 2s infinite linear}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0);transform:rotate(0)}100%{-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.fa-rotate-90{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(90deg);-ms-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2);-webkit-transform:rotate(180deg);-ms-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=3);-webkit-transform:rotate(270deg);-ms-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1);-webkit-transform:scale(-1,1);-ms-transform:scale(-1,1);transform:scale(-1,1)}.fa-flip-vertical{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1);-webkit-transform:scale(1,-1);-ms-transform:scale(1,-1);transform:scale(1,-1)}:root .fa-flip-horizontal,:root .fa-flip-vertical,:root .fa-rotate-180,:root .fa-rotate-270,:root .fa-rotate-90{filter:none}.fa-stack{position:relative;display:inline-block;width:2em;height:2em;line-height:2em;vertical-align:middle}.fa-stack-1x,.fa-stack-2x{position:absolute;left:0;width:100%;text-align:center}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:#fff}.fa-glass:before{content:"\f000"}.fa-music:before{content:"\f001"}.fa-search:before{content:"\f002"}.fa-envelope-o:before{content:"\f003"}.fa-heart:before{content:"\f004"}.fa-star:before{content:"\f005"}.fa-star-o:before{content:"\f006"}.fa-user:before{content:"\f007"}.fa-film:before{content:"\f008"}.fa-th-large:before{content:"\f009"}.fa-th:before{content:"\f00a"}.fa-th-list:before{content:"\f00b"}.fa-check:before{content:"\f00c"}.fa-close:before,.fa-remove:before,.fa-times:before{content:"\f00d"}.fa-search-plus:before{content:"\f00e"}.fa-search-minus:before{content:"\f010"}.fa-power-off:before{content:"\f011"}.fa-signal:before{content:"\f012"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-trash-o:before{content:"\f014"}.fa-home:before{content:"\f015"}.fa-file-o:before{content:"\f016"}.fa-clock-o:before{content:"\f017"}.fa-road:before{content:"\f018"}.fa-download:before{content:"\f019"}.fa-arrow-circle-o-down:before{content:"\f01a"}.fa-arrow-circle-o-up:before{content:"\f01b"}.fa-inbox:before{content:"\f01c"}.fa-play-circle-o:before{content:"\f01d"}.fa-repeat:before,.fa-rotate-right:before{content:"\f01e"}.fa-refresh:before{content:"\f021"}.fa-list-alt:before{content:"\f022"}.fa-lock:before{content:"\f023"}.fa-flag:before{content:"\f024"}.fa-headphones:before{content:"\f025"}.fa-volume-off:before{content:"\f026"}.fa-volume-down:before{content:"\f027"}.fa-volume-up:before{content:"\f028"}.fa-qrcode:before{content:"\f029"}.fa-barcode:before{content:"\f02a"}.fa-tag:before{content:"\f02b"}.fa-tags:before{content:"\f02c"}.fa-book:before{content:"\f02d"}.fa-bookmark:before{content:"\f02e"}.fa-print:before{content:"\f02f"}.fa-camera:before{content:"\f030"}.fa-font:before{content:"\f031"}.fa-bold:before{content:"\f032"}.fa-italic:before{content:"\f033"}.fa-text-height:before{content:"\f034"}.fa-text-width:before{content:"\f035"}.fa-align-left:before{content:"\f036"}.fa-align-center:before{content:"\f037"}.fa-align-right:before{content:"\f038"}.fa-align-justify:before{content:"\f039"}.fa-list:before{content:"\f03a"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-indent:before{content:"\f03c"}.fa-video-camera:before{content:"\f03d"}.fa-image:before,.fa-photo:before,.fa-picture-o:before{content:"\f03e"}.fa-pencil:before{content:"\f040"}.fa-map-marker:before{content:"\f041"}.fa-adjust:before{content:"\f042"}.fa-tint:before{content:"\f043"}.fa-edit:before,.fa-pencil-square-o:before{content:"\f044"}.fa-share-square-o:before{content:"\f045"}.fa-check-square-o:before{content:"\f046"}.fa-arrows:before{content:"\f047"}.fa-step-backward:before{content:"\f048"}.fa-fast-backward:before{content:"\f049"}.fa-backward:before{content:"\f04a"}.fa-play:before{content:"\f04b"}.fa-pause:before{content:"\f04c"}.fa-stop:before{content:"\f04d"}.fa-forward:before{content:"\f04e"}.fa-fast-forward:before{content:"\f050"}.fa-step-forward:before{content:"\f051"}.fa-eject:before{content:"\f052"}.fa-chevron-left:before{content:"\f053"}.fa-chevron-right:before{content:"\f054"}.fa-plus-circle:before{content:"\f055"}.fa-minus-circle:before{content:"\f056"}.fa-times-circle:before{content:"\f057"}.fa-check-circle:before{content:"\f058"}.fa-question-circle:before{content:"\f059"}.fa-info-circle:before{content:"\f05a"}.fa-crosshairs:before{content:"\f05b"}.fa-times-circle-o:before{content:"\f05c"}.fa-check-circle-o:before{content:"\f05d"}.fa-ban:before{content:"\f05e"}.fa-arrow-left:before{content:"\f060"}.fa-arrow-right:before{content:"\f061"}.fa-arrow-up:before{content:"\f062"}.fa-arrow-down:before{content:"\f063"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-expand:before{content:"\f065"}.fa-compress:before{content:"\f066"}.fa-plus:before{content:"\f067"}.fa-minus:before{content:"\f068"}.fa-asterisk:before{content:"\f069"}.fa-exclamation-circle:before{content:"\f06a"}.fa-gift:before{content:"\f06b"}.fa-leaf:before{content:"\f06c"}.fa-fire:before{content:"\f06d"}.fa-eye:before{content:"\f06e"}.fa-eye-slash:before{content:"\f070"}.fa-exclamation-triangle:before,.fa-warning:before{content:"\f071"}.fa-plane:before{content:"\f072"}.fa-calendar:before{content:"\f073"}.fa-random:before{content:"\f074"}.fa-comment:before{content:"\f075"}.fa-magnet:before{content:"\f076"}.fa-chevron-up:before{content:"\f077"}.fa-chevron-down:before{content:"\f078"}.fa-retweet:before{content:"\f079"}.fa-shopping-cart:before{content:"\f07a"}.fa-folder:before{content:"\f07b"}.fa-folder-open:before{content:"\f07c"}.fa-arrows-v:before{content:"\f07d"}.fa-arrows-h:before{content:"\f07e"}.fa-bar-chart-o:before,.fa-bar-chart:before{content:"\f080"}.fa-twitter-square:before{content:"\f081"}.fa-facebook-square:before{content:"\f082"}.fa-camera-retro:before{content:"\f083"}.fa-key:before{content:"\f084"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-comments:before{content:"\f086"}.fa-thumbs-o-up:before{content:"\f087"}.fa-thumbs-o-down:before{content:"\f088"}.fa-star-half:before{content:"\f089"}.fa-heart-o:before{content:"\f08a"}.fa-sign-out:before{content:"\f08b"}.fa-linkedin-square:before{content:"\f08c"}.fa-thumb-tack:before{content:"\f08d"}.fa-external-link:before{content:"\f08e"}.fa-sign-in:before{content:"\f090"}.fa-trophy:before{content:"\f091"}.fa-github-square:before{content:"\f092"}.fa-upload:before{content:"\f093"}.fa-lemon-o:before{content:"\f094"}.fa-phone:before{content:"\f095"}.fa-square-o:before{content:"\f096"}.fa-bookmark-o:before{content:"\f097"}.fa-phone-square:before{content:"\f098"}.fa-twitter:before{content:"\f099"}.fa-facebook:before{content:"\f09a"}.fa-github:before{content:"\f09b"}.fa-unlock:before{content:"\f09c"}.fa-credit-card:before{content:"\f09d"}.fa-rss:before{content:"\f09e"}.fa-hdd-o:before{content:"\f0a0"}.fa-bullhorn:before{content:"\f0a1"}.fa-bell:before{content:"\f0f3"}.fa-certificate:before{content:"\f0a3"}.fa-hand-o-right:before{content:"\f0a4"}.fa-hand-o-left:before{content:"\f0a5"}.fa-hand-o-up:before{content:"\f0a6"}.fa-hand-o-down:before{content:"\f0a7"}.fa-arrow-circle-left:before{content:"\f0a8"}.fa-arrow-circle-right:before{content:"\f0a9"}.fa-arrow-circle-up:before{content:"\f0aa"}.fa-arrow-circle-down:before{content:"\f0ab"}.fa-globe:before{content:"\f0ac"}.fa-wrench:before{content:"\f0ad"}.fa-tasks:before{content:"\f0ae"}.fa-filter:before{content:"\f0b0"}.fa-briefcase:before{content:"\f0b1"}.fa-arrows-alt:before{content:"\f0b2"}.fa-group:before,.fa-users:before{content:"\f0c0"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-cloud:before{content:"\f0c2"}.fa-flask:before{content:"\f0c3"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-copy:before,.fa-files-o:before{content:"\f0c5"}.fa-paperclip:before{content:"\f0c6"}.fa-floppy-o:before,.fa-save:before{content:"\f0c7"}.fa-square:before{content:"\f0c8"}.fa-bars:before,.fa-navicon:before,.fa-reorder:before{content:"\f0c9"}.fa-list-ul:before{content:"\f0ca"}.fa-list-ol:before{content:"\f0cb"}.fa-strikethrough:before{content:"\f0cc"}.fa-underline:before{content:"\f0cd"}.fa-table:before{content:"\f0ce"}.fa-magic:before{content:"\f0d0"}.fa-truck:before{content:"\f0d1"}.fa-pinterest:before{content:"\f0d2"}.fa-pinterest-square:before{content:"\f0d3"}.fa-google-plus-square:before{content:"\f0d4"}.fa-google-plus:before{content:"\f0d5"}.fa-money:before{content:"\f0d6"}.fa-caret-down:before{content:"\f0d7"}.fa-caret-up:before{content:"\f0d8"}.fa-caret-left:before{content:"\f0d9"}.fa-caret-right:before{content:"\f0da"}.fa-columns:before{content:"\f0db"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-envelope:before{content:"\f0e0"}.fa-linkedin:before{content:"\f0e1"}.fa-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-dashboard:before,.fa-tachometer:before{content:"\f0e4"}.fa-comment-o:before{content:"\f0e5"}.fa-comments-o:before{content:"\f0e6"}.fa-bolt:before,.fa-flash:before{content:"\f0e7"}.fa-sitemap:before{content:"\f0e8"}.fa-umbrella:before{content:"\f0e9"}.fa-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-lightbulb-o:before{content:"\f0eb"}.fa-exchange:before{content:"\f0ec"}.fa-cloud-download:before{content:"\f0ed"}.fa-cloud-upload:before{content:"\f0ee"}.fa-user-md:before{content:"\f0f0"}.fa-stethoscope:before{content:"\f0f1"}.fa-suitcase:before{content:"\f0f2"}.fa-bell-o:before{content:"\f0a2"}.fa-coffee:before{content:"\f0f4"}.fa-cutlery:before{content:"\f0f5"}.fa-file-text-o:before{content:"\f0f6"}.fa-building-o:before{content:"\f0f7"}.fa-hospital-o:before{content:"\f0f8"}.fa-ambulance:before{content:"\f0f9"}.fa-medkit:before{content:"\f0fa"}.fa-fighter-jet:before{content:"\f0fb"}.fa-beer:before{content:"\f0fc"}.fa-h-square:before{content:"\f0fd"}.fa-plus-square:before{content:"\f0fe"}.fa-angle-double-left:before{content:"\f100"}.fa-angle-double-right:before{content:"\f101"}.fa-angle-double-up:before{content:"\f102"}.fa-angle-double-down:before{content:"\f103"}.fa-angle-left:before{content:"\f104"}.fa-angle-right:before{content:"\f105"}.fa-angle-up:before{content:"\f106"}.fa-angle-down:before{content:"\f107"}.fa-desktop:before{content:"\f108"}.fa-laptop:before{content:"\f109"}.fa-tablet:before{content:"\f10a"}.fa-mobile-phone:before,.fa-mobile:before{content:"\f10b"}.fa-circle-o:before{content:"\f10c"}.fa-quote-left:before{content:"\f10d"}.fa-quote-right:before{content:"\f10e"}.fa-spinner:before{content:"\f110"}.fa-circle:before{content:"\f111"}.fa-mail-reply:before,.fa-reply:before{content:"\f112"}.fa-github-alt:before{content:"\f113"}.fa-folder-o:before{content:"\f114"}.fa-folder-open-o:before{content:"\f115"}.fa-smile-o:before{content:"\f118"}.fa-frown-o:before{content:"\f119"}.fa-meh-o:before{content:"\f11a"}.fa-gamepad:before{content:"\f11b"}.fa-keyboard-o:before{content:"\f11c"}.fa-flag-o:before{content:"\f11d"}.fa-flag-checkered:before{content:"\f11e"}.fa-terminal:before{content:"\f120"}.fa-code:before{content:"\f121"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-star-half-empty:before,.fa-star-half-full:before,.fa-star-half-o:before{content:"\f123"}.fa-location-arrow:before{content:"\f124"}.fa-crop:before{content:"\f125"}.fa-code-fork:before{content:"\f126"}.fa-chain-broken:before,.fa-unlink:before{content:"\f127"}.fa-question:before{content:"\f128"}.fa-info:before{content:"\f129"}.fa-exclamation:before{content:"\f12a"}.fa-superscript:before{content:"\f12b"}.fa-subscript:before{content:"\f12c"}.fa-eraser:before{content:"\f12d"}.fa-puzzle-piece:before{content:"\f12e"}.fa-microphone:before{content:"\f130"}.fa-microphone-slash:before{content:"\f131"}.fa-shield:before{content:"\f132"}.fa-calendar-o:before{content:"\f133"}.fa-fire-extinguisher:before{content:"\f134"}.fa-rocket:before{content:"\f135"}.fa-maxcdn:before{content:"\f136"}.fa-chevron-circle-left:before{content:"\f137"}.fa-chevron-circle-right:before{content:"\f138"}.fa-chevron-circle-up:before{content:"\f139"}.fa-chevron-circle-down:before{content:"\f13a"}.fa-html5:before{content:"\f13b"}.fa-css3:before{content:"\f13c"}.fa-anchor:before{content:"\f13d"}.fa-unlock-alt:before{content:"\f13e"}.fa-bullseye:before{content:"\f140"}.fa-ellipsis-h:before{content:"\f141"}.fa-ellipsis-v:before{content:"\f142"}.fa-rss-square:before{content:"\f143"}.fa-play-circle:before{content:"\f144"}.fa-ticket:before{content:"\f145"}.fa-minus-square:before{content:"\f146"}.fa-minus-square-o:before{content:"\f147"}.fa-level-up:before{content:"\f148"}.fa-level-down:before{content:"\f149"}.fa-check-square:before{content:"\f14a"}.fa-pencil-square:before{content:"\f14b"}.fa-external-link-square:before{content:"\f14c"}.fa-share-square:before{content:"\f14d"}.fa-compass:before{content:"\f14e"}.fa-caret-square-o-down:before,.fa-toggle-down:before{content:"\f150"}.fa-caret-square-o-up:before,.fa-toggle-up:before{content:"\f151"}.fa-caret-square-o-right:before,.fa-toggle-right:before{content:"\f152"}.fa-eur:before,.fa-euro:before{content:"\f153"}.fa-gbp:before{content:"\f154"}.fa-dollar:before,.fa-usd:before{content:"\f155"}.fa-inr:before,.fa-rupee:before{content:"\f156"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble:before{content:"\f158"}.fa-krw:before,.fa-won:before{content:"\f159"}.fa-bitcoin:before,.fa-btc:before{content:"\f15a"}.fa-file:before{content:"\f15b"}.fa-file-text:before{content:"\f15c"}.fa-sort-alpha-asc:before{content:"\f15d"}.fa-sort-alpha-desc:before{content:"\f15e"}.fa-sort-amount-asc:before{content:"\f160"}.fa-sort-amount-desc:before{content:"\f161"}.fa-sort-numeric-asc:before{content:"\f162"}.fa-sort-numeric-desc:before{content:"\f163"}.fa-thumbs-up:before{content:"\f164"}.fa-thumbs-down:before{content:"\f165"}.fa-youtube-square:before{content:"\f166"}.fa-youtube:before{content:"\f167"}.fa-xing:before{content:"\f168"}.fa-xing-square:before{content:"\f169"}.fa-youtube-play:before{content:"\f16a"}.fa-dropbox:before{content:"\f16b"}.fa-stack-overflow:before{content:"\f16c"}.fa-instagram:before{content:"\f16d"}.fa-flickr:before{content:"\f16e"}.fa-adn:before{content:"\f170"}.fa-bitbucket:before{content:"\f171"}.fa-bitbucket-square:before{content:"\f172"}.fa-tumblr:before{content:"\f173"}.fa-tumblr-square:before{content:"\f174"}.fa-long-arrow-down:before{content:"\f175"}.fa-long-arrow-up:before{content:"\f176"}.fa-long-arrow-left:before{content:"\f177"}.fa-long-arrow-right:before{content:"\f178"}.fa-apple:before{content:"\f179"}.fa-windows:before{content:"\f17a"}.fa-android:before{content:"\f17b"}.fa-linux:before{content:"\f17c"}.fa-dribbble:before{content:"\f17d"}.fa-skype:before{content:"\f17e"}.fa-foursquare:before{content:"\f180"}.fa-trello:before{content:"\f181"}.fa-female:before{content:"\f182"}.fa-male:before{content:"\f183"}.fa-gittip:before{content:"\f184"}.fa-sun-o:before{content:"\f185"}.fa-moon-o:before{content:"\f186"}.fa-archive:before{content:"\f187"}.fa-bug:before{content:"\f188"}.fa-vk:before{content:"\f189"}.fa-weibo:before{content:"\f18a"}.fa-renren:before{content:"\f18b"}.fa-pagelines:before{content:"\f18c"}.fa-stack-exchange:before{content:"\f18d"}.fa-arrow-circle-o-right:before{content:"\f18e"}.fa-arrow-circle-o-left:before{content:"\f190"}.fa-caret-square-o-left:before,.fa-toggle-left:before{content:"\f191"}.fa-dot-circle-o:before{content:"\f192"}.fa-wheelchair:before{content:"\f193"}.fa-vimeo-square:before{content:"\f194"}.fa-try:before,.fa-turkish-lira:before{content:"\f195"}.fa-plus-square-o:before{content:"\f196"}.fa-space-shuttle:before{content:"\f197"}.fa-slack:before{content:"\f198"}.fa-envelope-square:before{content:"\f199"}.fa-wordpress:before{content:"\f19a"}.fa-openid:before{content:"\f19b"}.fa-bank:before,.fa-institution:before,.fa-university:before{content:"\f19c"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-yahoo:before{content:"\f19e"}.fa-google:before{content:"\f1a0"}.fa-reddit:before{content:"\f1a1"}.fa-reddit-square:before{content:"\f1a2"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-stumbleupon:before{content:"\f1a4"}.fa-delicious:before{content:"\f1a5"}.fa-digg:before{content:"\f1a6"}.fa-pied-piper:before{content:"\f1a7"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-drupal:before{content:"\f1a9"}.fa-joomla:before{content:"\f1aa"}.fa-language:before{content:"\f1ab"}.fa-fax:before{content:"\f1ac"}.fa-building:before{content:"\f1ad"}.fa-child:before{content:"\f1ae"}.fa-paw:before{content:"\f1b0"}.fa-spoon:before{content:"\f1b1"}.fa-cube:before{content:"\f1b2"}.fa-cubes:before{content:"\f1b3"}.fa-behance:before{content:"\f1b4"}.fa-behance-square:before{content:"\f1b5"}.fa-steam:before{content:"\f1b6"}.fa-steam-square:before{content:"\f1b7"}.fa-recycle:before{content:"\f1b8"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-tree:before{content:"\f1bb"}.fa-spotify:before{content:"\f1bc"}.fa-deviantart:before{content:"\f1bd"}.fa-soundcloud:before{content:"\f1be"}.fa-database:before{content:"\f1c0"}.fa-file-pdf-o:before{content:"\f1c1"}.fa-file-word-o:before{content:"\f1c2"}.fa-file-excel-o:before{content:"\f1c3"}.fa-file-powerpoint-o:before{content:"\f1c4"}.fa-file-image-o:before,.fa-file-photo-o:before,.fa-file-picture-o:before{content:"\f1c5"}.fa-file-archive-o:before,.fa-file-zip-o:before{content:"\f1c6"}.fa-file-audio-o:before,.fa-file-sound-o:before{content:"\f1c7"}.fa-file-movie-o:before,.fa-file-video-o:before{content:"\f1c8"}.fa-file-code-o:before{content:"\f1c9"}.fa-vine:before{content:"\f1ca"}.fa-codepen:before{content:"\f1cb"}.fa-jsfiddle:before{content:"\f1cc"}.fa-life-bouy:before,.fa-life-buoy:before,.fa-life-ring:before,.fa-life-saver:before,.fa-support:before{content:"\f1cd"}.fa-circle-o-notch:before{content:"\f1ce"}.fa-ra:before,.fa-rebel:before{content:"\f1d0"}.fa-empire:before,.fa-ge:before{content:"\f1d1"}.fa-git-square:before{content:"\f1d2"}.fa-git:before{content:"\f1d3"}.fa-hacker-news:before{content:"\f1d4"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-qq:before{content:"\f1d6"}.fa-wechat:before,.fa-weixin:before{content:"\f1d7"}.fa-paper-plane:before,.fa-send:before{content:"\f1d8"}.fa-paper-plane-o:before,.fa-send-o:before{content:"\f1d9"}.fa-history:before{content:"\f1da"}.fa-circle-thin:before{content:"\f1db"}.fa-header:before{content:"\f1dc"}.fa-paragraph:before{content:"\f1dd"}.fa-sliders:before{content:"\f1de"}.fa-share-alt:before{content:"\f1e0"}.fa-share-alt-square:before{content:"\f1e1"}.fa-bomb:before{content:"\f1e2"}.fa-futbol-o:before,.fa-soccer-ball-o:before{content:"\f1e3"}.fa-tty:before{content:"\f1e4"}.fa-binoculars:before{content:"\f1e5"}.fa-plug:before{content:"\f1e6"}.fa-slideshare:before{content:"\f1e7"}.fa-twitch:before{content:"\f1e8"}.fa-yelp:before{content:"\f1e9"}.fa-newspaper-o:before{content:"\f1ea"}.fa-wifi:before{content:"\f1eb"}.fa-calculator:before{content:"\f1ec"}.fa-paypal:before{content:"\f1ed"}.fa-google-wallet:before{content:"\f1ee"}.fa-cc-visa:before{content:"\f1f0"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-cc-discover:before{content:"\f1f2"}.fa-cc-amex:before{content:"\f1f3"}.fa-cc-paypal:before{content:"\f1f4"}.fa-cc-stripe:before{content:"\f1f5"}.fa-bell-slash:before{content:"\f1f6"}.fa-bell-slash-o:before{content:"\f1f7"}.fa-trash:before{content:"\f1f8"}.fa-copyright:before{content:"\f1f9"}.fa-at:before{content:"\f1fa"}.fa-eyedropper:before{content:"\f1fb"}.fa-paint-brush:before{content:"\f1fc"}.fa-birthday-cake:before{content:"\f1fd"}.fa-area-chart:before{content:"\f1fe"}.fa-pie-chart:before{content:"\f200"}.fa-line-chart:before{content:"\f201"}.fa-lastfm:before{content:"\f202"}.fa-lastfm-square:before{content:"\f203"}.fa-toggle-off:before{content:"\f204"}.fa-toggle-on:before{content:"\f205"}.fa-bicycle:before{content:"\f206"}.fa-bus:before{content:"\f207"}.fa-ioxhost:before{content:"\f208"}.fa-angellist:before{content:"\f209"}.fa-cc:before{content:"\f20a"}.fa-ils:before,.fa-shekel:before,.fa-sheqel:before{content:"\f20b"}.fa-meanpath:before{content:"\f20c"}/*! +* +* IPython base +* +*/.modal.fade .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}code{color:#000}pre{font-size:inherit;line-height:inherit}label{font-weight:400}.border-box-sizing{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.corner-all{border-radius:2px}.no-padding{padding:0}.hbox{display:-webkit-box;-webkit-box-orient:horizontal;display:-moz-box;-moz-box-orient:horizontal;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}.hbox>*{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:none}.vbox{display:-webkit-box;-webkit-box-orient:vertical;display:-moz-box;-moz-box-orient:vertical;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}.vbox>*{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:none}.hbox.reverse,.reverse,.vbox.reverse{-webkit-box-direction:reverse;-moz-box-direction:reverse;box-direction:reverse;flex-direction:row-reverse}.box-flex0,.hbox.box-flex0,.vbox.box-flex0{-webkit-box-flex:0;-moz-box-flex:0;box-flex:0;flex:none;width:auto}.box-flex1,.hbox.box-flex1,.vbox.box-flex1{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}.box-flex,.hbox.box-flex,.vbox.box-flex{-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}.box-flex2,.hbox.box-flex2,.vbox.box-flex2{-webkit-box-flex:2;-moz-box-flex:2;box-flex:2;flex:2}.box-group1{-webkit-box-flex-group:1;-moz-box-flex-group:1;box-flex-group:1}.box-group2{-webkit-box-flex-group:2;-moz-box-flex-group:2;box-flex-group:2}.hbox.start,.start,.vbox.start{-webkit-box-pack:start;-moz-box-pack:start;box-pack:start;justify-content:flex-start}.end,.hbox.end,.vbox.end{-webkit-box-pack:end;-moz-box-pack:end;box-pack:end;justify-content:flex-end}.center,.hbox.center,.vbox.center{-webkit-box-pack:center;-moz-box-pack:center;box-pack:center;justify-content:center}.baseline,.hbox.baseline,.vbox.baseline{-webkit-box-pack:baseline;-moz-box-pack:baseline;box-pack:baseline;justify-content:baseline}.hbox.stretch,.stretch,.vbox.stretch{-webkit-box-pack:stretch;-moz-box-pack:stretch;box-pack:stretch;justify-content:stretch}.align-start,.hbox.align-start,.vbox.align-start{-webkit-box-align:start;-moz-box-align:start;box-align:start;align-items:flex-start}.align-end,.hbox.align-end,.vbox.align-end{-webkit-box-align:end;-moz-box-align:end;box-align:end;align-items:flex-end}.align-center,.hbox.align-center,.vbox.align-center{-webkit-box-align:center;-moz-box-align:center;box-align:center;align-items:center}.align-baseline,.hbox.align-baseline,.vbox.align-baseline{-webkit-box-align:baseline;-moz-box-align:baseline;box-align:baseline;align-items:baseline}.align-stretch,.hbox.align-stretch,.vbox.align-stretch{-webkit-box-align:stretch;-moz-box-align:stretch;box-align:stretch;align-items:stretch}div.error{margin:2em;text-align:center}div.error>h1{font-size:500%;line-height:normal}div.error>p{font-size:200%;line-height:normal}div.traceback-wrapper{text-align:left;max-width:800px;margin:auto}body{position:absolute;left:0;right:0;top:0;bottom:0;overflow:visible}#header{display:none;background-color:#fff;position:relative;z-index:100}#header #header-container{padding-bottom:5px;padding-top:5px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}#header .header-bar{width:100%;height:1px;background:#e7e7e7;margin-bottom:-1px}#header-spacer{width:100%;visibility:hidden}@media print{#header{display:none!important}#header-spacer{display:none}}#ipython_notebook{padding-left:0;padding-top:1px;padding-bottom:1px}@media (max-width:991px){#ipython_notebook{margin-left:10px}}#noscript{width:auto;padding-top:16px;padding-bottom:16px;text-align:center;font-size:22px;color:red;font-weight:700}#ipython_notebook img{height:28px}#site{width:100%;display:none;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;overflow:auto}@media print{#site{height:auto!important}}.ui-button .ui-button-text{padding:.2em .8em;font-size:77%}input.ui-button{padding:.3em .9em}span#login_widget{float:right}#logout,span#login_widget>.button{color:#333;background-color:#fff;border-color:#ccc}#logout.active,#logout.focus,#logout:active,#logout:focus,#logout:hover,.open>.dropdown-toggle#logout,.open>.dropdown-togglespan#login_widget>.button,span#login_widget>.button.active,span#login_widget>.button.focus,span#login_widget>.button:active,span#login_widget>.button:focus,span#login_widget>.button:hover{color:#333;background-color:#e6e6e6;border-color:#adadad}#logout.active,#logout:active,.open>.dropdown-toggle#logout,.open>.dropdown-togglespan#login_widget>.button,span#login_widget>.button.active,span#login_widget>.button:active{background-image:none}#logout.disabled,#logout.disabled.active,#logout.disabled.focus,#logout.disabled:active,#logout.disabled:focus,#logout.disabled:hover,#logout[disabled],#logout[disabled].active,#logout[disabled].focus,#logout[disabled]:active,#logout[disabled]:focus,#logout[disabled]:hover,fieldset[disabled] #logout,fieldset[disabled] #logout.active,fieldset[disabled] #logout.focus,fieldset[disabled] #logout:active,fieldset[disabled] #logout:focus,fieldset[disabled] #logout:hover,fieldset[disabled] span#login_widget>.button,fieldset[disabled] span#login_widget>.button.active,fieldset[disabled] span#login_widget>.button.focus,fieldset[disabled] span#login_widget>.button:active,fieldset[disabled] span#login_widget>.button:focus,fieldset[disabled] span#login_widget>.button:hover,span#login_widget>.button.disabled,span#login_widget>.button.disabled.active,span#login_widget>.button.disabled.focus,span#login_widget>.button.disabled:active,span#login_widget>.button.disabled:focus,span#login_widget>.button.disabled:hover,span#login_widget>.button[disabled],span#login_widget>.button[disabled].active,span#login_widget>.button[disabled].focus,span#login_widget>.button[disabled]:active,span#login_widget>.button[disabled]:focus,span#login_widget>.button[disabled]:hover{background-color:#fff;border-color:#ccc}#logout .badge,span#login_widget>.button .badge{color:#fff;background-color:#333}.nav-header{text-transform:none}#header>span{margin-top:10px}.modal_stretch .modal-dialog{display:-webkit-box;-webkit-box-orient:vertical;display:-moz-box;-moz-box-orient:vertical;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;min-height:80vh}.modal_stretch .modal-dialog .modal-body{max-height:calc(100vh - 200px);overflow:auto;flex:1}@media (min-width:768px){.modal .modal-dialog{width:700px}select.form-control{margin-left:12px;margin-right:12px}}/*! +* +* IPython auth +* +*/.center-nav{display:inline-block;margin-bottom:-4px}/*! +* +* IPython tree view +* +*/.alternate_upload{background-color:none;display:inline}.alternate_upload.form{padding:0;margin:0}.alternate_upload input.fileinput{text-align:center;vertical-align:middle;display:inline;opacity:0;z-index:2;width:12ex;margin-right:-12ex}.alternate_upload .btn-upload{height:22px}ul#tabs{margin-bottom:4px}ul#tabs a{padding-top:6px;padding-bottom:4px}ul.breadcrumb a:focus,ul.breadcrumb a:hover{text-decoration:none}ul.breadcrumb i.icon-home{font-size:16px;margin-right:4px}ul.breadcrumb span{color:#5e5e5e}.list_toolbar{padding:4px 0;vertical-align:middle}.list_toolbar .tree-buttons{padding-top:1px}.dynamic-buttons{padding-top:3px;display:inline-block}.list_toolbar [class*=span]{min-height:24px}.list_header{font-weight:700;background-color:#eee}.list_placeholder{font-weight:700;padding:4px 7px}.list_container{margin-top:4px;margin-bottom:20px;border:1px solid #ddd;border-radius:2px}.list_container>div{border-bottom:1px solid #ddd}.list_container>div:hover .list-item{background-color:red}.list_container>div:last-child{border:none}.list_item:hover .list_item{background-color:#ddd}.list_item a{text-decoration:none}.list_item:hover{background-color:#fafafa}.action_col{text-align:right}.list_header>div,.list_item>div{line-height:22px;padding:4px 7px}.list_header>div input,.list_item>div input{margin-right:7px;margin-left:14px;vertical-align:baseline;line-height:22px;position:relative;top:-1px}.list_header>div .item_link,.list_item>div .item_link{margin-left:-1px;vertical-align:baseline;line-height:22px}.new-file input[type=checkbox]{visibility:hidden}.item_name{line-height:22px;height:24px}.item_icon{font-size:14px;color:#5e5e5e;margin-right:7px;margin-left:7px;line-height:22px;vertical-align:baseline}.item_buttons{line-height:1em;margin-left:-5px}.item_buttons .btn-group,.item_buttons .input-group{float:left}.item_buttons>.btn,.item_buttons>.btn-group,.item_buttons>.input-group{margin-left:5px}.item_buttons .btn{min-width:13ex}.item_buttons .running-indicator{padding-top:4px;color:#5cb85c}.toolbar_info{height:24px;line-height:24px}input.engine_num_input,input.nbname_input{padding-top:3px;padding-bottom:3px;height:22px;line-height:14px;margin:0}input.engine_num_input{width:60px}.highlight_text{color:#00f}#project_name{display:inline-block;padding-left:7px;margin-left:-2px}#project_name>.breadcrumb{padding:0;margin-bottom:0;background-color:transparent;font-weight:700}#tree-selector{padding-right:0}#button-select-all{min-width:50px}#select-all{margin-left:7px;margin-right:2px}.menu_icon{margin-right:2px}.tab-content .row{margin-left:0;margin-right:0}.folder_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f114"}.folder_icon:before.pull-left{margin-right:.3em}.folder_icon:before.pull-right{margin-left:.3em}.notebook_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f02d";position:relative;top:-1px}.notebook_icon:before.pull-left{margin-right:.3em}.notebook_icon:before.pull-right{margin-left:.3em}.running_notebook_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f02d";position:relative;top:-1px;color:#5cb85c}.running_notebook_icon:before.pull-left{margin-right:.3em}.running_notebook_icon:before.pull-right{margin-left:.3em}.file_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f016";position:relative;top:-2px}.file_icon:before.pull-left{margin-right:.3em}.file_icon:before.pull-right{margin-left:.3em}#notebook_toolbar .pull-right{padding-top:0;margin-right:-1px}ul#new-menu{left:auto;right:0}.kernel-menu-icon{padding-right:12px;width:24px;content:"\f096"}.kernel-menu-icon:before{content:"\f096"}.kernel-menu-icon-current:before{content:"\f00c"}#tab_content{padding-top:20px}#running .panel-group .panel{margin-top:3px;margin-bottom:1em}#running .panel-group .panel .panel-heading{background-color:#eee;line-height:22px;padding:4px 7px}#running .panel-group .panel .panel-heading a:focus,#running .panel-group .panel .panel-heading a:hover{text-decoration:none}#running .panel-group .panel .panel-body{padding:0}#running .panel-group .panel .panel-body .list_container{margin-top:0;margin-bottom:0;border:0;border-radius:0}#running .panel-group .panel .panel-body .list_container .list_item{border-bottom:1px solid #ddd}#running .panel-group .panel .panel-body .list_container .list_item:last-child{border-bottom:0}.delete-button,.duplicate-button,.rename-button,.shutdown-button{display:none}.dynamic-instructions{display:inline-block;padding-top:4px}/*! +* +* IPython text editor webapp +* +*/.selected-keymap i.fa{padding:0 5px}.selected-keymap i.fa:before{content:"\f00c"}#mode-menu{overflow:auto;max-height:20em}.edit_app #header{-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2)}.edit_app #menubar .navbar{margin-bottom:-1px}.dirty-indicator{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:20px}.dirty-indicator.pull-left{margin-right:.3em}.dirty-indicator.pull-right{margin-left:.3em}.dirty-indicator-dirty{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:20px}.dirty-indicator-dirty.pull-left{margin-right:.3em}.dirty-indicator-dirty.pull-right{margin-left:.3em}.dirty-indicator-clean{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;width:20px}.dirty-indicator-clean.pull-left{margin-right:.3em}.dirty-indicator-clean.pull-right{margin-left:.3em}.dirty-indicator-clean:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f00c"}.dirty-indicator-clean:before.pull-left{margin-right:.3em}.dirty-indicator-clean:before.pull-right{margin-left:.3em}#filename{font-size:16pt;display:table;padding:0 5px}#current-mode{padding-left:5px;padding-right:5px}#texteditor-backdrop{padding-top:20px;padding-bottom:20px}@media not print{#texteditor-backdrop{background-color:#eee}}@media print{#texteditor-backdrop #texteditor-container .CodeMirror-gutter,#texteditor-backdrop #texteditor-container .CodeMirror-gutters{background-color:#fff}}@media not print{#texteditor-backdrop #texteditor-container .CodeMirror-gutter,#texteditor-backdrop #texteditor-container .CodeMirror-gutters{background-color:#fff}#texteditor-backdrop #texteditor-container{padding:0;background-color:#fff;-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2)}}/*! +* +* IPython notebook +* +*/.ansibold{font-weight:700}.ansiblack{color:#000}.ansired{color:#8b0000}.ansigreen{color:#006400}.ansiyellow{color:#c4a000}.ansiblue{color:#00008b}.ansipurple{color:#9400d3}.ansicyan{color:#4682b4}.ansigray{color:gray}.ansibgblack{background-color:#000}.ansibgred{background-color:red}.ansibggreen{background-color:green}.ansibgyellow{background-color:#ff0}.ansibgblue{background-color:#00f}.ansibgpurple{background-color:#ff00ff}.ansibgcyan{background-color:#0ff}.ansibggray{background-color:gray}div.cell{border:1px solid transparent;display:-webkit-box;-webkit-box-orient:vertical;display:-moz-box;-moz-box-orient:vertical;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;border-radius:2px;box-sizing:border-box;-moz-box-sizing:border-box;border-width:thin;border-style:solid;width:100%;padding:5px;margin:0;outline:0}div.cell.selected{border-color:#ababab}@media print{div.cell.selected{border-color:transparent}}.edit_mode div.cell.selected{border-color:green}.prompt{min-width:14ex;padding:.4em;margin:0;font-family:monospace;text-align:right;line-height:1.21429em}div.inner_cell{display:-webkit-box;-webkit-box-orient:vertical;display:-moz-box;-moz-box-orient:vertical;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}@-moz-document url-prefix(){div.inner_cell{overflow-x:hidden}}div.input_area{border:1px solid #cfcfcf;border-radius:2px;background:#f7f7f7;line-height:1.21429em}div.prompt:empty{padding-top:0;padding-bottom:0}div.unrecognized_cell{padding:5px 5px 5px 0;display:-webkit-box;-webkit-box-orient:horizontal;display:-moz-box;-moz-box-orient:horizontal;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}div.unrecognized_cell .inner_cell{border-radius:2px;padding:5px;font-weight:700;color:red;border:1px solid #cfcfcf;background:#eaeaea}div.unrecognized_cell .inner_cell a,div.unrecognized_cell .inner_cell a:hover{color:inherit;text-decoration:none}@media (max-width:540px){.prompt{text-align:left}div.unrecognized_cell>div.prompt{display:none}}div.code_cell{}div.input{page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;display:-moz-box;-moz-box-orient:horizontal;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}@media (max-width:540px){div.input{-webkit-box-orient:vertical;-moz-box-orient:vertical;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}}div.input_prompt{color:navy;border-top:1px solid transparent}div.input_area>div.highlight{margin:.4em;border:none;padding:0;background-color:transparent}div.input_area>div.highlight>pre{margin:0;border:none;padding:0;background-color:transparent}.CodeMirror{line-height:1.21429em;font-size:14px;height:auto;background:0 0}.CodeMirror-scroll{overflow-y:hidden;overflow-x:auto}.CodeMirror-lines{padding:.4em}.CodeMirror-linenumber{padding:0 8px 0 4px}.CodeMirror-gutters{border-bottom-left-radius:2px;border-top-left-radius:2px}.CodeMirror pre{padding:0;border:0;border-radius:0}.highlight-base,.highlight-variable{color:#000}.highlight-variable-2{color:#1a1a1a}.highlight-variable-3{color:#333}.highlight-string{color:#BA2121}.highlight-comment{color:#408080;font-style:italic}.highlight-number{color:#080}.highlight-atom{color:#88F}.highlight-keyword{color:green;font-weight:700}.highlight-builtin{color:green}.highlight-error{color:red}.highlight-operator{color:#A2F;font-weight:700}.highlight-meta{color:#A2F}.highlight-def{color:#00f}.highlight-string-2{color:#f50}.highlight-qualifier{color:#555}.highlight-bracket{color:#997}.highlight-tag{color:#170}.highlight-attribute{color:#00c}.highlight-header{color:#00f}.highlight-quote{color:#090}.highlight-link{color:#00c}.cm-s-ipython span.cm-keyword{color:green;font-weight:700}.cm-s-ipython span.cm-atom{color:#88F}.cm-s-ipython span.cm-number{color:#080}.cm-s-ipython span.cm-def{color:#00f}.cm-s-ipython span.cm-variable{color:#000}.cm-s-ipython span.cm-operator{color:#A2F;font-weight:700}.cm-s-ipython span.cm-variable-2{color:#1a1a1a}.cm-s-ipython span.cm-variable-3{color:#333}.cm-s-ipython span.cm-comment{color:#408080;font-style:italic}.cm-s-ipython span.cm-string{color:#BA2121}.cm-s-ipython span.cm-string-2{color:#f50}.cm-s-ipython span.cm-meta{color:#A2F}.cm-s-ipython span.cm-qualifier{color:#555}.cm-s-ipython span.cm-builtin{color:green}.cm-s-ipython span.cm-bracket{color:#997}.cm-s-ipython span.cm-tag{color:#170}.cm-s-ipython span.cm-attribute{color:#00c}.cm-s-ipython span.cm-header{color:#00f}.cm-s-ipython span.cm-quote{color:#090}.cm-s-ipython span.cm-link{color:#00c}.cm-s-ipython span.cm-error{color:red}.cm-s-ipython span.cm-tab{background:url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAMCAYAAAAkuj5RAAAAAXNSR0IArs4c6QAAAGFJREFUSMft1LsRQFAQheHPowAKoACx3IgEKtaEHujDjORSgWTH/ZOdnZOcM/sgk/kFFWY0qV8foQwS4MKBCS3qR6ixBJvElOobYAtivseIE120FaowJPN75GMu8j/LfMwNjh4HUpwg4LUAAAAASUVORK5CYII=')right no-repeat}div.output_wrapper{display:-webkit-box;-webkit-box-align:stretch;display:-moz-box;-moz-box-align:stretch;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch;z-index:1}div.output_scroll{height:24em;width:100%;overflow:auto;border-radius:2px;-webkit-box-shadow:inset 0 2px 8px rgba(0,0,0,.8);box-shadow:inset 0 2px 8px rgba(0,0,0,.8);display:block}div.output_collapsed{margin:0;padding:0;display:-webkit-box;-webkit-box-orient:vertical;display:-moz-box;-moz-box-orient:vertical;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}div.out_prompt_overlay{height:100%;padding:0 .4em;position:absolute;border-radius:2px}div.out_prompt_overlay:hover{-webkit-box-shadow:inset 0 0 1px #000;box-shadow:inset 0 0 1px #000;background:rgba(240,240,240,.5)}div.output_prompt{color:#8b0000}div.output_area{padding:0;page-break-inside:avoid;display:-webkit-box;-webkit-box-orient:horizontal;display:-moz-box;-moz-box-orient:horizontal;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}div.output_area .MathJax_Display{text-align:left!important}div.output_area .rendered_html img,div.output_area .rendered_html table{margin-left:0;margin-right:0}div.output_area img,div.output_area svg{max-width:100%;height:auto}div.output_area img.unconfined,div.output_area svg.unconfined{max-width:none}.output{display:-webkit-box;-webkit-box-orient:vertical;display:-moz-box;-moz-box-orient:vertical;display:box;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}@media (max-width:540px){div.output_area{-webkit-box-orient:vertical;-moz-box-orient:vertical;box-orient:vertical;box-align:stretch;display:flex;flex-direction:column;align-items:stretch}}div.output_area pre{margin:0;padding:0;border:0;vertical-align:baseline;color:#000;background-color:transparent;border-radius:0}div.output_subarea{overflow-x:auto;padding:.4em;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1;max-width:calc(100% - 14ex)}div.output_text{text-align:left;color:#000;line-height:1.21429em}div.output_stderr{background:#fdd}div.output_latex{text-align:left}div.output_javascript:empty{padding:0}.js-error{color:#8b0000}div.raw_input_container{font-family:monospace;padding-top:5px}span.raw_input_prompt{}input.raw_input{font-family:inherit;font-size:inherit;color:inherit;width:auto;vertical-align:baseline;padding:0 .25em;margin:0 .25em}input.raw_input:focus{box-shadow:none}p.p-space{margin-bottom:10px}div.output_unrecognized{padding:5px;font-weight:700;color:red}div.output_unrecognized a,div.output_unrecognized a:hover{color:inherit;text-decoration:none}.rendered_html{color:#000}.rendered_html em{font-style:italic}.rendered_html strong{font-weight:700}.rendered_html :link,.rendered_html :visited,.rendered_html u{text-decoration:underline}.rendered_html h1{font-size:185.7%;margin:1.08em 0 0;font-weight:700;line-height:1}.rendered_html h2{font-size:157.1%;margin:1.27em 0 0;font-weight:700;line-height:1}.rendered_html h3{font-size:128.6%;margin:1.55em 0 0;font-weight:700;line-height:1}.rendered_html h4{font-size:100%;margin:2em 0 0;font-weight:700;line-height:1}.rendered_html h5,.rendered_html h6{font-size:100%;margin:2em 0 0;font-weight:700;line-height:1;font-style:italic}.rendered_html h1:first-child{margin-top:.538em}.rendered_html h2:first-child{margin-top:.636em}.rendered_html h3:first-child{margin-top:.777em}.rendered_html h4:first-child,.rendered_html h5:first-child,.rendered_html h6:first-child{margin-top:1em}.rendered_html ul{list-style:disc;margin:0 2em;padding-left:0}.rendered_html ul ul{list-style:square;margin:0 2em}.rendered_html ul ul ul{list-style:circle;margin:0 2em}.rendered_html ol{list-style:decimal;margin:0 2em;padding-left:0}.rendered_html ol ol{list-style:upper-alpha;margin:0 2em}.rendered_html ol ol ol{list-style:lower-alpha;margin:0 2em}.rendered_html ol ol ol ol{list-style:lower-roman;margin:0 2em}.rendered_html ol ol ol ol ol{list-style:decimal;margin:0 2em}.rendered_html *+ol,.rendered_html *+ul{margin-top:1em}.rendered_html hr{color:#000;background-color:#000}.rendered_html pre{margin:1em 2em}.rendered_html code,.rendered_html pre{border:0;background-color:#fff;color:#000;font-size:100%;padding:0}.rendered_html blockquote{margin:1em 2em}.rendered_html table{margin-left:auto;margin-right:auto;border:1px solid #000;border-collapse:collapse}.rendered_html td,.rendered_html th,.rendered_html tr{border:1px solid #000;border-collapse:collapse;margin:1em 2em}.rendered_html td,.rendered_html th{text-align:left;vertical-align:middle;padding:4px}.rendered_html th{font-weight:700}.rendered_html *+table{margin-top:1em}.rendered_html p{text-align:left}.rendered_html *+p{margin-top:1em}.rendered_html img{display:block;margin-left:auto;margin-right:auto}.rendered_html *+img{margin-top:1em}.rendered_html img,.rendered_html svg{max-width:100%;height:auto}.rendered_html img.unconfined,.rendered_html svg.unconfined{max-width:none}div.text_cell{display:-webkit-box;-webkit-box-orient:horizontal;display:-moz-box;-moz-box-orient:horizontal;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}@media (max-width:540px){div.text_cell>div.prompt{display:none}}div.text_cell_render{outline:0;resize:none;width:inherit;border-style:none;padding:.5em .5em .5em .4em;color:#000;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}a.anchor-link:link{text-decoration:none;padding:0 20px;visibility:hidden}h1:hover .anchor-link,h2:hover .anchor-link,h3:hover .anchor-link,h4:hover .anchor-link,h5:hover .anchor-link,h6:hover .anchor-link{visibility:visible}.text_cell.rendered .input_area{display:none}.text_cell.rendered .rendered_html{overflow-x:auto}.text_cell.unrendered .text_cell_render{display:none}.cm-header-1,.cm-header-2,.cm-header-3,.cm-header-4,.cm-header-5,.cm-header-6{font-weight:700;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif}.cm-header-1{font-size:185.7%}.cm-header-2{font-size:157.1%}.cm-header-3{font-size:128.6%}.cm-header-4{font-size:110%}.cm-header-5,.cm-header-6{font-size:100%;font-style:italic}/*! +* +* IPython notebook webapp +* +*/@media (max-width:767px){.notebook_app{padding-left:0;padding-right:0}}#ipython-main-app{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;height:100%}div#notebook_panel{margin:0;padding:0;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;height:100%}#notebook{font-size:14px;line-height:20px;overflow-y:hidden;overflow-x:auto;width:100%;padding-top:20px;margin:0;outline:0;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;min-height:100%}@media not print{#notebook-container{padding:15px;background-color:#fff;min-height:0;-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2)}}div.ui-widget-content{border:1px solid #ababab;outline:0}pre.dialog{background-color:#f7f7f7;border:1px solid #ddd;border-radius:2px;padding:.4em .4em .4em 2em}p.dialog{padding:.2em}code,kbd,pre,samp{white-space:pre-wrap}#fonttest{font-family:monospace}p{margin-bottom:0}.end_space{min-height:100px;transition:height .2s ease}.notebook_app #header{-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2)}@media not print{.notebook_app{background-color:#eee}}.celltoolbar{border:thin solid #CFCFCF;border-bottom:none;background:#EEE;border-radius:2px 2px 0 0;width:100%;height:29px;padding-right:4px;-webkit-box-orient:horizontal;-moz-box-orient:horizontal;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch;-webkit-box-pack:end;-moz-box-pack:end;box-pack:end;justify-content:flex-end;font-size:87%;padding-top:3px}@media print{.edit_mode div.cell.selected{border-color:transparent}div.code_cell{page-break-inside:avoid}#notebook-container{width:100%}.celltoolbar{display:none}}.ctb_hideshow{display:none;vertical-align:bottom}.ctb_global_show .ctb_show.ctb_hideshow{display:block}.ctb_global_show .ctb_show+.input_area,.ctb_global_show .ctb_show+div.text_cell_input,.ctb_global_show .ctb_show~div.text_cell_render{border-top-right-radius:0;border-top-left-radius:0}.ctb_global_show .ctb_show~div.text_cell_render{border:1px solid #cfcfcf}.celltoolbar select{color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;line-height:1.5;border-radius:1px;width:inherit;font-size:inherit;height:22px;padding:0;display:inline-block}.celltoolbar select:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.celltoolbar select::-moz-placeholder{color:#999;opacity:1}.celltoolbar select:-ms-input-placeholder{color:#999}.celltoolbar select::-webkit-input-placeholder{color:#999}.celltoolbar select[disabled],.celltoolbar select[readonly],fieldset[disabled] .celltoolbar select{background-color:#eee;opacity:1}.celltoolbar select[disabled],fieldset[disabled] .celltoolbar select{cursor:not-allowed}textarea.celltoolbar select{height:auto}select.celltoolbar select{height:30px;line-height:30px}select[multiple].celltoolbar select,textarea.celltoolbar select{height:auto}.celltoolbar label{margin-left:5px;margin-right:5px}.completions{position:absolute;z-index:10;overflow:hidden;border:1px solid #ababab;border-radius:2px;-webkit-box-shadow:0 6px 10px -1px #adadad;box-shadow:0 6px 10px -1px #adadad;line-height:1}.completions select{background:#fff;outline:0;border:none;padding:0;margin:0;overflow:auto;font-family:monospace;font-size:110%;color:#000;width:auto}.completions select option.context{color:#286090}#kernel_logo_widget{float:right!important;float:right}#kernel_logo_widget .current_kernel_logo{display:none;margin-top:-1px;margin-bottom:-1px;width:32px;height:32px}#menubar{box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;margin-top:1px}#menubar .navbar{border-top:1px;border-radius:0 0 2px 2px;margin-bottom:0}#menubar .navbar-toggle{float:left;padding-top:7px;padding-bottom:7px;border:none}#menubar .navbar-collapse{clear:left}.nav-wrapper{border-bottom:1px solid #e7e7e7}i.menu-icon{padding-top:4px}ul#help_menu li a{overflow:hidden;padding-right:2.2em}ul#help_menu li a i{margin-right:-1.2em}.dropdown-submenu{position:relative}.dropdown-submenu>.dropdown-menu{top:0;left:100%;margin-top:-6px;margin-left:-1px}.dropdown-submenu:hover>.dropdown-menu{display:block}.dropdown-submenu>a:after{font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:block;content:"\f0da";float:right;color:#333;margin-top:2px;margin-right:-10px}.dropdown-submenu>a:after.pull-left{margin-right:.3em}.dropdown-submenu>a:after.pull-right{margin-left:.3em}.dropdown-submenu:hover>a:after{color:#262626}.dropdown-submenu.pull-left{float:none}.dropdown-submenu.pull-left>.dropdown-menu{left:-100%;margin-left:10px}#notification_area{float:right!important;float:right;z-index:10}.indicator_area{float:right!important;float:right;color:#777;margin-left:5px;margin-right:5px;z-index:10;text-align:center;width:auto}#kernel_indicator{float:right!important;float:right;color:#777;margin-left:5px;margin-right:5px;z-index:10;text-align:center;width:auto;border-left:1px solid}#kernel_indicator .kernel_indicator_name{padding-left:5px;padding-right:5px}#modal_indicator{float:right!important;float:right;color:#777;margin-left:5px;margin-right:5px;z-index:10;text-align:center;width:auto}#readonly-indicator{float:right!important;float:right;color:#777;z-index:10;text-align:center;width:auto;display:none;margin:2px 0 0}.modal_indicator:before{width:1.28571429em;text-align:center}.edit_mode .modal_indicator:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f040"}.edit_mode .modal_indicator:before.pull-left{margin-right:.3em}.edit_mode .modal_indicator:before.pull-right{margin-left:.3em}.command_mode .modal_indicator:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:' '}.command_mode .modal_indicator:before.pull-left{margin-right:.3em}.command_mode .modal_indicator:before.pull-right{margin-left:.3em}.kernel_idle_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f10c"}.kernel_idle_icon:before.pull-left{margin-right:.3em}.kernel_idle_icon:before.pull-right{margin-left:.3em}.kernel_busy_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f111"}.kernel_busy_icon:before.pull-left{margin-right:.3em}.kernel_busy_icon:before.pull-right{margin-left:.3em}.kernel_dead_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f1e2"}.kernel_dead_icon:before.pull-left{margin-right:.3em}.kernel_dead_icon:before.pull-right{margin-left:.3em}.kernel_disconnected_icon:before{display:inline-block;font:normal normal normal 14px/1 FontAwesome;font-size:inherit;text-rendering:auto;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;content:"\f127"}.kernel_disconnected_icon:before.pull-left{margin-right:.3em}.kernel_disconnected_icon:before.pull-right{margin-left:.3em}.notification_widget{z-index:10;background:rgba(240,240,240,.5);margin-right:4px;color:#333;background-color:#fff;border-color:#ccc}.notification_widget.active,.notification_widget.focus,.notification_widget:active,.notification_widget:focus,.notification_widget:hover,.open>.dropdown-toggle.notification_widget{color:#333;background-color:#e6e6e6;border-color:#adadad}.notification_widget.active,.notification_widget:active,.open>.dropdown-toggle.notification_widget{background-image:none}.notification_widget.disabled,.notification_widget.disabled.active,.notification_widget.disabled.focus,.notification_widget.disabled:active,.notification_widget.disabled:focus,.notification_widget.disabled:hover,.notification_widget[disabled],.notification_widget[disabled].active,.notification_widget[disabled].focus,.notification_widget[disabled]:active,.notification_widget[disabled]:focus,.notification_widget[disabled]:hover,fieldset[disabled] .notification_widget,fieldset[disabled] .notification_widget.active,fieldset[disabled] .notification_widget.focus,fieldset[disabled] .notification_widget:active,fieldset[disabled] .notification_widget:focus,fieldset[disabled] .notification_widget:hover{background-color:#fff;border-color:#ccc}.notification_widget .badge{color:#fff;background-color:#333}.notification_widget.warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.notification_widget.warning.active,.notification_widget.warning.focus,.notification_widget.warning:active,.notification_widget.warning:focus,.notification_widget.warning:hover,.open>.dropdown-toggle.notification_widget.warning{color:#fff;background-color:#ec971f;border-color:#d58512}.notification_widget.warning.active,.notification_widget.warning:active,.open>.dropdown-toggle.notification_widget.warning{background-image:none}.notification_widget.warning.disabled,.notification_widget.warning.disabled.active,.notification_widget.warning.disabled.focus,.notification_widget.warning.disabled:active,.notification_widget.warning.disabled:focus,.notification_widget.warning.disabled:hover,.notification_widget.warning[disabled],.notification_widget.warning[disabled].active,.notification_widget.warning[disabled].focus,.notification_widget.warning[disabled]:active,.notification_widget.warning[disabled]:focus,.notification_widget.warning[disabled]:hover,fieldset[disabled] .notification_widget.warning,fieldset[disabled] .notification_widget.warning.active,fieldset[disabled] .notification_widget.warning.focus,fieldset[disabled] .notification_widget.warning:active,fieldset[disabled] .notification_widget.warning:focus,fieldset[disabled] .notification_widget.warning:hover{background-color:#f0ad4e;border-color:#eea236}.notification_widget.warning .badge{color:#f0ad4e;background-color:#fff}.notification_widget.success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.notification_widget.success.active,.notification_widget.success.focus,.notification_widget.success:active,.notification_widget.success:focus,.notification_widget.success:hover,.open>.dropdown-toggle.notification_widget.success{color:#fff;background-color:#449d44;border-color:#398439}.notification_widget.success.active,.notification_widget.success:active,.open>.dropdown-toggle.notification_widget.success{background-image:none}.notification_widget.success.disabled,.notification_widget.success.disabled.active,.notification_widget.success.disabled.focus,.notification_widget.success.disabled:active,.notification_widget.success.disabled:focus,.notification_widget.success.disabled:hover,.notification_widget.success[disabled],.notification_widget.success[disabled].active,.notification_widget.success[disabled].focus,.notification_widget.success[disabled]:active,.notification_widget.success[disabled]:focus,.notification_widget.success[disabled]:hover,fieldset[disabled] .notification_widget.success,fieldset[disabled] .notification_widget.success.active,fieldset[disabled] .notification_widget.success.focus,fieldset[disabled] .notification_widget.success:active,fieldset[disabled] .notification_widget.success:focus,fieldset[disabled] .notification_widget.success:hover{background-color:#5cb85c;border-color:#4cae4c}.notification_widget.success .badge{color:#5cb85c;background-color:#fff}.notification_widget.info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.notification_widget.info.active,.notification_widget.info.focus,.notification_widget.info:active,.notification_widget.info:focus,.notification_widget.info:hover,.open>.dropdown-toggle.notification_widget.info{color:#fff;background-color:#31b0d5;border-color:#269abc}.notification_widget.info.active,.notification_widget.info:active,.open>.dropdown-toggle.notification_widget.info{background-image:none}.notification_widget.info.disabled,.notification_widget.info.disabled.active,.notification_widget.info.disabled.focus,.notification_widget.info.disabled:active,.notification_widget.info.disabled:focus,.notification_widget.info.disabled:hover,.notification_widget.info[disabled],.notification_widget.info[disabled].active,.notification_widget.info[disabled].focus,.notification_widget.info[disabled]:active,.notification_widget.info[disabled]:focus,.notification_widget.info[disabled]:hover,fieldset[disabled] .notification_widget.info,fieldset[disabled] .notification_widget.info.active,fieldset[disabled] .notification_widget.info.focus,fieldset[disabled] .notification_widget.info:active,fieldset[disabled] .notification_widget.info:focus,fieldset[disabled] .notification_widget.info:hover{background-color:#5bc0de;border-color:#46b8da}.notification_widget.info .badge{color:#5bc0de;background-color:#fff}.notification_widget.danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.notification_widget.danger.active,.notification_widget.danger.focus,.notification_widget.danger:active,.notification_widget.danger:focus,.notification_widget.danger:hover,.open>.dropdown-toggle.notification_widget.danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.notification_widget.danger.active,.notification_widget.danger:active,.open>.dropdown-toggle.notification_widget.danger{background-image:none}.notification_widget.danger.disabled,.notification_widget.danger.disabled.active,.notification_widget.danger.disabled.focus,.notification_widget.danger.disabled:active,.notification_widget.danger.disabled:focus,.notification_widget.danger.disabled:hover,.notification_widget.danger[disabled],.notification_widget.danger[disabled].active,.notification_widget.danger[disabled].focus,.notification_widget.danger[disabled]:active,.notification_widget.danger[disabled]:focus,.notification_widget.danger[disabled]:hover,fieldset[disabled] .notification_widget.danger,fieldset[disabled] .notification_widget.danger.active,fieldset[disabled] .notification_widget.danger.focus,fieldset[disabled] .notification_widget.danger:active,fieldset[disabled] .notification_widget.danger:focus,fieldset[disabled] .notification_widget.danger:hover{background-color:#d9534f;border-color:#d43f3a}.notification_widget.danger .badge{color:#d9534f;background-color:#fff}div#pager{background-color:#fff;font-size:14px;line-height:20px;overflow:hidden;display:none;position:fixed;bottom:0;width:100%;max-height:50%;padding-top:8px;-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2);z-index:100;top:auto!important}div#pager pre{line-height:1.21429em;color:#000;background-color:#f7f7f7;padding:.4em}div#pager #pager-button-area{position:absolute;top:8px;right:20px}div#pager #pager-contents{position:relative;overflow:auto;width:100%;height:100%}div#pager #pager-contents #pager-container{position:relative;padding:15px 0;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}div#pager .ui-resizable-handle{top:0;height:8px;background:#f7f7f7;border-top:1px solid #cfcfcf;border-bottom:1px solid #cfcfcf}div#pager .ui-resizable-handle::after{content:'';top:2px;left:50%;height:3px;width:30px;margin-left:-15px;position:absolute;border-top:1px solid #cfcfcf}.quickhelp{display:-webkit-box;-webkit-box-orient:horizontal;display:-moz-box;-moz-box-orient:horizontal;display:box;box-orient:horizontal;box-align:stretch;display:flex;flex-direction:row;align-items:stretch}.shortcut_key{display:inline-block;width:20ex;text-align:right;font-family:monospace}.shortcut_descr{display:inline-block;-webkit-box-flex:1;-moz-box-flex:1;box-flex:1;flex:1}span.save_widget{margin-top:6px}span.save_widget span.filename{height:1em;line-height:1em;padding:3px;margin-left:16px;border:none;font-size:146.5%;border-radius:2px}span.save_widget span.filename:hover{background-color:#e6e6e6}span.autosave_status,span.checkpoint_status{font-size:small}@media (max-width:767px){span.save_widget{font-size:small}span.autosave_status,span.checkpoint_status{display:none}}@media (min-width:768px)and (max-width:991px){span.checkpoint_status{display:none}span.autosave_status{font-size:x-small}}.toolbar{padding:0;margin-left:-5px;margin-top:2px;margin-bottom:5px;box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box}.toolbar label,.toolbar select{width:auto;vertical-align:middle;margin-bottom:0;display:inline;font-size:92%;margin-left:.3em;margin-right:.3em;padding:3px 0 0}.toolbar .btn{padding:2px 8px}.toolbar .btn-group{margin-top:0;margin-left:5px}#maintoolbar{margin-bottom:-3px;margin-top:-8px;border:0;min-height:27px;margin-left:0;padding-top:11px;padding-bottom:3px}#maintoolbar .navbar-text{float:none;vertical-align:middle;text-align:right;margin-left:5px;margin-right:0;margin-top:0}.select-xs{height:24px}@-moz-keyframes fadeOut{from{opacity:1}to{opacity:0}}@-webkit-keyframes fadeOut{from{opacity:1}to{opacity:0}}@-moz-keyframes fadeIn{from{opacity:0}to{opacity:1}}@-webkit-keyframes fadeIn{from{opacity:0}to{opacity:1}}.bigtooltip{overflow:auto;height:200px;-webkit-transition-property:height;-webkit-transition-duration:500ms;-moz-transition-property:height;-moz-transition-duration:500ms;transition-property:height;transition-duration:500ms}.smalltooltip{-webkit-transition-property:height;-webkit-transition-duration:500ms;-moz-transition-property:height;-moz-transition-duration:500ms;transition-property:height;transition-duration:500ms;text-overflow:ellipsis;overflow:hidden;height:80px}.tooltipbuttons{position:absolute;padding-right:15px;top:0;right:0}.tooltiptext{padding-right:30px}.ipython_tooltip{max-width:700px;animation:fadeOut 400ms;-webkit-animation:fadeIn 400ms;-moz-animation:fadeIn 400ms;animation:fadeIn 400ms;vertical-align:middle;background-color:#f7f7f7;overflow:visible;border:1px solid #ababab;outline:0;padding:3px 3px 3px 7px;padding-left:7px;font-family:monospace;min-height:50px;-moz-box-shadow:0 6px 10px -1px #adadad;-webkit-box-shadow:0 6px 10px -1px #adadad;box-shadow:0 6px 10px -1px #adadad;border-radius:2px;position:absolute;z-index:1000}.ipython_tooltip a{float:right}.ipython_tooltip .tooltiptext pre{border:0;border-radius:0;font-size:100%;background-color:#f7f7f7}.pretooltiparrow{left:0;margin:0;top:-16px;width:40px;height:16px;overflow:hidden;position:absolute}.pretooltiparrow:before{background-color:#f7f7f7;border:1px solid #ababab;z-index:11;content:"";position:absolute;left:15px;top:10px;width:25px;height:25px;-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg)}.terminal-app{background:#eee}.terminal-app #header{background:#fff;-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.2);box-shadow:0 0 12px 1px rgba(87,87,87,.2)}.terminal-app .terminal{float:left;font-family:monospace;color:#fff;background:#000;padding:.4em;border-radius:2px;-webkit-box-shadow:0 0 12px 1px rgba(87,87,87,.4);box-shadow:0 0 12px 1px rgba(87,87,87,.4)}.terminal-app .terminal,.terminal-app .terminal dummy-screen{line-height:1em;font-size:14px}.terminal-app .terminal-cursor{color:#000;background:#fff}.terminal-app #terminado-container{margin-top:20px} +/*# sourceMappingURL=style.min.css.map */ + </style> +<style type="text/css"> + .highlight .hll { background-color: #ffffcc } +.highlight { background: #f8f8f8; } +.highlight .c { color: #408080; font-style: italic } /* Comment */ +.highlight .err { border: 1px solid #FF0000 } /* Error */ +.highlight .k { color: #008000; font-weight: bold } /* Keyword */ +.highlight .o { color: #666666 } /* Operator */ +.highlight .ch { color: #408080; font-style: italic } /* Comment.Hashbang */ +.highlight .cm { color: #408080; font-style: italic } /* Comment.Multiline */ +.highlight .cp { color: #BC7A00 } /* Comment.Preproc */ +.highlight .cpf { color: #408080; font-style: italic } /* Comment.PreprocFile */ +.highlight .c1 { color: #408080; font-style: italic } /* Comment.Single */ +.highlight .cs { color: #408080; font-style: italic } /* Comment.Special */ +.highlight .gd { color: #A00000 } /* Generic.Deleted */ +.highlight .ge { font-style: italic } /* Generic.Emph */ +.highlight .gr { color: #FF0000 } /* Generic.Error */ +.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.highlight .gi { color: #00A000 } /* Generic.Inserted */ +.highlight .go { color: #888888 } /* Generic.Output */ +.highlight .gp { color: #000080; font-weight: bold } /* Generic.Prompt */ +.highlight .gs { font-weight: bold } /* Generic.Strong */ +.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.highlight .gt { color: #0044DD } /* Generic.Traceback */ +.highlight .kc { color: #008000; font-weight: bold } /* Keyword.Constant */ +.highlight .kd { color: #008000; font-weight: bold } /* Keyword.Declaration */ +.highlight .kn { color: #008000; font-weight: bold } /* Keyword.Namespace */ +.highlight .kp { color: #008000 } /* Keyword.Pseudo */ +.highlight .kr { color: #008000; font-weight: bold } /* Keyword.Reserved */ +.highlight .kt { color: #B00040 } /* Keyword.Type */ +.highlight .m { color: #666666 } /* Literal.Number */ +.highlight .s { color: #BA2121 } /* Literal.String */ +.highlight .na { color: #7D9029 } /* Name.Attribute */ +.highlight .nb { color: #008000 } /* Name.Builtin */ +.highlight .nc { color: #0000FF; font-weight: bold } /* Name.Class */ +.highlight .no { color: #880000 } /* Name.Constant */ +.highlight .nd { color: #AA22FF } /* Name.Decorator */ +.highlight .ni { color: #999999; font-weight: bold } /* Name.Entity */ +.highlight .ne { color: #D2413A; font-weight: bold } /* Name.Exception */ +.highlight .nf { color: #0000FF } /* Name.Function */ +.highlight .nl { color: #A0A000 } /* Name.Label */ +.highlight .nn { color: #0000FF; font-weight: bold } /* Name.Namespace */ +.highlight .nt { color: #008000; font-weight: bold } /* Name.Tag */ +.highlight .nv { color: #19177C } /* Name.Variable */ +.highlight .ow { color: #AA22FF; font-weight: bold } /* Operator.Word */ +.highlight .w { color: #bbbbbb } /* Text.Whitespace */ +.highlight .mb { color: #666666 } /* Literal.Number.Bin */ +.highlight .mf { color: #666666 } /* Literal.Number.Float */ +.highlight .mh { color: #666666 } /* Literal.Number.Hex */ +.highlight .mi { color: #666666 } /* Literal.Number.Integer */ +.highlight .mo { color: #666666 } /* Literal.Number.Oct */ +.highlight .sb { color: #BA2121 } /* Literal.String.Backtick */ +.highlight .sc { color: #BA2121 } /* Literal.String.Char */ +.highlight .sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */ +.highlight .s2 { color: #BA2121 } /* Literal.String.Double */ +.highlight .se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */ +.highlight .sh { color: #BA2121 } /* Literal.String.Heredoc */ +.highlight .si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */ +.highlight .sx { color: #008000 } /* Literal.String.Other */ +.highlight .sr { color: #BB6688 } /* Literal.String.Regex */ +.highlight .s1 { color: #BA2121 } /* Literal.String.Single */ +.highlight .ss { color: #19177C } /* Literal.String.Symbol */ +.highlight .bp { color: #008000 } /* Name.Builtin.Pseudo */ +.highlight .vc { color: #19177C } /* Name.Variable.Class */ +.highlight .vg { color: #19177C } /* Name.Variable.Global */ +.highlight .vi { color: #19177C } /* Name.Variable.Instance */ +.highlight .il { color: #666666 } /* Literal.Number.Integer.Long */ + </style> + + +<style type="text/css"> +/* Overrides of notebook CSS for static HTML export */ +body { + overflow: visible; + padding: 8px; +} + +div#notebook { + overflow: visible; + border-top: none; +} + +@media print { + div.cell { + display: block; + page-break-inside: avoid; + } + div.output_wrapper { + display: block; + page-break-inside: avoid; + } + div.output { + display: block; + page-break-inside: avoid; + } +} +</style> + +<!-- Custom stylesheet, it must be in the same directory as the html file --> +<link rel="stylesheet" href="custom.css"> + +<!-- Loading mathjax macro --> +<!-- Load mathjax --> + <script src="https://cdn.mathjax.org/mathjax/latest/MathJax.js?config=TeX-AMS_HTML"></script> + <!-- MathJax configuration --> + <script type="text/x-mathjax-config"> + MathJax.Hub.Config({ + tex2jax: { + inlineMath: [ ['$','$'], ["\\(","\\)"] ], + displayMath: [ ['$$','$$'], ["\\[","\\]"] ], + processEscapes: true, + processEnvironments: true + }, + // Center justify equations in code and markdown cells. Elsewhere + // we use CSS to left justify single line equations in code cells. + displayAlign: 'center', + "HTML-CSS": { + styles: {'.MathJax_Display': {"margin": 0}}, + linebreaks: { automatic: true } + } + }); + </script> + <!-- End of mathjax configuration --></head> +<body> + <div tabindex="-1" id="notebook" class="border-box-sizing"> + <div class="container" id="notebook-container"> + +<div class="cell border-box-sizing text_cell rendered"> +<div class="prompt input_prompt"> +</div> +<div class="inner_cell"> +<div class="text_cell_render border-box-sizing rendered_html"> +<h1 id="Multimodal-(Gaussian-Mixture/Hidden-Markov)-Models-for-Motion-Sound-Mapping-—-Quickstart-guide">Multimodal (Gaussian Mixture/Hidden Markov) Models for Motion-Sound Mapping — Quickstart guide<a class="anchor-link" href="#Multimodal-(Gaussian-Mixture/Hidden-Markov)-Models-for-Motion-Sound-Mapping-—-Quickstart-guide">¶</a></h1><h2 id="Building-and-using-the-XMM-Python-library">Building and using the XMM Python library<a class="anchor-link" href="#Building-and-using-the-XMM-Python-library">¶</a></h2><p>See <a href="http://ircam-rnd.github.io/xmm/">http://ircam-rnd.github.io/xmm/</a></p> +<p>The python library reflects the sructure of the C++ library. The same classes and methods can be used on both implementations. +First, import the python library (needs to be within your Python search path).</p> + +</div> +</div> +</div> +<div class="cell border-box-sizing code_cell rendered"> +<div class="input"> +<div class="prompt input_prompt">In [1]:</div> +<div class="inner_cell"> + <div class="input_area"> +<div class=" highlight hl-ipython2"><pre><span class="kn">import</span> <span class="nn">xmm</span> +</pre></div> + +</div> +</div> +</div> + +</div> +<div class="cell border-box-sizing text_cell rendered"> +<div class="prompt input_prompt"> +</div> +<div class="inner_cell"> +<div class="text_cell_render border-box-sizing rendered_html"> +<h2 id="Using-GMMs-for-classification">Using GMMs for classification<a class="anchor-link" href="#Using-GMMs-for-classification">¶</a></h2><p>In this example, we illustrate the process of training and classification with Gaussian Mixture Models. We have 3 data files called "gmm_test_data1.txt", "gmm_test_data2.txt", "gmm_test_data3.txt". Each file contains a 2D array where each row is a data frame with 6 dimensions. The data was generated with the example patch from the Max/Mubu implementation (see <a href="http://julesfrancoise.com/mubu-probabilistic-models/">http://julesfrancoise.com/mubu-probabilistic-models/</a>)</p> +<h3 id="Building-a-training-set">Building a training set<a class="anchor-link" href="#Building-a-training-set">¶</a></h3><p>First, we need to record and annotate the training data. This is done using the <code>TrainingSet</code> class:</p> + +</div> +</div> +</div> +<div class="cell border-box-sizing code_cell rendered"> +<div class="input"> +<div class="prompt input_prompt">In [2]:</div> +<div class="inner_cell"> + <div class="input_area"> +<div class=" highlight hl-ipython2"><pre><span class="o">%</span><span class="k">matplotlib</span> inline +<span class="kn">import</span> <span class="nn">numpy</span> <span class="kn">as</span> <span class="nn">np</span> +<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="kn">as</span> <span class="nn">plt</span> + +<span class="c1"># Create the training set</span> +<span class="n">training_set</span> <span class="o">=</span> <span class="n">xmm</span><span class="o">.</span><span class="n">TrainingSet</span><span class="p">()</span> +<span class="n">training_set</span><span class="o">.</span><span class="n">dimension</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="mi">6</span><span class="p">)</span> <span class="c1"># dimension of data in this example</span> +<span class="n">training_set</span><span class="o">.</span><span class="n">column_names</span><span class="o">.</span><span class="n">set</span><span class="p">([</span><span class="s1">'a'</span><span class="p">,</span> <span class="s1">'b'</span><span class="p">,</span> <span class="s1">'c'</span><span class="p">,</span> <span class="s1">'d'</span><span class="p">,</span> <span class="s1">'e'</span><span class="p">,</span> <span class="s1">'f'</span><span class="p">])</span> +<span class="c1"># Record data phrases</span> +<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">):</span> + <span class="n">phrase</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">genfromtxt</span><span class="p">(</span><span class="s1">'data/gmm_training_data{}.txt'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span> + <span class="n">training_set</span><span class="o">.</span><span class="n">addPhrase</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span> + <span class="k">for</span> <span class="n">frame</span> <span class="ow">in</span> <span class="n">phrase</span><span class="p">:</span> + <span class="c1"># Append data frame to the phrase i</span> + <span class="n">training_set</span><span class="o">.</span><span class="n">getPhrase</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="o">.</span><span class="n">record</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> +</pre></div> + +</div> +</div> +</div> + +</div> +<div class="cell border-box-sizing text_cell rendered"> +<div class="prompt input_prompt"> +</div> +<div class="inner_cell"> +<div class="text_cell_render border-box-sizing rendered_html"> +<p>For most objects of the library, calling the <code>print</code> function from python will print the JSON file description of the current object. In this case, we can have a look at the data contained in the training set:</p> + +</div> +</div> +</div> +<div class="cell border-box-sizing code_cell rendered"> +<div class="input"> +<div class="prompt input_prompt">In [3]:</div> +<div class="inner_cell"> + <div class="input_area"> +<div class=" highlight hl-ipython2"><pre><span class="k">print</span> <span class="s2">"Number of phrases in the training set: "</span><span class="p">,</span> <span class="n">training_set</span><span class="o">.</span><span class="n">size</span><span class="p">()</span> +<span class="k">print</span> <span class="s2">"Labels: "</span><span class="p">,</span> <span class="n">training_set</span><span class="o">.</span><span class="n">labels</span><span class="p">()</span> +<span class="k">print</span> <span class="s2">"names of the columns of the training data:"</span><span class="p">,</span> <span class="n">training_set</span><span class="o">.</span><span class="n">column_names</span><span class="o">.</span><span class="n">get</span><span class="p">()</span> +</pre></div> + +</div> +</div> +</div> + +<div class="output_wrapper"> +<div class="output"> + + +<div class="output_area"><div class="prompt"></div> +<div class="output_subarea output_stream output_stdout output_text"> +<pre>Number of phrases in the training set: 3 +Labels: ('1', '2', '3') +names of the columns of the training data: ('a', 'b', 'c', 'd', 'e', 'f') +</pre> +</div> +</div> + +</div> +</div> + +</div> +<div class="cell border-box-sizing text_cell rendered"> +<div class="prompt input_prompt"> +</div> +<div class="inner_cell"> +<div class="text_cell_render border-box-sizing rendered_html"> +<p>The training Set has 3 classes with integer labels 1, 2 and 3.</p> +<h3 id="Training-the-models">Training the models<a class="anchor-link" href="#Training-the-models">¶</a></h3><p>We can now train a <code>GMM</code> — i.e. a group of Gaussian Mixture Models with different class labels. +We start by creating an instance of the <code>GMM</code>, and we can then adjust the model parameters (number of Gaussians and regularization of the covariances) and train the models for all classes of the training set:</p> + +</div> +</div> +</div> +<div class="cell border-box-sizing code_cell rendered"> +<div class="input"> +<div class="prompt input_prompt">In [4]:</div> +<div class="inner_cell"> + <div class="input_area"> +<div class=" highlight hl-ipython2"><pre><span class="c1"># Create a GMM (handles multiples labels for recognition)</span> +<span class="n">gmm</span> <span class="o">=</span> <span class="n">xmm</span><span class="o">.</span><span class="n">GMM</span><span class="p">()</span> +<span class="c1"># Set parameters</span> +<span class="n">gmm</span><span class="o">.</span><span class="n">configuration</span><span class="o">.</span><span class="n">gaussians</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="mi">10</span><span class="p">)</span> +<span class="n">gmm</span><span class="o">.</span><span class="n">configuration</span><span class="o">.</span><span class="n">relative_regularization</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="mf">0.01</span><span class="p">)</span> +<span class="n">gmm</span><span class="o">.</span><span class="n">configuration</span><span class="o">.</span><span class="n">absolute_regularization</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="mf">0.0001</span><span class="p">)</span> +<span class="c1"># Train all models</span> +<span class="n">gmm</span><span class="o">.</span><span class="n">train</span><span class="p">(</span><span class="n">training_set</span><span class="p">)</span> +<span class="k">print</span> <span class="s2">"number of models: "</span><span class="p">,</span> <span class="n">gmm</span><span class="o">.</span><span class="n">size</span><span class="p">()</span> +</pre></div> + +</div> +</div> +</div> + +<div class="output_wrapper"> +<div class="output"> + + +<div class="output_area"><div class="prompt"></div> +<div class="output_subarea output_stream output_stdout output_text"> +<pre>number of models: 3 +</pre> +</div> +</div> + +</div> +</div> + +</div> +<div class="cell border-box-sizing text_cell rendered"> +<div class="prompt input_prompt"> +</div> +<div class="inner_cell"> +<div class="text_cell_render border-box-sizing rendered_html"> +<h3 id="Performing-Recognition">Performing Recognition<a class="anchor-link" href="#Performing-Recognition">¶</a></h3><p>The trained ModelGroup can be used directly to perform continuous recognition or classification with class-conditional GMMs.</p> +<p>We start by loading test data originatin from the same 3 distributions used for training:</p> + +</div> +</div> +</div> +<div class="cell border-box-sizing code_cell rendered"> +<div class="input"> +<div class="prompt input_prompt">In [5]:</div> +<div class="inner_cell"> + <div class="input_area"> +<div class=" highlight hl-ipython2"><pre><span class="c1"># read test data (concatenation of 3 test examples labeled 1, 2, 3)</span> +<span class="n">test_data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">genfromtxt</span><span class="p">(</span><span class="s1">'data/gmm_test_data1.txt'</span><span class="p">)</span> +<span class="n">test_data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">vstack</span><span class="p">((</span><span class="n">test_data</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">genfromtxt</span><span class="p">(</span><span class="s1">'data/gmm_test_data2.txt'</span><span class="p">)))</span> +<span class="n">test_data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">vstack</span><span class="p">((</span><span class="n">test_data</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">genfromtxt</span><span class="p">(</span><span class="s1">'data/gmm_test_data3.txt'</span><span class="p">)))</span> +</pre></div> + +</div> +</div> +</div> + +</div> +<div class="cell border-box-sizing text_cell rendered"> +<div class="prompt input_prompt"> +</div> +<div class="inner_cell"> +<div class="text_cell_render border-box-sizing rendered_html"> +<p>Then, we can set additional attributes of the models, such as the size of the window used to smooth the likelihoods, and initialize the "performance mode". +We create several arrays that will store the normalized likelihoods and log-likelihoods during continuous recognition, and we can then perform the recognition continuously and causally by updating the recognition with each new frame of the test examples:</p> + +</div> +</div> +</div> +<div class="cell border-box-sizing code_cell rendered"> +<div class="input"> +<div class="prompt input_prompt">In [6]:</div> +<div class="inner_cell"> + <div class="input_area"> +<div class=" highlight hl-ipython2"><pre><span class="c1"># Set Size of the likelihood Window (samples)</span> +<span class="n">gmm</span><span class="o">.</span><span class="n">shared_parameters</span><span class="o">.</span><span class="n">likelihood_window</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="mi">40</span><span class="p">)</span> +<span class="c1"># Initialize performance phase</span> +<span class="n">gmm</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span> +<span class="c1"># Create likelihood arrays for recognition</span> +<span class="n">instantaneous_likelihoods</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">test_data</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">gmm</span><span class="o">.</span><span class="n">size</span><span class="p">()))</span> +<span class="n">normalized_likelihoods</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">test_data</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">gmm</span><span class="o">.</span><span class="n">size</span><span class="p">()))</span> +<span class="n">log_likelihoods</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">test_data</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">gmm</span><span class="o">.</span><span class="n">size</span><span class="p">()))</span> +<span class="c1"># Performance: Play test data and record the likelihoods of the modes</span> +<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">test_data</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span> + <span class="n">gmm</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">xmm</span><span class="o">.</span><span class="n">vectorf</span><span class="p">(</span><span class="n">test_data</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="p">:]))</span> + <span class="n">instantaneous_likelihoods</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="p">:]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">gmm</span><span class="o">.</span><span class="n">results</span><span class="o">.</span><span class="n">instant_likelihoods</span><span class="p">)</span> + <span class="n">normalized_likelihoods</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="p">:]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">gmm</span><span class="o">.</span><span class="n">results</span><span class="o">.</span><span class="n">smoothed_normalized_likelihoods</span><span class="p">)</span> + <span class="n">log_likelihoods</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="p">:]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">gmm</span><span class="o">.</span><span class="n">results</span><span class="o">.</span><span class="n">smoothed_log_likelihoods</span><span class="p">)</span> +</pre></div> + +</div> +</div> +</div> + +</div> +<div class="cell border-box-sizing text_cell rendered"> +<div class="prompt input_prompt"> +</div> +<div class="inner_cell"> +<div class="text_cell_render border-box-sizing rendered_html"> +<p>We can finally plotthe normalized and log-likelihoods over time:</p> + +</div> +</div> +</div> +<div class="cell border-box-sizing code_cell rendered"> +<div class="input"> +<div class="prompt input_prompt">In [7]:</div> +<div class="inner_cell"> + <div class="input_area"> +<div class=" highlight hl-ipython2"><pre><span class="c1"># Plot the likelihoods over time for the test phase</span> +<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span> +<span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">311</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">instantaneous_likelihoods</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"Instantaneous Likelihood of Each Model Over time"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">"Time (Samples)"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">"Likelihood"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">((</span><span class="s2">"model 1"</span><span class="p">,</span> <span class="s2">"model 2"</span><span class="p">,</span> <span class="s2">"model 3"</span><span class="p">))</span> +<span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">312</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">normalized_likelihoods</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"Normalized Smoothed Likelihood of Each Model Over time"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">"Time (Samples)"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">"Normalized Likelihood"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">((</span><span class="s2">"model 1"</span><span class="p">,</span> <span class="s2">"model 2"</span><span class="p">,</span> <span class="s2">"model 3"</span><span class="p">))</span> +<span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">313</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">log_likelihoods</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"Smoothed Log-Likelihood of Each Model Over time"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">"Time (Samples)"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">"Log-Likelihood"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">((</span><span class="s2">"model 1"</span><span class="p">,</span> <span class="s2">"model 2"</span><span class="p">,</span> <span class="s2">"model 3"</span><span class="p">))</span> +</pre></div> + +</div> +</div> +</div> + +<div class="output_wrapper"> +<div class="output"> + + +<div class="output_area"><div class="prompt output_prompt">Out[7]:</div> + + +<div class="output_text output_subarea output_execute_result"> +<pre><matplotlib.legend.Legend at 0x112741dd0></pre> +</div> + +</div> + +<div class="output_area"><div class="prompt"></div> + + +<div class="output_png output_subarea "> +<img src="data:image/png;base64,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 +w+FwhIz/B+FzXWb2SmNVAAAAAElFTkSuQmCC +" +> +</div> + +</div> + +</div> +</div> + +</div> +<div class="cell border-box-sizing text_cell rendered"> +<div class="prompt input_prompt"> +</div> +<div class="inner_cell"> +<div class="text_cell_render border-box-sizing rendered_html"> +<p>Note that the trained model can be saved to a JSON file:</p> + +</div> +</div> +</div> +<div class="cell border-box-sizing code_cell rendered"> +<div class="input"> +<div class="prompt input_prompt">In [8]:</div> +<div class="inner_cell"> + <div class="input_area"> +<div class=" highlight hl-ipython2"><pre><span class="n">gmm</span><span class="o">.</span><span class="n">writeFile</span><span class="p">(</span><span class="s2">"test_gmm.json"</span><span class="p">)</span> +</pre></div> + +</div> +</div> +</div> + +</div> +<div class="cell border-box-sizing text_cell rendered"> +<div class="prompt input_prompt"> +</div> +<div class="inner_cell"> +<div class="text_cell_render border-box-sizing rendered_html"> +<h2 id="Continuous-Gesture-Recognition-and-Following-with-the-Hierarchical-HMM">Continuous Gesture Recognition and Following with the Hierarchical HMM<a class="anchor-link" href="#Continuous-Gesture-Recognition-and-Following-with-the-Hierarchical-HMM">¶</a></h2><p>This example is inspired by the <code>test_hierarchicalhmm.y</code> file in the <code>python/examples</code>directory.</p> +<p>The data originates from the example patch: "hhmm_leapmotion_recognition.maxpat" of the Max implementation (see <a href="http://julesfrancoise.com/mubu-probabilistic-models/">http://julesfrancoise.com/mubu-probabilistic-models/</a>). +The data represents the XYZ Speed of the hand extracted from the leapmotion, rescaled (divided by 1000) and smoothed (moving average filter).</p> + +</div> +</div> +</div> +<div class="cell border-box-sizing code_cell rendered"> +<div class="input"> +<div class="prompt input_prompt">In [9]:</div> +<div class="inner_cell"> + <div class="input_area"> +<div class=" highlight hl-ipython2"><pre><span class="c1"># Create the training set</span> +<span class="n">training_set</span> <span class="o">=</span> <span class="n">xmm</span><span class="o">.</span><span class="n">TrainingSet</span><span class="p">()</span> +<span class="n">training_set</span><span class="o">.</span><span class="n">dimension</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="mi">3</span><span class="p">)</span> <span class="c1"># dimension of data in this example</span> +<span class="n">training_set</span><span class="o">.</span><span class="n">column_names</span><span class="o">.</span><span class="n">set</span><span class="p">([</span><span class="s1">'x'</span><span class="p">,</span> <span class="s1">'y'</span><span class="p">,</span> <span class="s1">'z'</span><span class="p">])</span> +<span class="c1"># Record data phrases</span> +<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">3</span><span class="p">):</span> + <span class="n">phrase</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">genfromtxt</span><span class="p">(</span><span class="s1">'data/hhmm_test_data{}.txt'</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span> + <span class="n">training_set</span><span class="o">.</span><span class="n">addPhrase</span><span class="p">(</span><span class="n">i</span><span class="p">,</span> <span class="nb">str</span><span class="p">(</span><span class="n">i</span><span class="o">+</span><span class="mi">1</span><span class="p">))</span> + <span class="k">for</span> <span class="n">frame</span> <span class="ow">in</span> <span class="n">phrase</span><span class="p">:</span> + <span class="c1"># Append data frame to the phrase i</span> + <span class="n">training_set</span><span class="o">.</span><span class="n">getPhrase</span><span class="p">(</span><span class="n">i</span><span class="p">)</span><span class="o">.</span><span class="n">record</span><span class="p">(</span><span class="n">frame</span><span class="p">)</span> <span class="c1"># Create a single HMM (group of GMMs running in parallel for recognition)</span> + +<span class="c1"># Train the HMMs</span> +<span class="n">hhmm</span> <span class="o">=</span> <span class="n">xmm</span><span class="o">.</span><span class="n">HierarchicalHMM</span><span class="p">()</span> +<span class="n">hhmm</span><span class="o">.</span><span class="n">configuration</span><span class="o">.</span><span class="n">states</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="mi">40</span><span class="p">)</span> <span class="c1"># <== try changing the number of hidden states</span> +<span class="n">hhmm</span><span class="o">.</span><span class="n">train</span><span class="p">(</span><span class="n">training_set</span><span class="p">)</span> +<span class="k">print</span> <span class="s2">"number of models"</span><span class="p">,</span> <span class="n">hhmm</span><span class="o">.</span><span class="n">size</span><span class="p">()</span> +</pre></div> + +</div> +</div> +</div> + +<div class="output_wrapper"> +<div class="output"> + + +<div class="output_area"><div class="prompt"></div> +<div class="output_subarea output_stream output_stdout output_text"> +<pre>number of models 3 +</pre> +</div> +</div> + +</div> +</div> + +</div> +<div class="cell border-box-sizing text_cell rendered"> +<div class="prompt input_prompt"> +</div> +<div class="inner_cell"> +<div class="text_cell_render border-box-sizing rendered_html"> +<p>We consider a simple example of continuous recognition and folllowing with data originating from the concatenation of 3 recording, one from each class of gestures:</p> + +</div> +</div> +</div> +<div class="cell border-box-sizing code_cell rendered"> +<div class="input"> +<div class="prompt input_prompt">In [10]:</div> +<div class="inner_cell"> + <div class="input_area"> +<div class=" highlight hl-ipython2"><pre><span class="c1"># read test data (concatenation of 1 example of each of the 3 classes)</span> +<span class="n">test_data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">genfromtxt</span><span class="p">(</span><span class="s1">'data/hhmm_test_data1.txt'</span><span class="p">)</span> +<span class="n">test_data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">vstack</span><span class="p">((</span><span class="n">test_data</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">genfromtxt</span><span class="p">(</span><span class="s1">'data/hhmm_test_data2.txt'</span><span class="p">)))</span> +<span class="n">test_data</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">vstack</span><span class="p">((</span><span class="n">test_data</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">genfromtxt</span><span class="p">(</span><span class="s1">'data/hhmm_test_data3.txt'</span><span class="p">)))</span> +</pre></div> + +</div> +</div> +</div> + +</div> +<div class="cell border-box-sizing text_cell rendered"> +<div class="prompt input_prompt"> +</div> +<div class="inner_cell"> +<div class="text_cell_render border-box-sizing rendered_html"> +<p>As before, we initialize the performance mode with the <code>performance_init</code> function and we can then proceed to continuous recognition where we update at each time step the model with the incoming data frame. +In this example, we store the instantaneous likelihood as well as its normalized version and the log-likelihood. +We also keep track of the "progress" within the model, which gives an estimate of the temporal progression of the current gesture.</p> + +</div> +</div> +</div> +<div class="cell border-box-sizing code_cell rendered"> +<div class="input"> +<div class="prompt input_prompt">In [11]:</div> +<div class="inner_cell"> + <div class="input_area"> +<div class=" highlight hl-ipython2"><pre><span class="c1"># Initialize performance phase</span> +<span class="n">hhmm</span><span class="o">.</span><span class="n">reset</span><span class="p">()</span> +<span class="c1"># Create arrays for likelihoods</span> +<span class="n">instantaneous_likelihoods</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">test_data</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">hhmm</span><span class="o">.</span><span class="n">size</span><span class="p">()))</span> +<span class="n">normalized_likelihoods</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">test_data</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">hhmm</span><span class="o">.</span><span class="n">size</span><span class="p">()))</span> +<span class="n">log_likelihoods</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">test_data</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="n">hhmm</span><span class="o">.</span><span class="n">size</span><span class="p">()))</span> +<span class="n">progress</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">zeros</span><span class="p">((</span><span class="n">test_data</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]))</span> +<span class="c1"># Performance: Play test data and record the likelihoods of the modes</span> +<span class="k">for</span> <span class="n">i</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">test_data</span><span class="o">.</span><span class="n">shape</span><span class="p">[</span><span class="mi">0</span><span class="p">]):</span> + <span class="n">hhmm</span><span class="o">.</span><span class="n">filter</span><span class="p">(</span><span class="n">test_data</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="p">:])</span> + <span class="n">log_likelihoods</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="p">:]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">hhmm</span><span class="o">.</span><span class="n">results</span><span class="o">.</span><span class="n">smoothed_log_likelihoods</span><span class="p">)</span> + <span class="n">instantaneous_likelihoods</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="p">:]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">hhmm</span><span class="o">.</span><span class="n">results</span><span class="o">.</span><span class="n">instant_likelihoods</span><span class="p">)</span> + <span class="n">normalized_likelihoods</span><span class="p">[</span><span class="n">i</span><span class="p">,</span> <span class="p">:]</span> <span class="o">=</span> <span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">(</span><span class="n">hhmm</span><span class="o">.</span><span class="n">results</span><span class="o">.</span><span class="n">smoothed_normalized_likelihoods</span><span class="p">)</span> + <span class="n">progress</span><span class="p">[</span><span class="n">i</span><span class="p">]</span> <span class="o">=</span> <span class="n">hhmm</span><span class="o">.</span><span class="n">models</span><span class="p">[</span><span class="n">hhmm</span><span class="o">.</span><span class="n">results</span><span class="o">.</span><span class="n">likeliest</span><span class="p">]</span><span class="o">.</span><span class="n">results</span><span class="o">.</span><span class="n">progress</span> + <span class="c1"># Note: you could extract alphas and time progression as for HMM, for each model. E.g. : </span> + <span class="c1"># print np.array(hhmm.models[hhmm.results_likeliest].alpha)</span> +</pre></div> + +</div> +</div> +</div> + +</div> +<div class="cell border-box-sizing text_cell rendered"> +<div class="prompt input_prompt"> +</div> +<div class="inner_cell"> +<div class="text_cell_render border-box-sizing rendered_html"> +<p>We can Finally plot the likelihood of each model over time, which is estimated causally with a forward algorithm (therefore allowing a use in real-time). +The last plot depicts the temporal progression within the likeliest model, which gives an idea of how the new performance of the gesture is followed in time.</p> + +</div> +</div> +</div> +<div class="cell border-box-sizing code_cell rendered"> +<div class="input"> +<div class="prompt input_prompt">In [12]:</div> +<div class="inner_cell"> + <div class="input_area"> +<div class=" highlight hl-ipython2"><pre><span class="c1"># Plot the likelihoods over time for the test phase</span> +<span class="n">plt</span><span class="o">.</span><span class="n">figure</span><span class="p">()</span> +<span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">411</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">instantaneous_likelihoods</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"Instantaneous Likelihood of Each Model Over time"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">"Time (Samples)"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">"Likelihood"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">((</span><span class="s2">"model 1"</span><span class="p">,</span> <span class="s2">"model 2"</span><span class="p">,</span> <span class="s2">"model 3"</span><span class="p">))</span> +<span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">412</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">normalized_likelihoods</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"Normalized Smoothed Likelihood of Each Model Over time"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">"Time (Samples)"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">"Normalized Likelihood"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">((</span><span class="s2">"model 1"</span><span class="p">,</span> <span class="s2">"model 2"</span><span class="p">,</span> <span class="s2">"model 3"</span><span class="p">))</span> +<span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">413</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">log_likelihoods</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"Smoothed Log-Likelihood of Each Model Over time"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">"Time (Samples)"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">"Log-Likelihood"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">legend</span><span class="p">((</span><span class="s2">"model 1"</span><span class="p">,</span> <span class="s2">"model 2"</span><span class="p">,</span> <span class="s2">"model 3"</span><span class="p">))</span> +<span class="n">plt</span><span class="o">.</span><span class="n">subplot</span><span class="p">(</span><span class="mi">414</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">plot</span><span class="p">(</span><span class="n">progress</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">title</span><span class="p">(</span><span class="s2">"Normalized progression with the likeliest model"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">xlabel</span><span class="p">(</span><span class="s2">"Time (Samples)"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">ylabel</span><span class="p">(</span><span class="s2">"Normalized Progress"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> +</pre></div> + +</div> +</div> +</div> + +<div class="output_wrapper"> +<div class="output"> + + +<div class="output_area"><div class="prompt"></div> + + +<div class="output_png output_subarea "> +<img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZUAAAEZCAYAAABfKbiYAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz +AAALEgAACxIB0t1+/AAAIABJREFUeJzsnXd4VFXzxz8TQguQkJAAIYEk0lGKSBekKYiCiAqoFAv6 +2js2FIgdFUXEH6+KgBQBEXmVIkgNTemRLh0SCKEkQCChpMzvj3M32SzZZJMsBHS/z3OfvfeeNvfs +uXfOmZkzI6qKBx544IEHHrgDXkVNgAceeOCBB/8ceJiKBx544IEHboOHqXjggQceeOA2eJiKBx54 +4IEHboOHqXjggQceeOA2eJiKBx544IEHboOHqXhw1UJE3hSRb63zMBHJEJF8j1kRWSoij1rnD4rI +fLu0DBG5zn1UO6VhvIi8W8CyPUQkRkSSRKShu2lz0uZQEZl0JdrKhYa2IhLrYt4ipze/EJHfRKRf +UdPhbniYSi4Qkf0i0qGQdTwkIivcSNNQEZnorvqKGrkxC1X9SFX/Y3+rsO2p6hRVvd2ddV4BfAo8 +raq+qrrJMdHqvzMW07H9DnRDuy73jUVDvP3/KCLeInJMRNKvBA255RURPxH5r4gcEZGzIrJJRB4u +BF35Qk7vrareoarXFCN0Bd5FTcC/AMK18eEqShRl/0gRtu0qwoDtuaQr0EBV918hepzhJNAFmGtd +dwESgQpFRhEgIsWBxUA80Bw4DNwKTBCR8qr6hZvbK6aqhWGk1zQ8KxUXYVtxiMinIpIoIntF5Ha7 +9Iete0nW7wMiUgf4L9DSmkEmWnnvEJGNInJaRA6KyFC7emwz9/5W2jERGWSldQYGAb2t+qLt2t5u +tb1HRP5jV19bEYkVkZdF5KiIHLafoYlICREZbrV1RERGi0hJu/THRWS3iJwQkV9EJNiBTvuZqb2Y +qbqIRInIKesZphagz52KNETkXhHZJyL1rOsWIrJKRE6KSLSItHVSLqeV420issv6X7+yyysi8raI +HLBm4d+LiK9d+l0istUqt8T6v21pN4rIBus/ngaUyuU5c2qnnPXfnMG8p5tFZLezKnDCHEWkqYj8 +YfXLYREZJSLedunXi8gCEUmw/v837IqXFJEJ1rjaIiKNnT2DhUnAQ3bX/YEJDvQEi8ivVnu7ROQx +u7RS1rMnishWoGkOZWdY42mviDyXBz32dIQC96lqjKqmq+rvwPPAuyJSVkReE5GfHNobKSJfWOe+ +IvKdiMRZ79N7IiJW2kMislJEPheRE8BQh3qcvbf274t9HSetd66VmHc7xhoX/e3qzPW9LVKoqudw +cgD7gQ7W+UPABeBRzAv8JHDYSvMBTgM1rOtKQF27cssd6r0FuN46vwE4AtxlXYcBGcA3QAmgAXAe +qG2lDwUmOtTXBQi3ztsAyUAj67otkGqVK2blTQb8rPQRwC+AH1AG+BX4wErrABwHGgLFgS+BZXZ0 +pgNednQsBR61zqcAb1rnJYBWTvr4knrs0jKf1T4f8AiwC4iw0qoAJ4DO1nVH67pCDnRl+z+svp4F +lAOqAseATlbao1Y7YdZ//LMdPbWAs1YfFQNeBXZjVv/FgQOYj1Yx4F7gIvCukz5w2o4djRG5jNMM +4DonaY2BZpgxWw3YBjxvpZUF4oAXrf+oDNDUru9TgM5W2Q+BP3OhIR2oh1kN+ALlMeO6HpBul285 +MMrqo4ZWf7ez0oYByzBjMQTYAsRYaQKsB96y+jQc2APc5uy9sGtzKjA+h/vFMO/GbVbfnAXKWGle +Vt/Y+uN/wGjM5CAQWA08bjemUoGnrXIlcxvLTt6Xh6wx0t961veAWLu+ug1IAnzyem+L+ihyAq7m +g0uZyi67tNLWy1zR+hAkAj2AUg51XMJUcmhnBPCZdW77eAbbpa8BejkbnDnU9z/gOeu8LYaJ2H/8 +jwLNrPOz2H2wgJbAPuv8O2CYXVoZa+BXI2+mMgH4GgjJg9b8MJUM4BVgq0P/vAZMcCg7H+iXA105 +MZWWdtc/Aq9Z54uAJ+3SamEmFl7A28A0uzSxPgK3YBj7IQd6VuGcqeTUzkVbn5AL07BLP2WNwZPW +721O8r4A/Gyd3w9scJJvKLDA7roukJwLDenAdcC3wH+AJzATo+pYTAXDtFOxPozWvQ+Bcdb5Xnu6 +gcfJYirNgQMObb4BjM3rvQAWAh86STsCPGCdrwD6Wue3Abut80qYiV1Ju3L3A0vsxtSBnOrPaSw7 +eV8eAnbapd1g9Wmg3b0TGDEn5PLeFvXh0ankD/G2E1U9Z61+y6rqMRHpjZmtjhORlcBAVd2ZUyUi +0gwzK7sBM0MsAfzkkO2o3XkKZlaZI0SkCzAE8zHywjC8zXZZElQ1w7E+EQnCMMQN1rNglbddVAE2 +2D1zsogkYGaRcc7osfAq8D6wVozY73NVHZ9HGVcwEPNxPmJ3LwzoJSLdrGvBrBgWu1ins76uAhy0 +Szto1VvJMU1VVUQOYfomAyO3x6GsM+TWzpEcS1yKGzUHnYqI1AQ+B5pgxoU3Wf9pVcyH3Bni7c5T +gFIi4uUwljKbsn4nAR9Z56875AkGElU1xe7eQeAm67wKcMghzYZqQIg1lmzteWFWPnnhhNV2doJF +imFWHSesW1OAB4DJ1u8Uu7aLA0dsEi/riLGrziUrtTxgPw7PAajqCYd7rry3RQqPTsVNUNWFqtoJ +qAzsxMzYIGcl9BTM0jVEVctjZnSuDohs9YlICWAG8AkQpKr+wDwX6zuB+Vhcr6oB1lFeVf2s9DjM +B9vWVhmM0vUQZvUDZnDbUDmTSNVjqvofVQ3BiApHS+FNdxXoBAwWkXvs7sdiZoG2Z/BX1XKq+mkh +28v2/NZ5Gubld0wD85E+jGEEoQ5p1fLZTirZPzJ5wdn//V9gB1DdGmtv2eWNxawk3AZVXYH5gFdU +1VUOyXFAgDWObKhGFgM+gulDG+z7JBYzE7f/j/1UtRt5YxHQRURKO9y/D7MCWW1d/wS0E5EQjNTB +xlRirXwV7Nour6oN7B89DxrySs8P8npvixQepuIGiEhFS2nrg/kYnMXMVsF8GELFWKDYUBY4qaqp +1qrlQccqc2nuKBAuWVMU20rnhKpmWKuWTq7QrWbdPAb4wpr9ICIhImIrPxV4REQaWErAD4HVqhpr +zaAOA31FxMtSOGZ+oETkPuvlBCOaybDrE0cIZhZc0u7IqQ8EoxO4HfjKbmUyGegmIp0sWkqJMVCo +4ko/5IKpwEsiEi4iZYEPMCKvDGA6cKeItBdjOjsQ8+H5A/gTSBWR56y0ezB6jYK0U1iUA5JUNUWM +IcFTdmlzgMoi8ryl+C1rjUdncHXi0xXo7lhOVQ9h+ucj6z9uAAzArG7A9OmbIlJeREKBZ+3qWAuc +sRTqpUSkmBgjgyYu0DMJMxH6SYyBibelPB8JDFXVMxZ9JzA6nfEYBrbTuh8PLABGiDGgEBG5TkRu +cbE/4NL31hXkmNeF97ZI4WEqucPV2YcX8DLmI3sCI1e3vbxLMB/CeBE5Zt17BnhPRE5jZPM/5tGu +/fVPmMGWICLrVfUsRk7+kyUauB+jtHP1ud7AKDxXi8gpzMtTC0BVFwODgZnWs0VY9dvwOEafcQIj +c7efmTYF1ohIEmZV9ryqHsiFnjOY2dc567e9M7pVdTPQDfhWRDpbH6vuGAub4xixyUCyxndu/2Nu +fT0O80FajhETpWCU76jqLqAv8JXV5p1AN1VNU9VU4B6MQUEC0BOjfHcGp+24QL8tfZNk36fyuZU2 +EOhj/Q/fANMyC5mxcxtwF0bUtQtol0c7eaap6g5V3eGk3AOYcRSH6ZPBqrrUSnsHI1Laj9GJZe7r +sBhsV6CRlX4M82HNtMZzSpjqRYwJcSxGP3kaGI4xJPncIfsUjKHHDw73+2Mmb9sxOqufsFuZu4Bs +762NtLxIz+Xa6Xtb1BBLyXN5GxEZixkQR+2XjGJMAp/GiBTmquob1v03MRYxacALqrrAut8Y+B5j +gfGbqr542Yn3wAMPPPDAZVyplcp4jGliJkSkHWa2WV9V62NmDohIXaAXZubbBSOLty0D/wsMUNVa +QC1rCeuBBx544MFVgivCVFR1JcbU0R5PYcxV06w8NiuH7hh5cpolLtkNNBORykA5VV1n5ZsI3H3Z +iffAAw888MBlFKVOpRZwi4isFrOz1GZWGEJ287zD1r0Qspsb2sw3PfDAAw88uEpQlPtUvAF/VW0h +Ik0xiqzL7i3WAw888MCDy4eiZCqxGKsiVHWdiKSLSAXMysTepj/UuneY7Dbstvs5QkQuvwWCBx54 +4ME/EKpa4I2UV0T8ZVl/rQdq2t3+BeggIq+ISAbGvUkCxg/T82Icqu0B6gNrLVvxVOv+Lsyu3VxN +Z4vaXUFhjqFDhxY5Df9G2j30F/3hob9oj8LCpZWKiGwhF5tqzb6zNCdUs8qXFJEYjB+ccZj9GZ0w +GwZt+zps7Tjb/GZ/37Ma8cADDzy4iuCq+Kur9fuM9WvbAdvHlcKqepuIhAGzNfs+lQygFWZ18od1 +uzswUlU/tvLMw1h/HQSKqWoN6/79GOuv3118Bg888MADDy4zXGIqqnoQQERuU9Ub7ZLeEJGNmN2d ++YKI3AXEquoWB88FIRg3FzbYrL/S+BdZf7Vr165oCcjIgNRUKJn/EA1FTnshcVnpv3ABdu6EuDg4 +fx5KlYLQUKhdG4oXz7u8C/D0f9HiWqe/sMivol5E5Ga1HMWJSCsKoJexHLsNwriI8CAHFOnA3L8f +7roLdu+GpUuhZct8Fb/WX6rLRv/w4fDBB1ClCoSEQOnShrEcPGiYTNeucP/9cPvtUKJEgZvx9H/R +4lqnv7DIL1MZgHHt7ofRbZzEuFPJL6pjguxssnbLhwIbLWd2brH+AoiMjIT0dFi5knbdutHu5ZcL +QOq/DCdPQtu28Npr4OMD778Pc+fmXc6D3DFrFnz7LURHQ3j4penHjsHPPxvG8+ijcNttUL061Kxp +GE0BVozXEsLDwzl4MLfoAB64G2FhYRw4cICoqCiioqLcVm+BfH9ZTAVVPe1i/rEYp3VlVbW0de8T +jJuWCxirsLqqGiMmPOwijGt1wcSACFVVFZHN1rVi4hs8parznbSpqgoffgg//gixsXDgAPjm6X/u +340nnoBixWD0aEhJgcqVzcqlQpGGGb/20aYNvPwy9OiRd96DB2HZMjNely6FGjVgzJjLTmJRQkTc +Ynnkgetw1ufW/StjUiwifpb308XAYhH5zMZg8kA26y8ReQTjVfN6VW2Esf56ybG5nEgguwVY7qMw +PR2+/BKmToWbb4bZs10g9V+MVatgzhzDiMGsVNq3h989thCFwunT8Ndf0KWLa/nDwqB/fxgyBKZP +N5Oic+cuL40eeOAm5FcfMg7joryXdSRhnEXmClW9DeMKfauqVlPV8aq6SLPiRTyMicAGZkUzUlVr +WJZem8ny/VXMul8TeJO8fH9FR0NAANSrZ8QJK1bk83H/RVCFp5+GESOgfPms+82bw6ZNRUfXPwGr +V8NNNxmlfH4RFARVq8KuXe6nywMPLgPyy1Sqq+pQVd1nHe/gHtcqjwK/Wefu8/21fDl06GDOmzSB +9etzzf6vxqJF5rdnz+z3a9c21koeFBy7dpmJTUFRty7s2JF3Pg88uAqQX6ZyTkRa2y5E5GasWMoF +hYi8BaSq6tTC1JMjtmyBhg3NecOGsG2bMZX14FJMmwYPPwyOgenq1IG//y4Skv4x2L3b6EUKCg9j +/0fjkUceYciQIS7ljYiIYMmSJZeZosIhv9ZfTwET7Ky/EoGHCtq4iDwM3AF0sLvtzMor/9Zfv/8O +Xl5w+DDt2rWjXdmycPw4VKpUUJL/mVCFefNg0KBL02rUMArj1FS37aP412HPHrj11oKXr1TJI/7y +IE9ERUXx7rvvsnHjRgICAti3b5/L5dxp/ZUvpqKqfwENRcTXuk5ypZy99ZfdvfswoViPALNEpJdl +TTYLWCQij5Fl/bXWsv5KFZHd2Fl/5dZu5Nmz8OmnRq8CUK2asazxMJXs2LfPMN/rcpBklixpNuft +22dmzB7kH3Fxpg8LigoVICHBffR48I9EmTJlGDBgAA8++CAf2oxtXEC7du2y7a155513CkVHQa2/ +lgBLCmn99S3G6usMcAOw1KFM4a2/VMHfP+s6LAxiYlwg91+G5cuNyauj6MsGj/ilcDh+3CjcC4oK +FSAx0X30eJBvREREMHz4cBo0aICvry+PPfYYx44d44477sDPz49OnTpx+nTWDotZs2Zxww03EBAQ +QIcOHfjbToQcHR3NTTfdhJ+fH/fffz/nz5/P1tacOXO48cYb8ff3p3Xr1mzZssUlGps2bUqfPn2I +iIhwz0MXEEVm/QUcA+qoamPgJsDHyu4+66+wsOwfSttKxYPsWLECbrnFeXpYmNnn40H+oVp4phIQ +4FmpXAWYOXMmS5YsYefOncyePZsuXbowbNgwjh8/Tnp6Ol9++SUAu3bt4sEHH+TLL7/k+PHjdOnS +hW7dupGWlkZqaio9evTgoYceIjExkZ49e/Lzzz9nthEdHc2AAQMYM2YMiYmJPPHEE9x1112kpqYW +1WPnG0Vp/VVRVY8CqHFrX9G67z7rr2rVsl97Vio5Y906YzrsDIGBcOKE83QPnOP0aSNCLIg5sQ0e +8Rdg5ofuOAqK5557jsDAQIKDg2nTpg0tWrSgQYMGlChRgh49ehAdHQ3A9OnT6dq1Kx06dKBYsWIM +HDiQ8+fP88cff7B69WrS0tJ4/vnnKVasGPfeey9NmzbNbGPMmDE8+eSTNGnSBBGhX79+lCxZktWr +Vxe2+64Yitz6yw7u307rKMf2rFQuRVqaUSTXqeM8T1CQh6kUFMePQ8WKeefLDQEBHvEXZtHnjqOg +qGSniy1duvQl12fPngUgLi6OsLCwzDQRITQ0lMOHDxMXF0dISPa5sH3egwcP8tlnnxEQEEBAQAD+ +/v4cOnSIuLi4ghN+hZFf668ngYkO1l8PF7DtoyJSSVWPWqKtY9Z991l//f03REYCljLKs1K5FHv3 +GgeHPj7O8wQGwh9/OE/3wDlOnDD9Vxj4+UFysscC7xpBlSpV2Lp1a7Z7sbGxmczk0KFD2dJiYmKo +YZmcV61albfeeos333zzyhBL0Vt/baIA1l8WHANszQIeFhEv4AXAS0R+AD4BJonIrRjHk5WBv1X1 +tIicFpH/wwT2CgZyNXGI7NkTnnsu60Z8PDj8of96bN8O11+fex6P+KvgOH06u4eCgsDLyxicnDxZ ++FWPB5cdvXr14uOPP2bp0qW0adOGL774glKlStGqVStUleLFizNq1CieeuopZs2axdq1a+lgbdJ+ +/PHHueeee+jYsSPNmjUjOTmZZcuW0bZtW8qUKZNru6rKxYsXuXjxIhkZGVy4cAEvLy+K5zERKWrr +r5Ii8iDwLPCiiAwRkTx37YjIFEwQrlp21l/DMA4l3wG2ALUwTK4RxvvxjRhnk1MwSnmA4WR5RZ4O +PCqSi5TU8QW0WdF4NkBmYfv2vHd7BwYaMY4H+UdSknucmHqU9UUKx89Mbp+dWrVqMXnyZJ599lmC +goKYO3cus2fPxtvbm+LFizNz5kzGjx9PhQoV+Omnn7j33nszy950002MGTOGZ599loCAAGrVqsWE +CRNcanf58uWULl2arl27Ehsbi4+PD507dy7EUxcM+fJSLCLzgdPABiDddl9VPytQ4yL+mIBcLTFW +ZTOBLzH7V9raicaiVLWOiLxhmssWFTJSVdfkULfqkiXGIaI9AgLMRrLCiiT+KejTBzp3Ng4MnSE2 +1sRU8azy8o/vvoM//4SxYwtXT6tW8Mkn0Lp13nmvQXi8FF95XC4vxfnVqYSq6u0FbcwRqnpSRD4D +YoAUYIGqLrLpWqw88SJibxmWU1TInJGTqMCmdPYwFYM9e+CZZ3LPU6GC6TPVwpnP/BvhzpWKR1nv +wTWA/Fp//SEi9d3VuIhch3F5HwZUAcqISB8utQQr2BQmp53zHlFOdhw4AHltlvLxMTFWkpOvCEn/ +KLiLqXjMij24RuDSSkVEtmA+7N7AIyKyD6PvEIw4qkEB228CrFLVRKud/wGtyL9lWI6IHDUqc2ad +qYzymMdmISXFfPRccVtj67eyZfPO60EWkpJM6ODCwrOr3oPLhKKy/urqthazYycwWERKYZhUR2Ad +cBZjqvwxxmHlr1b+WcAPIjICI/aqAax1VnlkTlYMQUGelYoNBw+avTteLixYbRZgOYXC9cA5kpKM +6/rCwqaonzTJ1JmXyNIDD1yEu62/XGUqJ1U1SUQCCtWaA1R1k4hMB44CJYHzGJ9gvwHrReQ9jCuY +xlb+7SJyFMN0FBiq+dXuecRfWThwwHgZcAWefisY3Cn+io01+6727YOHHnK+ahwwwCj2BwwofLse +eJBPuKpTmWL9bgDWW78b7K4Lg+rAi6paChP9cRtmk+XHqloC+BR4GsCKX18J4yesNvBYribFOcEj +/srCgQOurzw8e1UKBnczlfh4Exp78uSc8yUkwLhxJiz01YZDh8xmWw/+0XCJqahqV+s3QlWvs35t +R4EjP1qbKNtYDiZR1TTL/X13wGacPYEsx5F3AdOsfAeA3UCzfDWag/grORleeQWaNoWvviro01yD +OHgwf0zFoyjOP9xp/bVpk/F+MHKkWbHktEhfv97suj9ypPBtuhPp6SYs8u1uMx714CqFq4r6xrml +q+pGEZlNLlZaqnpXDrcjgBMiMh5oiFn1vAi4x6Q4JziIcc6cMeM8NNSEXunTB2680UwG//E4cADu +yulvyQE2s2IP8gd3rlTi4sx+ocaNoUQJYw5es2b2fBs3mkH8v/8VvK2oKBgzxuhvXNG3uYJ16wxT +iY83m4/dVa8HVx1c1anktrlRMZEbh1vX92Bcq9jW5w9gdCbO2m8MPKOq6y0F/Bu4yaQ40vL7Bc6t +v2bOhHLlYOpUM86//BL69jWRh3Nzh3Ut4vvvTSj6SZMso7j8ir82bbp8xP1T4c6VCpjxK2KYy5o1 +WUwlKsroUfbtMx6nJ00quK+wt94yY2PkSHjppcLTDoauVq1MmIWYGI/Bhx0eeeQRqlatyrvvvptn +3oiICMaOHZvp1sUdKBLrL1Vt70KeZQAi8pmqNrFLmi0izvQuh4BYVbWl/4xhKu4xKbZjKplwEH/9 +/bdZldgmTvfeCz/8AN9+Cy++6KzmaxNffGH4wjPPmG+SR6dyBeAupmLbyGvzI1a/Ptg7LWzfHt5+ +2/yn991n8p06lf84LvHxxnXP99/D6NG5M5XRo6FrV2NBOHo09OgBwcFZ6ZMmwcqV8M03hpFUq2bC +U+/f72EqlwHDhw9nwoQJHDx4kKCgIJ566ikGDhyYZ7mi9v3lIyJvi8i31nVNEXE0Ny5jbWq0lYkA +cvSEZom4YkWktohsBL7DKOp/B1aIyE5gOTDfKjILeEFEdovIHqA+uZgU5wib+MuSR+/adWmU3CFD +jEeMc+5y6n8VIC3NrL5efx1mzcI83KlTULmyaxV4dCr5h6qRr5YrV/i6Spc2v0etRX/9+uaPPHfO +6CsA1q7NmijYHFDmF9u3Q6NGhjnkti9m61YzO7GJ2Z55Bl57LXueBQvM7Cw+PoupBAebaw8uCyZN +msSpU6eYN28eX331FdOnT7/iNORXsDkeuIjZoAhmlfC+Q56XgCgRiRKRZZgwwS/kUufzwEIgHPDD +eB529GjsiIL7CilTxogPUlIAM2lyDM3eqBG0aGFW62+9ZURjVwvsdbO//ALdumV9UwYPhuHDc857 +4oT5zrRpY3S5HDpklL6uyrYrVYLDuUYa8AD4I/YP/or/y1wkJ5vgXN759YbkBGXKZLkXsjkKfPRR +M1ABNm82/2u1agV365KYaPQ3eZW3hZDYtQts4XAdYxUlWU7MV60ylmuhoWYSEx9vVjiTJxu90J9/ +crXjWggnPHDgQBo1aoSXlxe1atWie/furFq1yj0dkB+oqssHsN76jba7tymHfCUxiveGQMk86gzF +MJV2wCzr3t8YZT1kub4HIxp73a7sPKC5k3rVKapVU92/X1VVw8NV9+27NMtff5mQPk8+qRoSovr+ ++6oXLzqv8kohIkL1wQfN+ZNPGhrXrDHXIuY6Pd1cV6um2qePOY+OVq1fXzU+XrV8edWMjdYNV3Hh +gqn87rvd9zD/MGRkZCiRaMhnIaqq+vzY+/RckL/7GjhzRvX8+azrgQOzYk/Vrm1+g4NNWufOqr/9 +prptm2pSkuqBA6pVqqju3Kl6+LDqn3/m3MY336g+9phqQoIZKM4wdqxqaKhq27aqu3ebwRcaatLW +rFHNyFBt00a1dWvVyEjVFi1UV65U/egj1ddeM7S2b6/64ouqRmfqli66XAgPD9eWLVvq8ePHNS4u +TitWrKiNGzfWTZs26YULF7RDhw767rvvqqrqzp07tUyZMrp48WJNS0vTTz75RGvUqKGpqal68eJF +DQsL05EjR2paWprOmDFDixcvroMHD1ZV1Y0bN2rFihV13bp1mpGRoRMnTtTw8HC9aH18wsPDdfHi +xS7RfOONN+o333zjNN1Zn1v388Ub7I/8TqEuikhpLMW5iFTH7ITPhIgUB54AbEHPo0TkG1V1FmR5 +BPAqZpViw+Wz/oIsEVh4OKdO5RzuomFDY6QiYsyN77zTnJ84YVYxPXq4rgNds8ZImlq2NOJ1Vdix +w3icT083Eoe6dY0h1vjxZvWxZIlxHDxqFCxcaPSbY8ealVVMjJnkHTgA1asb5Xv16kbKEhhoxFy1 +apl8M2aYckePmsVGpUom3+E95wi1iVRcQYkS5veXXzIdS3aY0IHPO39Oo8qNXK/HDTiUdAhvL28q +l3VRdHcFcOr8KTLUhFQ4c/EMF9Iu8PvGGbxR3JfgPMq6DMfNjlWqZJ1XqmSWoraVp7+/+dPvuAMG +DTImjXFxsHq1Wc289ZYZzMnJJtyxzVVPYqJZpfj5GdFderrx++aI+HjzImzYYFYhrVqZJfDZs8ZQ +YOtWI367/XbYudOITitUMCuV7dtNHSkpWascFyDvuMeZqQ4tmCtBWzhhgDZt2lCpUiUaNDAeqnr0 +6MGSJUt8qZw1AAAgAElEQVSA7OGEwawgvvzyS/744w9EJDOcMJBrOGGAfv368cEHH7B69WratGnj +Mq1Dhw5FVXnkkUcK9KyFQX6ZylCMfqOqFVDrZi6N/PhfoDgw2rruZ917zLEyEbkTOKqqf4lIu1za +dZ/1F2RagGVk5K5HtW2rrFEDPv7YMBJvbxgxwrw3trDR06aZj/oNN8CyZcZyMjjYvEdr1himdMwy +Nfj7b/Mut24NDz8MEyca8duzz8K8ecZIYN06WLzYiKsbNYK5c424/IsvjDTFz89IGvbuhQcfNFak +MTHGL2SDBoautDRDT+nShoajR7PUJ02awK5N+WQqAO+/b5TBhw9DaChLDyyl5diWxL4US6BPzl6f +E1IS2JO4h+ahzfPXlgMyNAMv8eJQ0iGqjqhK85DmrH7s6ojbPXPHTO6dfi/T7p1Gw0oNKVuiLEOW +DsHvAqSUdpPoKyfcequZeUycaAbGkiXG4gsMY1i3zpwfPZplZLFtW5Y4bs8ewxgeewx69TJpJ08a +hlSsmJl9nD4NS5fC3XebiVhwsGEE8fFw000we7bZExMSYtJtbS5caOpq2dKMG3umYtsAefx4vkR0 +BWUG7oI7wgl7eXnlGU544sSJjBo1CjCSpNTU1HyFE/7qq6+YPHkyK1euzDNAFxR95MeFlkK9BUav +8YKqOpoENVXVhnbXS0TEmS3qzcBdInIHUBooJyKTgPjLZv0FmRZgSUlm8pfTRMwRd99t3lcvL3j1 +Vfi//zMrhNtuM6bHPXsa/WhehhP2oeC//9787tsHH1oxLL/5xvwuWGB+t20zkz8w3wybAU10tGEk +3bsbnU9cnHnfGzaELVvMd6FWLfOur1ljFhe2d6BpU9i39hwd8stU3nrLcLsdOyA0lJLFStKjTg++ +WP0F73fIrlrrPLkzh5IO8UijR/hx24+se3yd02rTMtI4lnyMKuWqOM1z97S7OZFygt7X96Zrra6s +ilmFquYatKigeCfqHe6/4X5qB9bONd/249vx9vJm9SHD3EatHUWEfwSPNnqUAbMG8Ol1vYn/4zeq +u51CC/Xrw4QJZobx8stmINsGs7+/mW2AMfkLDzcRPrdty1rh2EzEU1KMMm7BAuPapbpFcUCAyX/f +fcaKa8MGc3/p0qyd/T4+ZqYUFGTK2WT4f/9tmErz5ub8wgVDU+XKZuXi62uYUUKCGdT/oDDfRRlO +eNy4cXzyySesWLGC4GDX1shFbf31rqomqOpcVZ0DJForFnukW2IxW5nrsAvo5YDRwB7gnHXsV9V+ +wAIul/UXZIq/nIm+nMHb2zCVzz4z79Jtt5n7t99u3m1n/8XQocZrxlNPZd1rYOfXOSPDrGQ6dzZ6 +TzDvd5065p2OizMK9tmzzfvXoIF5r318DBM5fNi8p1WqmLQtW7KYTPPmWSsVG1Np1gwO/n2uYBtx +KleGY8dIz0jnYvpFPr71Y8ZsHMNHKz4iQzOIPxvPyNUj+TP2T7Yf386vO3/lr/i/OH3+NGcvns2s +ZnfC7szzx2Y9RsjnIfy+53eemvMUqempnEvNbnoXczqGPw/9ydStU+nfoD9e4sXRZGMJte3YNlYf +Wk1qeirxZwtnWbTt2DYil0XywM8PZAYwWrp/aY55G37dkI4TO7IncQ99G/RlVewqwv3C6Va7G8de +PUbPyh057J1y+YNPRUVlKe5t8Pc38tFGjYzM9MQJaNvWDKgTJ8xsIzra5N2/P8vaY/duUxYMU7FZ +Dy1dmhXcLioqa+kbGmqYU2Bgdqaybx9cvGgGZVqaGeTe3qZMQoK5X6yYofGmmy5v/1xh9OrVi7lz +57J06VLS0tIYPnx4Zjjhli1bZoYTTktLY+bMmaxdm/UJe/zxx/n6668z7yUnJ/Pbb7+R7ELYiR9+ ++IG33nqLhQsXZlv9XGnk1/qrqoi8CSa0MPA/jKsUe7wKLLWz/loCvOKkvjTgZVW9HuPfK0JEbHP5 +y2P9BZnir/wyFXusXAnz55vJ2PTpRkQ1Y4YRX7Vta96tuDgjYYiMNDqZ963JfHS0WXXExUGHDmaV +U6MGvPGGSX/sMVOuY0fzDUhKgnbt4OefzV63hg2NqKxKFfOeXn89/P67ua5f3xgBxcWZaxtTiY/P +En/dcAMkHDrHmfR8rlTAcKajR0lOTcanuA9V/aoyr888JmyawK0Tb+WG0Tfw4u8vcubiGZpUacLK +mJWE+YXRcmxLqo2oxjNzn2Hp/qXUG12PfSf38U7UO6yLM6uYlxe8zNcbvqbi8Ir0mdmHfv/rx/k0 +I3OPTYqlQaUGrDm8hluvu5VaFWoxcdNEPl75MR0ndqTl2Ja8veRtgj8L5kLaBdYeNi9l428a8+EK +swz8bfdvTNw0MdfHW3N4DX0b9CUtI41x0eM4evYoHSZ2IOZ0DGsOrSHmdAwvzHuBqANRpGWkcSjp +EJuPbuaJm54AoH/DrAiaPmfPc6Zs8UIzugIhICBL6ZaSYlYzzZoZZmD7kG/YYJjCgQOG0YjA8uVZ +rvoDAoxuJDTUzFQSEw3zWrcua0BVq2bqCQw0g/iPP4yycMMGs7dGJHuwPNu+mbJlTdm9e68JpnIt +hBMePHgwiYmJNG3alHLlyuHr68vTTz9diKcuGPIr8H0U43r+TaA9ME9VR9hnUNXFIlIT4/ARYKeq +XiAHqGo8EG+dzxeRRRiRVmegtZ34KwpjqnwXMFKzhxNuBlwSThhy2VAcFAT79hWKqdSrlz20+x13 +ZJ0/+GDOZQICLnXXtHix+U1LMwzijTeMqO2774w3DjCTvIYNjbLfxlT27MlaKTVsaJTxPXuab36x +YkZn2qeP+aacO2cY2UMPmfzly0Pa2XNM+7U0bf7OLpLLEzamcjGZsiWM4rhxcGOWPLSER359hIRz +CXSt1ZX6FevjX8qf9XHraVm1JZM3GwcLo9eP5qftP5GWkcaAWQNYfnA5qkrtCrXZftwocE+dP8WK +mBWcSDlBm2ptWH5wOanpqXzf/XvGRo/Fv7Q/weWCeX3R6wCUKGaMCLafMOUnbJrAE3OeYM1ja4iO +j2bz0c282fpN7pxyJwB9G/Rly9EtpKSm0LJqSwDOXDhDuZLlOJR0iDC/MF5o/gL3Tr+Xqn5G2rpw +70J+3PYjzUKa8eXaL5n590yCfIKoXLYyW45toUmVJqQPScdL7OZpiYlIQAX2JO4huJzb1PWuwd/f +/PHlyxsl34YN8J//mE1Z0dFmkL37LnTqZAZhaqrRr/z5Z5b4y9/fzJ5atjQrmEqV4IEH4Pnnzcqm +cmXDSObONUylbFkzA2re3FicWMpmxozJ2jNjE8+lphqR3Pbt1wRT2bdvX7briROzT04GDBjAADuv +0N27d6d79+451tW4cWM22kSTOaBTp0506tTJJTpcTbuScGmlIiKNLf9fNwIjgd6YFcoyR79gdtZf +Q6zjceteXm2EA42A1ThYfwH21l+xdsVytf5yaqJtE38dOHXVRBW26U4/+sgwCTBMonhxs/KxeWUI +D8/yzGGj3eajr0MHMzFs2NB8J4KDzXXz5kYNYluplCwJpUnhXKnzmbocl1GxIhw7RnJqMmVKZO1p +rVKuCvP6zGPzk5uZ/cBsPuz4Ia/e/Crn3zpPdf/sWoXjKccJ9Q0l6kAUGZqBojQNMRYwwWXNx/dE +ilHVPTHnCX7Y8gMBpQO4MfhGvrrDePysXCbL8uti+kUql63Mwr0LaVKlCT9sMRLZX/7+Bb+SfoSV +D2NV7CpKe5fmOv/r2HZsG68teo1W41px9uJZZu6Yie8wX06knOBw0mFCfUNpUqUJpb1LM3Wr2aS0 +Lm4dG49sZNG+RYCxQAsvH8599e4jzC+MUt6lDEO5eNFweFVITKRkUDB7Evfks5PdAJsIy8/PDJrY +WGPJYcnuueUWwxgqVTJM58QJcw+yVhYBAUa22ry5YSoJCUZRV7KkUfT5+mbVV6FCFjOyWSnZLAa7 +dMk+06pc2QzMM2fM9Y03XpYu8KBoUFDfXyeBetZ9m+8vG1y2/rJBRMoCMzCK/7Mi4hbfX4MGRWJj ++JdYf82axd2z/FnyXNFalOSEUqWyVjT79pnJZtmyRpcZEmL0Or/8kjXB69YNPv88axNnu3bGiMC2 +J655c/jtt+wWqKXLHOR8gx+ZPf8bYmN9qGpv/pAbrM1ryReTKVM8u6MEL/GifqXs0aZLepek9/W9 +CfQJZP/J/aSkpjBh0wR+7vUzj/76KF/c/gU7ju+gSZUmeIkXg28ZzN7Evfx3/X8pU6IMU7ZMwUu8 +6F47+6zP0Zy4TmAdog5E0ateL15b9BqBPoHM2jmLOoF1aBHaghGrR1CzQk0aVGrAn4f+JPpINDUD +arJ432Imb56Ml3gxefNkDp05RLfa3QBoWbUl3//1PffVu4+5u+cCRjwWUi6Ew2cO07BSQ4a0HcLb +t7ydRci4cUZ5FhQEiYmUDa3KmkRHCfEVgM1XmJ+fWVIvWGA++jYTXlvgsMBAw1j27oXevY0lmU3E +YqujRg3DSHbsMPcaNjTWXbYZDBiZqo2R2eq2mTw6Yv9+Y8o8fLgZzK5EHvXgssHd1l8F3uDi7CDn +zZCX3LNL88Yo4l+wu7eD7Jsfd2jOmx/nk8vmx1q1M3Le9ZOUlLlp7P9eP5hzHjcgMjJS+/btq6qq +MTExWq5cOc3IcEJTAZHTZqjTp1Xnz8+6TkhQ3bDBgbbyfXVoW/TOV3/SgQPz0eCWLap16+qqmFXa +4rsWBaL5wIEDKiKalpaWa77U9FTtPKmzpqVfmm/EnyOUSPTl+S+rbyVf/eD7D/SLP7/Q1bGrlUj0 +ld9fUSLRh/73kC7cu1CJRHtO76lfrflKO03qpJU+raQlfUpq7297a92v6mrjLo212l3VtOaXNXXr +0a2qqjo+erwSic7cPlOJRDtO6KhEonf8cIeuObRGz1w4o1FRURpq2/Snqtf7+uqypk1Vu3XTyIgI +vbX59dpzes8C9ZOrsPVnum3Xq6rqkSNmjH/wgeqIEeZcVXXzZtWJE83mRNBzf/yhXStWVD/QXr16 +Za/4s89MuRUrzOZFUD1+XPXkSTOobLAf0wMGqCYnqzZooNqjh1OaRUT37t2beU0RbH5s166djh07 +1qW8jvRe7VixYoXWqVMn1zzO+pxCbn50VfzV1/p9OafDIXt+rL8AxgHbVXWk3b1ZZO1/cQwnfL+I +dBWRvRjdyyJrQ6atvQEishTgVLGdOFj2GZQrB8nJrK16Lw1Or8jr8QsFm2KtatWqJCUluWwCW5iZ +g6+v0acePnyY++67j9q1g+jY0Z8GDRpkyoJLF0/kfDFv0utNZdw4sx3BJYSHw/79JF84e8lKxRnt +ERERmRvDbBCRPPvC28ub+X3nU8zrUpvvztU781KLl/is82cElA6gRdUWvNDiBW6qchPT75vOoDaD +APjr679YOs5Yb91R8w5ahLZgwd4F1K9Un62xW1l6ein7Tu6jdoXaxJyKYXfibuK3GsV6t1pmxXJL +mBELlfIuxY5ndjD13qk0C2mWqVOyf46twcHc8sUXZsPSsWNkeAcRHbc51+d0B+xpiIqKMivK2283 +5oBPP51lXly/PvTrZ1YZqszYu5fjVatyMimJH3/8MXulgYG8A5Ro3x7f9evxBcpFRBBw3XVZqxjT +eNb5d98Zq8L167Msx/KgNy9ERkbi5eWVuXfDhpEjR+Ll5eWSd9/CIi9658yZQ/PmzSlbtixBQUH0 +69ePw1fQrZGXl1c2nUrr1q3ZsWPHFWs/Gy0u5rN9PcrlcDjGNHXZ+ktEbgb6AB1EJFpENorI7ZjY +9LdZJsUdgWFgwgkDPwEzgQyMS/3SwAcOVStA3ft+ZORIcoaPD+uKtSAsPmsDnV5u0898wB3L0X79 ++hEWFkZsbCwJCQlMmjQpc8NW6WKnKJbShLXHorit1/5LfAE6RdmyUK4caXGHsulU3E17XqgbVJfP +O39+yX1vL296Xt+TgNLmo+db0pdiXsXY9vQ2+jXoR4NKxpa7ToU61AiowbHkY1xIv0BJ75LcUPEG +qvtXZ8VyM9Go4FOBhNcSqOBTgZ3P7uS7u76jTmAdfEs62S2bnGxklE2aGCuK5GSWrQpm79GjbN53 +5SzAMvt/3jzjY6tECad6i4MHD1KrXj0kJ6eX990HXbtyf+/eJH3wAUk9enDmzBkSXdmwWLx4rj7P +8vOuiQi1a9e+RDk+ceJEajt6g71MyI3eGTNm0KdPH15++WUSEhLYtm0bJUqUoHXr1tn8gbkD6ek5 +z88vx36tgsLVyI/fWL/vOB6YGPL2eRcDNTGOIp8Daqtqjob+qrpKVYupaiNVvVFVG6vqfFVNVNVb +VbW2qnZS1VN2xZYAi1W1JmZvywLgCSuKZDZsLzOan+f8Rq1azfD396d58+b8aTmvO30a3o6ZytfL +p9K6dWvKlCnD/v37ad++PYMHD+bmm2+mXLlydO/enYSEBPr27Yufnx/Nmzcnxm6j1osvvki1atXw +8/OjadOmrFy5Msc+PHjwIF5eXmRkZLB69epMkz9fX19Kly7NdZZCRFUZNmwYX375JUFBQdx///2c +OpX1+JMmTSI8PJygoCA+zEPLvm7dOh566CFKlSqFl5cXDRs2pLO1n+FcxnE+XL2atolt+WV6Pb77 +LpB77vmatWvX07BhQwICAnjuuefs/yvef/99wsPDqXzqFCNeHU6ptFKZ6fYO9CZMmMDOnTsB6N+/ +PzExMXTr1g1fX1+GWx4vVZXJkycTFhZGxYoVsz2LrQ9q1KhRqD7IGJJB9QCzaK4XVI9iXsUoXqw4 +ia8l8kHHD/Dy8mJEsxHM72O2QfWo24Odz+7kwoULdOjQgRdffJGA0gFcvHiRbz/6lubXNyc4OJin +n36aCxcuNWhMW7WG0PMZ1LphJUc7PsgFbx/q3pCO32/laVQ7nOuvr5/N6ufvv/+mffv2+Pv7U79+ +fWbPnp2ZlpSURP/+/alYsSIRERF88EHWvCkjI4OBAwcSFBREjRo1mDt3bm7DwGk7kZGRvPvuu0yb +Ng1fX1/Gjx+fvaCPj2GQXl7GA/HMmZfUndv4z8jI4MMPP6RGjRqZ6faz94ULF1KrVi0C7Fc9TtCk +SRNSUlIyZ9/bt2/n/Pnz2VycgHFzUrNmTQIDA7n77rs5YhcBc+HChdStWxd/f3+ee+65SxjFuHHj +qFevHhUqVKBLly7Z3vPcMHDgQIYMGULv3r0pWbIkFStW5LvvvqNs2bKMGDGCixcv4u/vz3abexrg +xIkT+Pj4cMLydJCbE8mIiAg++eQTGjZsSNmyZcnIyMjWftu2bVHVTGeXP/30E8uWLaOqnaI0J4eY +gFOHmCLSQkRWichJa8Lf1qXOAKSws3MRiVHVag73WmG8DmdOVVQ19w0Crrd3L9BZVf8jIvuBqUBP +TJjhwSIyALP6af/KL6/w+QMjKHV9V0Jqt6NU0nZ2LppCl4EfEXO4DHvnf4J//G6GP3ArlcIqk+Yl +DJy8gONJKXzWrxN+pUvx5Ng5pKVnMLBrKxqFV+ajX1dQTLx4o3trABZs2UuLmiGUKVmCGau3M/WP +rfz44n0UL1aM76P+Iu7kGQbd3Zr4U2d5cNRMFr3dDy8R1LI9SM/I4JVJC6lftSID2t/IjDU7iNp+ +gHohgTzesTGjfl9H8vmLvH1PG/YfP8Wz4+Yx7MGO1KkSyJglG/ll7U6GPdiBGyMq2/o5s69e/2Ex +51PTubtpLa4PDaKiX9bKwveLaTRPzuA/T/yHxLaJLFu6kmPfHaNExbo07v4I/n7KktHv0Pbhp6hc +oxZ7Vq9k6+J53PbUy3TbsIbxUbO5GFiVj9u+SWzSUR6b8x4fdnyORpVq8+rCzzlyNoFJPd6juHjR +8+c3eKPVw9xUuTaqEH82gd7/G0TXGq15sen9xCTF88S8jxh359tU863MTzsWsyRmA++1+Q9+xcsw +cuN0ki+eY0irRzlwKo4nF33Kp7c8Q92AML7Z/Csz9yzj0zZP0bhibdtgy3zOj9b9QMXS5Xn0+jts +bgsz0zr87yUm3zaIKmUCGbZhChVLl+fe6rcwYOmn3FmtOQ/XMWZ1/7flF46kJPJGo/vxFi/ei/6B +iLKVeaxOF/46sYePNv3Ijx0GERC9mFuPr+a+x2fy05Q2+Kc8ziHv6Xw+9gte3P4WGTOqUep0Arc+ +8xalS8DsT96mZos21GvfmWP7drP0u1F0GzgE34qVWDH5O1LPn+eW/o9z/uwZFvz3c+p3vIOaLVrz +98oodixfROdnXqFY8ZIsHfd/HN2zk/6ff4t4eRE971du7GIMG9LT0/jlw8HUbNmG69t34ui+3Swd +8xVdBw7Gt2Il/po3izMJx2jdN8sc1t4sZtP8WZw5cZyb+z6a4/u4f8MaQurWp3ipUuxYvphti3+n +x5CPKObtzbYlv7N/w1raPvwE5YIqcjLuMKXL+1HSpww/vPwUIfXqc3PfR7l4LoVf3h3E77//nqMp +7TvvvMPevXupV68ep06dYtiwYbz++usEBASwdetWatasyZAhQ1iyZAm9e/dm0aJF1KtXj1deeYVN +mzaxbNkyTpw4wXXXXceECRO46667GDVqFK+++irffPMNjz76KL/++iuvvvoqc+bMoUaNGgwbNoy5 +c+dmevn18vJiz549mZM/G3bu3Em9evXYt2/fJRsOIyMjWbhwIatWrWLAgAFUqVKF9957D4DRo0cz +Z84cfvvtN6Kjo7n99tuZO3cuN910E5MnT2bIkCHs2rWL4sWLExERgb+/P3PmzKFChQqULFnykj7y +8vJi7969REREALBs2TL69euXyRgjIiIIDg5m1qxZpKam0qhRI44dO8amTZuoU6cOXbp0oV27dgwe +PNi26kkA+qjq7yLSEfgRs0DIO/5FYRQy1gcs1uF6EvAHxvprlHV8Wdh27Oq/F/jWOt+PcZU/GWOR +VgEYgFnNqOfwHJ7j2jk+/vjjHBXHkZGR2q9fP42JidGwsDBNTU3VatWq6aFDh7Rv3776zjvvqKrq +gAED9PXXX88sd/bsWS1RooQePHhQJ06cqC1btsxWb2hoaKaivkuXLjpu3LjMtPT0dPXx8dGYmBhV +da6oX7lypXp5eemFCxcuSfv666+1Vq1aqqq6aNEirV69embazTffrJMnT1ZV1aeeekqHDBmSrWzt +2rV1+fLlqmqMcb7//vsc+8YGR/qioqK0atWqmdfh4eE6ZcqUzOt77703r/9jgmb/7s4H+qkL32h3 +BIpWh+smwM2q+rSqPmcdz7uhHRsOA/YroyBgCzAHyHSYo6oCvA5MV1WxHcA0YJB1HgU85pAeBQyw +u34fGG93fSuw2+76VYy12inrSAc6WGmRwCTrPByjBypmV/ZJYDtQzu5eCnAawyRPWnWmAFWAr4FP +HOg9AnS0v5fTgWG43wOHcqHnENDW7noy8JZ1vgO4wy6tlFW+CsZk3JGu1cCD1vkBexqdtJ3Z7+7s +A+uZ33OSpkB1u3xHMW6DytrlqWjlO2l3nAaSrPR2mImVOD6r/f/v+NyYvV5rHegZBnwLVLLa9LFL +ux3YZZ3/7fBf1HbsT7s0p+3kRGMO5fNKz238pwDX59X31nWmQ0ZnqFq1KtWrV2fQoEHUqlXrEseM +jo4cy5QpQ0BAAIcPHyYuLi6bOMhWnw0HDx7khRdeICAggICAACpUqICI5Klst3ktthez2XDkyJHM +9Pbt23Pu3DnWrVvHwYMH2bRpE3fffTcAs2fP5qOPPsps29/fn0OHDmVzIhkaGgrkbPTiKhwdYIL5 +Tlr9/xiw0DofDfQSkUTrOInx0+jSDl6X9qmIyBkuZR5g3KU4+vrYijEDvrSX3YN1QA0RsY2e9sDn +mH0uG8m+pyYOs7KxRzVMHBYbcnoulyAibTAvVXs1RgSISCIuuJGxyr6DYcD2b1MM8KiqXhK5SESO +AHXsrn0wzCJPqGqiiAwH+ouIvytlHBAHhNldh2Hc7By10m5wyF8Vw6Qg/318WfrABXwL+APzROR2 +VU0BTpD1cXTnmI4ju3NUMGNzp9VmKqaPbdGdwshynnrEoaz9/5KfdgoFEWlN7uM/FqiOmTi5Bf37 +92fAgAF8b/PGaocqVapw0C5QWHJyMgkJCYSEhBAcHHyJjiQ2NmsfddWqVXn77bd54IEH8kVP7dq1 +CQ0N5aeffsoWuldV+fnnn7nnnnsAI57q1asXU6ZMoVKlSnTt2pUyZYw42sfHh9atW+fKLFxRxI8b +N46pU6dy/PhxvL29uXjxImfPnqWsY8iEvBELTFTVJ/JbEFxX1JdTVd8cjnKq6g0gIrNFZBYQCGwX +kd9FZJbtKAhxTmhJB57FKOhDgaWqukNV92Lkfvarot+AmiJyv4gUE5HeQF1gtmO9BURZzMufICIl +RGQIxiLOGQRARKpatPa36LbHN8CHIlLNyhskIndZaTOAriLSyvJS8C65MDARGSYi11vPXg7jX22P +qtrizObHZGQq8JKIhFubVT/A6LEygOnAnSLSXkS8RWQgcJ6s2DfxgEN8zVzbdlsfWPAWkZJ2h1MP +D6r6HOaDO1tESqmqAmOAL0QkyKInRERy9qORN2y0rgFSROQ1q8/aAV2BqVaf/gh8ICJlrQnUSxjR +Mpj+ft6iwx+zIncGp+0UkH57lCP38f8d8J6I1AAQkfoFnNBkonfv3ixYsICePXtekvbAAw8wfvx4 +Nm/ezIULFxg0aBAtWrSgWrVq3HnnnWzfvp1ffvmF9PR0Ro4cSbxdWOMnn3ySDz/8MFOZfvr0aWbM +mOESTZ9++invv/8+06ZN48KFC8THxzNgwADOnDnDiy++mI2+H3/8kSlTpvCgnYeBWrVqsXHjxgI5 +kbShcuXK1K5dm/Xr15OUlMSkSZNIS0vLZuCRD0wGuolIJxHxEpFSItJWRJy7EbeDO8RfNgzHrBIi +gbsxuo7P7A63QY2FWG0MR7V/Od4FfLBmxqqaiHmBBmJmfwOBO+0+qjnNoPMzq/7dOnZh9DspZHcj +49OkKN0AACAASURBVKzuDhixygwRSRKRMyJiM/cYidmXs0BETmP0U82s59kOPIN55jiMMi27H+3s +8ME4/TyJEetUxfhPc6THletxmI/acmCv9azPW3TtAvoCXwHHgTuBbqqaZpUdBgy2ltIv51C347U7 ++wDMRzfF7ljshAYb/mPV+YuIlMBsut0DrBaRU5gJTS0nZfMaP7axmQp0A+7AjM2vMDJr2/b75y1a +92H6fLKqjrfSxmDG3SZgPfCz08bybscV9LbGqW2sJolIIHmP/88xDND2P35HlmSjQBKCUqVK0aFD +h0xltf0MvmPHjrz33nvcc889hISEsH//fqZNmwaQ6bzx9ddfJzAwkL1799K6devMsnfffTdvvPEG +999/P+XLl6dBgwbMnz8/M11VGTNmTI7hhB9//HEiIiL49NNPCQwM5IYbbmDv3r2ULFmS6tWrZ4YT +btasGWXKlCE2NpahQ4dmhhMuW7Ysd955Z6YTyWrVqtGnTx9CQkJo3bo1qbYYObkgMjKS119/nerV +qzNjxoxM02Ob+3vHlU5uKx9VPQR0BwZh3ueDmG+na/xC3aRAd8cBjMWIUzbnkudLjN+xv4BGOaTf +jhEZ7MJu9/3VdOT0nBixywLMLPl3wM8u7U3rmXcAna4C+kMxxhDbMPqs56+VZ8CEul4DRFv0f3it +0O7wHF4Yca8tBPc1Qz9G77TJ+g/WWvf0asa1Ek54ypQp6uvrq15eXvqgLe64E2AY+2nMBMZt48ed +A2Wl9XsGs3fFdpzBKDVdqaM1xqlkjkwF6ALMtc6bA6sd0r0wM8owjP+xv4A67npGN/bVJc+J2fD5 +mnX+OjDMOq9nvXzeGEXvHixT8CKkvzIWQ8eIAHdi9BzXxDNgFOBgFOarMUrIa4J2u2d4CSOmsDGV +a4Z+zOrL3+Ge5glwz1EA5GQ99fTTT2dejxo1SntYbmnee+897d27d2ZaRkaGhoaG6rJly3T58uUa +EhKSre5WrVplMhVXLMFciVG/Z88ebdSokY4YMcJpHoup2HRubhs/bhN/qWpr69dR/1JOVZ1sQb6k +jpUYUY0zdAcmWnnXAH4iYu+NrhnGMuugmmX/NKvMVQUnz9kdsAVOmIARIYIRV01T1TRVPYCZMTS7 +EnQ6g6rGq+pf1vlZzAwmlGvkGdQo4MGsWrww/8U1QTuAiIRixFnf2d2+ZujH6JXy/+1xF1spINwR +TjguLi7PcMKfffZZrpZgrqB69eq88cYbl3ghyAF7VTUWN44ftzEVEQnI7XBTM3m5vndMP0QurvGv +MlRUN7j7v9KQyxCy4HLDUj5GYwwIotToaa4J2i2MwFhd2X8hryX6FVgoIutExKn38msVjlZokBVO +ODg4OMdwwjbYwgknJiaSmJjIyZMnOXv2LL179843HampqfjkHd11ivXrtvHjTkX9BozScEMOx3o3 +tvNvQcGnVFcI4hCygLwV/1cFVDVDVW/ErK7aWBZR1wTtInIncNRaKeZm9XZV0m/hZlVtjFltPWOZ +1/9jUFThhMeOHcvx48cB48Zm2LBh2aJKOsFP1q/7xn9usrGiODD6EGc6la+B3nbXf2O5yLeuWwDz +rXP1HJ7Dc3gOz1GgI9/hRtyuU7FBDPqKyGDrupqI5EeGKzifgc0C+lv1tgBO2ZZsFrJtjFRVtH9/ +9Nln0YyMrAe/cAH180Pj46lfX4mOLnpm6ngMHTr0stV97JgSGOhwf9QotGlTNDEx7zqio0moEcrD +vzx8xWm/mvs+/ItwdifsvjQtPR297jp0/vyrmv6r5bgm6X//fbRhQ3THjpzpnzQJDQ1F168velrz +OCw4hhspISIRQA1gLbkgvzHqXcFojMuIDsB7GOuvn4GmuRUCEJEpGLcXFUQkBhgKlABUVb9V1d9E +5A4R2QMkA4/Yl1fVdBGxbYyEo0fh119NKFV7u+wSJaB1a/jjD5KSehQ4Tv21Cm9vSEuzu3HhArz3 +nolB7O/C3rSgIEqdTKKYXBrn5N+M8PLh7D+5nxoB/8/eecdHUW0P/Ht30wOhhVAEErqAIEUQlEhT +FFQQsaKoiP4URbCgD0TF+hTEh6IPFcQuPvHJUxDBQkdEkd57TSiBBNJIsuX8/rizyybZlmRTIPv9 +fOazu3PrzM7MmXvPuec0y5+wfLkOcuMh7niQC4Bnn9UhlRMToWNHHarZbNwfixfDk0/CkiXQpk35 +9tN/nOFGlFKz0V4RLMAj4iJ53FEaQuVyEeloKEIRkTRjAZlPRGSIH3lG+khfCLRUSgk//AD9++ug +XAVp0gQOHCA9Xd/vlYlCQuXHH/XFfklBTyseiI0l/HQm5sAPdM9rGldvzIHTBwonLF+u46tUoJgX +QQKMUvDww/rFoVcvuPJKePppOH0axo6Fb789nwQK4hJuREReB173t2xpCBWLUsqMnpfDcG1h916k +lPj9dx2w3R3x8ciBg6Snu5c55U1PT/0OACEh+kXKybx5YPgo8ovwcKwRYVQ56z5gUGn2vSwobv8T +qidw8Mw5qx+r3UqIKQT+/BMeKDsjp8p6/isETZrQ85NP4MgR+PhjLWx++gk6+5youWAojVfNqWjX +IHFKqdeAlfgp5ZRS1ymldiildimlCvkzUkrVUkotUEptUEptVkrd57XCP/+Eyy93nxYfj23/QUJD +dZC6ikZp3lhmc4GRyrJlcPXVRaojp3o01dLz3Kad1w8Fit//OtF1OJF1AoD9afvpNL2TTti9Gy6+ +2EvJwFJZz39FoWfv3nDPPTB/vp4FqEQCBUphpCIiXyml1qLDACvgJhHxGSxZKWVC+yXqg17luUYp +9YOI7HDJNhLYICL9DN9DO5VSX8o5H1P52b8fWrVy32C9etiTj1W6qS8oMP11/Lgeorfw5MrKPdbQ +EMLKZ/xZYakdXdspVPam7eVY5jGw23WI4UaNfJSu3CQkJBRa2xGkdImPj+fAgQMBrzfgQkUpNVxE +ZnLOZTdKqTdEZKyPos7V8EYZx2p4V6FyDGhrfK8KnPIoUAAaNNBKeXdERyOZ2ZVSqJiM8andDqZ1 +66BTp3M7/cRuUoTYgzoCV+Ki45xCJSk9iay8LC20Y2IgOtpH6crNwYMH8aH/DRJgvDmVLAmlMf01 +WCl1l+OHUurf6EBavvBnNfwMoI1SKhntkG601xqbN/ecFh2NZGVVSH1KWeDUq2zbViwFot2kCCmS +5/wLn7joOFKy9eKzI+lHyLZkYz94IDhKCVKpKA1F/WBgrlLKjvYYfFpEhvso4y/jgI0i0ksp1RTt +6qGd5A9ydY6EBM81RUWhzlbOkQqc06uEbt9erDlfu0lhDk5/5aN21LnpryPpRxCEvGPJRMTF+SgZ +JMiFQ8CESgH/Xg8A3wO/Ay8ppWqKjm3ijYJhghtwLtKdgyvRwaEQkb1Kqf1o77hu3cC8uHMnvPgi +oJV/+RSAUVGYcrKJLBi3spLg1Kvs3g133eUzf0HsJkWIBEcqrlSPqM5Zy1lyrbkcydD+nfJOHiOi +ZqBc3wUJEniWLl3K0qVLA1ZfIEcqa9FmxMrl83pjEwpH/iuI62r4o8AdQMHYntvRMeJ/N7wTt0C7 +0XbLi3ffDcM9DJKiozHnZmPE+ql0OIXKoUPg4iXVX4JCpTBKKWpH1yYlO4Uj6YZQOXFML4oLEsQD +w4YNo2HDhrz88ss+8zZu3JiZM2fSu3fvgLVf8IX7pZdeKlF9gXR931hEmhT4dGy+BAqSP0zwVrS7 +5e1KqYeUUv9nZHsduEwptRH4Fe3/3/MIqL6X6JehoWC3ExXqO6rahUhICNjybJCcDBcV3WltUKi4 +p3ZUbVKytFCpHVUb28kUCI5UgpQBS5cupXfv3lSvXp0mTXw+ckuNQE5/9RaRxUopt6voRGSOrzoc +q+EL7PvQ5ftJdGhU//AmVJTCGh5NFVM2UM3vKi8UzGawJx/TD7xiDNfsJjAHFfWFiIuO49CZQ6Tn +ptO+bntkSwo08dNTQZAgJSA6Oprhw4czZMgQ/vnPf5ZbPwJp/dXD+LzRzXZDANvxHx8KUmtYlCFU +Kh8hIZRo/YRdBU2K3VE7ujZrktfQMKYhVcKqQGpqcKRyAdC4cWMmT57sNkZ9tWrV6Nu3L2fOnHHm +nzt3Lpdccgk1a9Z0xqh3sH79ejp16uSMUZ+Tk5OvrR9//JEOHTpQo0YNunfvzubNm/3qY+fOnbnr +rrto3LhxYA66mARy+muC8Tms4AbM96cOXyvqjTw9lVLrlVJblFJLvFYYG+s12RIaRbSqxELlcAmE +iknH4g2Sn7ioOJYfXE7L2JZUCauCOpPun5POIBWeOXPmsHjxYnbu3Mm8efPo168fb7zxBikpKdhs +NqZOnQrArl27GDJkCFOnTiUlJYV+/fpx4403YrVasVgsDBo0iHvvvZfU1FRuvfVWvvvuO2cb69ev +Z/jw4cyYMYPU1FQeeughBgwYgMVy/kzTl5VHwCm+MrisqL8WaAPcqZS6uECeasC/gRtE5BLgVq+V ++vC/YgmNporyHfzmQiQkBMxHSjZSCZoUF6Z17dasOLSClrVaEh0ajcrMrJjO5c5DlArMVlwee+wx +YmNjqVevHomJiXTt2pV27doRFhbGoEGDWL9+PQCzZ8/mhhtuoHfv3pjNZsaMGUNOTg6rVq1i9erV +WK1WRo0ahdlsZvDgwXR2MemfMWMGDz/8MJdddhlKKYYOHUp4eDirV68u6ekrM8pKqPjzV/oTX34I +8J2IJIFTx1Js8kKjiKLyjlRMSYehYcNilbeZCE5/ueHyBtrXXNcGXakSVgVT1lmoUqWce3VhIBKY +rbicTzHqy5OyEir+/JX+rKhvAdRUSi0x4lsPLUmn8syRRHK2JFWct5jNYE4+rF3ZFAObSWEOetUo +RJvabfjsps+4tfWtRIdGY84+G3TRUsmoKDHqy4tAWn9txr3wUEAdN/uLQwjQER0ALBr4Qyn1h4js +cZf5RWPhI7hZ/AhYVRjhpvNnrjKQhISA+eQxqFu3WOXtJjAHTYoLYTaZuefSewCoElaFkOyc4Eil +knHbbbcxceJElixZQmJiIm+//bYzRr2IOGPUjxgxgrlz5/LXX3851508+OCD3HzzzfTp04cuXbqQ +lZXFsmXL6NGjB9E+Xk5EhLy8PPLy8rDb7eTm5mIymQj1oQaoyIsfS2rh5c+K+iPASRHJAXKUUsuB +SwGfQsUdFhVGhMm9+/YLnZAQCDl+vNhCxaaCinpfRIdFE3Y2LyhULgAKOl/05oyxRYsWfPnll4wc +OZLk5GTat2/PvHnzCAnRj9s5c+bwwAMP8Nxzz9G/f38GDx7sLNupUydmzJjByJEj2bNnD5GRkXTv +3p0ePXr4bHf58uX06tXLmScqKooePXqwePFir8cW6MWPqqJ4BjUCe+1Eu74/io6DfKer23xDcf8u +2qdYOPAncLuIbHNTn6+ol2xqPpiDVw7hxk8He813IXL55bBqUzTmE8eKpUhe070J6TdcQ5+xH/rO +XEl59493eLT7E5jyLOdCywZxi1Iq6KW4jPF0zo39xZ6GKA2HksWiQHx5EzDTsaKeczHqdyilfgY2 +ATZgujuB4i95KowwKudIpQqZWmtZzLdou5KgTsUH1SUcS6iZ8KBACVKJqDBCBXyvqDd+TwYmB6K9 +PMIIU5VTqNS2H8dSow7mYtpY2oJein0SYzFxNsJMJXUvF6SSUlbWXxUSC5V3pFLbfpzcGsW3n7Ap +MNmDQxVvVLOaORteqW+xIJWQsrD+AkBE2vlRx3XA25yb/proIV9nYBVan+LTp5gncgkjSiqnUIm1 +HiO3egmEiglCgzLFK1VyISssKFSCVC5Kw/rrUePzC+PTr2Adfsaod+R7A/i5pB3Ok8o7UqllPU5O +9eJZfoFh/RWc/vJKFQtkBue+glQyAiZUXGLLXyMiHVySxiql1gGBiFEP8BjwX6Do4QoLkEM4oZV0 +pFLTcpycmJJMfwUV9b6IzhVOBodzQSoZpTE2V0qpK11+XOFnOz5X1Cul6gM3icj7+Of6xSu59rBK +LVSySyRUwBR8XnolMsdGRmhwOBekclEa1l/DgY8N548Ap4H7A1T324Cr92KvgsXXivpcCSPUnt/t +dGUhyp5BXnhMsctbTcHpL19E5to4E2Ir724ECeKViryiHgARWQtc6hAqInLGRxEH/qyovwz4j9JL +RmOBfkopi4jMdVehrxX1Z21hhEq6n927sAiTPCymsGKXtynBFBQqXgnPsXA6xFre3QhSwQmGE/aB +UqqOUmomOhzwGaVUa6WUh0Dx+XDGqFdKhaFj1OcTFkaY4iYi0hitV3nEk0DxhyxL5VXUh0geFlV8 +LbI9aFLsk5DsHLLCFHm2ynmNBSlbJk+eTNu2bYmJiaFp06ZMnhyQ5XxFpjR0Kp+iLbMcsXx3AY/7 +KuRnjPp8RUra0SxrGKGVVKiEk0u2tfgjFasCc9Cthntyc7W3gsxMciPDyMqrnDF7gpQ9X3zxBadP +n2bBggW89957zJ49u8z7UBpCJVZEZgN2ABGxol2q+EREFopISxFpLiJvGPs+FJHpbvLeX5I1KgBZ +eWGE2iunUKkelceuAyWd/goKlUKkpkJEBEyfDpmZWKPCyczLLO9eBSkh50M44TFjxtC+fXtMJhMt +WrRg4MCB/P7774E5AUWgNIRKllKqFsZIQinVFfBLr+IrnLBSaohSaqOxrVRKtS1JRzPzwgippNZf +4WFprN1X/Ied1SRBRb07Nm3Sn6tWGUIlgixLcKRyIXC+hRNesWIFbdq0Cdjx+0tpWH89hdaFNFVK +/Q7UxlfYX/xe/LgPuMrQ1VwHzAC6FrejmXlhhFTSkUrG2UPsi1lMRsZNxYp2aw2OVNyzeTNcdhms +Xw9t2mCPigyOVAKEeikw8XtkQvGuW0c4YYDExETq1KlDu3baUcigQYOcLuZdwwmDHkFMnTqVVatW +oZRyhhMGvIYTBhg6dCivvfYaq1evJjEx0e++TpgwARFh2LBhxTrWklAq1l9KqR5ox5AK2GmEB/aF +z8WPIuIaqHk1hSND+o3FAjkShslaOYWKyWolIv4wa9ZAcQxJrMF1Ku7ZvRtuuglefRUaNMBaJzqo +UwkQxRUGgSIQ4YRNJpPPcMKff/457777LqADb1ksliKFE37vvff48ssvWblypc8AXaVBaVh/7QUe +EJGtIrJFRCxKqR/9KOpPOGFXHgAWeKvQmx45OxtM4WGo3Fw/unbhYbZYsdc5xOrVvvO6I6hT8UBy +MjRvrkMK7N6NPaYqGXkZ5d2rIGVIeYYT/vjjj5k0aRKLFy+mXr16JT+YYlAaOhUL0Esp9YlhGgwl +GFG4QynVCxhG/oWQhTh82HNadjbYwyPhbCWNUW+xcTryAH/8UbzyViWYgtZfhUlOhvr1IT4e9u4l +rGZtTmafLO9eBSlDbrvtNubPn8+SJUuwWq1MnjzZGU64W7duznDCVquVOXPm8NdffznLPvjgg3zw +wQfOfVlZWfz0009kZfke7X711VeMHz+eX3/9Nd/op6wpDZ1KtojcrpR6BlihlLoV/8x//Vn8iFKq +HTAduE5E0rxV+I9/vEhLIzpLwQU+2dlgjYqBjMr5FhlitXGKVPb/nYrdXhNTEV8vrEow2YJCpRCu +QmXtWiJr1eVE1ony7lWQEnI+hBN+/vnnSU1NpXPnzogISinuvvtupk2b5vXYAr2iHhEJ6Aasd/l+ +NVoncsKPcmZ0rPl4IAzYALQqkKcRsBvo6kd98vLL4pGNG0VubL5dpEULz5kuYE5WNUvCuEhpeMUq +Wb++6OUnD6orxx8aGviOnc/Y7SLh4SLZ2SJPPCEC8vaCF2XMz2PKu2cVHv0oClKWeDrnxv5iy4DS +mP56wUVg/QZci7bq8or4t/jxeaAmME0ptV4p9ZeH6gDYuNFzWnY22KJjIL1yumkJtQoX17+UhC6b +Kc5LitUU1KkUIjUVoqIgMlKPVJSiWlxDTmQHRypBKg+BDNJ1sWjz3ySlVMcCyf4o6n2GExaRB4EH +/e3T+o029ACoMCdOQERcDOyunNNfoVY7XRKu5HfbWhYvgsd9+jzITx42zEGhkh/H1BdooVK1KnFV +g9NfQSoXgdSpPIV+4L/lJk2AwHlA85Pks3tJT29BjBtnvAcPQp0m0fDbWbDZwOxe+FyohNrgyma9 ++e7gOI4sh7Q0qFHD//Lp1iwizMVfkX9BUkCo5EVV49brLqLOiEPeywUJcgERsOkvYxSBiPRys/kl +UHytqDfyTFVK7VZKbVBKtfdWX9Oeq/j1V/dpBw9CfILSpp8VUFnvSXH22WefFWkRlFtsNkwCDUzx +bH1sE4n9k/jmG/+LW+1Wsu25RODeBj5QSr9Zs2Zx3XXXOX+bTCb27dtX5HqGDRvGCy/oWdmVK1fS +qlUrZ1rjxo2di9YcFLf/9iPJ/Lq1Po8+CtLuUt7v8x2RWS05mL6PFya8wNChQ4tV76pVq2jRogUx +MTHMnevbf2ogzn9ArrMScvDgQUwmE3a7b9cNFaG/RWXEiBG89tpr5d2NgBMwoaKUutnb5kd5x4r6 +a4E2wJ1KqYsL5OkHNBWR5sBDwAfe6qzabjGffeY+7cABPUNBjHsLsJUrV3LllVdSvXp1YmNjSUxM +ZO3atb4OI2AsXbrU403lzQLEH2w5Z8kzQVRYNEopLrr6v0ybpgdsrrh74AKcyj5FeFgUysPNXtSH +midhMWTIEBYuXOj8XdLjBujevTvbt2/3mqe4D+XDqw6zK7M+S5fCjJkmvtjRme++icCUEc+W/SeL +3f8XXniBUaNGkZ6ezoABAwqlJyQkEBUVRUxMDFWrVuXaa691rtguCUXpb0JCAhEREaSmpubb36FD +B0wmU761GKXVB2958/LyGDduHPHx8URHR9OyZcsy9eLrTui9//77jB8/vsz6UFYEUlF/o5ftBi/l +HDhX1Itege9YUe/KQOBzABH5E6imlPIYvnCHfR5/bTnJb7/l32+3w8qV0KULWqicye+aLCMjgxtv +vJHRo0eTlpZGUlISEyZMIDy8bAOOi2EWKAFeD3I2+wy5IfomVCgWnplCrbpZ/MPrqp9zpGSnEBVR +tbAUKib+PjgCfR4CTfqy9cRdcynffQfPPQdbt0LnztC1bk+WbNqJHy/cbjl48CCtW7f2mK6UYv78 ++aSnp5ORkcG4ceOcfqjKCqUUjRs35uuvv3bu27JlC2fPng3Iy0BJueWWW1iyZAkLFy4kIyODL774 +gunTpzN69OiAt2Vzc1847uXKQCBj1JfUyYy7FfVdfORJMvYdd1fh/R3u5+fHBjJo/FNcN68RnS6N +JDoKtu+AKo0VOVUhvVlDcr6aQeaAa53lNu/YjdisdGoQzb4/fgIgIUog/QB7Vh1gzk+L+Gbuz7Rr +3YI583+jRvUY3hg/mgOHk5n60SwsVitPj7iXm67Ts36ZWdm8POVDVvy5nsjIcG694RoeGnoLoC+2 +Dz7/L/+d/yu5eRYSu3Rg/OMPkHJwO1d01T6BYqpWQSnFjLeeJ+lQMlmnUxh250DmzF9MTNVoxj8+ +nO6Xd3C2Nem9z1j553pMJhMDr+vBI/ffhlIKu93OlA++4ocFS6iRB0/Pnw/ANU2uYc2gHsz+aTTL +BjWj3zWRNKhvJivHwu9bDpEZoT3lKJOgFGxJXcemvXaabpxN2nf/o1PrTrz8yAvE1YwDYMOydTRt +0ISTp09xY4/r2X1oDzf1HsgtV5+zxzcO3nkO9v+2B1vdXAyDRgD+t/h7vv3tO7567QtnkX0Ld5FX +5yxrt6/j6XeeYdKo1+nc+jL2HtnHax+/wdZ926hVrSaP3fYo13btC8Dp/WlEZoSz7ZvN/L1tDf94 +71kWT/sFAEtWHgs/ns+IYSM4dvIoV156JQ3rNGDrrI0gwn+XzOHjHz8lPSuDDi3b8/x9zxJXPRYR +2LB7IxO/mszBY4eIr9uIN/Yf5ZJ33uLii+HTTw/w8MP3Ua/eelq3b0N66AZ+WN6BFz5cQ6P64dSo +FkpoiAmlQCn4+YfZfPflTLIyztD60k6MHPsiNWvVZvjgvhw/mkT//tdjMpv55tfVhITkn3Y8m2th +9bZDnI3aCcDuIyf56U/9/WjSYd59/Xn2796BMpno0OVKHnlmAlHRVQA4eeIY0//1Gls3rkVE6HHN +9Tz01HNs3HuUU+nZDL57OL/M/Y4qMTE8/NQLdOrmfoopO9dC4rU38c6/P6RRx6sB+OS9KXTp1Z/d +u9/ht7V7iT2STXZWJh/+6xXWr15JeGQk19w4mFvveRgAu93OM888w2effUa1atV48skn87WRnp7O +k08+yU8//YTZbOa+++7j5Zdf9vmwXrRoEb/99ht79uyhvqHz6tKlC19++SVXXHEFo0eP5u+//+bN +N99kzZo1znJTpkxh2bJlfP/99+Tl5fHss8/y7bffkpeXx6BBg5gyZQrh4eEsW7aMu+++m8cee4wp +U6bQt29fPnOZItmxYwcjRozAarVStWpVQkNDSU1NzRecy1HHqFGjePPNNwkNDeXf//434eHhjB49 +mtTUVMaMGcPYsWOd98zEiRP56KOPOHPmDH369OGDDz6gevXqXs9FmVASe2RPG3A98AzavPgF4AU/ +ygwGprv8vhuYWiDPPOAKl9+/AR091CfBLbgFt/Nne//996VVq1aSlJQkaWlp0qtXLzGZTGKz2URE +5KabbpIRI0bI2bNnJSUlRS6//HKZPn26iIh8+umnkpiY6HbdxdixY6Vnz55u0+Lj42X69OmSnZ0t +MTExsmfPHmda586dZfbs2SIi8vjjj8vAgQPl9OnTkpmZKQMGDJBnn31WRESWLl0qISEhMm7cOMnL +y5OcnJxC7bjr33333SfPP/98vjpeffVVsVqtMmPGDImNjZUhQ4ZIVlaWbN26VSIjI+XAgQMiIvL2 +229Lt27dJDk5WfLy8uThhx+WO++80+0xesLbfyElef57TYSbvW0eynyAnqI6DEwANgMzfXZEhFJ/ +4gAAIABJREFUexte6PJ7LPAPN3Xf7vJ7B1CnJCfAS39aAh8Dh4A84AegtpF2L9pRpiPvJeiYMbEu ++04C7dBTjLlAS5e0/wMWyznB+LBLWgujPROQYNRrckm/F9jl8jsSHbsmzthygHCX9DuARcb3RcD/ +uaRdU7D+AudgP9Dbzf6PgDdcfkcbx9gIGAr8XiD/IeB+L+faDjRxs/9eYHmBfGONfrVy2X8bsMzN +tfK88f0T4GXjew/gUIFjvNPl90Rgmh/HeTewukCbq4B7gIbGfxjpkvYV8LmH43fXTh7QyNv/UOAY +0oFUIM34HO4h70BgrfG9G3qUX+j/93Cd2YA4b9cK8CzwT7Ru9Ge0Tb/dOGce7wVAevfuLR9++KE4 ++OWXX5xC5dixYxIeHp7vgf31119Lr169RMS7UHnggQc8PnC7du0q//znP0VE5O6775ZXXnlFRER2 +7dolMTExzvaio6Nl3759znKrVq2Sxo0bi4gWCOHh4ZKXl+e2DU/9cwiV++67T+655x6JiooSu90u +IiIZGRmilJI1a9Y483fq1Eni4uJk0aJF0qpVK1m8eLEzLTk5WUJDQ50C2B8oofDwtPma/rrR+IwD +rjD+fIBexg3kLkjWFSLSTim1SUReUkq9hQ/HjwbOcMLAUfTD8M4CeeYCjwLfGHFaTouI26mvkiIi +O4H7AZRSLdAPhbeBu4wsru2eNcqcLLCvChCLnmZ01VQe5Jw/tPrGb9e0EKAO+q3BHcdc+nnWGP5X +AWoBocBRY58yNkfb9ck/fZjf653/1AecVgsikqWUSkUfU8E2QE9lAqCU2oL2miBAPxEpahSh0eiH +s6u2PR7oavQB9DGbMfRvfuD6X2YDDk98vo6z4Pk76JKWJiJnC6Q18NC+u3ZOGXX5q+EeKCJLCu5U +SsUB7wCJ6GvEjBY6GP05KCKetD0FrzNl1OFt4c2XwHKgMYXPv9d7ITk5mYYNGzoTXP1XHTp0CIvF +4nSS6HiANWrk6tnJPbGxsezZs8dt2tGjR53u7IcMGcKYMWN47rnnmDVrFjfddBPh4eGkpKSQnZ1N +p06dnOXsdrtDKAJQu3btEnsErlWrlnMqLzIyEoC4uDhnemRkpNNo5+DBgwwaNAiT4V9JRJx6rbS0 +NKKioujfvz9Tp06lSpUqJepXUfGqqBeRYaJ1JaFAaxEZLCKD0dZZns6g40bKVkrVRzuY9OkuU/xY +US8iPwH7lVJ7gA+BR3weYQAQkV3oMMmXFKP4SfQ5iHfZF885v2bJbtIs6AedJ6HiicPokUotEakp +IjVEpLqItDPSj6Lfol3bKg75+qyUikYLtCQ3bYDLw1RELhGRqiISUwyBIujYPIOUUq7mTYeBpcYx +O447RkRGFrH+gng7zmT0SNKVRpw7BzWUUpEF0orazhGPJQrjSbHwT/RIoY2IVEePsBx5DwONDMvL +gCAih9Cjln4Ufun0ei/Uq1ePwy5eYF09/TZs2JCIiAhOnTrl9N57+vRpNjmConnh6quv5s8//yQp +Kb8rwT///JMjR444455cc801pKSksHHjRv7zn/8wZMgQQAulqKgotm7d6vQefPr06XyRHn3pdQKt +pG/UqBELFizI5814x44dbNiwgfT0dHbs2MHBgwfLxWTZ34upoYgcdfl9HM83yY9KqerAm8A64ADw +tYe8+RA/wgmLyEgRaSYil4rIOj/7XySUUi2VUk8qpS4yfjdEj5q8+fR1e9UYb4GzgdeUUlWMkdgT +gEP7/DXwhFIqQSlVBXgNLVDtQAr6gdDUn36LyDG0UJ6ilKqqNE2UUlcZWWYDo5RSFymlauDDy7NB +mFIq3GUzG30eppRqp5QKRz+4VhsPlPnAJUqpAUops1JqJHrU5YvwAu24uzYV+gHcxziOh439PwIt +lFJ3K6VClFKhSqnLlFIt3dRRFLwd509Ac6XUHcZx3g60AuYZ6X8DLxl96c65UX9R2vHiZ9tvqgKZ +QIZxPT/tkvYXWgC+oZSKMs77FQFo8370dF0+F+C+7oXbbruNqVOnkpSURFpaGhMnTnSWrVu3Ln37 +9uWJJ54gIyMDEWHfvn0sX77cZ2f69OlDnz59GDx4MNu2bcNut7N69WqGDh3KI488QtOm+vYKCQnh +1ltv5emnnyYtLY1rrrkG0ALBbDbTr18/WrduTUxMDHfeeSezZ8+mf//+9O/fn5SUFK/hhPPy8jhy +5AgWi8UZTvirr77iu+++cxtOuFOnTogIgwcPdhtO+KGHHuLZZ591mmqnpKSwefNmahgrmG02GyaT +qXzc3/szR4ZeP/IzcJ+xLQDe9aNcOFCtNObtvLR5HVrXsosCOpki1FEf+Ab9ppiBfqObBlSRc/PN +rnP9TQFbgToOYRgVANXRN84J9HD/b7Rg3oR+UD5ntJGLDr28yHHegBfRDwUb+g3wTde2jTw2DJ0E ++iEyzagvDT2tcpuRZkZ7PDgJ7AVG4FunYjM2u/H5MnrkscPorxWtN6sP1EALtcNAltH+e8DvaBPx +3cB2oK+b/hds534359n1OBOM/t1v/G6OFi4n0ML4N6CdkeaqU7na6Pd69Ig4Da0LcPT9JPrN2XH+ +/w84ZbSdAdzh0p8rjP8yDT19280lLQE9DZSOvnem4kGn4tLOHqP9uUB9l7R9FNCpoF8I1xl59xvn +22r00wr8YORrjb6ObehZhA/Ir1NqAPzPaPcE8La7a7zg+XfT/0J9dLnmbJzTD1VHX88WtN7osLFf +rFarPPnkk1KrVi1p0qSJTJs2LZ+iPj09XUaMGCENGjSQ6tWrS8eOHeWbb74REe86FRGR3NxcGTt2 +rDRs2FCioqKkefPmMmnSpEL5VqxYISaTSR577LF8++Pj4+Wiiy6ShIQEiYmJEbPZLA0aNJCNGzfK +r7/+KuHh4fKy4cF2586dEh0dLYsWLRKr1SqTJk2Spk2byvXXXy81a9YUk8kk77zzjtx7771yyy23 +SGhoqNxzzz3SsGFDWbduncTFxcnq1avFZDLJv/71L0lISJC8vDxJTEyU2NhYWbRokdjtdpkyZYq0 +bNlSYmJipFmzZjJ+/HiZNWuWxMTEiMlkkiFDhng8H6JPuqCfN6Ncrv+dxvXqfG4D4zzdu26vBV8Z +XCoeBEwxtkFe8pmBAUZHn3RsXvLPxHjAuuwr1gEaN5rD03Eo2tPxxf4eY1ltQHegfYFjngg8Y3z/ +B4bi1ngorEfPRScYx6fKuf91gfbG9yrG/3Sxu2NAC83jxn9WIY4BiHK5VlcDV55P59/o1xNo/cXc +8/D62QfUKLBPfAKB2YpBQkKCzJo1y/l78ODB8sgjjzh/v/vuuzJo0CAREXnllVfk9ttvd6bZ7XZp +0KCBLFu2TJYvXy4XXXRRvrqvuOIKpxXYiBEj5IUXXsiX3rJlS1m+fLmzH4sWLfLZ3z179kj79u1l +ypQpHvMYQiUZPV0dsOunKHOpq9CK+kXoN09PzEOPZmqh35odmyc+QVuKuDIW+E1EWhptjgNQSrVG +W/q0Qs/ZTlP5Jyv9WUBZ7ojISvTbrSsDAYdx+2fATcb3AejpMKuIHEA/nAuu3ylTROSYiGwwvmei +BXwDjGNQSvVFz6cPAsYDEcAnFeUYRCTb+BqOfhFJ4zw6/0qpBkB/tNWYg/Om/+gXjaLrcQIlVopJ +IMIJJycn+wwn/NZbb1GzZk1q1qxJjRo1OHLkSJHCCQM0bdqUsWPH8vnnPm1V9oqeZg3Y9ePX4kel +1G3oaZel6AviXaXU0yLyXzfZG8g5xbBPRGSlMbfqykC06SfoA1yKFjTOAwQOKKUcB/inkdefBZQV +lTgxLNlE5JhhtQP6mFx1OY4FnxUCpVQCetS1Gm3efVwp1Q2YhQ5TcD2wEK1bc1Cux2Doa9aipy0/ +EJFtSqk659H5n4LWjVRz2Xc+9V+AX5VSNuBDEfnIV4Hzifr167Nly5Z8+xzhhAG34YSbNWsGnAsn +PG7cuBL3w2KxEBUV5SvbLOMzYNePv28L44HOInKviNyDflA/7yHvz8abaknI94BFmzSD5xX1FyLF +f6UqIwzDgv8Co40Ri2Me4yURiUWb1XbDuwlqmSMidhHpgB5dJSqlelL4fFfI86+Uuh44bowUvZkU +Vcj+G1wpIh3Ro61HlVLnlydIH5RXOOGZM2eSkpICwLZt23jjjTfyRZX0wLfGZ+Cuf29zY44N2Fzg +t6ngPpe0m9G2/mfRSsoMIN1H/fHk1y+kFkg/ZXy+Cwxx2f8RLoswcVlASTmtCg5uwS24BbcLYNtu +PEfzLUJHzzpcHgidykKl1M9KqfuUUvehzUZ/8pD3LfTDPUr0WoGqIuImoolXjivDUaRSqi7n3nST +gIbKcJGPNvN1davvuoCy3BSRgdgmTJhQ7n2ojH0P9r/8t2D/y3cz+MH4nAvcoZQKU0o1BpqhTdE9 +4pdQEZGn0YsN2xnbdBHxtMbhMLBFXHrnB46V3w7mopX9oE0b8x0g2kz1AbSNfXdluMiX/AsogwQJ +EiRI8XCsE9yGXlu0DT2QeMTXs70oXop/R9uWC94l1T5gqVJqAXo9AEbn/uUus1JqFtATqKWUOoT2 +F/YG8K1S6n70uo7bjDq2KaX+QAuaGegV9R3Riv0dRp6FQEulVFGEWpAgQYIEMRCR0y7fXwde97ds +aVh/7Te2MGPziogM8ZB0tYf9i4AQEfk/o29xeLDw+vm+x6kSGk7VkDCiwiMJj44hJDoKc2Q49rAI +0mwxnLDUYG+VS7G48TrjzrOCv/uKWt6x3/GZm9sThzWgyaT3m0wgouPB2O1gtZIvRkfBOjx92shD +pf1B1IbZRIgiyhxOVGgYUeZQokPDqBYZTlSVMCKiTYSGmXSoZZNJbyEhUK8eGa2aMj/9b7It2bii +UJy96CyfrP+kkGsKVUCv7JpeMM0fwsxhCILdxXWVQmE2mQkxhRBiCiHXmkueLQ+zyYxZ6f1mkxm7 +2Mmx5jjzm5QJs9IhpSVe+HLTlxRtsA2WPWmotYdQmTlYzSGIKYTq6VlUsdqpEhJFtfAoakZGEhMd +QWSEIjSswB9f8EIo5veeWVnw8ccQGakvEovl3P/neiE5vtvtEBp6Lm9enk4zm/UWEnLue2amLusO +Rz5HWzYb5OToeh0Xriuu14fLcfTMzIQZMzym+ypfonRfecPD9bGkpenjE0HsdpJPneHIiTQsFhvV +D+1n0fBRKBHMyoRZmQhRCrMyEWY2Uff+odTp3JYLFX9HKg7rrxMASqna6BXL+YSK4cKjqoiMCWgv +i8m0hTOxKRs2ZaVZjNCmio1wi4kIawiReWaq55qokx1G+yxY1O4Zfm33JHaTFi7u7ht/9xW1vGN/ +/s+eJCWdS3cIEtfnQmio/ixcNv/nmdCd7Ir+kPhT80g8kESHozl0SYIlCfU5E6Y4pSxYlAWrOQ+r +yYLdlIvJHoLJEkaINQyzPYwQeyhhEkoEoTSyZNL86DGs/Zuxcmj3c8eC0WgcHD+Y38+nM8153OIx +zR9EhDxbHkopTMqEQiHoOWG72LHarVjsFsLN4YSHhGOz27DardhEf5qUiYiQCGd+m9iw2XVwpfAq +4ezZsweTPy6xBKouOMaDc9YRn5nJ5to1yQwPI9xmJ8Ru43h0GMmhgsWci8V8Fqv5LHaTDWWJxGSJ +RNkiCbFHECqRhBFJqCmCSFMkEeYIIkMiiQwNJzo0nPBwExFhQrVqQkxVUBS4cFwupJ4isGIFZGfr +B31YWP6LyHEhuX63WM7ldThGtFr1g9NmO/e9SpVzF13+P+RcPrtdfw8J0Q9hx4XqKgRdb4YCF21P +gD//9Jjuq3yppQOcPQtKITVrsutEMhuSdpHOUQSFyR6NKDPRmNh3xIQosGPXLz7Kjig7NmWjequW +3FuBhMrSpUsDFgIcjJWRPjMptVlE2rr8NgEbXfe5pP0h2ozUV523oF2QtEILrHUuaePQbjqsaHPV +X4z9HdHze/WAGSLyuFJqLCAiMrFA/YWm/kSEHGsOGXkZpOemk3Y2jV/2/sKP8ybz3apG1DdXg3nz +oFo1LgS2pWzjH7/9gzNrV/Hl/AhibWHITTcReWUPTJ27gBGwqCAiQmZeJqdzznAi/QzJp85wLO0M +x8+c4eDxM+zeZeLovGasPXwrVXauAz88xV6IiMB7ff7HnSsfIfWVaTR/8kZUqO/3tBxrDiezT5J8 ++iQHU1I4nJpC8ukUjmee5ERWCqlnU0jLO0m6NYVMSSGHNELt1QjJrY01PZaQU+25ucEI3niqDRdd +IAb1CQkJ+RxIBil94uPjOXDgQKH9SkebLb4HTD+tAd6ksO+viR7yvo9WqA/FS+wVdLyS5ugV8x1d +9rfCg1sA9CLHy419i9EL6zbgElvDpR7xly3Ht0j9SXXl4F03ivToIWKx+F22ImK32+WtVW9J7KRY +mfv6MLHHxop88IFIEWIt+OLMGZFZUfdL0lNvBazO840ZLxySNHMtyV65tlTbsdqskpKVIttObJOl ++5fK6O9ekcgJsVK1x3RxCalxXlOU+zVIYPB0zo39xbYe82ukAqCUGoz2kQSwQkT+5yHfJ+5ll9zv +If8S4CkxRioFRx6Gwv9FtMJ+sYi0Vkpdhw6gFYX2UfOGm3rF32MDWLJ/CXf/dwgHFrYktN8NMKZC +zOAVGbvYeWT+I6w+spqlSddQ/bNvYM4cuOyygLc167bv6fDXh7Q64E+4nAuLjAz4rdbt9Hi4FTWn +vljm7e9N3ctlH1wBXyxkw8IOuHj6OC8x3o7LuxuVCk/nvKQjFb+FSmnhRqi8C/whIrOM3x+hTdkO +Aq+LSF9jf3e0A7QBHuotklABePjHh2mYksf4p+fC0qXQpo1nLXwFRER49KdH2XR8E7+dvJ6IT7+A +JUugjj+e54vO5sUpJFzTjKp5qVpBW4n49NUjDH7lUqqmHoLo6HLpw/tr3uetH3+kV/J8Zswoly4E +jKBQKXtKS6j4tU5FKXWzUmq3UuqMUipdKZWhlEr3kLeBUup/SqkTSqk8o8x2pdQmpdRm49NbbIly +46WeL/HWie9J+8do6NMHrrgCjh3zXbACICI8/evT/J38N79UGUHEe+/Dzz+XmkABuKRXbVJVLY4s +dR9V70Lm+Iffk9lrQLkJFIBhHYZxOuovvv31AIf8jQ8ZJEgp46/11yTgRskfwtUTn6CdlN1q/L4b +uEtErvGzrSTyRw5sYOzztN8jL774ovN7z5496dmzp9eG61Spwz2X3sPr5gwmHT0K48bBQw/BDz94 +LVcR+Hj9xyzYs4Dfu39C1NU3wPz50LCh74IlQCk4EduG3J+20qBPSeNhnT8cOwbtjy0kbuLQcu1H +REgEN7UayI7BP/D556N57rly7U6QYjJs2DAaNmzIyy+/7DNv48aNmTlzpjNaZSAItPWXv4r63/1V +0gAb/Nw3Ce0yPQO99iTG2N8a7eN/N1ohn8S5abpNxv5d6LUw13nphy89lVv2p+2XmhNrSkZuhkhu +rkjduiJbthSrrrJiy/EtEjspVrYd+FukbVuR998vs7ZX9RwrP17+cpm1VxH44qMcyQqpKnLyZHl3 +Rb7b9p1c/m5fad5cxG4v794Un+LerxcC9913nzOeii+8xVNZsmSJ9OrVS6pVqyaNGzf2WZenc04J +FfVep7+Maa+bgb+VUt8ope507DP2u+OUEdbVbGx3oyPnFSQTHeApBG3Rtb5g8+665LIBxVjg4IOE +6glcFX8VszbP0jb799wD//lPoJsJGDnWHO747g4mXj2RVpM+hksu0aOrMqJ+jxbkbtubz5T/Qmf/ +f/4ks8HFUKtWeXeFq5tczdaMVajwTP7wFuw6yAVPdHQ0w4cPZ/LkyeXaD186lRuNLQbtebivy74b +PJS5H+1W5RjaN9ctwLCCmUTkZRFpKCKR6CmyVUbSAOAd0XHom6FHJ10Mx5JmY39zdOCumwrWGwge +uewR/r3m33rEM2AA/PhjaTQTEF5d/irNazZnWFKcnvKaNq1MjQsaJcbTwHbgfJghDBhq3VpCr6gY +YXpiwmO4tM6lJN75J5995jt/kOLRuHFjJk+eTLt27YiJieGBBx7gxIkT9O/fn2rVqtG3b1+vMep3 +7NjhTHPEqK9WrRp33HGH2xj1HTp0oEaNGnTv3t1tjHp3dO7cmbvuuovGjRsH5qCLS0mGOYHa0Ota +7jS+u3VvD3QCfnHZ3x0jlKqHOn0O/zxhs9uk+dTmsvLgSj0FFh0tcvp0sesrLTYc3SC1J9WWY3s3 +idSrJ7JsWdl3Yu9eOVs3XmrVEpkyRSQ7u+y7UJakpIj8J/Rusc2YWd5dcfLkwiflmXn/lFq19OV6 +PlKS+7UsSEhIkG7duklKSookJydLXFycdOzYUTZu3Ci5ubnSu3dvrzHqmzVrJhaLRfLy8iQ+Pl7e +eecdsVqt8t///ldCQ0Od01+OGPVr1qwRu90un3/+uTNGvaMfvsIJ//bbb+U6/eVVUa+UekZEJhlm +voUmOERklEveF9xUcQ96igu0+3pl1DNeROYZ5cYDFhH52g8ZWCSKqqh3YFImRlw2gml/T+PKm7/S +azxWr4ZrC0Y9Ll/GLRrHhB4TqPP0i3DvvXDVVWXfiQYNiEg9yoq/rfxjfAiTJ+vZwu7dfRc9H1mz +Bi4PW4fpsqfKuytOLm9wObM2z6J1a1i4UA+ugwSexx57jNjYWAASExOpU6cO7drpILeDBg1i8eLF +AMyePZsbbrjBqUwfM2YMU6dOZdWqVSilsFqtjBqlH52DBw+mc+fOzjZmzJjBww8/zGXGurKhQ4fy +2muvsXr1ahITSyeWWaAV9b6svxzWXn/7UZe70GSfA8OBWiJS1zVBKfUyenV+TeBPpVQDETmCVswP +VUq9hHbTkon2SJwENFdKbULHPN+DXrviEVehUlTua38fLy9/mRNZJ4jr0AE2bKhQQmVN0ho2n9jM +DxHDYOtW+Oqr8ulIWBjUqUOrqkeYOzeBhQvh5pth/XouGBcirmz4PYs+ufuhdevy7oqTLhd1YfTC +0UwYIsyapS5YoRKoWd3i6v8CEaPeZDL5jFH/+eef8+677xp9FSwWS5Fj1BeFgi/cL730Uonq86pT +cYwmROQzd1uBvG85NmA6EInWpfwHaOKm+nVoy6944Hu0y3uArej49O2AB4FLgb9EhxWORQcBawlc +ho5BXyrUiKzB4FaDmbluJrRvD5s2lVZTxeKV5a/w/KWjCH38SZg+HSIiyq8zCQlg+BC67jp49FF4 +5JHy605pkrpiK1kNL9bCtIIQXy0em91G937JLFigV/tfiIgEZitt6tevX8iPmSNGfb169dzGqHfg +iFGfmppKamoqaWlpZGZmcvvtt5d+xwOEL+uveUqpuZ42N/lrKqVeRSvXQ9A+vf4hhnfjAryJnhr7 +FR2yspOxvw2wDNiMHqFs4JyiPgUYgzYpXoteq1JqPNL5ET5Y+wG2Nq1hy5bSbKpIbDi2gb+T/+b+ +n47q0VN5THu5kpAALjfR2LF6pPKX1/hw5yk7dmBqfXF59yIfSina1mlLkmULV10F339f3j2q3JRX +jHoRITc3l7y8POx2O7m5uVgsllI7Tk/4sv6ajB4ZeNqcKKXeRIfzzQDaisiLIpLmqWLRFlxfoEcf +GUAvI+ki4AvRVl6t0ALqImPbIyJtjbKvGftKjY71OlK/an0Wqr2wZ0/heBDlxJTVUxjffDghH38K +JRyqBgSXkQpob+djx4Ifa7nOK86ehdhTO6nSqWIJFYA2tduwNWUrQ4aU30zohUyh2EBe5uJatGjB +l19+yciRI6lduzbz589n3rx5hISEEBoaypw5c/jkk0+oVasW3377LYMHD3aW7dSpEzNmzGDkyJHU +rFmTFi1a8JmLWZ+3dpcvX05kZCQ33HADhw8fJioqimvLYcq+KA4lI4FGIrLTQ7odHenRyjmlfhTn +1pRsxY2i3ij7D+BiERlWnr6/3PHFxi/4avNXLHx6o9bSNijVwZFPUrJSaPFeC5IP305kSAS8/Xa5 +9gfQAaFWrIBPzvkSzcnRsmbRIu1C7UJg40Y4ftUt9J1+K1Sw6YgP//6Qv5L+YurVM2nUSF+qTdxN +OldQgr6/yp7S8v3lb+THG9GjljCgsVKqPfCy6wNdRPzyI+aBWWjBAeXopsUdt7a5lad+eYrshHii +du8ud6EyY90M7o+7jsiJs2HbtnLti5OEBPjii3y7IiJg5Ej4179g5szy6Vag2bYNrmQHtKx4Lmla +127NJxs+IToaHn4Y3nwT3n+/vHsV5HygvNy0rAWqAetd9m0uiS0z0Mz4fAqwA98Yv8vVTYs7Jq2c +JL90qyO2Tz4OWJ3FwW63S8LbCXJ0xFCR0aPLtS/52LNHJCGh0O6TJ0Vq1BBJTi6HPpUCzz9rlbyQ +CJHMzPLuSiFOZZ+Sqv+sKna7XY4fF6lVS2Tz5vLulf8E8n4N4h+ezjml6abFBYuInCmwr6Rj1TeU +UtvRVl9ngecL1Fsublrc8US3J0iqGcqvS2aW6xD9r6S/qG4Noc7sn2D06HLrRyEaNoSkJB1C1oVa +tWDIEDCsI897Tq0/RF5MbLl6JvZEzciaRIdFcyT9CHFx8M47cPXVerT41VeQm1vePQxSWfBXqGxV +Sg0BzEqp5obeY5WvQt4QkVuALejAXyeAk0bSQMrZTUtBQkwh3Hrdk2Tv28m1X17LuqPrfBcqBb7Z ++g2vHG6O6tEDytsVgythYToE86nCLt6eeEJbPBsm/Oc1ubsOYo+vQOe9AA5lPcBdd8Evv0DTplrV +1bu3NjQIEqS08VeoPIY29c1F6z/SgcdL0rBSagBwWEQKOra5CDjs8juJc9ZfrgbeRyhl6y9Xopte +zMDIDgxoOYAbZt3AhCUTfBcKMD/s+J6rF+yEUaN8Zy5r6tSB48cL7W7aFHr10rr8isQ33+j1NG7k +oFtEwJx0iLBmjUq3YyWgde3WbD2x1fm7XTst1H/9FeLitJ4lSJDSxt94KnVEZDww3rFLOIfVAAAg +AElEQVRDKdUZbULsEaXUr4BrlCiH9ddzwLOAvzFWikUgFPVO6tbFdOIEI7uM5I5L7uDyjy6nW8Nu +XNfsuhL30x/2pO6hyeFMwvOiy39dijvq1tWBRtq2LZQ0ZgzccYdeEBni7xVXimzbpqeFrrkGBg/W +wTF9rdZOSYFG6jDhTUs3Rk1JaFO7DX8lFV4cpBS8/jr07AnPPlsx/oMgFYfyUtSvAy5y+X0VJVDU +A5eg16ZY0aMfAY4DceiFkAvRCvntaMF1OVAXrZzfhFbU/wS876WNYqqvPHDkiHbaaPD15q+l56c9 +A9uGF9778z2ZP+gSkXHjyqzNIjFkiMgXX3hM7tVLZPr0MuyPF0YOy5RNl94ttjcmStu2IgsW+C7z +++8ic2r/n8i0aaXfwWKy7MAy6fZRN4/pl18uMn9+GXaoCAT8fg3iE0/nnDJS1D8EfK+UqquU6o/2 +JNy/BIJsC9pE+RkRCQcOoNepnEDrWa6inN20FKJ2bf26aiyAvLnVzWw+vpnDZw77KBgYft77M4lr +U+DWW31nLg/q1PEaenniRHjxRfBjYXCpYrXCJV+Pp2nNVEzvvM3z1/7l12LBvXuhScghaFRxp79a +xbZiW8o2j8YkQ4cGF0YGKX38EioisgYYBfwCvAhcLSKBeJq6WnE5vl9CBXHTko+wMKhaFdK0k4Aw +cxj9mvdj/u75pd50ni2Pw2uXEJ0r2g9ZRaRWLUhN9ZjcuTMkJsKUKWXYJzcs/zGdIZZPifrqIxg3 +jhu2v8lPP/l2lrBnD9SzVmyhUju6NiGmEI5luhfuAwZo5X0FcQwRxGDYsGG88II7J++Fady4sdMb +ckXFb99faGurKPR01Ux3vr+KwUil1AZgMeCwR60wbloKERcHJ865Mbuh+Q38uKv0A3itSVrD7Uk1 +MPXrX6YBuIpEjRpOgeuJ117TQuX06TLqkxtSZvyP5GY9oF49uPdeIpctpF6VDHa69RNxjj27hRoZ +h7T5dAWmVe1WbD+53W1aw4Za9vsZ8ynIecbkyZNp27YtMTExNG3atNwiQPpS2ZWoV14U9eOBaehV ++WI4oXwLeKAk7RUkoIp60ELl+HFo1QqAa5tdywPzHiDXmkt4SHjJ6vbCykMruWGfGZ4sG6OAYuGH +UGnaFPr2hc8+K79lNrFrfybvTsMRREwMdO3KA3m/sWrVIMff6pbju86gTEqbTldgWse2ZnvKdno3 +7u02vXNn+PtvuPTSMu5YkDLhiy++oF27duzZs4e+ffvSqFEjbrvtNq9lykVRX5QNve4k2vh+N/Av +IN5D3sfQyvgdwAlj31hgARVNUS8icsstIt98k2/Xpe9fKn8e+TPwbblw8+fXS150pF6iXlFZsECk +b1+f2VasEGnRQsRmK4M+FcBmE0lS9eXUX3vO7Xz1VVnf5ykZNsx72cRqG8XSsk3pdjAATPljijw6 +/1HP6VNEHnmkDDvkJ6VyvwaQhIQEefPNN6Vt27ZStWpVGT58uBw/flz69esnMTExcs0118hpl+iw +P/zwg7Rp00Zq1KghvXr1ku3btzvT1q1bJx07dpSYmBi5/fbb5Y477nBGfhQRmTdvnrRv316qV68u +V155pWzatClfP3xFfnQwatQoGTVqlMd0T+ec0lTUK6VWGp8ZSql0ly1DKZXuodj7QLZS6lK0C5a9 +6GBdBeu+GR3rvi3wIbDCSNpCBYin4hbHSMWFrg26svrI6lJrUkSw/r4SadlCz11UVGrW9KpTcXDl +ldov2KJFZdCnAuxfdZRIlUPNy1w8LXbtSvOTf/DHH57LnT4NdXIPYW5ScfUpDlrFep7+AujYEdau +LcMOXUDMmTOHxYsXs3PnTubNm0e/fv144403SElJwWazMXXqVAB27drFkCFDmDp1KikpKfTr148b +b7wRq9WKxWJh0KBB3HvvvaSmpnLrrbfy3XffOdtYv349w4cPZ8aMGaSmpvLQQw8xYMCAYrmwX7Fi +BW3KwZurryBd3Y3PqiIS47JVFZEYD8WshrQbCLwnIv8GqrrJ9y+gKTqqZA/AEdapYirqoZBOBUpf +qOxJ3cMVhyGsZ59SayMg+DH9BVoldP/9MGtWGfSpAIfmbuBwrQ759VIdOxK1dxMHD4hHy7Tdu6Fj +7CFUBVbSO2hVW1uAeaJ9e61TsVrLsFMXCI5wwvXq1SMxMZGuXbvSrl07wsLCGDRoEOvXrwfyhxM2 +m82MGTOGnJwcVq1axerVq53hhM1ms9dwwkophg4dSnh4OKtXF+0ZM2HCBESEYcOGBfQc+EOxl0Ep +pQ6JiLu7LEMpNQ499XWVUsoEhLrJlwb8AFyHdlbZAL1WxaGod3V9fxF6TcseKeD6vrj9LxZ16sC6 +/C5aujboysvLSi9wyIZjG+iTHA73X1FqbQQEP4UKwE03wauvaiskU0l8WxeR3HVbyGraLv/OGjVQ +VavSq9ZhtmxpxOWXFy63eze0qnK4wivpARrGNCQjN4PTOaepHlG9UHpMDNSvbxyTFx1SRUS9FBgj +FZlQPP9950s44ffee48vv/ySlStXEhrq7tFbupRkba2nf/h2YAg6Nv0XaGERbcSWd11RHwLUEJGu +xur8b3EfdrjiULt2oZFK85rNOZZ5jIzcDKqGuxuQlYzNRzdy/d50PW9UkaleHc6c8UtSxMdrfffW +rW4X4Jcaoft3YbqqU+GE1q252ryN9es9C5WbzIegUQU2lDBQSmkLsJTtdGvYzW2eli1h587zT6gU +VxiUNfXr12dLgUixjnDCgNtwws2aNQPOhRMeN25csdr++OOPmTRpEitWrKBevXrFqqOklESoePqH +M9AOIW1KqUeBi4EFIpJvUlAp9TAwB/Q6GKWUTSlVC+3ry3UEVK7xVPJRq1aht3GzyUzzWs3ZdWoX +neq7eWCVkJQNvyPVYrQblIpMSAhERekA6X5YSPXooeN6laVQqX5iF1GX3Vk4oXVrLju8ja82uBca +u3dDXUvFXqPiikOv4kmotGgBu3aVcacqEbfddhsTJ05kyZIlJCYm8vbbbzvDCYuIM5zwiBEjmDt3 +Ln/99Re9e2trvQcffJCbb76ZPn360KVLF7Kysli2bBk9evQg2od37K+++orx48ezdOnSfKMfXwTa ++surUFFKPekpCR1f3h3LgUSlVA30Ysk16NHLXQXy1Qb+o5Q6anyPE5FTxvqX35RSw412ItGKelFK +WZRSu9ECLRQY4a3/rkIlIHhQRl8cezE7Tu4oFaEStnEz9k5dAl5vqeCYAvNDqHTuXPYx7Otn7Sbs +imaFE1q3pvm+v9mwwX253buh+pnzTKikeFbWt2xZ9uf+fKe44YSTk5Np3769M5wwaIX/Aw88wHPP +PUf//v09hhPes2cPkZGRdO/enR49evhs9/nnnyc1NZXOnTsjIiiluPvuu5k2bZrXYyv4wv1SCUOU ++xqpeJvPecfDfiUi2YZQmCYik5RSG93kuwL4GGiPFhCO0IH+xFOhQN6yoWZNt25tL66lhUqgOZ1z +mmYH0om+vgI6kHSHQ+gmJPjM2qlT2UYmzDiZS005RVhbN+tl27QhduZnbN3hfvZu7y4bYdnH4KKy +XWtbXFrVbsVH6z7ymN6yZaFAnUF8sG/fvny/P/88v0Hr8OHDGT58uPP3wIEDGThwoNu6OnbsyLp1 +nsNn9O3bl759+/rVD3/TyhKvQkVEiiOylFKqG3pk4jjLhSbZjemwoUaBQ8A/jSRHPJWJRtoCtPXX +QYx4Ksb+O9DxVH4uRh+Lh8MViUg+C6KLYy9mzo45AW9u0/FNdD0VhamiumYpSBGU9ZdcoqdgrNay +8Zp7dM0RokLr0yDEXDixRQtC9u2iRg04cCB/bPdTpyDOdlT/92Fhpd/RANC6dmuvFmDB6a8gpUmR +bW+UUr4iVD2OdunyPxHZqpRqAizxUl8icExEHGK2QsZTASAyUguTAtGOHNNfgWbj0Q1cnJSrA2Oc +DxRBqERGajXRgQOl2yUHaRsOklrFw/RVXBxYLHRrmVrIhcnu3dDtovPDnNhBkxpNOJ51nIzcDLfp +9epBTo7ff1WQIEWiOO+IXu36RGQZsEwpFeXqpqWA9df4/2/vvMOjqtIG/nuDgCAkJEBQpEoRO7oI +IoigLjYEVyygoMiKorK6VsAGrkqwoOy6lpUiKggW+FRQEVwNiArCCtIRMRQp0lsQSHm/P947yWQy +SSbJncxMcn/Pc5/ceu57T87cc895m6pOdy7pDUwugRxF4rqiHnKneKpXz9l1cp2T6XNGn9KXHUD6 +b79SWSrZWyAWKEanAtCqFaxeDc2DqDncpkbmXjJPOTX4QRFo0YJOJ6xl2bJ2+M9arF0LrZM2womx +06kcE3cMpyefzk+//0THRh3zHReB5cvNvNjDI+JhWoCnizjeHlgJbHS2z8J0K4HnnQv8AGQAi4E2 +Gu1hWlRVBw5U3bgxPGUHkpWlumVLiS4dPny49unTR1VVN27cqDVr1tTs7Gw3pcsfMuKbb1SXLw/5 ++nffVV0Q3gg3ofPqqzo9ZZled13e3S++qDq763OqDzygNWrU0LS0tIiIp6pF3t///zFw+kB95YdX +ilV+v3798oQLKQ2dO3fWcePGqarqpEmT9NJLL805JiK6bt26POeH8nv1l++bb77RVq1auSJrpEhN +TdUGDRqEdK7/79ktCqpzyiifin8n9FgRp4wGLgV2Oef/hOVHCeQ54CNgHpYF0pfsdAXRGqYFTLvc +sCFNmjShXr16/OE3FTZu3Di6dOniym1SU1NNY1yKUYrPUqRhw4bs37+/UMsRV+jYEU47LeSvnt69 +oW20GLbdeSet+5xO797kkf++++CSvidAhw4cOHCAJiEYIYQL//sXFi49NTWVFy99kTvbFGwc+dZb +b3HBBReEQ8x83HjjjcycOTNn24122LFjR1atKtjCLRQ2bNhAXFwc2RHMBVCcugj779clQupUgsT+ +2i8im0Tk/xydSR40f66VrMBzgK1YOuHJQC1yfU5OI1rDtPghImRnZzN69Oh8+0uCBiRWcnU4WsYU +V/asrGDNo+SUtLwGDeAvfwkif58+diBGSE1NpVrlaoW2RXVMTiNBYFuPFL46iBZ5yguhjlRGAw9h +ivEG2Iv9XWAKZhbszyYROR9QEaksIg9i01iBDAGaY971z2HKfYjmfCoBPPTQQ4waNYr9+4PH1vzu +u+9o27YtiYmJtGvXju/9ohZ26dKFxx57jI4dO3LccceRlpZGly5dePzxx+nQoQMpKSn06NGDXbt2 +0adPHxISEmjXrh0bN27MKePvf/87jRo1IiEhgXPPPZd58+YFlcP/i2z+/PnUrFmT+Ph44uPjqVat +Gic55k6qysiRI2nevDl169alV69e7PVLfvLOO+/QpEkT6taty4gRI4Ley8ett97KnXfeSdeuXYmP +j6dLly55ZI+Li+PVV1+lZcuWtGzZssj6Wr9+PRdeeCEJCQl07dqVQYMG0bdv3zzPN378eBo3bszF +F1uctPnz59OhQwcSExM5++yzmTNnTk55EyZMoFmzZjm5JyZPNrXeunXrmDBhArVq1SI5OZnevXOd +JePi4nLMNvfv38/NN99McnIyTZs25Zlnnsk5zzcKeOihh0hKSqJZs2Z5vtT9mTBhAt27d8/ZbtGi +BTfccEPOdqNGjVi6dGme+48ZM4ZJkybx3HPPER8fn8d0dfHixbz++uskJibSu3dvjh49mu+eq1ev +5s477+T777+nZs2aJCUl5RzbvXs33bp1Iz4+nvbt25OWlpbnuq5du1K7dm1OOeUUPvjgg6DPFEhh +o6J58+bRyM8IItR7zJkzh4Z+YXO2bt3KtddeS3JyMs2aNcsJcwKwcOFCzj33XBISEjjhhBN48MEH +AXJ8P2rVqkV8fDwLFizId58nn3yS66+/nr59+xIfH89ZZ53F2rVrGTlyJPXq1aNJkyZ8+eWXeeTo +0aMHtWvXpmXLlowdm2vaffjwYfr160dSUhKnn346CxcuzHOvwp4hpghljgz4Kci+JcGOYVNUk7A4 +XkexGF8rsM5hmfO3OzAbuNq55lpgtrP+MnCjX3ljgWuAPwGz/PZ3BD4pROaSTDOGjG/+umfPnvrY +Y4+pqurYsWO1S5cuqqq6e/duTUxM1EmTJmlWVpZOnjxZExMTdffu3apqc86NGzfWVatWaVZWlmZk +ZGjnzp21RYsWmpaWpkOGDNFTTz1VW7RooV999ZVmZWXpzTffrP3798+RYdKkSbpnzx7NysrSF198 +UY8//ng9cuSIqtocbN++fVVVdf369RoXF6dZAfHmMzIy9MILL9RHH31UVVVHjx6t7du31y1btujR +o0d14MCB2rt3b1VVXbFihdaoUUPnzZunR48e1fvvv18rV64cNAz3sGHDtF+/fhofH59z/r333qsd +O3bMOUdEtGvXrrp37149fPhwkfXVvn17ffjhhzUjI0PnzZun8fHxeZ5PRPSWW27RQ4cO6eHDh3Xz +5s1au3ZtnTlzpqqqfvnll1q7dm3duXOnpqena3x8vK5du1ZVVbdt26YrV65UVdXevXvrRRddpKqq +R44c0W+//TZH5ri4uBxdQN++ffXqq6/W9PR0Xb9+vbZs2VLHjx+vqqoTJkzQKlWq6Lhx4zQ7O1tf +e+01rV+/ftB29Ouvv2piYqKqqm7ZskUbN26sDRs2VFXVdevWaVJSUtD7B9N/NGnSRNu1a6cPPPCA +7tmzR0855RT9z3/+E/S+EyZM0AsuuCDPvn79+mmdOnV00aJFmpWVpTfddFPO/z89PV0bNmyob731 +lmZnZ+uSJUu0bt26eUK6++OvUwm8l0+n8vnnn2ujRo100aJFCgS9R506dXLu4f/MqampOfWUnZ2t +f/rTn/Tpp5/WzMxMTUtL02bNmumsWbNU1drOxIkTc55jgaPI8/0uCtM1Dh8+XKtVq6azZ8/O+Q02 +btxYR4wYoZmZmTpmzBht2rRpzvkXXHCBDho0SI8ePZpTR19//bWqqg4ePFg7deqke/fu1d9++01P +P/30kJ/B//fsFgW9IymlTiXUTuV74HpsZBPnrM9Xv87FWa8E3BdimfsDtvdqrqJ+sN/+meQq6lf5 +7e9FEYp6b/EWb4md5b333tNOnTrlecHdcccd+o9//ENVC+5U5s+fr40bN85zXUpKSs4HWKdOnXT4 +8OG6MyAfUUEfW/4MHz5cu/rlCZo+fXoeo5cDBw5oXFyc7tu3Tzdu3KjHHHOMpqen55w/dOhQvdVJ +1nPSSSfldBKqqm+88YY2bNhQ+/Xrp/379y/0GXydSnHyqRRFYf8LLQNF/U2Yo+J2Z+kL9BGRasAg +30mqmoUFkwyFtSJyIYCIXIxZewF8AvQSkSoi0hSbIvMp6veJSFuxyeCbsSjHQVFVCecCrAcudtYn +kpu58mtn32Dg/YBrpgCPOOupwG0Bx1OBv/ptPw286bd9CbDWb/shbGpxr7NkARc5x4Zj04gCNAGy +MedR37UDMSu9mn77DgH7sNHlHqfMQ0B94HXguQB5t/rqIEj9TAhy/g6grbOuQHO/YwXWF3Ae8HvA +sZQgz3eM3/FXgcMBz3IQ+2ARoCs2Wt4LzABaOfvrYbq8LVhun/5+ZSqWrqGec7/qfscuA3521vsB +3wTIq0CzAurqHeB+R+YbgWeBO5w6vD9YGc6xpwpqk4FtIMg9g8mYp0ygM7DJWX+Y3JkHX30ewCw7 +g5Wf05YD7+U8xzb/9gE2jTl//nySkpJISkoiMTGRd999l98DchgFsnHjRjZv3pznupSUFLY7wV/H +jx/PmjVraNWqFe3atePTTz8ttLxAAqMR16lTJ0cfVa1aNVSVgwcPsnXrVpKSkqju527QuHFjNm82 +dfGWLVto0KBBnmM+9u3bV+gzhMLo0aNzpnSPP/54+vfvnxM5uSAKeb+VmJD8VNQcE68q4HDgRP48 +Efk38B6Qk6FCVQOdJu8AXhGRKtiP/3bnvJUi8j72wssA7lLN0aTdjTX8Y4HPVDX4RHXZMxz4EetY +fGwBegac1wgzl/ahlBDHafQhoIuqrnT27aYIPyK/a58EOqiqf6vbiL1E86WscmK0tfLbrg4UlTUs +Z9JbRGoASeQNAur//IXV11YgSUSOVdXDfmUH1p//9ibgbVW9I5hgqjobmC0iVTH93Bigk6pux2mL +ItIBi0M3R3OdcwF2Ym2zMZa1FGe90ACnhTAX+301cWTZh33InYdNBwd9hBLeq6TXbwJSVfXSUt7X +d+/rgPEisllV/wVmpdi5c2e++KJ4QTIaNmzISSedxJo1a4Ieb9asGe86CXymTp3Ktddey+7du103 +VKhfvz67d+8mPT09J/jjxo0bc6ITn3DCCWzatIlTnPDQGzZsyLk2Pj6+0GcIhR49enDLLbeQmJjI +3r176dmzJ8888wwpKSmleKriE6r1VwPH0mu7s0wVkYIsr1pjFlz/wF6yowiS615VF6lqO1U9W1Xb +q+piv2Mp6ijqVXWW3/7/qaOoV9UIZTnPj6quwzrRe/x2fwa0EJFeIlJJRG4ATgGmByujBNTAXmy7 +nFHdExQeq00ARKShI+vNjtz+/AcYISKNnHPriohPi/wh0E1EzheRytj/t6hf5RXO+VWAp4DvVbWg +xBAF1peqbsSSuQ13jD/ak/8jJ1CWicBVItJVROJE5FgRuVBE6otIsoh0dzrGDGwEk+U887Ui4jMA +2YuNSPLYnKpqNvA+8IyI1BCRxsB95MavKy5zgC5ANad+vsFGPrUxH65g/E7pUkX8DjRw/pehMANo +KSJ9ROQY5//QRkRaFXllfgT7iLgYuMeJWE63bt34+eefmThxYk6WxEWLFhX5om3bti01a9bkueee +4/Dhw2RlZbFixQoWLVoEWPTenTt3ApCQkICIEBcXR926dYmLi2PdusCfQX6aNm3KCy+8wIABA1i/ +fj233XYb27dvp1u3bqgqvXr1ombNmpx//vkMHTqUqVOn0rx5c1JSUli8eDGrV6/m+uuvJyUlhblz +53LGGWcwcOBAdu3axeHDhznxxBNznmHatGm0bt06xzBgWWCYh0JkTExMBMwCMi4uLiLh70Od/noT +m5aq7yzTnX35UNUuQZaL3BG3aETkMhFZLSI/i8jgMN4q8EvvH0B1335V3Q10wyzldjp/r1TVPSIy +DuiAjRZ8cidivjnPiMgXIpLgd2yoE515vHMPsJhnX2Dm1WnYNFWgKXcweS8CkoEPJTc1tK/V/hOb +UpwlIvuA74C2zvOsxEaKk7GpC5+N7VgRucf3DCIyS0TWYNNLH2KjuF1YTLcGIrJKRLoG1l9h9eWc +chMWhHSnU9dTgCNBns9X3m/OPR/Bpt02OGUei+npJmHTN+mYH9VgEZmFdazrxNJlf4R9KPR26l8w +AxGc/YeAX7GRxkRVDfqbCCZfgKxrHVnmOtsHsDTc8/xG6YFljAeuEZGjIjLNaT/1gLcKaj9+dQ/w +FWZAs01EipxjcUa0XTFd5hZnGQkUFBCtsJGQAJ9i75SD2NQnNWrUYNasWUyZMoX69etTv359hgwZ +wpEjRwopyqziZsyYwZIlS2jatCnJyckMGDAgxypz5syZnHbaacTHx3Pffffx3nvvUbVqVapVq8aj +jz5Khw4dSEpK4ociQjdPmzaNF154gYYNG+akEx4xYkSOZeW//vUvJk+ezPLly7n22ms5fPgwr732 +GjfeeCNXXXUVjz76KA0aNKBLly7s3LmTkSNHUr16daZOnYqIMGPGDL7++muuu+461q9fz+mnn84V +V1xB9+7dQzaTnzx5MgkJCSQnJ5OcnMw999xT6Pkisk9E7vH/7YbYfgpGQ1OqLwlln7P//iDLX4HW +IdxnHPYFtbSA4zcCPznLPOCMgONxwC/YVERlzMelVSjPWJYL9mJq7f+c2Dz6w876YGCks34q9rV6 +DDY98gsWCTqS8h/v+39iI6Y12NSY/zMswl6KYXkGrFMZVsJrqzt/KwHzsQ4+Zurfkes+bDT2SQy2 +n1+xBH3++zSaadKkib777rs52z179tS77rorZ/vll1/Wv/zlL6qq+tRTT+kNN9yQcyw7O1sbNGig +c+bM0blz5+qJJ56Yp+zzzz8/xwDhzjvv1CeeeCLP8ZNPPlnnzp2bI0coivpffvlFW7durS+99FKB +52Ad/xZsKtm19hPqSGWXM+yt5Cx9cDzmg9AGUwL7fEvuwIbyY0SkqPS/b2Le+AXxKzbvfRamxB4T +cLwtpsjeoBYFeQr2tRpVqOo8TNnpTw/gLWf9LSwCM5j59RRVzVTV9ZhBQ0T90FV1m6oucdYPYsYC +Dcj7DL+Qq4Mp9TM4Uy0niXGZU+ZHJZT/kLNaFfsQ2UMM1b8z9XwFZm7vI2bkx0YqxU8kLeLOUkLc +SCe8ZcuWItMJjxo1Ko/C/rfffitWOmEwPdKQIUPyhegPwjo1Z3XX2k+o/9j+mBnxNkxpei1m0RGM +BsA5qvqAqj6A+ZckY1MMBV0DFPiy9T8+X1X3OZvzye/8GBjhuOwjGZecZFX9HeyljdUZFBy1OSoQ +kSbYqGs+UM/3DNjUkC9VnRvPcDxmUXQAc8YdqBYCqCQyx4nIYqw9p6pN7dWLofp/CTPS8J9iiiX5 +FTOSWCgit4V+lbqzhJn69evnUcJDbjrhE044IWg6YR++dMK7d+9m9+7d7Nmzh4MHD+ZxiA2VjIyM +PJZoBfCu89e19hNSp+J8+XdX1bqqmqyqV5PfUsdHMnnnujMcgf8I2F9abiOvJVV5I/ytv5Q4Fl0f +Avc6I5YcmVW1P9axuIKqzlDVRqpaQ1VbqWqRn2CFlJWtqmdjH0AXiEhnCrckixpE5ErMvHoJhRtK +RKX8Dh1U9RxstHW3Y41Ybrj++uv59NNP+frrr8nMzOSFF17ISSfcvn37nHTCmZmZTJs2LY8uZ8CA +Abz++us5+9LT0/nss89IT08v6HY5jBs3jh07dgCwcuVKRo4cmSerZAH4Qha413Xyk1sAABukSURB +VP4LmxsrbMGJQhxk/+OYee0wTEm7CHgC+2qdFEK5jSlAp+J3ThdMyRg4L3seMNNZD5uTlrd4i7d4 +SzlfVjnv0aDO6G7oVIIR9CtJVZ/C7Pz3YlNZA1X1H6qarqqBeeqLf1ORM4E3gO6aaxnkYyHQ3DHx +jJgi0o1l2LBhEZehIsruyR/5xZM/souDz7E8qDN6Ye/o0iRy1UKOZWC2/eqsFwehgA7L8Z+YCvTV +/D4WqGqWiAwCZuW72MPDw8MjVEYCaOHO6EEptFMRkQME7zwEqFbANfdieVCmOudNFJE3VLXIkJsi +8i4WGqK2WN76YZgdvKrqG9jUWhLwqpg7bIaq5rFEUPOyP1lECn1wDw8PD4/gqOpev/UULCxSSBTa +qahqYR7aBfFXbM4tHUBEnsUCUoYSx/kPzHdgjarmS8yuqgNE5A/gcsxp7fYSyBcTuJL6OELEsuzg +yR9pPPljGyliJFP8As07+1x1YjSJyLHAQlU9I4RrO2Ietm8H61RE5HJgkKpeKSLtgH+q6nkFlFXU +KM3Dw8PDIwCxxGUldugpjU6lIN4EFojI/znbV2Oe8kWiqvN8SvYC6AG87Zy7QEQSRMTfN8LDw8PD +I4K43qmo6osikkpujKRb1S9YZCkpyBHH61SKYNkyeP99OOzE+G3SBO6+O6IilTsOH4Y33oDffgNV +c96++25oXNhnkke5YN48+PxzyMqC7Gz7//u46SZo3TpyspU1rnYqIlIJWKGqrTBflYgyfPjwnPXO +nTtXqLlOVdi6Ffbvh/XroV8/uOUWSE6GAwfgqae8TsUtsrKs037wQahaFS64ACpVgkmT4OyzvU6l +vLF3L+zbB0eO2LJwIQwdCnfeCTVrQlxcbjSYmTMhISG6O5XU1FRSU1NdK8/VTsUx6V0jIo3UwpW7 +zWb8cnRgHtEF5rDw71QqAgcPWoexaRPccQds3gyJiba89hr8xYkrvH27bXuUjowMmDMHHngA/vgD +rrkGnn4ajnF+VYsXW4fjETuowqFDcPSorfsvYKP9oUOhVi37gKha1T7UPv8czjknf3n790d/Gwj8 +4H7yyScLPjkEwqFTSQRWiMgP5E3S1b3gS/JQoJ8K5ohzN/CeiJyHpSCusFNfWVmwcyds2QKvvAKT +J9uXUlIS/O1vMHBg8Ph5lSpFf0OPZjIz4T//gcGDoVkzeOQRuP76/HXt1XNsoGov/y1boH9/WLIE +jj3WjgXGomzQwD4WmjULreyK2AbC0ak8XtILi/JTUdXPROQKEfkF67BudUPgWCIry6azPvsMHn8c +KleGevXg8svtR5GQUGQRFbKhu0FWFkyZYtMcp5xiL5cWLQo+36vn6CYzE/77X+jd29YTE61T+e67 +UgUzzkOlSjairUi4rVO5GnPjX6aqxcsJarwNnIOZFY/TgKRHIlIbyxF+EPNnOZMo0N2UBUeOwIgR +8PzzNtw+7TT4/nt7uRUX72VXPDIybNpj4EDTj3zzDZx1VtHXefUcfaxda4rzJUtshFK/PkybBuFS +t1bENuBapyIir2JphL8DnhKRtmpxwEK9Pg74N5ZidAuwUEQ+VtXVfqcNwpKDXS4idYA1IjJRVTPd +eo5oIzUV7roL1q2DP//Z/pY2Q2hFbOglIT3dRiXvvQfNm8O338KZ+bynCsar5+ggLQ1uuAGWLzd9 +14gRMHdu7hRXOKmIbaA0ASUD6QRcpKpDsSmsqws/PR+hJNjaRm4e9prArvLYoWRnwxNPwIkn2tB8 +5EhTwM+YUfoOBSpmQw+FHTvgiivg+OOhRg2bDgHYswdWrChehwJePUeaMWPsN3TmmTY62bnTLLcG +DSqbDgUqZhtwc/rrqKpmAajqISc2V3EIlmArMMPYGOC/IrIFS2Nb/Mw1UUxWFjz5JLz+Opx8so1S +mjUzE0U3qYgNvSBWroQBA0xPtWuXWXKNHWsGD9Wq5VpylQSvnsseVRg+HMaNs/r//HNo1QqqVImM +PBWxDbjZqbQSkaXOugDNnG3BFO3F/M4LylDgJ1XtIiLNsOxxZ6oliMpHrPipqMK//22+I2eeCfPn +Q9Om7ikLA6lUKddBK1z3iGZmz4YhQ3K/XEeOhG7doE4d60jcoiK+UMqaL78067t9+0zZnp5ueq+v +v7bfUGk+CtwgFtpANPuplEBlnIfNQCO/7WA+KB2AZwBUdZ2IpGF50BcFKzAW/FQWLoTbb7cX/Jw5 +JVO8FxefeWR2tjX6isCCBfDYY+btvmMHTJgAZ5xh5tc1SxI2NQRi4YUSiyxeDPfcY//HXbtsmqtV +K7OErFLFprzcHt2XlFhoA1Hrp6KqG4o+q1D8E2xtBXoBvQPOWQVcAnwrIvWAlsCvpbxvRNi3z5yo +3n/fRinXX1+2PwRfYy/Pncqnn8Izz8C2bRZCJSUF2raFhg1NZxJuYuGFEiusXg333WfTlFu3wksv +wXnnmY6xVq1IS1cwFbENRHhwmEtAgq04zKR4lYjcQW4+lRTgTRH5CZtWe1hVd0dO6pIxbZqFSOnR +wxTA9eqVvQzlubGPGWP+JMuWwfjxNvo78cSyU876KM91XBZs3AiPPmoRIpYuNV3JJZfY/zIUf6xo +oCK2gajpVPzwz5OMqv4n54DqThEZBbwEVMbyqUyOhJAl4ehR88J+7z346CNo1y5yspS3xv7HH+YM +Om+e6UleegnatIG6dSMnU3mr47LgwAHrSFassI7k7rvNIbFpUwuCGmtUxDYQNZ1KKH4qIpIAvAJ0 +VdXNjq9KTLBkifmb1KplP5Y6EZa8vDT2/ftNUfvll2bkkJJinXX16pGWrPzUcVmQmmojzB9/hD/9 +yaaGmzePzY7En4rYBtx0flxGIXnrQ7D+yvFTccrz+an4Oz/eCExV1c1OmTtLJXQZkJVlVl3//jc8 ++6xFC44GPUasN3ZV05eMHw8XX2wmpOefH13WbJUqmUWSR3AyMy1CxPLlMGuW/U5uv92iPEeLor20 +xPrvrCS4OVLp5vz1BVR/x/l7U4jXh+Kn0hKoLCJfY34q/1LVd4hSNm60TgTgf/+LrhDosdjYVWH6 +dPuqXbXKoi1PmmQK22jqTHxUqmThdTzysmGDBeScM8f0XH372gdCrI9KghGLv7PS4rr1l4j8WVXP +9js0RER+BIa4cJtjsNhgFwHHAd+LyPeq+osLZbvKF1+YU93tt5tPRKTt5QOJpcaenm46kpkzzbu9 +Xz+bIunRo2ysuEpKLNVxOMnKspHkihWWnuG//zW/oL//Ha6+2kyByysVsQ2E41UnItJBVb91Ns4n +tHAwofip/AbsVNXDwGERmQucBQTtVCLh/JiRYc50r74Kb79t8bqikVhp7N98Yy+fk06yefZLLrEc +FrFArNRxODhyxKZ816wxHaII9OoFxx1nyeI6dYq0hGVDLLSBaHZ+9PFXYLyjVAfYC/QP4bpQ/FQ+ +Bl52MkxWBdoBLxZUYFk7P6almbXK0aPmFR9N012BRHtj//13C1fz6qsWALB//+ic4iqMaK/jcPDz +z2Yy/9lnNors3t2Sw3Xu7G60glghFtpA1Do/+lDV/wFn+ToVVd0X4nVF+qmo6moR+QJYCmQBb6jq +SrefoSR8/bV9iQ0aBA89VPY+EcUlWhv70aMwcaJ1JJ062bx7q1aRlqpkRGsdu83y5RZja8cOeOst +iwjcpw/89a/RYZQSSSpKG/DH9U7F8XQfAdR3QtSfCrRX1XEhFlGgn4qz/YKIzMFC7BeYSrisyM6G +f/7TprymTIEuXSItUWhEY2P//HOrx7g4GDXKdCaxTDTWsVv88IOFS9mxw9r/jTdadOePPzbDCQ+j +PLeBggjH9NcE4E3gUWf7Z+A9oNBOJcR8Kr7zRgIlSQLmKvv22bTM1q2x90UdLY1dFb76yhxCZ882 +n5N+/cqH8jZa6tgtvvvO8vmsWGH6wiuvhPh4m+o699xISxedlLc2EArh6FTqqOr7IjIUQFUzRSSU +ag3FTwXgb8CHQESb8fbtcNVV5nA3aVL0T3cFEg2NPS3NRiQzZ5pZ6Q8/RNYD3m2ioY5Ly/LlpidZ +sQJee81G4snJlrCsadNISxf9lIc2UFzC0amkO2l/FUBEzgNC0asU6aciIvWBq53Q94E+LGXG+vXW +oVx+uTk0xpoCGSLb2DMzLUrwI49YIM3vvrMXVXkjFl8oO3aYT9WRI2Ys8cgj5oyYlGRRC049NdIS +xhax2AZKSzg6lQeAT7B8Kt8CdYHrXCp7NDDYb7vMX+czZpgCcvBgi5oaix0KRKax+6a6hg41S6Dp +0yMb/yzcxNILZc0aS1g2aJAF4DzuOBt9T5tWccx/w0EstQG3CIv1l4hcCJyMvfTXOOmBiyIUP5U2 +wBQnq2Qd4HIRyVDVT4IV6LafyssvmyL5o4+gfftSFRVxyrqxr1tnncmKFeZ3ctttsdshh0q0v1Ay +M60zmT3bQqS0aQOjR8N1bn0CekR9GwD3/VRQVVcXYB0wMGDfjBCuq4Q5MTYGqgBLgFMKOf9N4JpC +jqtbZGerDhmievLJqmlprhUbUdq0UV2wIPz32bZNddw41Tp1VO+/X/XQofDfM1qYOFG1V69IS5Gf +HTtUP/5Y9aKLVJs2Ve3WTXX58khLVT75/nvVc8+NtBTFw3l3lrgPCMf0VwbQRUTaAXeo6lFMX1Io +Glo+lTyXuC14MDIy7Kv6558trHqkowu7Rbi/oLZvz/U3adeuYloIRdNXanq6xaJbtMimbdu0sUCc +Dz1UPiztopVoagNlRTg6lUOqeoOIPAx8IyLXUbwOoEA/FRG5kVydygFgrTsiBycz05y49u+3eEXR +EE7dLcLV2I8cgbFjYdgw6NoV5s6tuMrdSL9QsrMt3e7SpXDzzZY2uX59y4hZnnVZ0USk20AkCEvs +LwBVfc4JJDkLSCryotD8VH4FOqnqPhG5DBgDhMXVStWCQe7daw5dsWYyXBThaOxpaXDFFfbi+uYb +U/hWZCJlDLFvHxw6ZD5UCxZAo0bwr39Bz55lK4uH16m4xRO+FVX9UkQuBW4J4boi/VRUdb7f+fMJ +YVqtpDz9tKWjTU0tfx0KuN/YP/vMvoaHDYO//c29cmOZsnyh7N9v042PPWb3rFbNfEp27Ii+CNkV +iWOO8TqVEiMirZxRxWYROSfg8IwQiggln4o/twGfF0/KosnKsnSmH35oOpTjjnP7DtGBmy+86dNN +7zR9euxbxblJWXQqqmaV+NhjubHSzjgjvPf0CB1vpFI6HgAGAKOCHFMsB4oriEgX4Fago1tlgk0b +3Hij5TufP7/8KOWD4VZjX7HCplk+/RTaRswdNToJ9wtl0yYLlSICP/3kebhHI16nUgpUdYDzt6Qh +FUPxU0FEzgTeAC5T1T2FFVgcP5XffrPcJ5dcAi++WP4tYtxo7Hv3WljzF17wOpRghPOFsmiRJbp6 +8EF44IHy7/MTq8RCpxK1+VRE5JrCjqvqtCKKKDKfiog0AqYCfVV1XVEyhZpPZfdum3++/XYzsawI +lLax//ST6Z3+/GdLuuSRn3C9UObNs8587NjYj+Rc3omFTiWa86lcVcgxBQrtVEL0U3kcsyR71fGq +z1DVUn0jZ2VZHpQePSpOhwKla+zPPw8PP2xKyH0hZcupmITjhbJ9u8VLmzgRLr3U3bI93CcWOhW3 +cXP661a3iqIAPxVVHSAifwCXA+nA7SW9yZ49lpnx/PPNH2XkyFJKHWOUtLE/+yyMHw+//gq1apUv +3x23cfuFogq33mqpAbwOJTaoiJ1KKLnji42IXCkiD4vIE74lhGt8fiqXAqcBvUWkVcA5lwPNVLUF +cAfwekllfOopOHzYguhNmRJ9ZpeuxuIJQkka+8yZluL3q69MKZyYGPy8cMsebtyS3+0XysyZsGED +FDU74dV/ZPGX3+tUXEBEXgduwPKeCBahOJRs7Tl+KmoBKH1+Kv70AN4GUNUFQIKTabJYZGXZ9MGa +NbZEY9j1aOtUVO1l9uyzcGIR3kHl6aVQGtx+oTz/PAwZUrQRiVf/kaWidyrh+D4/X1XPFJGlqvqk +iIwiNH+SUPxUAs/Z7Oz7vajCVS3/+cGD5iHfsGHFNsEsrLH76urQITOv3r3bQqDv2+d5ZReHwuo4 +O9vq+PDh/MuRI3m3Dx60pFhbtlj+d4/YwetU3OEP5+8hJ6nWLuCEMNynSFq3NrPXvXvth1mpkjkz +nnCC6QUqMpUrQ0oKvPKK1U16unUivqVSJdOXVK9uKWPPOcdyyVSqFGnJY4dq1cyPp3nz3I7C9zcz +E6pUsXOqVrWoDccem3fdt129uqWq/uqr8m/qXt6oWtV+T8nJ9r8/cgQ++MCS/JVbShPiONiCWWjV +AnoC2zDz4KdCuO48YKbf9hBgcMA5rwM3+G2vBuoVUJ56i7d4i7d4S/GX0vQB4ryAw4KIVAWOVdUi +DU9FpBKwBgsouRX4Aeitqqv8zrkCuFtVr3TSFI9W1bAElPTw8PDwKD6uT385ncOVQBNf+SKCqr5Y +2HWh+Kmo6mcicoWI/IKZFLtlxuzh4eHh4QKuj1RE5DPgMLAMyPbtV9XSuWl6eHh4eEQ94fBTaaCq +16jqMFV90reE4T5BEZHLRGS1iPwsIoOLvqLsEZFxIvK7iCz125coIrNEZI2IfCEiCX7HhorIWhFZ +JSJdIyN1LiLSQES+EpEVIrJMRO5x9kf9M4hIVRFZICKLHflHxIrs/ohInIj8KCKfONsxI7+IrBeR +n5z/wQ/OvliSP0FEPnDkWSEi7WJFfhFp6dT7j87ffSJyj6vyh0FR/zzQ1e1yQ7x3HLl57itjee5b +RUKWIuTsCLQGlvrtexZ42FkfDIx01k8FFmNTiU2c55MIy3880NpZr4HpwlrFyjMA1Z2/lbC8PB1i +RXa/Z7gPmAh8EoPt51cgMWBfLMk/AbjVWT8GSIgl+f2eIw5LiNjQTfnDIeg1wCHMtHg/lvZ3fxlV +0nnA537b+SzIomXBOj7/TiXHkg17aa8O9gyYz0+7SMsf8CwfAZfE2jMA1TGDkFNjSXYsgvdsoDO5 +nUosyZ8G1A7YFxPyA/HAuiD7Y0L+AJm7At+4LX84pr9GYS/36qoar6o1VTU+DPcJRjAHyrBlh3SZ +ZFX9HUBVtwE+P/+CHD6jAhFpgo265mONMuqfwZk6WoyZvKeq6kpiRHaHl4CHMPNPH7EkvwKzRWSh +iNzm7IsV+ZsCO0XkTWcK6Q0RqU7syO/PDcC7zrpr8oejU9kELFenW/MoMVFffyJSA/gQuFdVD5Jf +5qh8BlXNVtWzsS/+C0SkMzEiu4hcCfyuqkuwMEgFEZXyO3RQ1XOAK4C7ReQCYqT+sWmgc4BXnGdI +x77mY0V+AESkMtAd+MDZ5Zr84fCo/xVIFZHPgSO+nVqESbFLhJToK0r5XUTqqervInI8sN3Zvxmb +8/QRFc8kIsdgHco7qvqxszumnkFV9zvWim2IHdk7AN3FfLaqATVF5B1gW4zIj6pudf7uEJGPsHBM +sVL/vwGbVHWRsz0V61RiRX4flwP/U9WdzrZr8odjpJIG/BeoAtT0W8qCnERfIlIFS/T1SRndu7gI +eb80PwH6Oeu3AB/77e8lIlVEpCnQHNMDRJrxwEpV/affvqh/BhGp47NsEZFqwJ8xRWTUyw6gqo+o +aiNVPQlr31+pal9gOjEgv4hUd0a4iMhx2Lz+MmKn/n8HNolIS2fXxcAKYkR+P3oDk/223ZPfZcVP +JeCFCCufLsOskdYCQyIpSyEyvotZXRwBNmJOnInAl47ss4BafucPxawuVhEhy7oA+TsAWZh13WLg +R6fek6L9GYAzHHkXAz8BDzr7o172IM9yIbmK+piQH9NJ+NrNMt9vNFbkd+Q5C/uAXYIlH0yIMfmr +AzuAmn77XJM/HM6P36tqe1cL9fDw8PCICcKhU1niOGR9gCmxANCic9R7eHh4eMQ44ehUjsXC3V/k +t08pIke9h4eHh0fsE9YoxR4eHh4eFYtwpBNuICL/JyLbnWWqiDRw+z4eHh4eHtFHOEyK38TM0Oo7 +y3Rnn4eHh4dHOScc1l9LVLV1Ufs8PDw8PMof4Rip7BKRPiJSyVn6YIp7D48yQ0SS/EJ8bxWR3/zC +fc8L0z1PF5HxznqyiEwXkSVOePQZ4bin370bi8iyEl77X59DoodHaQnHSKUx8DLQHrP6+g64R1U3 +unojD48QEZEngIMa5lBBIvIW8LKqLhKR14EVqvqyc+x0VV0exns3Bqar6pkluPY2ID7c9eNRMXB9 +pKKqG1S1u6rWVdVkVb3a61A8IkyewIsicsD5e6GIpIrIRyLyi4iMdEbZP4glkWrqnFdHRD4US+61 +QETOz3cDCwt0nubGhDoBixMFgK9DEZHjRORLEVnk3KO7s7+xkwTpTSdR0iQR+bOIfOtst3HOGyYi +b4vId87+2wJE8UVhfs6RdYmIDHD2Hy8ic5wR21IR6eBcMh0L+eLhUWpc81NxvgYLQlX1Kbfu5eFR +SvyH52diCcb2YnHrxqhqW7Fsln8D7gf+Cbyoqt+JSEPgCywHiz9nYyEufLwCvCcig7BYeG+qBVL8 +A7haVQ+KSG0sZYAvPl0zoKeqrhSRRUAvVe3gdDyPAn9xzjsDaIfF1FscZGrtr8BeVW3ndHbfisgs +oCcwU1VTRESwcB2oBRGsLSLHqWo6Hh6lwE3nx2CN8TisgdcGvE7FIxpZqKrbAUTkF6zDAItL1dlZ +vwQ4xXkRA9QQkeqqesivnMbAVt+Gqs5yRjqXYSHefxSR04F9QIqIdAKygfoi4stdkaaW2wUsSOGX +frI09rvXx6p6FNNffoVF+f3J73hX4AwRuc7ZjgdaYPGqxouFPf9YVf2v2Y5Fo11dSF15eBSJa52K +qo7yrYtITeBeLFDiFCxxl4dHNHLEbz3bbzub3N+HYNnuMoooK880m6ruxdr/FBGZDnTCXvB1gLNV +NVtE0rAoFKHKAnlHWkL+3BcC/E1VZ+cT0HKXXAlMEJFRqjqxkHI8PIqNqzoVx+LmaWApTjIbVR3s ++xL08IgSCktuFYxZ2EeSXSxyVpBzNmB6FN85XcRC6/s+sk7CIlInANudDqULeUcgocrVwwlFXhuL +VLww4PgXwF1iOW8QkRZiIecbOfceB4zFkk35qIefDsjDo6S4qVN5HstP/wZwhlomQA+PaKSgL/KC +9t8LvCIiP2HpHeYCdwWcswRo6bf9J+DfIpKBfbyNUdX/ich6YLpT1iIsnHiw+xc2algKpGLTyv9Q +1W2O9ZePsUATbMpNsKmtq7HpvIccmQ4ANwOISD1gp6dP8XAD10yKRcQ3XM8kyPBcyy5PvYdHRBCR +N4HXVXVBGO8xDDjgpvmvYx1WQ1VfcqtMj4qLmzqVcDhSenjEEqMwa7GwdSph4gZsJOPhUWq8KMUe +Hh4eHq7hjS48PDw8PFzD61Q8PDw8PFzD61Q8PDw8PFzD61Q8PDw8PFzD61Q8PDw8PFzD61Q8PDw8 +PFzj/wHlQqq6YUq0TwAAAABJRU5ErkJggg== +" +> +</div> + +</div> + +</div> +</div> + +</div> +<div class="cell border-box-sizing code_cell rendered"> +<div class="input"> +<div class="prompt input_prompt">In [ ]:</div> +<div class="inner_cell"> + <div class="input_area"> +<div class=" highlight hl-ipython2"><pre> +</pre></div> + +</div> +</div> +</div> + +</div> + </div> + </div> +</body> +</html> diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/XmmDoxygenLayout.xml b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/XmmDoxygenLayout.xml new file mode 100644 index 0000000..6672083 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/XmmDoxygenLayout.xml @@ -0,0 +1,184 @@ +<doxygenlayout version="1.0"> + <!-- Generated by doxygen 1.8.11 --> + <!-- Navigation index tabs for HTML output --> + <navindex> + <tab type="mainpage" visible="yes" title=""/> + <tab type="modules" visible="yes" title="" intro=""/> + <tab type="classes" visible="yes" title=""> + <tab type="classlist" visible="yes" title="" intro=""/> + <tab type="classindex" visible="$ALPHABETICAL_INDEX" title=""/> + <tab type="hierarchy" visible="yes" title="" intro=""/> + <tab type="classmembers" visible="yes" title="" intro=""/> + </tab> + </navindex> + + <!-- Layout definition for a class page --> + <class> + <briefdescription visible="yes"/> + <includes visible="$SHOW_INCLUDE_FILES"/> + <inheritancegraph visible="$CLASS_GRAPH"/> + <collaborationgraph visible="$COLLABORATION_GRAPH"/> + <memberdecl> + <nestedclasses visible="yes" title=""/> + <publictypes title=""/> + <services title=""/> + <interfaces title=""/> + <publicslots title=""/> + <signals title=""/> + <publicmethods title=""/> + <publicstaticmethods title=""/> + <publicattributes title=""/> + <publicstaticattributes title=""/> + <protectedtypes title=""/> + <protectedslots title=""/> + <protectedmethods title=""/> + <protectedstaticmethods title=""/> + <protectedattributes title=""/> + <protectedstaticattributes title=""/> + <packagetypes title=""/> + <packagemethods title=""/> + <packagestaticmethods title=""/> + <packageattributes title=""/> + <packagestaticattributes title=""/> + <properties title=""/> + <events title=""/> + <privatetypes title=""/> + <privateslots title=""/> + <privatemethods title=""/> + <privatestaticmethods title=""/> + <privateattributes title=""/> + <privatestaticattributes title=""/> + <friends title=""/> + <related title="" subtitle=""/> + <membergroups visible="yes"/> + </memberdecl> + <detaileddescription title=""/> + <memberdef> + <inlineclasses title=""/> + <typedefs title=""/> + <enums title=""/> + <services title=""/> + <interfaces title=""/> + <constructors title=""/> + <functions title=""/> + <related title=""/> + <variables title=""/> + <properties title=""/> + <events title=""/> + </memberdef> + <allmemberslink visible="yes"/> + <usedfiles visible="$SHOW_USED_FILES"/> + <authorsection visible="yes"/> + </class> + + <!-- Layout definition for a namespace page --> + <namespace> + <briefdescription visible="yes"/> + <memberdecl> + <nestednamespaces visible="yes" title=""/> + <constantgroups visible="yes" title=""/> + <classes visible="yes" title=""/> + <typedefs title=""/> + <enums title=""/> + <functions title=""/> + <variables title=""/> + <membergroups visible="yes"/> + </memberdecl> + <detaileddescription title=""/> + <memberdef> + <inlineclasses title=""/> + <typedefs title=""/> + <enums title=""/> + <functions title=""/> + <variables title=""/> + </memberdef> + <authorsection visible="yes"/> + </namespace> + + <!-- Layout definition for a file page --> + <file> + <briefdescription visible="yes"/> + <includes visible="$SHOW_INCLUDE_FILES"/> + <includegraph visible="$INCLUDE_GRAPH"/> + <includedbygraph visible="$INCLUDED_BY_GRAPH"/> + <sourcelink visible="yes"/> + <memberdecl> + <classes visible="yes" title=""/> + <namespaces visible="yes" title=""/> + <constantgroups visible="yes" title=""/> + <defines title=""/> + <typedefs title=""/> + <enums title=""/> + <functions title=""/> + <variables title=""/> + <membergroups visible="yes"/> + </memberdecl> + <detaileddescription title=""/> + <memberdef> + <inlineclasses title=""/> + <defines title=""/> + <typedefs title=""/> + <enums title=""/> + <functions title=""/> + <variables title=""/> + </memberdef> + <authorsection/> + </file> + + <!-- Layout definition for a group page --> + <group> + <briefdescription visible="yes"/> + <groupgraph visible="$GROUP_GRAPHS"/> + <memberdecl> + <nestedgroups visible="yes" title=""/> + <dirs visible="yes" title=""/> + <files visible="yes" title=""/> + <namespaces visible="yes" title=""/> + <classes visible="yes" title=""/> + <defines title=""/> + <typedefs title=""/> + <enums title=""/> + <enumvalues title=""/> + <functions title=""/> + <variables title=""/> + <signals title=""/> + <publicslots title=""/> + <protectedslots title=""/> + <privateslots title=""/> + <events title=""/> + <properties title=""/> + <friends title=""/> + <membergroups visible="yes"/> + </memberdecl> + <detaileddescription title=""/> + <memberdef> + <pagedocs/> + <inlineclasses title=""/> + <defines title=""/> + <typedefs title=""/> + <enums title=""/> + <enumvalues title=""/> + <functions title=""/> + <variables title=""/> + <signals title=""/> + <publicslots title=""/> + <protectedslots title=""/> + <privateslots title=""/> + <events title=""/> + <properties title=""/> + <friends title=""/> + </memberdef> + <authorsection visible="yes"/> + </group> + + <!-- Layout definition for a directory page --> + <directory> + <briefdescription visible="yes"/> + <directorygraph visible="yes"/> + <memberdecl> + <dirs visible="yes"/> + <files visible="yes"/> + </memberdecl> + <detaileddescription title=""/> + </directory> +</doxygenlayout> diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/footer.html b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/footer.html new file mode 100644 index 0000000..62b4587 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/footer.html @@ -0,0 +1,3 @@ +<!-- HTML footer for doxygen 1.8.9.1--> +</body> +</html> diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/header.html b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/header.html new file mode 100644 index 0000000..d66dfb6 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/header.html @@ -0,0 +1,37 @@ +<!-- HTML header for doxygen 1.8.9.1--> +<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> +<html xmlns="http://www.w3.org/1999/xhtml"> +<head> +<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> +<meta http-equiv="X-UA-Compatible" content="IE=9"/> +<meta name="generator" content="Doxygen $doxygenversion"/> +<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME--> +<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME--> +<script type="text/javascript" src="$relpath^jquery.js"></script> +<script type="text/javascript" src="$relpath^dynsections.js"></script> +<link href='http://fonts.googleapis.com/css?family=Merriweather:400,700,400italic,700italic&subset=latin,latin-ext' rel='stylesheet' type='text/css'> +<link href='http://fonts.googleapis.com/css?family=Droid+Sans:400,700' rel='stylesheet' type='text/css'> +$treeview +$search +$mathjax +<link href="$relpath^$stylesheet" rel="stylesheet" type="text/css" /> +$extrastylesheet +</head> +<body> +<div id="top"><!-- do not remove this div, it is closed by doxygen! --> + +<!--BEGIN TITLEAREA--> +<div id="titlearea"> + <img src="$projectlogo"/> + <h1>$projectname</h1> + <nav> + <ul> + <li><a href="index.html">About</a></li> + <li><a href="GettingStarted.html">Getting Started</a></li> + <li><a href="Documentation.html">Documentation</a></li> + <li><a href="Download.html">Download</a></li> + </ul> + </nav> +</div> +<!--END TITLEAREA--> +<!-- end header part --> diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/jdoxygen.css b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/jdoxygen.css new file mode 100644 index 0000000..399d2fc --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/jdoxygen.css @@ -0,0 +1,1199 @@ +/* The standard CSS for doxygen */ + +body, table, div, p, dl { + font: 400 14px/19px 'Droid Sans',sans-serif; +} + +body { + padding: 0 !important; +} + +#top { + /*border-bottom: 1px solid #A5A5A5;*/ + /*background-color: #f35757;*/ + color: #253555; +} + +#nav-path { display: none; } + +/* @group Heading Levels */ + +h1.groupheader { + font-size: 150%; +} + +.title { + font-size: 150%; + font-weight: bold; + margin: 10px 2px; +} + +h2.groupheader { + border-bottom: 1px solid #A5A5A5; + color: #4970C0; + font-size: 150%; + font-weight: normal; + margin-top: 1.75em; + padding-top: 8px; + padding-bottom: 4px; + width: 100%; +} + +h3.groupheader { + font-size: 100%; +} + +h1, h2, h3, h4, h5, h6 { + -webkit-transition: text-shadow 0.5s linear; + -moz-transition: text-shadow 0.5s linear; + -ms-transition: text-shadow 0.5s linear; + -o-transition: text-shadow 0.5s linear; + transition: text-shadow 0.5s linear; + margin-right: 15px; + font-weight: normal; +} + +h1.glow, h2.glow, h3.glow, h4.glow, h5.glow, h6.glow { + text-shadow: 0 0 15px cyan; +} + +dt { + font-weight: bold; +} + +.icon { + font-family: Arial, Helvetica; + font-weight: bold; + font-size: 12px; + height: 14px; + width: 16px; + display: inline-block; + background-color: #989898; + color: white; + text-align: center; + border-radius: 4px; + margin-left: 2px; + margin-right: 2px; + margin-bottom: 2px; + padding-bottom: 2px; +} + +div.multicol { + -moz-column-gap: 1em; + -webkit-column-gap: 1em; + -moz-column-count: 3; + -webkit-column-count: 3; +} + +p.startli, p.startdd, p.starttd { + margin-top: 2px; +} + +p.endli { + margin-bottom: 0px; +} + +p.enddd { + margin-bottom: 4px; +} + +p.endtd { + margin-bottom: 2px; +} + +/* @end */ + +caption { + font-weight: bold; +} + +span.legend { + font-size: 70%; + text-align: center; +} + +h3.version { + font-size: 90%; + text-align: center; +} + +div.qindex, div.navtab{ + background-color: #E2E8F2; + /*border: 1px solid #A3B4D7;*/ + text-align: center; + padding-top: 5px; + padding-bottom: 5px; +} + +div.qindex, div.navpath { + width: 100%; + line-height: 140%; +} + +div.navtab { + margin-right: 15px; +} + +/* @group Link Styling */ + +a { + color: #F35757; + font-weight: normal; + text-decoration: none; +} + +.contents a:visited { + color: #F35757; +} + +a:hover { + text-decoration: underline; +} + +a.qindex { + font-weight: bold; +} + +a.qindexHL { + font-weight: bold; + background-color: #9CAFD4; + color: #ffffff; + border: 1px double #869DCA; +} + +.contents a.qindexHL:visited { + color: #ffffff; +} + +a.el { + font-weight: bold; +} + +a.elRef { +} + +a.code, a.code:visited { + color: #4665A2; +} + +a.codeRef, a.codeRef:visited { + color: #4665A2; +} + +/* @end */ + +dl.el { + margin-left: -1cm; +} + +pre.fragment { + border: 1px solid #C4CFE5; + background-color: #FBFCFD; + padding: 4px 6px; + margin: 4px 8px 4px 2px; + overflow: auto; + word-wrap: break-word; + font-size: 9pt; + line-height: 125%; + font-family: monospace, fixed; + font-size: 105%; +} + +div.fragment { + padding: 4px; + margin: 4px; + background-color: #FBFCFD; + border: 1px solid #C4CFE5; +} + +div.line { + font-family: monospace, fixed; + font-size: 13px; + min-height: 13px; + line-height: 1.0; + text-wrap: unrestricted; + white-space: -moz-pre-wrap; /* Moz */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + white-space: pre-wrap; /* CSS3 */ + word-wrap: break-word; /* IE 5.5+ */ + text-indent: -53px; + padding-left: 53px; + padding-bottom: 0px; + margin: 0px; + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +div.line.glow { + background-color: cyan; + box-shadow: 0 0 10px cyan; +} + + +span.lineno { + padding-right: 4px; + text-align: right; + border-right: 2px solid #0F0; + background-color: #E8E8E8; + white-space: pre; +} +span.lineno a { + background-color: #D8D8D8; +} + +span.lineno a:hover { + background-color: #C8C8C8; +} + +div.ah { + background-color: #989898; + font-weight: bold; + color: #ffffff; + margin-bottom: 3px; + margin-top: 3px; + padding: 0.2em; +} + +div.groupHeader { + margin-left: 16px; + margin-top: 12px; + font-weight: bold; +} + +div.groupText { + margin-left: 16px; + font-style: italic; +} + +body { + background-color: white; + color: black; + margin: 0; +} + +div.contents { + margin: 0 10%; + margin-bottom: 40px; +} + +td.indexkey { + background-color: #EBEFF6; + font-weight: bold; + border: 1px solid #C4CFE5; + margin: 2px 0px 2px 0; + padding: 2px 10px; + white-space: nowrap; + vertical-align: top; +} + +td.indexvalue { + background-color: #EBEFF6; + border: 1px solid #C4CFE5; + padding: 2px 10px; + margin: 2px 0px; +} + +tr.memlist { + background-color: #EEF1F7; +} + +p.formulaDsp { + text-align: center; +} + +img.formulaDsp { + +} + +img.formulaInl { + vertical-align: middle; +} + +div.center { + text-align: center; + margin-top: 0px; + margin-bottom: 0px; + padding: 0px; +} + +div.center img { + border: 0px; +} + +address.footer { + text-align: center; + padding: 20px; + background-color: #242d36; + color: #fff; + margin-top: 30px +} + +img.footer { + border: 0px; + vertical-align: middle; +} + +/* @group Code Colorization */ + +span.keyword { + color: #008000 +} + +span.keywordtype { + color: #604020 +} + +span.keywordflow { + color: #e08000 +} + +span.comment { + color: #800000 +} + +span.preprocessor { + color: #806020 +} + +span.stringliteral { + color: #002080 +} + +span.charliteral { + color: #008080 +} + +span.vhdldigit { + color: #ff00ff +} + +span.vhdlchar { + color: #000000 +} + +span.vhdlkeyword { + color: #700070 +} + +span.vhdllogic { + color: #ff0000 +} + +blockquote { + background-color: #F7F8FB; + border-left: 2px solid #9CAFD4; + margin: 0 24px 0 4px; + padding: 0 12px 0 16px; +} + +/* @end */ + +/* +.search { + color: #003399; + font-weight: bold; +} + +form.search { + margin-bottom: 0px; + margin-top: 0px; +} + +input.search { + font-size: 75%; + color: #000080; + font-weight: normal; + background-color: #e8eef2; +} +*/ + +td.tiny { + font-size: 75%; +} + +.dirtab { + padding: 4px; + border-collapse: collapse; + border: 1px solid #A3B4D7; +} + +th.dirtab { + background: #EBEFF6; + font-weight: bold; +} + +hr { + height: 0px; + border: none; + border-top: 1px solid #4A6AAA; +} + +hr.footer { + height: 1px; + display: none; +} + +/* @group Member Descriptions */ + +table.memberdecls { + border-spacing: 0px; + padding: 0px; +} + +.memberdecls td, .fieldtable tr { + -webkit-transition-property: background-color, box-shadow; + -webkit-transition-duration: 0.5s; + -moz-transition-property: background-color, box-shadow; + -moz-transition-duration: 0.5s; + -ms-transition-property: background-color, box-shadow; + -ms-transition-duration: 0.5s; + -o-transition-property: background-color, box-shadow; + -o-transition-duration: 0.5s; + transition-property: background-color, box-shadow; + transition-duration: 0.5s; +} + +.memberdecls td.glow, .fieldtable tr.glow { + background-color: cyan; + box-shadow: 0 0 15px cyan; +} + +.mdescLeft, .mdescRight, +.memItemLeft, .memItemRight, +.memTemplItemLeft, .memTemplItemRight, .memTemplParams { + background-color: #F9FAFC; + border: none; + margin: 4px; + padding: 1px 0 0 8px; +} + +.mdescLeft, .mdescRight { + padding: 0px 8px 4px 8px; + color: #555; +} + +.memSeparator { + border-bottom: 1px solid #DEE4F0; + line-height: 1px; + margin: 0px; + padding: 0px; +} + +.memItemLeft, .memTemplItemLeft { + white-space: nowrap; +} + +.memItemRight { + width: 100%; +} + +.memTemplParams { + color: #4665A2; + white-space: nowrap; + font-size: 80%; +} + +/* @end */ + +/* @group Member Details */ + +/* Styles for detailed member documentation */ + +.memtemplate { + font-size: 80%; + color: #4665A2; + font-weight: normal; + margin-left: 9px; +} + +.memnav { + background-color: #EBEFF6; + border: 1px solid #A3B4D7; + text-align: center; + margin: 2px; + margin-right: 15px; + padding: 2px; +} + +.mempage { + width: 100%; +} + +.memitem { + padding: 0; + margin-bottom: 10px; + margin-right: 5px; + -webkit-transition: box-shadow 0.5s linear; + -moz-transition: box-shadow 0.5s linear; + -ms-transition: box-shadow 0.5s linear; + -o-transition: box-shadow 0.5s linear; + transition: box-shadow 0.5s linear; + display: table !important; + width: 100%; +} + +.memitem.glow { + box-shadow: 0 0 15px cyan; +} + +.memname { + font-weight: bold; + margin-left: 6px; +} + +.memname td { + vertical-align: bottom; +} + +.memproto, dl.reflist dt { + padding: 6px 0px 6px 0px; + color: #253555; + font-weight: bold; + background-color: #E2E8F2; +} + +.memdoc, dl.reflist dd { + border-bottom: 1px solid #E2E8F2; + border-left: 1px solid #E2E8F2; + border-right: 1px solid #E2E8F2; + padding: 6px 10px 2px 10px; + background-color: #FBFCFD; + border-top-width: 0; + background-color: #FFFFFF; +} + +dl.reflist dt { + padding: 5px; +} + +dl.reflist dd { + margin: 0px 0px 10px 0px; + padding: 5px; +} + +.paramkey { + text-align: right; +} + +.paramtype { + white-space: nowrap; +} + +.paramname { + color: #C72C2C; + white-space: nowrap; +} +.paramname em { + font-style: normal; +} +.paramname code { + line-height: 14px; +} + +.params, .retval, .exception, .tparams { + margin-left: 0px; + padding-left: 0px; +} + +.params .paramname, .retval .paramname { + font-weight: bold; + vertical-align: top; +} + +.params .paramtype { + font-style: italic; + vertical-align: top; +} + +.params .paramdir { + font-family: "courier new",courier,monospace; + vertical-align: top; +} + +table.mlabels { + border-spacing: 0px; +} + +td.mlabels-left { + width: 100%; + padding: 0px; +} + +td.mlabels-right { + vertical-align: bottom; + padding: 0px; + white-space: nowrap; +} + +span.mlabels { + margin-left: 8px; +} + +span.mlabel { + background-color: #728DC1; + text-shadow: none; + color: white; + margin-right: 4px; + padding: 5px 5px; + border-radius: 0px; + font-size: 7pt; + white-space: nowrap; + vertical-align: middle; +} + + + +/* @end */ + +/* these are for tree view when not used as main index */ + +div.directory { + margin: 10px 0px; + border-top: 1px solid #A8B8D9; + border-bottom: 1px solid #A8B8D9; + width: 100%; +} + +.directory table { + border-collapse:collapse; +} + +.directory td { + margin: 0px; + padding: 0px; + vertical-align: top; +} + +.directory td.entry { + white-space: nowrap; + padding-right: 6px; +} + +.directory td.entry a { + outline:none; +} + +.directory td.entry a img { + border: none; +} + +.directory td.desc { + width: 100%; + padding-left: 6px; + padding-right: 6px; + padding-top: 3px; + border-left: 1px solid rgba(0,0,0,0.05); +} + +.directory tr.even { + padding-left: 6px; + background-color: #F7F8FB; +} + +.directory img { + vertical-align: -30%; +} + +.directory .levels { + white-space: nowrap; + width: 100%; + text-align: right; + font-size: 9pt; +} + +.directory .levels span { + cursor: pointer; + padding-left: 2px; + padding-right: 2px; + color: #3D578C; +} + +div.dynheader { + margin-top: 8px; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +address { + font-style: normal; + color: #2A3D61; +} + +table.doxtable { + border-collapse:collapse; + margin-top: 4px; + margin-bottom: 4px; +} + +table.doxtable td, table.doxtable th { + border: 1px solid #2D4068; + padding: 3px 7px 2px; +} + +table.doxtable th { + background-color: #374F7F; + color: #FFFFFF; + font-size: 110%; + padding-bottom: 4px; + padding-top: 5px; +} + +table.fieldtable { + width: 100%; + margin-bottom: 10px; + border: 1px solid #E2E8F2; + border-spacing: 0px; +} + +.fieldtable td, .fieldtable th { + padding: 3px 7px 2px; +} + +.fieldtable td.fieldtype, .fieldtable td.fieldname { + white-space: nowrap; + border-right: 1px solid #E2E8F2; + border-bottom: 1px solid #E2E8F2; + vertical-align: top; +} + +.fieldtable td.fielddoc { + border-bottom: 1px solid #E2E8F2; + width: 100%; +} + +.fieldtable tr:last-child td { + border-bottom: none; +} + +.fieldtable th { + background-color: #E2E8F2; + font-size: 90%; + color: #253555; + padding-bottom: 4px; + padding-top: 5px; + text-align:left; + border-bottom: 1px solid #E2E8F2; +} + + +.tabsearch { + top: 0px; + left: 10px; + height: 36px; + background-image: url('tab_b.png'); + z-index: 101; + overflow: hidden; + font-size: 13px; +} + +.navpath ul +{ + font-size: 11px; + background-color: #E2E8F2; + height:30px; + line-height:30px; + color:#8AA0CC; + overflow:hidden; + margin:0px; + padding:0px; +} + +.navpath li +{ + list-style-type:none; + float:left; + padding-left:10px; + padding-right:15px; + background-image:url('bc_s.png'); + background-repeat:no-repeat; + background-position:right; + color:#364D7C; +} + +.navpath li.navelem a +{ + height:32px; + display:block; + text-decoration: none; + outline: none; + color: #283A5D; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; + text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9); + text-decoration: none; +} + +.navpath li.navelem a:hover +{ + color:#6884BD; +} + +.navpath li.footer +{ + list-style-type:none; + float:right; + padding-left:10px; + padding-right:15px; + background-image:none; + background-repeat:no-repeat; + background-position:right; + color:#364D7C; + font-size: 8pt; +} + + +div.summary +{ + display: none; + float: right; + font-size: 8pt; + padding-right: 5px; + width: 50%; + text-align: right; +} + +div.summary a +{ + white-space: nowrap; +} + +div.ingroups +{ + font-size: 8pt; + width: 50%; + text-align: left; +} + +div.ingroups a +{ + white-space: nowrap; +} + +div.header +{ + margin: 0 auto; + border-bottom: 1px solid #C4CFE5; + width: 80%; + max-width: 1024px; +} + +div.headertitle +{ + padding: 10px 0; +} + +dl +{ + padding: 0 0 0 10px; +} + +/* dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug */ +dl.section +{ + margin-left: 0px; + padding-left: 0px; +} + +dl.note +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #D0C000; +} + +dl.warning, dl.attention +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #FF0000; +} + +dl.pre, dl.post, dl.invariant +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00D000; +} + +dl.deprecated +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #505050; +} + +dl.todo +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #00C0E0; +} + +dl.test +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #3030E0; +} + +dl.bug +{ + margin-left:-7px; + padding-left: 3px; + border-left:4px solid; + border-color: #C08050; +} + +dl.section dd { + margin-bottom: 6px; +} + + +#projectlogo +{ + text-align: center; + vertical-align: bottom; + border-collapse: separate; +} + +#projectlogo img +{ + border: 0px none; +} + +#projectname { + font-size: 32px; + margin: 0 auto; + padding: 3%; + text-align: center; + background-color: #242d36; + color: #fff; +} + +#projectbrief +{ + font: 120% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#projectnumber +{ + font: 50% Tahoma, Arial,sans-serif; + margin: 0px; + padding: 0px; +} + +#titlearea +{ + padding: 0px; + margin: 0px; + width: 100%; + text-align: center; +} + +#titlearea img +{ + width: 100%; +} + +#titlearea nav +{ + padding:0 10%; + padding: 0; + text-align: center; + margin-bottom: 10px; + background-color: #f35757; +} + +#titlearea nav ul +{ + display: inline-block; + padding: 0; + margin: 0 auto; +} + +#titlearea nav ul li +{ + list-style: none; + display: inline-block; + /*float: left;*/ + /*width: 20%;*/ + padding: 10px 20px; + text-align: center; +} + +#titlearea nav ul li a +{ + color: white; + text-decoration: none; +} + +#titlearea nav ul li a:hover +{ + color: #333; + text-decoration: none; +} + +#navrow1, #navrow2 +{ + display: none; +} + +.image, +.image img +{ + text-align: center; + max-width: 100%; +} + +.dotgraph +{ + text-align: center; +} + +.mscgraph +{ + text-align: center; +} + +.caption +{ + font-weight: bold; +} + +div.zoom +{ + border: 1px solid #90A5CE; +} + +dl.citelist { + margin-bottom:50px; +} + +dl.citelist dt { + color:#334975; + float:left; + font-weight:bold; + margin-right:10px; + padding:5px; +} + +dl.citelist dd { + margin:2px 0; + padding:5px 0; +} + +div.toc { + padding: 14px 25px; + background-color: #F4F6FA; + border: 1px solid #D8DFEE; + border-radius: 7px 7px 7px 7px; + float: right; + height: auto; + margin: 0 20px 10px 10px; + width: 200px; +} + +div.toc li { + background: url("bdwn.png") no-repeat scroll 0 5px transparent; + font: 10px/1.2 Verdana,DejaVu Sans,Geneva,sans-serif; + margin-top: 5px; + padding-left: 10px; + padding-top: 2px; +} + +div.toc h3 { + font: bold 12px/1.2 Arial,FreeSans,sans-serif; + color: #4665A2; + border-bottom: 0 none; + margin: 0; +} + +div.toc ul { + list-style: none outside none; + border: medium none; + padding: 0px; +} + +div.toc li.level1 { + margin-left: 0px; +} + +div.toc li.level2 { + margin-left: 15px; +} + +div.toc li.level3 { + margin-left: 30px; +} + +div.toc li.level4 { + margin-left: 45px; +} + +.inherit_header { + font-weight: bold; + color: gray; + cursor: pointer; + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; +} + +.inherit_header td { + padding: 6px 0px 2px 5px; +} + +.inherit { + display: none; +} + +tr.heading h2 { + margin-top: 12px; + margin-bottom: 4px; +} + +@media print +{ + #top { display: none; } + #side-nav { display: none; } + #nav-path { display: none; } + body { overflow:visible; } + h1, h2, h3, h4, h5, h6 { page-break-after: avoid; } + .summary { display: none; } + .memitem { page-break-inside: avoid; } + #doc-content + { + margin-left:0 !important; + height:auto !important; + width:auto !important; + overflow:inherit; + display:inline; + } +} + +#navrow2 { + +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/jtabs.css b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/jtabs.css new file mode 100644 index 0000000..8c73f31 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/jtabs.css @@ -0,0 +1,59 @@ +.tabs, .tabs2, .tabs3 { + background-color: #F35757; + background-image: none; + width: 100%; + z-index: 101; + font-size: 13px; + font-family: 'Lucida Grande',Geneva,Helvetica,Arial,sans-serif; +} + +.tabs2 { + font-size: 10px; +} +.tabs3 { + font-size: 9px; +} + +.tablist { + width: 80%; + margin: 0; + padding: 0; + display: table; +} + +.tablist li { + float: left; + text-align: center; + display: table-cell; + background-color: #F35757; + line-height: 36px; + list-style: none; + width: 16%; +} + +.tablist a { + display: block; + padding: 0 30px; + font-size: 14px; + background-color: #F35757; + border-right: 1px solid #fff; + border-bottom: 1px solid #fff; + color: #FFF; + text-decoration: none; + outline: none; +} + +.tabs3 .tablist a { + padding: 0 10px; +} + +.tablist a:hover { + background-color: #B30303; + color: #fff; + text-decoration: none; +} + +.tablist li.current a { + background-color: #B30303; + color: #fff; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/python_example.py b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/python_example.py new file mode 100644 index 0000000..66d7bc6 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/python_example.py @@ -0,0 +1,47 @@ +import numpy as np +import mhmm + +# Load Training Data +training_motion_1 = np.genfromtxt('training_motion_1.txt') +training_motion_2 = np.genfromtxt('training_motion_2.txt') +training_sound_1 = np.genfromtxt('training_sound_1.txt') +training_sound_2 = np.genfromtxt('training_sound_2.txt') + +dim_gesture = training_motion_1.shape[1] +dim_sound = training_sound_1.shape[1] + +# Create a multimodal training set +training_set = mhmm.TrainingSet(mhmm.BIMODAL) +training_set.set_dimension(dim_gesture + dim_sound) +training_set.set_dimension_input(dim_sound) + +# Record First Phrase +for frame_motion, frame_sound in zip(training_motion_1, training_sound_1): + training_set.recordPhrase_input (0, frame_motion) + training_set.recordPhrase_output(0, frame_sound) +training_set.setPhraseLabel(0, mhmm.Label('one')) + +# Record Second Phrase +for frame_motion, frame_sound in zip(training_motion_2, training_sound_2): + training_set.recordPhrase_input (1, frame_motion) + training_set.recordPhrase_output(1, frame_sound) +training_set.setPhraseLabel(1, mhmm.Label('two')) + +# Instantiate and Train a Hierarchical Multimodal HMM +xmm = mhmm.HierarchicalHMM(mhmm.BIMODAL, training_set) +xmm.set_nbStates(10) +xmm.set_nbMixtureComponents(1) +xmm.set_varianceOffset(0.1, 0.01) +xmm.train() + +# Perform joint recognition and Mapping +test_motion = np.genfromtxt('test_motion.txt') +predicted_sound = np.zeros((len(test_motion), dim_sound)) +log_likelihoods = np.zeros((len(test_motion), xmm.size())) +xmm.performance_init() +for t, frame_motion in enumerate(test_motion): + xmm.performance_update(frame) + predicted_sound[t, :] = xmm.results_predicted_output + log_likelihoods[t, :] = xmm.results_log_likelihoods + + diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/xmm_architecture.jpg b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/xmm_architecture.jpg new file mode 100644 index 0000000000000000000000000000000000000000..83e4a51a6749b5d5799b54409269a4fb087c7ddb GIT binary patch literal 87034 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%0A`<Ya5zw>PD^+`v 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�yx^6*p1eLb`?sUwVw#TA~Z_WB} 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%0DD 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 B4O{>K literal 0 HcmV?d00001 diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/xmm_featured.jpg b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/xmm_featured.jpg new file mode 100644 index 0000000000000000000000000000000000000000..847896cbb9dcf7fbec533d43281676689cb7430c GIT binary patch literal 778523 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%0AgJArT^aM=GEJ1!fpkDvA8oHu=}(UqG$ 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�+y2jda}|>ZXT+L+&cu7`k)* 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%0Dooqq?KJgKcyKHgOw{ocjQ*esjDd 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®oD8dtofaA->-+&9up$! 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 N2@{;P*Z+LtzX006oB;p; literal 0 HcmV?d00001 diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/xmm_featured_.jpg b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/xmm_featured_.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a19876f3633036993776ca6c089ee69ee83a66ab GIT binary patch literal 620105 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≫0jI8xW# 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 VA!3`>zexjrP2c=CZ==>e{(qujMtA@K literal 0 HcmV?d00001 diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/xmm_models.jpg b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/doc/doc-misc/xmm_models.jpg new file mode 100644 index 0000000000000000000000000000000000000000..bb85084419921aed938091e28c649c1dfaf987fe GIT binary patch literal 164164 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	<Rz1$RMk+hTt*=`7*~!rdi6pvaTrVWHT=O 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≷`}u@q|tDD}Lh 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%0Ae(8!Famh~3gi^u+>G zm_t}~@uRJzUv*DErOThTUFy_Y-Ftui$E`o!juH|86_jKoK=7^vD@LQatXL}9M|R8y zcb#@jea&;&X_Pd-6hY^>hH@42w%1HdN{sLe{ptw07Ha&@<;^-0Z|4nGsasZSC(a|6 zged*0n`51?Za53fXD=`)@3#UM+~g$_0I-rhAd4Q=5fj5NLbIB<1a2Y(>1(jQzt<t9 zTlvO1qTWv;$2juelhjk}Q>5{3n5ls52=teF6wbOB{Z3^)mJF$Wbe&TR?sl<4CH8`) zq3l{zG^p6k=TZz04N`qNg6q;AX+BkOY25Or?>pu&txUi6OFWu-Lu0(mM;_=(Q8cWo zm&<mHoLT}y`cg996ieKQ<b<<<MTgQ~p9wkdUv(hM6(v6X`<wdPmso$fJrEp>?EK{M zKTYvpe^XncbtaZr+SDV+1n<`7zi#GffnXfcQSgSw_)vZZ+^b|VDN}z6)2DPFv<WnU zJW9~zW)xFoZE^^kWo_pi-)bFP^bW48>6mIkvB5uZ^b$2atB0xFoKAlu!#wziSko&~ z3Sf~CFZ9b4BuG#79K*d~;hmYi(4^idi8j4mwmRSCw?i7HI~O`8OJ~LTtuFS<J8b?N z(9EQ{$gVY}+LEzYOpZtM?z7b2$OgQ&Q%d>oea`>k@ILPHPiGRKn@{aGva7GM{_SIX zH|t<=Tl2UF=;DzwIoE{_I@vm@FY2+sWWq#4ukijxmbf}{LtQIuQ~qdhlKIB>v7ZeE zIYYS$__?f1@d=U{MF;o*x>d7C4KZ;l(BrygllVMC?xje<sGLhtYBMo?$Q@bR7Rlfd z>=`96nw>Fa1%jIgzL2e5x=zluXrnFAvVF!{KPm5^{o<+kRuNP?iik6JZsPD(#c-w# zB?NO8OU`<J)x-yC3t*N-v$$&YaRB*S8C>#K<y;p}r^hy=M6&1-8-;g}=#k+CJG#=Z zo^1TK%GK}5+c}{){%SFSzQ_WNJqtZ<8Q6V-VET^uaJ}W0YC+Stw8{~{igjML_LEdI z(`9nW=2bH!Vaf<2JV7SK--8R(hiyN~N7=@PQRxV~-Y5nmGec3mFlGjUtg9qTIr#Fi z{^fMJKRDy@MTItqn5^xli9F*TSv6QKb_Q^|qg|sobq#YyCB_SE`=xytVG%H|#Eami zSA;I>x}oT}rG?#fsCM4x6j~BdP^<63v`Az|G>L})B;my*GfcV!S!JhZsWa1FD*}qK zvPMTo%{!)9`NZ*^#n{`snX`bLI0J@D)cor&pinH)bvh0LaUxz)N_$gHg4Wxq%+brD z<=fE}ju}C0m7HDV{W}S{B~rP5mYH*7GIM^9+^a224(xUVYG>U;SCEpMNsSfGcz%q$ zjaQ2UbFRidXorgq1ZqCCdDIUbmyIRb5Sy7<GluCY%gs}%x-L!=xmR9zYkqTIzVdSM z8>Ls^%kKa5##QS<beEHfjFawxewqJYlQ1#wIi*5yVw7~>6&x%V{s((+8P)c;wTlJ{ z6ff?ySRlAtp)D>68azmW65JhHin~JyUNk_k;$EP*I~0NxFBB?hTMG2j|9<b;`<#33 z81J|9<z%hF$Y8+8%KXi>=3G;rCv$491(d75J46wk%7@8pCd9`%l~=RMNl=bh$Niwo z7jaJkg%fIF3_jB^`3pB)^cIIc1n8wM#=C5CA1T_7<by6&aigT1=r2?GT87`Ggyptv zg^O+8jPUW8haq6in(riFQpL8a?BGWJngs+kTcoQqMP+)6STkfot7U3kL+XAf#aH2W zbSc%To*r*k;zSqbSq(|NJ3=Dg17RzGMAD{dE{b(e22A$HnlJci)p#InTTFTT0S65H z(4#t9(r5ompU5tuk3S1Fvy@^Y|G@1ui2<pxLGj+lk4i>enJ(&0>5_uFgU*T%jA<g$ zJMZX|lV`F#J}~eiGRNXQ7Jw2JL`FPQDH%C${OwGB8m5g;PCiamLP+J{7^&A>>qoEX zNFV3&wd>x|4;_l>GS!s6JmKYB*zi#IxNEx2XlQX}(p0O%D_9aatZ(ob?T-SAH%=Cd za5_jp+*k-nD)@Qo_BHdf8ZIYfcxxJy9yc>7|CV_r)b&Nb#RkYoWX^B>#l7YS;mpAJ z9q}2xRT^N2zvAX9v28vw7D-ZOPP<aelF0p7$@T+V|L|?`qq+j`vijf8`MXw3xeX%9 z_Kmgk96iJaRj5->!I}JP=aob4*}dIGg+^PC7HY5=Mt?mi94C$k-6akLxztY$|FIcR zA8wSo4oypE_Zv`Z#!D_9^>&A{vVs6tiF!klLS!|l0`pj(yndEm!b+oKdynZ2q<Vb9 zmbqT+qOP=>n`LffIfK|=>DkkPN=z1HE~##9ckYeH!kC~m+_7m}7pj><sTh#(=Ew0M z7&1m1x9~fWmS3trhDOoRxKS^l#=Qeru*8%1z-EQpFJ)|Xs^Pp6|7-z)##@Rs3wXgf zF)=R6S0pL)`@s4QiGav9rTwp?E*QHuS+#fyCr8;DHyDmQ93xr+JIGLUVy*g>Pt=3g zVM@EX(qdE5WfobP0i+TUc~@fx7bsjJjyW{AMVOUcA|*P@3S_JWNP57qJKtP42hNb! zlcyx^Dn|S1M}To!8_*qp0N*y?t(+!`l>)5qvTBD-TY|ENH1ZW4DCrNyKfO9FXO=TC zh^^2ifA-r=wAO3NPJECz=MO+@@~y-)Ue*il6<EZ)76iq!N|A;Ff5?z|XrGyp?P-hy zPM9l8(~o?tUwlFv>YVeC;iYx2sn*y##9q1;f~xWP(@FITBkIL!oFm`kBZwhiyhPXm zNgl5vc*wejO+K&eN}rh;PKzBcM_%8gP3=IhKJ*AF;rVi9cT7ToWR=KvR<kHbY>tB& z0Vm-{w~%FU=<36&E6X+IyG1H<9SFFC0Awj3BL0W(lwXfbzT+!4s4<t|qfBx!TJy(G zSb|r-NpJCzeq;U&p+k7u?>WKsL}E{=kq$kWr~lSfmJ8p=Cx0>T)+lR*m9Wp83;jI8 zd{^{u7~{$I|ESKfasG)%Tl?(Gc0qUeyQa@!SS$uAnOXc`ji%H2IGwtZA95Li4hY$5 zGE_*_&qAr=aW#cXd0qem!=rBToc-(vTe-Y6?S)d;^B`~<&0TRk)Lk|OLn|?&*H=M5 za2&cBV)w`;*Vt4?Gho|%Z3j$A3S_Irs^h#MCCgH<$c5wfQsuPa%J=quc+j#~%?~0x z_(qvFu)Vt~fO0d|tloJsG2r=ID5}9%%UP^nA%wKCPb+<Q@}Fc<nZr47fVy43Lf<u7 zx810~;ekwh3o4}9lURcdW(`N?``Kfb5NNZI4a+7f{!(l`(_SgBnfIpid_~;NP*ezR zINWSZOxB|o6VP0*P`#~B2oe_W1EOr!lt!{if2treP{1m2yf>N2dQQ}LN!x9qD`sjp zt~B{A9!$`OACX%8_}vj{xF_a`p~2KMnX-&M`fIiJ;!u+O)GjkA>(kW=**Lt^Y=sms zz#v7rU%u4tj%vJkPSeU6r3Q^!X9)``=A?(?E139brf@5QpZmsduR1Bl-Y1i%Ci8-G z9F_-2uB$+^^w0a_tLtF)!1+R=Nr#YUZ&UwgG*tg15Q>{Yx<pm%4qg9oDc%@*KTPxK z&)G=^=_2JoamJ~_jzrJFQV#tJ(=I&?o681W((dsCb5q86b~mTbVG?3nv9ZJzfE>MA zyIiPa`Im~B@}mVSdNz!pqn3+$b5Mp|F4MV?r`c)n%LeFmyQaC%7mgq&mG2d)9txEz zDw#!_XyHt3Q?;t}=m%(1*@X^TVR5mw+JGo8fv&|mD0zdLL6M?kX_Az~0EOvG9<e5W z**OP$i-?6|^&TZ{Q5lJe&Lr7wL^Nt_d_;G7217HLTY<Z*q6H~ZYGylB@sZGvYXfl` zKx4&*AMpM=2xM4t7go>DehDLSyl#haDmqm{NI4b>U0av7Vi{iWfc=y?%FAub9_m(i zywRTr8-<djq?>{oa>bWZOXyt8XYI&rMfBrMR(ZVbP-iVOC=TW~6M?$y!jhosWebxm zh3C%kgk~5%1D^MW>O&&o*1C|<#61&->}=mzeRM;g3t4Cj)+(<Kbq%rF)UJt_4Mc<W zFhZnk)o`xQQI3%9R-2)eRsUX`#2<irV$T|@8)v91bfvI+ioErAgv;#~t`<Yikp2xS zM_|>p_w`-vylG9Yk<rmh)~2@L-JF|oiB=wC8mB*i^86YxLyq)xFDsMQv!Wbh%&`-s z=Ebnu$Wg9>9?y+|5X!~yi|oTYYJ(tNU$WG6QOhIsyaQXLL~)k6)3=1AQlXSqW+Zq? z06O<|4YaLL^-8ORgI%axB&ZmvoO?$)jrGZdlcPC3`$=;qd6s^IzL~7la|MZ|cXcN& zWv~~Q*)H39O19PU+~x)6U*_Ye;A;qlh^qDlFvqM~V}0v>924&=@IE7$D4_+FA_$H1 z;L`pV(cS+*>-GP3$b9<Chb)?azLo5toRCEI`@byNKU|i6-<rn02$%$vE0YcyLOWho zJ`}f@`gx@*wzDNjkg3>Wn4+NO0{R1RwjEQBgH8&R0_N4^s8NVe@Q_WBgis@-y%5-v zlEN!TfhX0gnW{7wmIdXXf%SDb;4bAT&{XSFU<no3=$bm!S5t}1F{%#$S?=8xa^ofc zi*oFLaLJ#%_i{y*R)$c!4_!OGk=!vm$<Oc*C~m6s_c0p3X8u<a>kl9%Gh;tpYMj^W zNo^)vkR^wu)v>SAK?e%18m3pDXqFV_IWL|`6`1JT8|Z|W3apbAnJQJ;RBow_Og=%_ z<~vMdlKAZdG_yli4@eeD<A}bNVIT9bz38xOD4my98gE0PMTrzlvx?|L7M(fcmZ8X| zrNtBE!`Fd6oF*-zSa;2Ej26u<aDBW}^|MOp$(MQKYB||~FL<cR97ttRVqXJIhF#?) z$dx%v8gOwSd%K<1E_0Di(IWBL#h(*JRV;>_36J@(bo(8Dj&Z85L>wj5O;nAWtrh}N z<09`G;==S%vshy=zzUAJM#cOC9)04RBUH`n-SH7)7S;jkc(t0%;|gy}t6^PfabZDr z(8B=yd{ZxtG!(^8!b;`}s=AsO6relxIrZ<OqOSd=Z6~lhsnkcsbt4<MqOVmAl%jl9 zE>-tNebMJVA^-5z{98*7-Ary59Sh95iz>UHZ+`jbgfC57&#?N{4ldL{mww{G#Nf3S zbd%lcq-AD%bf%S?f=3?C5}0bVM6#`?Awo3{n|k~={H^q+c7MSq_{hp3>bw$>B<FJi z(bx<MUU!{s68bc5mxPKWQM$IU$W$BM4kET`+@ZYG-|8YF+m0=bD^08Dd6;3B`<bf{ zCSCO9C^wF@yViKrCXNg@KS#etPe&1dDe!d)>ig>1TtfGbsj^f^alWKc^59tT+GmyO zo{L-2${@jik@EiA#6C7%3T}p#e-Ny2e4F`G=HFGpU1@r^pP=IKKY+I<%zB6aE3fm( z+(zR~<>J%!AVq^$J@5ac4`?^7;K$?CD#4rJn9l`}pTz%jH%=1rqTq{Rm9<5#q<M|9 zdp%vrdV=oP-k|k{`tt9-{|-C^aFpLnl{$_|3hW_}3)NUXQr+Z?t-WtX*1K^o6}6-s zQ95s|uJQio4)I|~;PhpcK{D*eZ*kpQhiCtrWpRDh-fyp*E`A*Szv2-v&3pRdM#6x$ zIS&BBt(iYEPKP$0Zy1e}jDwmTh&+ry^KiTPIAN!aC#mrkC&!`u!Vtyq2mhrEh3D(n zj;AWf{#a*mCvq63ad?n%ugCBA&@Z?3+wc9-3;rBbOIgQ=+J{o>x|26MKB|&GA|Ntx z0>A%1x;C2a{@p67L9fyGEMS~S;m|S1UQ9)YUU?G;&ra9#)*6MpUhgGZ(3dM#KB-9+ zloS;r%Vc&mPutE0f1iSG1|yrdV+B{fCEAH{JwDB}F6E8~nAyv#bE1cp#04&WeFSY* z9FXb!0+1wrxZwvI7d<&)F|vIly*L-7A<SJW5;*XfL=;Zd>{?DD#9_EFk=Hk8xa#FX z1BulFQn$^k4af1%*_mV*e^`lh0x#v3<GMCC?<86x_c`|!6qXjMlout!L(PS16FIr| z^$mZs`A{?@HqA~|qa*l=Cx>PvjvSE=ugN&~YH%=6LNj%RnI=XaaA<GXv#@`s>Z(Q> zs(7;W_{O=okYlFcG00b{Dh9*Fe#RyhsG~P}uN*|+Ai<y}@V2+9gTovK<46w~=>Gy% z*U~1?v$Y!a2CBOR>IH_vqEh1ZBcHHJs#EVuqj#kua8pXDOpFOpYB<N5QroVIqM}c6 zs!OU{`W-4-X!D@4-1jEis?s$i5h4Dc%=y^NBz)cni4(dGFHwoll8#L_U212+8%}d_ zu%6;u*A?ogrItl~5t{!Bp1Ny~3WMeQRPphwk4mkA4RjSsLm!N(k4|YHnU>M=EkhX% zB^>Xdk;`*(vOe&TYD<eFIF}JFh*EBsmS)74Y5+Fwo(f|=oL9k&QB}{%fo+>gO8)ep zN}h)&|1W(DJ%W~JERS?oJ=R+fQfV-{7cEnWaGamh0Pn**vs*8DNehFF0H}-uNygaN zl@EIjmDyuFO5?D}F{(Ta6y|}YFcz7cL^baX>CRSV5EzGxcVs*%fSPAbE)(jWAt-|c zYOJEmOhEV}bI^;&O!DSUzXf7fMtw!&GRKMc@Ul6GugLjU9RazaLm6l36b%PyS)<30 zPi7v!QV;@jD;|Xr9NbD@Gq{LKZfS3lPVI<W8d~d?ERE~)TAdsq$1BanIo9qxVC&Z~ zFOjBa0@!PWE~QO6n;efs3b$TqPwZ)=e96wMh)s$01N{a~aNO6?DFnZ7_tnaPb_DNd z&s85~*Lc`H$!gv_L%KF=Z`S;~YU`A*dWRUJ(L0*msQcP#8+ACt&h4koHso<Ju`-cX zumL1;F?=thjB*g`Yh%XIY(Nv2NIlF7v^F0#*%Jvb&^6DbEKm+hvsc4w+aVPe<jY6O zy+N{)QgfMWfCNVLqGr)G`&|14uH$ZCwU$VIi?Z;R;f9%TBz&*&2s!4ZP4H4(-PgjZ zsSv@0{hk^y*V?z1m0_Wg>8j#t(Dh5+$5peGBbOg7$I24qm}TTuyNiOz2qg>*jO96x zv*PXXckp0pG4X8I*1o#*!Yh|$oOjVIUvrnlH4Mm4stK{8yGnR$)dV-os5SVl;A%B6 z)@ilx6%S3>;b~g`Fz=kMNZgtM9^ZWHqhlIMGa1rM6c@&=*S~l6_d3=8E#bbbrSuNg zG|@dqJUaN$$EK*c^v%o|rqrh3qUSa)j}DAh7*(&RFI8r5BZL0$FaQ4qLLxHm2Aghh zbCA>Fqb$)AI&*`8*WRO;47G9o|NrU#iuQk}R*J`BtAkFO_rspsJh<yt7-_)#=G7!p zbDD5@WZv)daZd%&jws7U61LGAlIsl`2l}<oO&qN>zz+&dVMB3Y_dk;I^H;)LO#;wp z_!rFcb)Q+$rz2qG7(bwzWzyVUJa4;(m!8vdpMuL2x}j-b8L?nH=+^TPL^3(iFqRSG zVa0LQ>)`~376UkDD5|Bm^ceQ4=cwV37QRS#%6<Y<Q4;>U>MBGvLlpz56p7txi=in& z3$L^F8`B*aeVNxqnVVFu&t{o0JBKr#t!cJtyup$eE64Mw+%4FYRr&EwuCal1(S;_> zE5<2SX_UUP7EK#<KW@7^(gNy1QVqJ9p_MqhYale!(KcfjIdhuAE;Z4S2pLFXP^A2Z z;x=umB##_p*YszdNQX<8f`M1Rmg2?&YVRWQ6o~!()huZ2D)C~D-W&0W(<~fXer}XO z9ik#Mn58F)ldIvyghtz_vyQ;>N)31S=uX1%Y6YAQ1`AXDNG}1?)RZ0g`g(58#Z?_g zCtOpqS7~jW4{dy(hC*BRzTq}BT#iZ;t2tWM$*?TjwEsq|n%X=OlivQ+qp1aEnjMyN zyy^lc9LRlNE(;vh2d-oq!Ap6GB2ko)?^y;~pm|XGsk+rFjukmxz~NrVjwoLZQ2s7G z60eGL`UZcJ`?BxL{_!exi(BLPtJkynAUoSreP1+ItA1$gCRt_~CxZhK2JHmkO^+h` z9@MZ}3M6a--L(uJ3g-nlxJVhOg#FCUb;d4(!Fr_(*y`V8$vIjz!WX!RF4fsO2-RX` z3pg=M0%-cv%44$aK1wioK(}bR8!KYVh>GIr&uNHMrp~KfM#VgpCjEKVYf<=n$F8h_ z@wXA>qT)imjgd$sl;k@Mkptf=r)s&2E-Bq=LG^MoAV3aluaNZTOqb9C^C&t^)Wbrl zsTeO_IJZ1Ye>@KooHR1NLIwM!=`Zj}bVZSEa!gAD%pxekM06JBMj(zlVey=(P|+CU zYqa)YH2i3c2A_0>tbgfF8G@MFFD0>dx;}T{^?`uB=OW6o9HPsgi@8KlSFJqI*t2Qo z+0m1ZBZ+wjVqsKuF@O@i<>xPwLaT(lw02an(rgwO=+yc|<-D;S)0M7f?GZWVlpz)J znW_WGt%vk?f=YC8QrB`axW30ST*4)+d&|dWwSv@{&sEL{$?#+rVseqc!>!Q~$5Cmu zcF1JDiuC}R&F1I$5SI`^bku(Da6(4;%a`AnjzZ^L^dwfy2N+&pQF`%<7~Jh2@lUZU zXak9zhKBLilTKmabeO$Z)N_Nup}9uwed>hbezY1zI(@0h9AEe=IPsg18H$FAfM$U& zX*Dj1zO9OSUQ=T0rV4q+Mqy|MDsLlvgdb<yMBnp#YZDuu#d}dV=pnqWEQfewI~qz0 ze?u+hNa5<$Z18*l&<X0%haj(E%7F`7<qB}{+=A461_~>injBzv81GbL8cio!tj&>n zIS+%RS}+LS0ai$^0xa7;-d>Bwke^kdc|fVFE8X5_F{RaIDaLU|*_G|I#M_Q@Ly^0$ z7Q_+seFJ{^A-^V`2X8UYp<gXv)Gx<lp<$;&v(Ux%{R}BJ?Lg`I_NvW9)7)DLJ(q!{ zusU){k#QbFtigzaZbo$vYCo?Yx3aH{MOcd{+(8q~5(s#c$^H7e0b0&jZzJf`V606` zEH2Ts?0fz=x#BYkmGt&=w(*uoA<gJD@e22rR&3>K0_wdGE=~r^D&p-vr)jLA1*#0f zFhLvz6eb7mR@P0-N3HK+ST|&l&)=A*jQUkUJFgywmRx<s#e@k%Pf|wiq8@K}{PJFz zLnh+-U#E9eqlFu?UEN?@zhJI~UMozq>-VyQnkJuc+#Rv-FKIgO=^}F94zCVVp0+bM z_9wMuJ{lce!$|5{e~A_E>+t6$)M%mnB`Eci4hBAWAfhS@e_(LchxD9Z^1@l35RJ@} zs9%dlXI)o(7#|gxf2)ah4Ej_+vrsux8iuKk_~Lw`v=H9j1i78FB54}`wbl!rcj;6> z6m^kMC$CJ^EoUOq73bzIRh(-axlIvsa)9Ub)W7sm(fPT>DH{V)h$2%qJVg3k!Jqdp ztEj$mlbiq&X)wBuB3%DFbE>2QJfcxRsO%`81*XI9=Ejic#5@J5`G%o*k8WTx|Fufr zDbd|}q&9K}<!3Y3y7TXB2XpN~oKaabG4xL@5o4NrD^VZ2ks<0(Q(1@(Hl;}2hL*?} zI5*oKhnuiwt+_A9iQeG4IHK#kDh6IE#eYWtfY0)%+Pfb=4XbN6x5`wlodu)Ttbtn@ zG|T-5;B`{TtdX}}x*+n>1`Sg9ELz!VOKg)WBip{JF}czb!8VEgw2*E{X|yqS@>lzX zR6Z$xtD#Q%pgDt;9)H7H=VVP`*fM^zL1N-^+;c6SfgfKufIA%XY$mOOVCZJ$U53!9 zOa!`{g3R*~1-caP=CJLVFlc|&x}#cb&~G|xgt&K|O~>0{*d~b_8}O)Ne~B+Ugg)a# zV&K<@*7FrjaqG5G-^C1>veJ-_<}0$R2{la-Xdoej@`<s9g{8qnZU*O4o$Nl%7HN{x zO=?C%B}uyjfhr1~6e(3|u=t=|IF-XQgecRALtJPcjNv~@Q)h54uN9G<=pYxkI*sT6 zEjQ-f0kh*t_<O&6!LQYYG4nx3rLE}HB;(vYFUtNwiaBZ9L$>3-(%IYe>HBL<Ot&__ z(EY3QhHl&vnfvtFA_t0LOAd%o>yRxchQoxCR8MmT#Z&d1y4<t{4AXa;An2W-Q<oW4 zX5W^j_wLyC=>&f@{0b`gE!q<?q&^le0rZSW7dg8x=hN~TlMJe~%4_>s(yq+|d7R<_ zArNzT`sH?c%oWZ7`~)P@tXmD6QFPR-l4ER9)zG}{({j+-9gSXhcvoq-F*`2%n6)gT zQIDi+2AZcssE3SNu42eSrexlHhP~kJ#?(l^c$%UQ%@DYGC%6^Sk&t~y+m;E1P_j9I zCM#Qm%l_WAjK`^mCAoiUCw&d(ka<_$P{RE(Q5^N8r3AS9Bacr_3yx=!3)M``+2jgu zc$A%)VXJxQp4YcZqp!|l@(flI)g^Q$%3`9WNgCc;mfMm(#SVNX4BbM?acn!UKX+jV zsqxLrq+uG~Ru+C9)2<uR9GObSC-CFu`g{b3j-IdmF1hRaPfO^Ir0l(yV94d@;CX*2 z>&@TX1U<bY%6djd++LXF%%zCP)71i#mO_XY_R-23C!K7Fj#taTC!z^y2{%pVfO`v= z6DbNth(*S$yYOl@<Al4Tg{9LObse=YmzvE<L_NQPV1NVKn-ifXNHZTCCLp$B$!ZV7 zg(^h;?8_ThC+!pj@|3~conMLYY#(o#8hJoPc++Ab0<yNEiN$xyY@n=TZcaT<x+i_9 zD=Z^)*0I@<(h!zGwg0V`!#?R4Xp<b~sw}1wHR`Ypm8uL%<^9Zf%_cH-hYi0w$9Vun zu9|D6z8;|)|1zmj=`y_%D?JDVNeO)B3=?5W(xKVIjPh%U&9%e_?&c&)=#?bhA^&&U zX9k(5m{2*JOmQx{-D7Y+xE#{GtF3L)&^#K>HuT1|omnX+!|H|JJ{~faX0$9jweak7 zcYuQ>Ngi3`xv$=19eX-n6UjX|5mwGm(r)P5EVaWt1%?BQ;doZ(i==kYmN}9XeTff* zbfc7We8uMLfl&l5tP;82AToypjjPOO#5R1*&DORiXzr3i!%IW}wU7U{UkB~8>qE46 zy*b6C6!w!H0~I|BT?GqIJ+V9D4SpPnQVb7Zy+L2ii33%9^Z-4S>gir+Ak=dnd$>90 z(;u5x6=9%H6Nxp$W(H6E!Ou6EX8+YHEaIn95IpEb3H}XAcHB$U%L!Jd|5;&yhDtg9 zJ3(J+25dB!^OSGZ3mVo6l$XeNN@r{`WXQ3^WQ@*jImilXBwx1v$jaHf>kp?)dgfjF z8=R|(VPF(Ht=1X#n$rA+Zf}pxPS#w~cer6Y$R0D1FV)bJ5&HaaDx_;Yk}7J@9iU<{ zx*`roOMKvM`U6ljW00kM?{mAX$FPFTap{Pr06_T?+bqQCmPCk?T9j7VbU)0E*V@js zLic!F4XRkSG{qANB(mu>a=!Yrphel<iuoQiT1iX_GEpU<{{Vid_YCeP{V-q`Xs^yj zKoM}f9BNZ1Ez;0iYkwtn&{O8jT)75LU>?7;T}Wzz=9GHfc7^D4W&7|3d%{gWe%{w{ zLGhY>yEKMOq*SB8(^mSzKLC<@4Wi<cU3`_9bRxs{x-VA1N>R?dw`Li@_;WrJ@vRP~ ztjs`Ljc%96z&HFT$1V2g1jPVxl4Yw_iUR`4Rd9`dp61Vf$JZEUJFfr~&6=`56)U=x z>h~ExAD`@5q|@@<^?d(hNNftmk#k*dD$?Q(F#YKm{sd~JbSw|9ctm_^vKebqn9Gx< zuxi7(8_@=k3|5QvTdzSIWHJ`bDHkkpa+tYEP0UvYSgB4Mrg$s5bstY`*kBw)1-S=U z5?S1P^O}yEMl=)7J0qJB-x;h~MJMg3g(ynVA7~7lSId_3d|MSbP)<3nO=xu25;bDb zYs_B6tz$%@ZckVcVPtk*X$J9ISLL>-xIwgxWfSSeqE~>9y5@!63|ZXyfsSsUGdFna zgM7vNiLKfrGwHMJO%#v$S~k^Zb&DAas%j@%o%$bd!4~bIr`}i*(xL+A6FCJE`4m&g zxyC-#2Xqm;O_Ej-H3GVvr==AFrH5V5N!2wzNE{TSJ>nGSCd+ENcar#ct}-<Zj>A*; z=JW)hO)r9IVIRN5I*3P>o1nO@20*B#<2bXTL6V85?Xj6F9;B=v)&=;C#Q{cGX4bY= zm8*A|-HgZ3l-ze=r0P%t>p7(03J`2!E<dA?IFns{bgU79H-6k^>f!JRmen^<r)yd^ zU)xsPN)w!|!dV6+hkGU2G4J(!?dngP`ogTPfbOj-wDFrW5V%7L`+cy^9o#^l=}i{J zq!>fc5&5o~(?xlSQ-?1awPfl!jm1t*ioPR;3-<BZqh&IeQje5aZPbK-KJu-8hH$nW z`xDEgorxoT9NkMo!Q#vFgiPEK66gK%q5<g+r4wCd3i!SA5gr2rSG@Vz_(a{`?z^81 z!3+Z0TbMKk8h$dnk-lO*Bs~-f%noRF3TQE-`W}mAm|A)dmP9IR*(ii=k1%P#n7^tJ zKOiCd;4Y1uNruUFGoRwMUuZjXLa7w&Y0{-4X<(Ty{4BvdxH!DrgrATzHXnTuX|;`% zddF<z^GHbf?B?dqR_v$&+p69a`a@btTqbxv9DhRdiKNgBl>&1R81gzMS|rZtjZafk z)z^l&)DOhF9lSz)bKAZ~i##oYd$HM<NBKFEp9DMKhut^Rm=HJhf)II@t5L<a`?Th{ z`V2lkHSz~OzfrjNbz(wf1(#U%3OQ27$Sk%K_0hd;{0lbO84-UQ*1t4rT2oAYT6POI z3Ds553L)rV%ClO@mVEeb-TA~`%3qDa+SNRQ8}!Cb<Z|p3R0O+u;k?jCud>(_kt9zk zC~B&wWoL#yL*FH&463{mqL_LnsQcdlOP6TGv()}Sssy8ne(v2?WQqB!N_R<{$+qi~ zBY;%99YopE$}y|23<#~>UY)E)8^&EK8yI-#a?$ZM9nV9@hD=%)kZ!Y@_hRVMp}H@O zjf4<ph(!ta-6*e%oAur9xJOUueEL=_79F@{qn=qyrNJAmIt;J4h<;kpi#xDJo%t$g za_6GnRA^uj$6aH%Dd!#It|prt)~xNjcC;dQxCkEzmpT=4*<K%5Xt*xHC-&TW`j%RM zTk9sKX(Z<L$BM!D;$931)6sdtqix|-zp9E&_QW#YP~c@zc)CPL@cN2#QD~)ELFe%6 zBKfKpmd=RMa%x@1#fyrTQ)=spivwu-Nm093>NiqK;7J)%&p7C6(OfAa=Qpu{M>!{u z+0RG65mmkSw3#*FNtrwx^9lP>xvv@=J5<M@*Qf>IB7k?JL`Uty<AA3=84+U}V{;9e zrn0OGKR;A?9HJw_5bZ)+?uAUw2h`CK?_SA_2l<Gvv^fUfM*IQ%836E-VF9r2VdLJz z#kzX|?p|2r09IjnT{0_=qVJ*aPgsQHQtM}Rwk-c(0Qh%*f%S~_O4jh>Ni)%xpX&uD z{rzr#0B%h;uX){uNXb1AJjsjPvcUdWtn^`=?7}S@7UzjH;!#bZz5d-pmUn_o&U0|G zAkK7P(~=WAYb6(lrl#4!>A`*Rko{R;PG~k52lLel;0KvB_Ix?VriVXb6B*Horof`q zdWZeNw}@<WNgrlX-ldOXVEamgJNMktU?%d3T)1O^0V@^U9iOtYsA7vB4prPC7PrH{ zdHjy&^xAd$=hjy1wa%3E<iwuv3)s5^)ca<c!Pf~F`ZlUh(eZNvTn-{Rgf3fHLOKJ; zFFXyS4W$V~8QcnUI~2YK0wHtH_nM52GaZ~3cP*V==w5F-OoU+J2qU{q^+u%-jx^RI zT?0<)a`@DIJ3^j3oSImRv(zFXR^-{7Bz@fX5jYME+afIvYYXDt@fYI7nl|tZJ|xfN zofYjfvF7cG$Gq;LZr#bEpfz#jxT>CgLl<u^gLSAux0&Jo#MRC8DLN#Cgq^&Mhco52 zgh8*<C>Fz}blx&sC{gmD+BZtPY`C`>El4Tpu6byWkALcRtCz*~O#Kf4MpE~HTa&w& ztu+lp?0JE<q?h2Nk`sAfW3mJ>?gjza<k$H9uKiv<+lh|)cmk<L&9V`ofn&O2C^Th{ zSjD4S&b}Nqm4(JkR-Xsg<)0|Ds(tn@Plk+LofJmweu$~0OU>+^W9Ql84!Ap$P(DE@ zrC`OxX`{3qVs{@{cq<p1mt&0;i;VU8-sf{6R{-VP!`o5f^r}0M9QzT!><=f!mj!PJ zU39+ucZYfaJ-_Y41@?qRx%YlzHD)o*{ZqBofl7Gysg(1oE+#%wHWBtkPW!mlR{5r6 z99Ie$3xU6Wf%iWbJZ~4#Bdar9SLrVldpX}5GeAt$rRRV*Pa>aZV3p`6t^4}G|0R8r z#==L`o_-56womCPS*3(73e8&E7m8EX!gI4U#Fe&O;rrhmg;&ADfSq5J%>TWC4y!IA zE@G#htLD`=vtw`OZF9ut$ahoT<YYw?JL2R^REfCTb4rcknG~6^CxjEUq^jjbli{$< z2fXu{I4(vikvkMo%Q0JT7fo+LcmX=A>zN`nES9@IRZjS32MW9T0cfy5y{+aaRdUD3 z`!+Ota)&zg?<4N7@*jB`W;7!k3^Qi~>)pec6_6ts&?<H~yBx!UjQ)RX=(-<nr)513 zZr*<M#XtJD1?%lXBG|N7^WlB^j?MW`pkHH8J(KfF{*S#8Gocw2lN7{f`vbs1G%#hH zAztl0l2)C%OTGOcdUKBo-trJZkMkkg{lug98?f~cpxyW=KefNjzirbmZS`m9L1+Wr zMC?@<hgvGvw+%~c4GrpNwj9_j*@+XoHFtjUi?W8E6`*A##fUSR&KxYZ_CBFkP<Kxo zx%0>sQda83dVB_-XCOzpk3Ci-+<2*YnkCaAK@2pd@lFxwjEOaweeLD=&JthL)uu>J z!LpPXWIM_6iUL5-Ujt+bNypFyF6^e#+pJ`Lf~<OGX`C1U=;I#^ezI}D!^Mzd-fg+% z%KjLUC@iF&5un<PSKLJAQDs*q!0TL(z%KDE`_i4$-})@dxN1$IIzczac@qw1{D>15 zXYojO5-n9YBjvQ7HtItBwGtD};Ynxn?jW@$U`Zir(7K^ik_oiF1{`*u5wy<BIUXA^ z#s@%c2<-_~kWs+kt!nS>q^k_gG_w>N5-s^@ghNhRH2c?|^la7VPCHbj;aDzG{!bP= zgkVRI(@c|bCDR~3fy^&5zNSs_jO%0^G0ma`@n};c5>8c*3Yc^(w{r;<!XhMVl4DuA zzSM)2m8b<-=6G>-gj9-8p)ZCH5kz?aabofGhX6^Unh<bI7z=?Z9Zm14)ke?uS%Z|{ z16n51Q`2CwhrrTws-Nb{g~YhYWzBBifR+l?)jsb`ipcRTn9>i`XA9N8CcLwk!`{a; zdp?&>uU33U8{{Y&K!A<Y?%G_$A1{b2zx-*R;KMMj$O`&|jrE1<5jdTy1wYg8mSI?P zQRUtlzCks$sUqJbORGsCj%fnP^s9uR1{RLx^YZr<bYV;U{o4{-dq3QpVKs(T1{Jgz z?1K!&`IBEOOfu2&N%sTzdt$dQHz#MWoOHU$ocEPOvPohkupWF=_m&{=wb{=2T-{!m zk}JW{<d{1u8MA`01HNGBv{jd3S5lKR2XH5-F@mx=H|lV3I+aA1C_TM0n+POlVr*>< zeNBj3o|1r_&gr0hA|eW4_LC;OLp}MQ`1F#Irj1;8MOqQ{^LpKlJf)~loPGUJJqc+g zn?1{!-$BzS@2{Djvb#Qf;G_DvLx@HHEvr3=l5SsHV^mZ-s|TU?(OGib_6#*8kV{_f z1+jW6kuC}C(4_<rMq{H{Hpgl?p=XFI#8!%>re#y4z(Qa}#8$fME?;IcK+^ZcUPNEm zjfY}$BSNK6=C^B%%C_<e1ZrnXqNG!|{V{fGWNS^<%w1;G<yxDz70)%9h>5IyMEnHK z7Mi~=7-*Xar#tT=Ral&Tmd5_z^FdYYBX%`P3Y7iC*FqeD6l3Jx>I+9VtiEFNe&>me zFZZZXAspr}YM<~MvV{=JA1RpVXn}T)n9igm+>i*`7Q3+J?;4yWarU08F%2<TWbZ|F z9h+i8_yBUjy~dxHZ#=qKf0squh>FUqdN&zA&rtL)X^!cQTCo>-fZ#zJ*ktlqXInj* zev%l}{psiCEh*(h7}(Ar!0wj@jOf+6qw1b!Ror2jCP*)$Gz1ZA96_-FcM2fCr$DJe z?ZiHsg{enz<5Y0n(b>kCbY|$4efw4s-0-pW2_+$`D1K@9hU40SLI`&4IM3K|UM2C; z_G#fge@3MJE<L*t5rFK`e+o;!kDG%G!7sjJvG}C&N>5mIX|Iq(BhTpPU{TgamlNhK z<w5*}mUZwxpU=zm8ims<jOvB_mI}vm8a!P*;jIuznCmGr4Do^^{<!#l)#X~8rg)6z ztEntdeGWI!J&|mm#33Y}zJxtARkL0J5&h{uHW?G+fTw-1_OBymkS`5&g)lnXty;f_ z7~!jbn`rurkxpF=prJC>&Zx<6V3xD5dq1QSUp`2O<ipnt+QfLXi$8$K|9I&B{=J_> zg(ae%eX900P7StDQFWSBc)>s8N=`@!JI~B>JmRJl@NS~AU##moyNW{mie{P_j5yPi z2y44<7x>6SiDqWN+C?Jyr`d55bHAE5Q7_yG*9NV0Lv=70p$%~0m|fZZ{#Uz#A!pfI z=_Nb2fy0LNwGLTH^14LMj4Uqqp%BmF_k6Ae>HsAEdxiZL6LqG3ml}n#s1N=E5U-3e z1pRh2U6d;N_4Z(dLzp1Kd-__ySCw?DW(5M|68Zwhav&?)RC3el=Hv9cPDTgF{ym5u z8o3LP40#7n8y}pFWhSg{Dl4PFmC`I;uIps$M}`lHe`*xzsvN>`h4>F?z{;Z%A0vVp z8^7YehY>~bBki>R^>xh3FJeqX)^@XtK+M=m7X_!`Ln`=&>M<bie{9oM!Y@h-#B$tI zfLcP#U7M8gQM(SrXy{_Q`(o$m#ixHJfAdZtIM&dp3}MPllXL+=2R_~06ylC-`=!-K zEiIqPEhUl1es^=QvRX30Wq+6zOzrkW{zlmk^k}Gffn26&Zdko!xisww<?RC*_GtIT zqX8^BVTrnF6i8(h|H8Vs{+R@<AzSrF=mx}XXS2e!Pvg8<ZVBg@Eck9Y@AR-~o!-Rs z@|PSmc)ulR{hYkx8>GsCaeI>!I4Jh3@Zd)L-efA)j6AI2O;dgWcltRdK@D=BXxdTX zsn^z2HH&niJX%+kQ}ukd$octL_^<1~583?wZ~H5VAX`Zx{GKTVv4cAOdk9cdRQ2p1 z6M*#@kl~K&)t~;Z@wYaQNFfI#=7z4S?q0qnZ*P~RQcLjg-MWn8KlX}JFe|<Z36){W z6Y;K+aJOHRY{x6hJ7Yn*T9$Sw;23zL*SL*I<jTtQkXgW#$hU#i-0m=6`uI5=o%xLO zrTOTZ1j5_Y`spX!UiWw^o4!8_Y>&z%g8q7&_y^GZJ@BX7Z=?5?A6pm;T2CX?1w7)& zUXu)$>cbw5@#Y`-1@Pu;yy?mQyAi~^34#Hfy90rfa%<{WHxEU1$ath(gH(V2bw|E4 z$aZcoF8i}Igmx;PkIp@fNMnHa(<xQ!xei&rFZj8a)Vb*Y?)qK;$;G~e`{-QpBX~q& zHG4WxJEl|*pHQTaze=7xURhhWBbLuj`G`IfmcR1uIxI$EYpL{E?dw=l8_+PiGuA>c zQN*q&e*z3#{&o(aHv7W+{>gISM!CF?;%v^RV7JRA-7_!a-9Sw_<NEWQUggx!`gRbk z<I9STb7tq{vA^yJ!yU0@Ob{?L1J8sE!7KWjR<_cNQ-nskbgp26>aQn7X8I(>4}P)r zw2tSZ$MO##n`hYkbC<;}R#(*386#+{g^4{&M~#T?0{lJqb;Yfu9o55!=FLwdu5KK_ z7_sac4R6LbflkVD$W*5tukz*hD~1$dOLe&KI3FWRNU@dL3R3@(rju|K;cKwsQc8em zHmlHC&t<ZVv?mg&Vs^JJUte?E1YUmiUp_p_Nvq$zuT=2Mv)Ws?AyLeRxT~}ew8tDR z#8imF)?1`72kR-2dA&eT4bSuIq80`@H`UrL_i)L`UJ79iFFqPN-oB3QxTF&_Jod-Y zUc~1#d#ait-*DQ#VBw7op^BwS|Ng-J8<a3J!R+Ee9Rk#jgq^y+oc|6`>U);_&pIj3 zLvWVsMW?9<FAK^>p@GzPsWC6evj1-EAA8~->mIcPJ&jbz5Y&G(%y{HVG3x4;q`xe9 z*?OsXhcK%9;;(?PQ*dQ+r=KK$6qd9t+D9FeUXM9_TS~W(O+#lLH48_IieF3I%xu%) z+<(B>O4T4xVB-i$&$=B6ZsuLM*T|e9<tBP{r81yKPhx(!`j3YaRpy^~6uzK4%Gq?K z(LJ=?dRe8P@R1>wQT1LI@?#I9h+V+i>sULr1NPykjQK~oeuR@Buih;^zT4LZOG$;6 z7mki=d92U!^b<vt-lP_qChMw1#Oq(mfP_hLn7fl1TNmU3Nr}OH;h5S-6}}B2wyp+P zfNh0~^j}PWceaM1vjdi|V5b!<>lyQQ`~zKPhW7rDdOoZH&7XI^?#(wl8+0{7b2alI zOY2_sv(T;kErz?}8&cM^3%!2Z{`YOBzkbl7_~0l^+Gch0=FC{-4)rmN&j%wuIdt_a z|5Z-6=5v`cuB*e!r;2}%BB)UPb;<nI71QkNtnO$jL~$Xr{4Lda$D!W^;YnwZjXIW( zciDVY`Be~Fh{)s7X~`gcug^2~zqbQ>R!3Rsr!f^?#y&S7W~knR{oKp7moNUFf*aWk zJ!^jek2F7q*%@@wMrdGE)3m=!S>aqT@Di{*7F*iFjK6%>owRI|D_a2!bqOZE^F5B5 zoZ7aw{Awp}q%1!qtz4+K4mRX(jLh7q&g>PPS3g<veDkLBVGShZec|%nAgR_2{xT*; zO(<L9b)G()hQDHQua(yI7cLlifp_z0_@DhqN_koDJzXM3fSd0SmkcRr@&7BrL-vBp zX}?AHFrvAyJi>5omG$u06x1d`Q?m>g_u}ic55x|~!5L2#Ws;_!P2VlcJ}0J?dl^-{ zqQ+d+_su-_%H4e)SvzME+sSh-@JmU`?y?)9<Qn<mv930ODUL=z2k_UzE2<4i@A4r+ zc=QwQ5ZuB{g5PhEZ}Z;fRfWjaQC5D@Rb86Ee;aP}9_`7<rt><CJR~!VFim)vJL^U- zTFN27I=7wWb(94T^IM0j=W<>%(P#hC&9K)gfLt0*uU9%wbB+?=^qDHYS3l??rvIvD zhg!)EWTppY_YA6yfvxPTXKmBS>1gF9miz(OeSk}kzAjQuG`p@{cpVIS$sMy^K-8>$ zFEzeiek9mv+%9wPuafNf8M$3c8Laf60PQ;OlWLS4*3*B^<%ZB>5z{^D2)&7CM80Ud zD91A3>zoVKRaj<Yx3XTVQ0HsS&*ugghk6Zz1I~am$cs(!yCJ6A$jy-CJv``N@VQI- z!h-9noFZh#Z&C__dm8uwd1oTFdcHjKV~g(>{4D+<JT$zh{L*iePtu3_+Wq<7Q!#+$ z(ArU!UV&WBRAok_jHYnzxBuFr<@W!zMPV+S&tG_u-_@YAOAgtj&i_@uHT!R)#*1Ga z#*goC?-cw>Q=@-)eEgcy=zQ}w_UIQcvu|R6`Qqvy04cSv+o1)mkAK(L$?DUJU-uuV zflv{FX2cNO`A0`Zy1tvcK?1_Hh)cgxWkxO>ju3%B@fSHa&wK#X+u->_OzZT>>q4l= zxbHV&W&EPChoGTyg{HH<!#{wYe`%j}C;mM4@pIq4W~o4#MaCye-ahSKA@%%#ZH_m8 zFF`I?YD86L8KCr^t_$KMiaP)Nm}w~aZMd^ud!`^~B4ETFib?t32BZwliU7Fb9<y)F zE-J*OC2wrQtdppG;Q_IXC_76|W|aE1K~h+1Gp<PLQzOTGFP3Dzz}T>n0zsa9uaIO5 zA2NA$2_r{UkOF_eOkwzB3fJf8olAp~J~lNH<jo8YmveXZ>x#w~_b=A3_NV2hReCUn z8+W{ORXl1`Y46MwKqO?I<7PiTw|`so`dDdUQpZoM(jfXn*s;@xG#IV>exqmk51^^d zGO%ZUd<H;6%1-KStX_D4*mh(%Rmh38xqkZBdn}Bs_`Z9^Rzk#@v1&t#=Kd_^5cKUy z{a>5^MX=JajBFIR`z{BHLX=~)yz)LtPfzoHhs!5{CoCC)7Qe%N`Y?;pw-^7N$u{CJ zRU9f}!)hs00}E&Y*gmSc&jpL54gn)qyWrPEW!oe#p7)xx+0Ljv)|gR92l3u#xc4{~ zu0=6*iPeszXTX*_)-b^WR%0(LT#Nq3o@AI629cTg#i*%Kg-DrED2!8?wUZ-4(yZzb zskAJ<BeNGiSPWH8@)Kn8a&ZdsV>F!B4?fKZqQsi%2%YR@vyK&iaF@|pMbTN6<v3+# zhi;T7{x<rLsq=j@xn5Ijo>*w=!^m73Ns7?E4zM$pB&IbybLoVD95<qFiRfnPuN2Ym zpV`xDT#3r1$Q`K{Kl-mj?pEq!E_MF+dhy0bcXV}jGbPT3pwm>UJY`L`+HwkUZ7S{K zF*<w#dGkUdUe!;jt5!J&z;ImLF>U$5aFf(_5;HdEbE??XLhIud{cuPKk-c6-N<tZr zs5%WxQ8Z^`P9i<!y$G~g4`;4<)Dfjt#rq|1^pnIF*!XJIF4Ny>6c!9Q97!gY!ulf) z@3Dw%LR3}M@7WA6g>j^S>zeO><=HR}i|zQBF<r`M6G2SXM9q2L?EhlKg={Q4V-!7O z?9zv?U!0Z5Hq)KTDZJ6Fm=}g^Db&}n9kTFA|D6Gc==^u<ptC4<?7cMM@vlNQqe1t8 zHKqHDHgur$$4edf#iWPr<!lf(uq4$Sk(Pfm4VIntdDdQ0sHa%1kdp>prfmcNQW{e@ z@4{;byM%9@3UeSP-YAV0d?J*%gDS0#8@Kh~ye7j{&O^jX1I?}l5qruL1YZo3>%T-^ z0m`(A5PnfpR?eq_R}_>s!Sn%D4AD}O%@zEY15VEo=f7MUnb&yVN8Ozn8cu8edfDue zb+71LJZO<@GN}}u>cE*$W^UFe<t4a;<350gZzyR1gEQjc?B=NxlQU8jlfQ3w#_@tP z;53g@NW(F%bLiE)Q)FZ0bGEW9wLLZuP$%hXq7a8lgbsFJkqz)5UUiG_BKj)f#Nq+S z+TmAVyNg+O+Rv)iCNlY2n(v2mHSF^M_jY_595o%S;sL-UHNhzGtrnW%O>zC%JsPi{ z4#&iYZ;i0Kk#B7JAo!5U@ykA8LN=!-1bX%y2lC7gbho^89Pi?#<S8Pz1vlj*M<HXC zvlgJNHdDS-Yx%$@mz=W^Z0oW0MPjZq4)$D-R{a$5+LN9iYF+#6fS9T+jodLcYpbFu z13n9U+B9i`0hb@rck!U8+U}M9Cgpv1h9(;>BsqsW$=jMr#^iAKMb1%^e{OhDh=i1! z-Jd?S+R-opo9npsEp@X3(&o|cM{4<eeWI7}j!-m{54O3F0Hsm#*(=nx4gQLF)g6FG za~q8now)vd1HKsWo$F}Qi7nuxI{!O=*X6o?Chi#qddfhCj9P#NwHX#Co1izL07q{u zQW$Pnqj%mZlOv=uNgj6fqiB)Tb|g-$2C8<4uVSZ{`02ahW8YlKvF3YT5#4gz5CTSz zGgTtFY|K_w`e42jYtEX;OCoM}jM~5;u@hqjIYEqD!om@im0TBzmbd(~5Vgoxif*u< z>36p18Afs$2YAt3RrQ=AxcP+Zx6*s1<=`IMwUh5F6nt3+X}0x`IdV^l*vMHoLT$0O zA3}*+8Rc|If}kt2Ml4AIrE5R2lY&OmX@rU<=SvC6_-ArY+jT$YK{;a-*BHY}@zijM zEzQ00mvSqS^#`#?50hI@=MX0`1q?+p$7A{nCR$hFe?0>P3%R_{D%f(d#eNAa_W_6# zAodxLtYk|2uUj$j_2b8?*56|O!=fxOP@AE8MGd|q1<}xUy)~iv^6Z+Nm6%RMy3noy ztS>ddYqaY3Qx%=}LW!m8IqGB3$O*5P+Dk1jV;W9hV{mSVY7N^A$%rhg$T*Rw4b<Oq z5;X9Mb$5ouTIXvigcIB(Ut>>-fW1#d^2QQhB3r^UQDUHWIf`S6fH_NBMdss@e6}Sv z4sP79C2^0jSt$EFIV0sY>iT^vDy|9WC@uLzAv9u`m-rL5L;T=lywMav4|Ku1&GW0S z+hALUKAYM-c03#t&{DbdTbH^tm64V@DrpXLoKO`-aw^=Y9J$fmu4Ju@7#-ErQBo%3 z_O4ENVT<t6=Na)rV*=rqJdb_6GTV<H$8;*WT2;?>m`(;~@BX$Wk_c&%Db&UZV`@bF z*YUt3NC&{O3V$LMM1%nTPBwD=C*--_(_?g(nItt4Po^z4j%_mvp?0unC{>}`&_@lG zRQD|H+SQsAicvdiclwBq3%)Q)_z>d98*6DIg!6cB#B_-|A|pAvY438NsO(f9mx?&u zRJg=uJw@VpaFCZpE}XwiQZamxT@*jGh+7w#y#75f$RhaJ^nZlOfeYX1=+ktDA6djv zX@*p*@7y^-{YV+oLk$ij(Urb?@<7H<4k-Wlntzx7AHcgjf`P1^PiNP+f33{+&R^GR zCu85w<I5kw*KuZ<Q&W$C>pMvQ|40<<1>~>24F26PtaXiC`(Hj>T6HGu{sZrwPouvb z)kOI-gMU{s%h3AsnPlp(CdS>f5~fdMrVakj<w~0;$9Mh#Jh;VrQ6BvA<Js9ik&nUQ zf0Pp0zh&4#y>GF&Z?Uj)AT;?f?$^g(&t?7qxF2a+DklGiFpIemrP1R0CpX_so{2&r zsd7Mc^WD^HGbSAR1NhHRqLkFfkJzPGv^<Lo4UHjXS`cDY8cfgDE0$Ow5{q$y2-_n# zh7*pkm10xV%6cBWjr!2<2tLbFx~(u62-D)oPG=E|oeMtV^Ley+%IN2+f>|<>qS7~F z!7QO1TY9;2^?DncmNZ$dQ5I}CI=!2Dd4sqwd-1PkTuaF^8k@EK%kB}suhx?av5(nb zsI6_l%NZ%R2S3h?NWHk;__y%4=2K~+O+q)8*ysj<W=F4$D;CMgIM3ALr%z^oGs}fJ zS}t(1u#TjyD2+P4in=7{-PN^?<O08@0=LK9%O?7SWq2^4M8Pr2Hk8yzQ(+543UWk2 z<(KRu()tpp<vT6Rv$>+moO^D3lG55*#4Mb09~N`2fT&v8SM9L3^HoaxcX4PAQs0wP zcOrfWU}GSl91*7Rko#k$M;4i<6oEfe+P}+L$2geaPZmY3HE=r+*Ok%OtcI!=XEi>- z8<g9ty^kYjiS54`mJHG;KMVMGG9ZG)nMICRjYUy7Fc~Xq(3o6-B-gODz3(9Q8~(bM zH&D-CLBe{ZZ$XC17L<yIJwmewigZbz;_PFjSTC9Oe48<_UIt3nS=f^nD9h2;NpuRN zF&lds!ukCt@Sc_Nq}jUU2NsIvJ9@7r<3nC-X>72k3f)|WiWLiPLR%z}aZS)L(!?gx z7y>zz=fr1Y4I5B#AW_tk<RH@eJ}yR1`nYV2uMo<F`J8tWujhM#18T4Zvh2>|?rM!j ziRBn^(4<u9bXxfZKIE%4L6T+u{bmo-cC-_WhPacLbyGnh8=$}!{||BR0o6qJ_KQwJ z5)wiUp%+8%y<-c#BfW!k0Ria>3Wi<;q)V4By>~?E(xo>A0Ra(2QBe`w3HVyx|M~9u z)_2cZ_wF^B{XD<@n>{--d!9YBD>a7X2e6keY~39SBc}Zycp;6$5)?WZY5Q|oCQjt8 zKY%Cy<0!1Vo*>1e{imk<zKXl?fc33;1Z=l<z|+cU>dHk{Lrsac5lZS858Hcu-Haaa z@EGk{*ETkz&C=$$t+4ll1B7Dp!0f`ySU>ndp{|4rw)cxsT^G<-s%AZ+>D$#0VM$U} zn~G#75>wU33^<phND3-Hs#4vqWUC`A)1z9O8&}?0ZPd9NcJ66jlFYO(Qk%}q9mI1v zYqog5Zzqc?yP+H`Lae6o!sFUy4jY(nVRi{W1uiO4%+^ypjw@6i>038Pf{vMkaH51Q zE7;bDL_|z8(dC&qOJhJM6)uw3b~Q^#A+9TG4I98sZBR?n*Pu_S8#9J(9f{{Qr)^_Z z_KRUSuugCY069jLFK7qgE8oE}cYtMc^qJ>d_LFsLs-u?6#YFh|fJQeXKk507V!}90 z(w^ORaq1<F#98v&jKhc!QPr^|Q*TJl;394db$)U8ux=Tw3@m@Fr?^bo_?4Y}L|8zF z@VbFs_L`sKHsMt6LwP$+;`7%DmB6dPZ+E^^-8Q68);8&FpOM?Zps*U{>m5GiCXXhy zV%t#QZs&kUUHN7&NZvUoMb<}^lvK)xg^Q$lylP@tli@E);ust=%T<JmX_%6aIP!`^ zR&s`!8)Mn?co0qXLk@X%<jU95wX}E?EtuUs84=z_e#5-z#AtbUG5Jnw4o|-khkP>j z#`1y%7?+6YXA>rUC9-w@kkY%el;29|#X0#MIHPydBf~JY$uX)9;7bn9W+OEWHUh|6 zO^|5KV4F-{PYTP6oi{OvANW}rohoe*N&7D?6L7D{3bI@K87ueRT%vBW$KK<z7DrIX z)Ao3^Q=M&Wf;k{QcMk<pB*bOJ$jl)MbB6MCxfGAG&op$Uj|eGlI~~$VT`*xQvv$mo zV-7yoSjA9R`X;*WvCGv@D4ni(oP<+B^aS`hpk<?{q!PHUUl<-WuGFBCLmg*Lw#S@u zQ`_(s54P8=*(FxX9xw&<s%)A>a>UBj`e|xzrqQoWcy;J7X{_~_=84s16zUrcCv=hH z*N!>uUQezYfxY`aa-XBJj_)4x>KnC&43@{3fS$bU+0@c@k<bDIFy)NL@I<w8#pIK1 z@EP)SWf6Huka-mO`^<2Rqf-)p-;iu*u`_M_;XHvId(){1R{Aui5PGv2%~?j!1-;@- zfh*9^rcmruf(fSM;~eE!J_0kqC(1wiPEjZK_U8}l<P4IE22-A1sl^2_+x6lY_1Zm$ zMNKz`!S>IK7?}Wb!yf=^)ek^6=aE+nFHAA~zL0tYwXbBapm0dNRz*6%b}mY@gCcAA zE_v4{`fpJFP%7C`7fK<%xyS^~v|#%;`ts1CLZ6ptLW(Sdz5V_0d5(-+)tJOl4U+cQ z*RxJx2!aZ!{mV5Rp+I7gH+)d-6!Dq({z?!+G;???L(w52MXAtLPs|LRRgS7EfA2!J zf3}3x8B^Py-8rb5((0ZK^ou4EjfB?e!UG?_Y$M~SYA32O9HnR{we5hy6F;&nq+7PM z6<;u^SF#=K0&_ZdS9&|C#uewLu*OG-sl2RkAy$uduHDk<)&=<0+>*^A;R$e9gNUAO zf~%uPx7ti1W0cZ+^-&nUzcG13<Y^%yH;{5&ctragGY3QvDXB-o%DW(Db;Hwyjl(o% zJi5|pId?PrvXSJ%d57kn^f1+QBdabHI&Y?db32Ko{&l{R2SZC9GQl`qsc~?z^Ykk* zYyPdg#cmhT&Q1oj20`fO>D4&wGf7xRBZu?7?=pJeQNs-q8ce!>_*?5o{7vM<F>cA! zU*MPqmDGS*rh>*7xQpKO0}R~~kL7vRSa0-9i(!}!?X|}n^d4B<2J28mOwG{vkt8|( z49QBKoS6t+ZGC|P%so3NaGzT=e`U`!Rr5$)OjELl6H$h8z#PdfTj8grY>Z~=?AtEA zG8MZq&8YXHnWv~?LA+Y-`4sX7#fsa#s_IUl=4sDnznqur2t~vELYFi6f<&(IwNVH~ z3>GOkE?(BKdQi_~ZWuLPAM@%BoLGk2QBXM|#N|nVH@`>SuytK<)mcApbV!Boo&r%s z6#Sk<om=^5DCcwleVon!ubzr2e-O;Olg%9Sko=NPVXE3>nHN`9-iIns-D^TR3Vzkb zeo=N=ml95+;5hEjBe?{L4nT0ef(fr4RIGyVdA%@sT%XI#R)9+Y>m!}u0tQu%e3H!$ zO*5xhzkX3Oy=eCkezY6DRU?jus**Cbi`WN2F_@*7ieU1JZh0Sr<`8ri!&FU837SJT z<Z`ew+?=rMp<HsMkjJ#`)NVddW$JV@avr60P`a8Vv6hr<7_`Mcg&{_Y{^3Ve2RXw* zhcUvh8p?F!8#@(obhmd|<TQ*Kbn}9TbvS*k3(_f;7^<BXQ;8FZNyKt?F1%;8e`0GG zH}|1ZDrF`6Jr5?SGNQHJ6%OMG<l7|Zc4DLqiA@>{#!sB;<v#~us>^b1xNB`-omL8w zX04<sp%zV-YM6nq6yvA<?Im+e;h9PYnoKBJI1?A(8zyor<yx@pI_0Jo>#M=OMfOZ8 z(oN9trE%L+fz9M&o>Jy5j?T9nYv7ox%roS5Xh~~P)2_Lw?+7l@7lIB_;+p#cuYhk! zN+tKY<LX|AM@d%Ju86P)WR&YX-xyBb;olsib6&T9M#%R1tKWmu7ny2erclB(neQJ4 zynp=PZEphJy*cLm-2eCd|2D$^3&JIGmhx4^>ZlFaDYxlG?uY++TluiL^5Mnr?f;4P z{{sIV^Z)qR1Bu&YcbSjBh{o(2xEC)XYr^MycGrCO+Yc>o2tJ_s{|=bDavInt&$}O9 z@&Cu!|M}AfawwwXhO3_+X5W?U?pe3NKh>Q1*H(q<EA{(VuLt}r<3_SjIoQk*n;4=d zZ3>3klxs3YZNhjqr~+(VsAbMriZ0U?Jv2hwSVwD;jBV@1)OF>n5~xlp)!|!{v|<px zMXzqzlO$kx=&l$Ch7s7m5S{1A%oa?-y3aG$Hfm8wbQK`c@)*rYvgR!hO5LW{E?Jh< zZYFA>>fvndA@u~aU$t)1_O7(OFw4R0R1vTh+}-2Z#WyTc(Gs@Jd?o$!;e{`d>n1D= zrWNw7)b`{-Prj`^Z&~x1j!Gw#D7Ae=YsRxAhyQCT)|r_7Ijo-Rn!>Cv!L_K$1o_>@ zXqa6BFgl=cdL}r*i8@=c3`mW>O%{fYp2~M%syDLavOrX|DV91qDN+;L*g8$I9fr!4 zH6#?-I8rRc*BeY-;R&kUw2#;bB0TPS@T+@XqRH;q-rADKwY|e@oxHOyO=bn9FYe^0 zg=~Dbu6(yJv!VMO*b~dr(oo3p650DGfM!KDyq?}au5bIN|J616Z5f9em(QQR*4({0 z{KqSs@tAt?z2K4N{f81MpjcBGDDT9WN<ROkt4qs2&sTN8YAzg__Kfr+I8=1w0*_x@ zgwi`c!CehEt|HbK6w5qK&sRlZeF-TBcgia4bFR7EU&?Q%|B|<DPJ>D-*-*?#yC%GT z`YHMj7n3#VdY)5;emUaWfg)OPFrg(2_n5$tBeWir30Jn6ehCHf;YugGFP^ID{;L*) zkdb&Aw$k+e*-mJbs`d>T$j!_%DI+Y~L@cG0qP!%}me|JSs9XD=cfgrdYp^^iD~xHO zuJAnUkWL9tABD;}+Spze?));dPZxvl?}DVl<dkmsYuKI%@e*sx$=rerge8@QLs1_5 z!D4B$?1csFnBH95oA}1DpkbV&_!FKGGuxh!(RO(~*jwjE3lH=N9vBy-ZT2><GRdo* zHGKYXPhc3<VC%R#(H%U5!Q7#(7*OPo#n10w9#2tV`_>$;Dx9A7psCf7!qNNm)L@8* z9i@rZC~2VpOL{9y_E6<?Kg^aTi-N9`Z(1VwQo7IGVwtD>H+SMgy}3%B{ncsc%cM*u zNyTS{Zv{JGZCj7`PxfC>e0ScEM^3=>IBQrWR6dFJ07S9jJhtmGuD+UZFZ;*^G`CjC zs2aqy_!8+5u?!S0fa})m7XJ9|{eu*{oMOjnOkUDzpCF983#E=^6LhLx+8mUdOckgK ziJ>`7@dHSzo3vNeu*s?o5Z6^O;HwEIE-FbhvlAe-<3Tz#J*eH8NMdo65qHIHA;is$ zqPvhn>F>QwALd962<7+{af!rzUUi9y?oSd)_|W8B7g~2<I?`s8UA!!0#XUr#^qMQo zoM7_@usc=w?dp@7DuCSNXDiXqnx{4XtGUlY(R<%r&Kk8UvD}cOOe85|)MT!8{8+SY zRm_vX0aJ|5SXwvBK4bVLt2~8yZl@l_n(r`ITks0OKy@S-1Ct|8>vTw0BPJz6z&q3m z@;N-V?U^C9{PhPdr&EIYsqC(c!&{kSUox11=^t+L`?x=T^Juh^QpBm~a+dIxMB3IX zjgQ+x(!vA!J*V%Bba{5<e<^Xi4tpd>MB}pP9mvOaaFm1Ua%qC7?%%pvdV4Xa?(pd! z!`NlIynp}W*V8KRHO*Rt<jOS*X0%8n33#LcJL_-`sAw^>Nuw}3gTcZxOp#kwmAZPE zcngPRan|VvbS0tUv0zuiv-?`&X%E+rPHQEBKx%4*gaH#J=ss?=mLD7-*tQsOMF-a1 zD;M&hSk1e8IKqUM#IGR7YVtx=gvTKaQ54tLrwgvF2=mv;c;MWt>&b$|%@CSG^-PG~ zi`2;+aV=YxbLAO!g?xlqzvI$9DmBWdZ5HbJE{0&>`j$)08hd;CLhX}a=;GtX!>{pw zY~w2b>qBGqFmjtt|9ed&I4pRQ2)>8S#sd7X^V^la9MN3Mr>$HfQ%gxu3i%U!vBvC& z7bTR<2W~Z$@okQ)3tZ=XsDR4=uiHD2&zPM}!6xuW4^9jR8mP#(3ySpk3+`J8=zo=R zPPlryEOZ(tnpa@^QU9J|CGA!qjEH{V{e`PLX&SI?DEIj5mLunt1tLd>AzwDOQLc6G z-#uc3-iiWRMa6bEREUq9Q&HJJfS9oS=GP++ovX7p74MyY9&zcD^0cB$AQIA;OCmQ( z$1vr24LLzRhY1=9g78t76D5;==3ts-<$j=h^tCuXo8wy85DQ6~iE5SJ^=Kzf!DsJX zfJ={wAw7hUqN)HS*nua<Db~q+dp|4CSGTckH1<t(YNY6jRR`nF=P%MS=)6>@GnrB9 z9ihpp#U2MS>m9dmx=wNv;zSSjt?>(+21TB?K5+fc^~d7xtCw@Qs?oogcszf-H)trX zJ4xBZ+9|iEzxXg8GU2W{6h+=NOQ)I`(^L#nd+~|0XylYN0_%N5B0~^_vugDAdNciv zm-ckZ55VLs5&UaYe5$axUb1f)FW2zL2DJ!lhYm6Qn8<=5H^kHQm{z+Y4tr&aYQ_`< zQX3pCo2NV06{W|e9~t&!w>(x+_A0z+Aj8nxEoJ7R*0~f=+Dw{NS89d&P;y1blPV!| zS_#WCl#e*c?UL=5^OS#84s*Sz7AQOl6w;Ds0nq4Kfqk<N5D|k6jxJ4wL@^ETq8Qa7 zIYWOVM;GA)I}DJbE(A8;bg}5pbfF>^6-<#Y3pa06ouT8vJ*GC5&LDVwRK!Me)~vPR zN=Y_DKN0iS;EE>pjAv52d!I*`6nx(`I=Gv3%{d8tnbT^xpUipSSuBMyf<L5&H>eNP z`V@8B5W++*kg7=uuV`>T6@Q;Qk^=qyLiX^Q)`RlW?z0+K{psi82X-Y!0~#x??%?!g zt88lC)oeY6#v4Rq5N5#w_V1p}htQ!dc%DyQe(8Of{pUgNmRs2EIE=qtLaff60~k?U z;%OHTW>4wtK=|v7s<MD(<WQ~R0(|Xr?-d7hV8f=V_K-=UMddNBZ48#IaQ0r|P2CUP zdoC(hKC8(I`<p*;Khp641Kl6j3;ZDI2~0+OSNZ)_1b6a;y}Kdk&iH`uM2{{6cSX{q zgn<PeVtCR#V5$5)Bm7$hMVVXbBFQ(RRGS1JZPNmcw+g1!%|Qa}BChLMJ9ahf$QM@3 zlvhg1LHy7q6aKooM{fk!vusHoJh0YcdmQJ|zj|hN4L<Q~FJLz5Q`4oV43Eyi1IB~! zYv$5x9;$IZ?I1K!XG2DSEC7&`|A^mLh-c8x4otBW`}J%rl4}u@vkFzIC(Zf$j@4?# zB{B!+3eHra=n)C&EF#V^QEs37Cu-zltJb!HE$cI@BcQherI-lI@6;W<dld3vcwQ}_ zm76XS^s$oQl?aY%3+8H-<Z_TYxQq6YxPHY&gj?J>H632@7)PQS7sgor<SOpz9X=W_ zZhh}<HG*J0&ujG7roo#f>PBgZCMZNS+yn!7VZL2v0`t=prC#o(TFagNwap}+yQJQJ zX7)0Imqc9|kn^3mX~tz=pkKXCR9&Sqx(53yDr>#eCL+fi#-?F@p`i96qGj5U&LjQ6 z^<(w6cOI(<^!q)%C_1Amb%wFU!L=-9dI1NS4e=wfBW>_#5!9Ksqod}j*IJjoj>1FN zXzwp=iAJp>)+5lx>tf{*1y8_Al!8nezWY7$%7pSoyL2HvU0Y8oj9?-#d&LZk2??qY z-8-*G+6*he60f;bud=jxb>LqIr{8VY2oReYSdf@(4en=cFb;8JO<5r12f}0H$1P5{ zdz|Bi^prGZyXbSbT0WM9Bx%Y9J;=amZk&d#3L9JOr0Cme@ICqtey07ICS*@!tHSRN z1Cgzo%qd0pPwx`N!N!ToVYY6?N7a|^?0&4FpRDwWiktIYMQV#|y)aw8KD#QD&hnB_ z(Y<R}g50s0LM-tH5SJM?jN-H-kfY*h6@}ubN+Xd#R(V8Mvw(P{GEP<5Revy(=ZF~9 zy=o(6Uiap}{-qV=m4!;09=C&8#qDO?Y)fLzZW%9ifG!yBiFKq$&1p%eQ;|bwoeCj! z8I3aS4<cpLLhI%qr=C8udBh9_VA*U<S!6dmqJ6T7BQf8up~GX7x+xuFb%q4X8>$d> zs=Wp7nZ@(6p=h?QPRDbIFf(R{vtEOB-SN@IVIP8_UkJ|#Ia}g;v$;s(c*bNk`Yxrs zykNeGcqBhbTl(3aPVNrd&Ep2A?*68TiDqWkK&ey7izdpf)-^KAmBAa`@VVd)0zc#J zht9Jt#T+y>Gd}<+zu0UDAzK)$>#pnsh}|O_<M*Y>srljMuL1Mw>C3OaWyifb-&Q&V zTc}6^d@|ULb=1y{!CrSUOxZFJlORXIU`y|II)QoK;wHTTev}5AxnosH&K*ZVZ&u-6 z5<9p8<aTn}=+lRDb@Kr=G!JnO*VHLVCJRbqOq1LP#_42@!=8NPgW?MxDl4%D8y5OB zeZ3c9*G&TUcacGdm`hz8Mz?_{xSJh!=VixSH5y-hEjBW*nV__-&$txE7V%JW1_<f? zr0gWSfEA$EAlI2J68`j=u`Ls<Uo9+0Ry%Z=x<8w4fWqef3%|asb9ygfkE^^$75Lw% z^@R*?(a&8j_fwdXv1l0kx&WqTq@?p5JAPTHR%_XBMetGY<(t%8d|*naT$G}5XDjY? ztK+Nt$9=`Ypw6R-59|gXMH8)UwH6eL@e6z^jPwFbI0xJ_gR;mLllBhH^nsmRo+$bz zKEdjHU-`O3-{|akeIvamgnkK*XMf!FLUjuy_`=LjLdy#ydl%Fr?D;m(j(I4aMieon z&in)5RGgKT=`%7d0zJWP(S@|*#wDHFl#L~>W?6jYVzDXz9<o<XrD^rfw-C|3gd!yn zslFvJDNmVn`^H!nQ7N_X8#l!620N`ulm=r7EVQl*LjVMZ|3}~Bu$Nep+;#d=|A|`$ zJP3|!vNNxp<fmS<reg|(89si!W$F})vu-up8i>A;N+OjA*E}61Q%XEA0f8Ig*K!bM zW07`pf10DoImWKD>KaFS8C<xXC#Yg8L;QA3l>Z@u^Chw2XKP8I-i;9>W0mt!`uZ!K zL#05m>2I5Blj7G&@$IM6n-tyhR-aV9$aU2c?A^%;qn$M(>KR!MIx~4hEu1h>i(EtR z%P57UBaOCAlSOFmT{QqC2{FXa0{i*dUqWWLl4+MYKD@8L5e%|jziQ;f>Eo?#)_txx zsbC<{6U>cdv$bP9>9|pFOQNfrTPc`vUC4MjTDDSm@WJS`+-B)8?9_?%36Z{KWrZ(@ z+DH1~s664QQDW~_UrL@7vgz8kVz+PLo5LDxUw#05vN^~@BO$AsQAH0uF@8ltPvk$S zeWUV=BKM)lb=zG%-+zPfum<-7K<8g&a5&2E;utx<DL_u^XPfk74BlCKSd>j4pTc?i z?k3b5KdvH%j?(gB{|%|bnh5-te1z9ac54N<H!2&D?%whb)Yzg#hwO^&ijJLfZ}d$Q z0i8)5YWTQeEO_R&p(s7A?FB`nTXQ24wihPUy9C@Li7#QI`|B+yuEna5$Guey<lNbI zVS82SyHe5rW|d*^N{vWEgm&tN<UID-WozZbL>&VvC^(h_2_@+3r|1^Jaj#qXi;apO zxu1n}-IUg*qrfr7S(L9+vjkmf=3AYGhSrNQ{Q!my9ooNPgqA&ZgyY}5OO|wP`7&nC z-1$XIg>75A(CY!oMc8pq(TdgCeV0RtGtCh_MNC4~vt#EI_PS{|cuqxNkv4bCCg)Zg z-O!}V*pL>Ma7RY^SaM<!MA)ZZBI*ew*(Z-@&F;zS8!Azz6!qej6dnq>;!kyKt)-8L zw2%l>Dqv{m`i_hsjlp!ug}PC5kqpY18}(mL291a@X1@K_d}_o~%a!Nh;!bQ!T1I&z zC}D|gA|im<H}VG%%o#LeMwasJ&g+WD3DC6T3b56O;WOG1p7(~Ip8<R0n~o(eOWi*l zv)EmeIH@Fae;{>{p_o34fju-MdWu&%$L4B9S_<je*els=IoEa5$A`k)B}h65uCDG> zQqj_ZgI8YBo9Pf~D~-L{CCH<av$39lWAOb4u9m;OzFS+hAvK@AsF9+;ua<(J9=<Nb zf%wBO8)(GmyQy$Md?okd1y{q@iFdT_ZJ!U&!N9LgwfVqmrDwKn^E3&e$mXKA0s7RH z1wjc$Skk7!{g)Q)GCp40o0B7jsS0n!8j~8$zC@(y)-4ry4&{=OJXwF&GAfg`@3eMZ z@7(8z&<tfSpPN|(ha$xxa%=^h?@lc&U#vOlBJChMM({<N#7x1CvtG_=T%PWQgpUAQ zMxm|D$#5?g`&5DqC+P56AbON=M-<v#>)`&3@}t*%G%mdMEPaRJyAMLjE2)C!BsE;$ zj(|kVNqP2cmcfUG+WbC_ug?$jZAyK3@o=F#jrtXHmEcW!*CO+@JhkR!U6%<KnQC8W zbH_vJN+w#S3GqRb3{hd1M`D)&Ia+E0(5E!n%%@61<obRui<sTbn^g|)wK%yii<5C8 z{YIy*9Wb;AX3xl}Q@_4+SVDpo)KOWeqzWM~$e8!_2-y3u=>6P!){o@!r*Z+~l7Xj| zIk!!3PkyU*n7VUIuR5q!c>(0>Y-`Ni@#sPm6PyyIgq@%^%>p?}Uo51bWuXk}b(7lD zx|VG!y0PXf(h+9vCbOd3%1CG4^5x_OQrFLSuuG!eF4b%!bEvXIf;P_iF-`u?GDpre zL;PS*_;;`zd(1|3?Q-#{uep~xikM!vfhz9^AOZDu-9#U4_i=Ryju@(@r>pdkENouE zXJ}?f6GD`$BxCdg7%c9T$UGe|Rr0X3F<V`uTmCF8^y-~biw#Lb)u_wOH$N7Y@v6v$ zSZ~((^((cY(jw0=-y@!2b`(avq_m={GkxGecQo;>ZLZaxIgE=AUWMEi_EsXccXD#Z zZg~b#V#;!t$;Ea{U-+P{NkITLAROfN$S`CD<TLls^+Qle;*m{xJ5-qn#A>AJnaUq@ z+vx66FuH`;<aRyXvfFXxNBHjNPLgw}V6$2ybu-`Y9S_XmTT;Vq1D1!V%FFfyavc)n z6_R6ZgZ%4Go^;L1)o*Iull@3>aBvqoYd@Q68m93iK@~Y(EU?@acoB2%(eX#*R1ww# zi{zFUp0HK$bk!FLXxDQ?Ps(tbMseWZ5`($0h|qEA2_^)Z8(B~NlDgo9o&2l0b#=4~ z3297P-mspyBjr5`y$7~6ITbHli1T`oYVj!JEYYT#oFZ#yPX^utn;Yyy7jKuqrdwN( zwZ#eAnwH&{9!;>*TIVuKms28mJQ3qDFmnTg5?d1=_fm>yU*Ry>it*}z(_4=|oMDqv z{{i$VUMRlgUSf<L=EqNpe__*Boz}}dYhHIwmm><Og^`V$?9`gOba#jz6;8p0if$6j z@!WHgbD&KxkD@gk9Afl!%DPdc<bxZGT6ytl`!?Gri+iuzE-YUN{<22M{{!fnJ>dJq za;o7~9@YkT6ld1tGMl|rzP`l;UfN{ps5o`6fzGPDkXm8q;=6|hPI1y^!b^5P0L*MP zoPsdxD{fo0q*|qvV-(!7LAZ2Wu|UGwlqG*E8%19%r09{=7{kOfXCPo2u6g`WfB8tA zgi}m%TItRUR};CDDu|y?>CHCpc{-?94beQMR?Cyz1JTJVsPVh{`1uz%jKHZ`#Ga`a z`)=NQmmyB<?6dN|TbGx(!q>h1q0L+NUP=;}F~-c_Q$qETls<h5XQ3?k-7A?FX(@v` zlwL~U!vyN?fK*;oNd)mYAwy#N4o(&@0e2trF>%|uh!H<i&C@A{ah4{kZ|$6G?^ZhC zXb#ijZKNvjoZJ#_D6iX@Ca_Qbc3b|elUghoG$`#*ryl*hD@11g2~>h;mx;%s=GhEy z7QMUb(@zvHv4J)f9r3b1fOB(YYJ?K=oPr0smv(7HqlI%V3UV#dRUOUtY`ybbZ@Vfk zx4-3=LA6B9WSr6gyU?F|a%>G<Adht$>xCZAs!kvwE4Jn%5*`mijkXad<9(|53&?Gv z9hRPU!rrF!RmM7Ae+PKwf5lg?ol4bZk9@hSzy=1EZVT+EFI-OQ^0)Z5G~s`i*NyVk z!{>cA{wvo$JeSVPQ;SYEU!2MYuzoax=7H8AU|?-dc386;*>SmI_`AWlU9jSrqz}}! znO&_4lvm~F(k}tsV@6%=*beRX_tKdWZ6u*y>A<Z=t5BS95bBX-q2(h&vL{KOD+p=B z-+6S`Fg3g~A`(qZC3fc2*1~#l5_4F6SQYFNxBbv{*-Bg5zAIY(<DjrCA=yiz4@+rE zP2U>6DGBtU$}9qh+#P&otdx|7t)sm^kbSKqlqevY9inKB+LD>NbGmH$owQ87e3EO3 z@WB?Hs3l=|X1X4u2Y-i|_*;!;aEt~!r|BC>+?N~2)eMT(p#(A7=5W`Qe7y_RVD&l< z&XSqoeBl^^D^@p-M|f>ZemplwTvK(&YX|u>JVrbG2>}$Y2Bv?r@}fd79Mjj}lb)w+ z>rhItZRXpFAY|9BArranl@P3tOeFWI1TC-XBW!uQSBmL2Fv?Y{ZVN9ZtagL|qD$J) zXU_G3PUe=bPh+JapeovA$53}|hyFV}&Vj~N!bwN^V+)QEW5wG=yhP*^R6U>)zAxt| zZ<KvE@NpL9`qEIW6jr68F#aY-npOsQT@AD^bf_`Vyq%3GOYIHv%}Hf<0r&~mD)GZm zo_ba^+|(weR~zI<iZ-Ep*}d`0xA+PMpLGrcb=tT`q=@8aO<dQmIxnCYMm#hcsDGfo z;IzLI|L*01V55UDGaNe#-dYZZj_^>I@$?uv7{#K-CmbVU2Q{0XPklQ#&uUiDL@`Ku z(>o}>2@z42?E82-;KSbG(>3Mwj7_5uI_aaKAkC%Z6-dUycfAPW2UUiVCcUyDxl<Tx zt0FEN$yJil@OtVmiz5!Nn*}sPvyWaYygqrAVl%Bxo0GuZNz?=h+)0x_YO|m1pt)pm z{37)wO`V0klH>jOjpB;Jn6~10?Wf@qQg9c~Z@Hc=lwh=l#xwZMH?#!HQIgZkM@OQ9 zKY+<kL5GTbuZZ|AUOn|r_EbB+ruES{N+XH@ET=>R#ZeQnf4WL?mPNuffq84MVqBb_ zd_jA6;BqrKXE<{bVQGGW$GK3YJkEGNkRCY~!b2Ge1hL{XwYtyw4?5|@rydb?Ts<gj zq%Y73gU&)36L|Y?e@(~~@}>seFZ#xbYhbJ&K{b`y^zCtOW{fZM__z<KF@l=dJ>>hi z)aC;k8SM2+3hXe1%F*?8J6!^*>MZS+2uhRT4TWtbA}SZ&E3C0+QRlTd!m)U(PZ?l3 zA;-;5hon5XWADe;KyzrMN;3LNW2u@k?sWQh1MuV~go^O4;(3+X2<01<72#Rg+pYXS zt%r8t-a^zWLUD2eQm`(YI@Yfs)+fFJ)0nMc9O6UVc>j#W`Se@;Ot+6!gBO3^1DVaX zU=Hj4isfg>J02DOW2H!HOp{9br&&#sz7NN?=HshAaH)~%#E^Ak@rs-m$fv&@^Q_5& zk4wy-#L6IgM!m&wEy|y%Ny7i$qSGx_9PT6N)8dX^M_S9XwJKH5(w&D&#nK`(t_I7! zEANC)nPprp-nrWth9AtMS=2bu;N8Z-K@g$-st7Uc0&<a}u~A(tTiZ+@4G?b$2S-xU zd*WL;sO+jIYxvqbZm#v<$Gh?Mysn|iusVHd*5twaikn!rxxU5(V=-5MFHXM7X6`SH zU_ks_6X}BRY0i4)Fuql%zWiurbKU*ru)qb9_VsU=tb$}2URRSMJ%ww^<cV5qGP>iA zt+&Zk^I5JdkA>-U$d>^20!5Yd{$EZy^Okj2b1WwqKQ^-NJQ)yIRbGkx1haw8AvJHm zhxCWv%3{tN6BINXyc)!sE2qZ${`uqF8@w1*S^*u)!bv}05}qB_kxu5mPIeGH`8Gzt zqRL&nmIEepe$wo_+?QMG%Ic=t4;qQ{vw0foE9t*biZQ3$BAZrE<u&jT)s$FbXOI1; zr<5D)JX@RP!f50_AE#r+F&2a1wo+rhQpBSDZt@P*Omrja>o9YdxCuZEW%|IbZD0Zp z7OiS=(y$!Ccvl|c25CObnpZvfE_$4yS$oo|4T|%yVv)Se^~2f$`Y9oxYHb6)rbHR9 zk~RTY8#gNpC-d!Mg^2mF<bzVDEM+~{8Glzy{#m#K4yZlXKX2(fZwWD$zs9L4^2xn@ zxBBPyhPOh-z%G4LohGbuTPFTeLFE)Vc&7u6+B+-zj3Euld23kgZUbT&mZc8@(dNQ* z6yaN3F7-h~^#@Rb8MFn19-Jle8$fW#{HMiaNwJdh0Sujdp{l`gEK5>>nA%7-9H#N& z?$ly~;~dRyQqL=%^RLV}BTo}wA)P(*T4hVp+r7DzOo4)wi84!<qMXx5f{r=dNmw%{ zywWy-LQSuTQ>tl4q4TV4Rf}c$JBx@|f?^-WspoGO$2jKq#Pwlkk;3v*5cX{y9cqu9 z0S*SE!qh#*Zx4t+bW7FEWD#J&WT#U20rkm<Y^CZXx*jKCwD`I-iGTUBlzRQc*jl$d zECm{g+H+5pB~T{SuP29@Q~JtBslL)oX_r!M&ob-IMPxa8w;4u`J&Ls@Ktag$aPBV@ zYp>H^5q441ovThvAYQGU(eP+)za?cVTpYH=L@fp-C=Ct(X<kr!pLF(OUQsOhb4mEq zOvcv$U`^zY9~t<6`tj|>q|I%SN!OhJ_;V{2j*zqN@nd7$wznJF-F2;?3N7S`J}9z@ zKyXB}&LY{AZ^>7Q6~m1WREueHxcwwgB}tQ9S8I`GWivD6E+Q~YYoaO0A9{(QM_d#y z*mM$9gC?};cZFpbn(XSnaPkl%%<owpQti94o%f#43OX}!1}PAPZz$gjJA*Y%jJPAT z+V-buJy<j?&j8_SS&$6W3`M6$PK<F&T{(c;zE)jUYht1F0vtZ!yv%OQ=Gi0^*a}SQ z2&!sCZKd29a_KE0mU$r(DbYCfk>f>{gHp780tZ@yDBeEg!o-FPkIue=3d?+ef{{V8 zzQcX*q(q~IZJYF+uzK*KOW;5w2))U%3J)b!l_#eWbZa6YaFg&KIm=P>Ih>5&QZ5*Z z<K?tgOv8@&4j^i5d`E|?b$#0FpS_)9jO`jtC!fE{YomT<we*^8aWdqqjknYaDk^4Q zFO2v~zR~+71_Bbc5GAl8_72c^MC+FizEQ(1sfHx?usG6t<-*|_vV58afQQH{LuXkw zEHX0v*B~e*epM6oHl*^itCh0cGss%~1Af$f3Co~R{e@c))~ozp3uRUWD90wa#%*<p z8*lH8*~L3H%Chg~#%(e*dURSs(ug}Yl6_dyqF2Riml7_#rp~uZjXo33%_7`?_OscN z1yJzHqOoisSeQn*fJ8+#50gK|k)-!B?Q=25)36Eoo?@v>A*1mnR@OLWHxedZnub>o zG`|inMp6+v^Okl9AyZT0m7~kZ`C&jUb?yD{G=DX>k*i)2uO23Jl6&74c(G`38z%`q zYP#wQC5?9B7~&JR7(2+90ZnM~UBkY2nnGc>R@*P7LT2@?la`e-Pq%tVlg!gg+&FkH z!fKoJ>ONYb#zQcB7@Q$%%+V|9TZ{zUrb0M67mm;j_R;mV>cOq7hAtp;!Lk%f!G{U; zD+I|sNuu^^&ulk4j)-Cxt+YZsz2<ms^!2=BA2gBeZ8|levN~8vA(<dmrbm}zBoHP# zCPuG-N_bNHWfKu;16Q{h5@`&onF}Nk!4^1#`^L|7>5w-^d+foSY^tiiIvPLXrGTp? z+qjxWgra0M%A{xuH}ZNLg<U7>ylh2=I5ex-ATNFZF5S^92LnU;O8Fe45`2jKZ1c4A z&G?J*c|oqV7!`QPTb{q0=T~x#NQSE2ES7L?PLM~hDzc0vOIcDN6kS5fSZ?T)b2YEa zSDyS*2^#LE%BHx$9d?s7M66x{wnY&C9i4MwMT?>*+9<Vvj<q`$Y1!609@+`O6YVZr zWE%E&vh1Ft?+*<WGAFx1txPB8RVlB*@r;D4*bZlNAN2L@WvyuTH20u@N5)NpFT=Mq zvLLWT(=%T%+u@*qq|~wdlWqtdU-s$h8VOrYMH;#x)#u6m#m`Cdr7MZxMs*F7B6cQU znoYPdFQ@KbT(c6|FY$Zi7{lR4^!8@>wTC?g+hQOm$vi#BOsV(flh+<hs!OjXr}2EK z5@3zV!DzUeM;@5*o^K(*nDe;w=rB*@due!NEK(Mq((<E(ERs`G<VEDH_i81e4iMm} zUKb865pYw}j!-WvB1!A5WK|Ss*CZwUDgvoxJxFBZmD2wG{GWXI#y=;hdh+Y4%Pp~Z z&A6gYIUSGCSTgu|8Cz*ze4n2xqte@qV7(zwN0P>X;+F@;Y&)+{^#sQhVA?X~&+O>? zvrNS*Ne5!7QskWHGP>faI-FvfPK7aGFIOKl<jkm=$Q3zT)LU;U?pdz2D26pv`YN(4 zjK4Qa4NvwEQo+KZILWU;f6A>Diop`tmUQQ*yND?TuAsAppML-xHXc?9tKZQb;-yXl z0eXe4OXHZ@6y68!<1B!@uub9agO3};)NYCybIl-HHH{40%V@$&QK>9rjBOIPFUa}$ zvMvY4Xcvo6yK#f{D13OEmQs@t@C+6&ufbL=^03cX+WDJ}mon2d>unhWztDQyq3kO| zlW$-9ero?Oi+jEKn@a8^ek@W_ZE0V<=>kf?$7ynxp>Y~Kmo>myqX4I{4w=ZRXmo@= zEgIL1dD;Xa2caQ0*Z3M)L%^TN{U~n1XHxpZdy8{C9QD;iifp1)=aa3)^MrI{`>^sO zRs}ZA-@Tyxxh-Gm{NJ4F{o7Q$@q1SKe(C((uk?@fKCPUO{5dVo&n_z~dk=MAG~PUa zC=p-$=Kf8xpYz%L>?YUw<XT)lO+CxE8lLa-_;z_0w6Uw4!}&vKd~uRbgvZua@PPEH zlQD>|?#h20mP_V-?(GlYrBZxxnfagQ^-sAf;&PY}#b@s4gE})|T{d*PS)TG?DM`!2 zscv!j5nGkMQ%6x=tbFg6zJ9EvHk}bWeJ=ajIt_~bGLZZ1@2lx$EK?76kA9kL;^!bH zvz|z2Qt*N_OuL~Mb(TW4CIRZrs$iYSt!^3-b;YYyhYFFB2=0ZSg#))(In{5k^JF>} zSw#DxF>#Rov)NwHv_E)QO2tPzhrA-Wpk6*EN+=mjq+ww|fJ^CJdiK#s_RQMt&PWK# zb!CU*8xOBU@EH+^fhn1&m41whiByw9!`1Owh1%wb806vu)|XML=G4hGPxNJDuMdF4 zXiDe}K8d+D7+UMz30w!iF*sF}a<AvKnlgH#K;O$vS!~0cC1v&WO15?eFS->hBdPZT z_`46BCwZ#;N_HD_YR>s<Y|q7L<t?I0v8kUwt~BK-8*S(1O<F0cI?kE}+IH}_r8Jf* zS83=9a=r?&6JK}r;3?In9iVbfefwE=CA=I(nE&0$q;}d*xAOXayQd1I!G=3M@CujL zmzA5ZDt+2wl-{IAZ+)I}`8H}6&H_g%dQ3<q&=y+{jGS4I2DR1uyzzg2tzQ74$&x_y zo-Ru_-ZX>fNtdvk8b^;wVbvDv9de_BOv)n55l<9L#XED(5_T-e#u=4Vh@KQToH84u z;{j13n+6v7BfsPO35Mu1RL2~0+(4zDEtW3B!rm$Zwi5UTlqWj*^5LY6(mMHn#vq}& zb=G>riH<?}a3Zv{$FaxAt&`t_*SK}^c4*B7`M?BW_Kta##w?NFmygl>o=Cjsk>4AB zGL)$oKcWeL{Ldp!qWN|FNo+*gjwv;=evg(%zJy)ea1vItF-JRIK-^+4dc+%5;L3YR zc|if+q>$W@#K6Ie7G#CbzSuIXrwO}0p_&@;sESgFZ^?h?-b_D%xmsH^#4OrUNDgAo z>(=RG_OOr>dCTC!C$rP}_l4+Ubj9+lF`9iu_DOknl3TsqH#6_9Nb2QdXr2aDXc3y$ ziQ3v$-z?xWO`~Muevoo2ZjE1m-UMnHO{rU1O%+Dn7m{A#mQKEIU)P>A5ihXAX*-rI zJ5@k28om*ANmL@K{;`ZitLc)G_}KxFiCQ?#m{qfV+Ej?M-7}`sQyE-Sp+_g_%S=fu z15wXo+#5Hsu~~JFlYwRZ%2Tfqox#QN>i452W%5(`uUytDt(i74y=rT%p+>SZ<`G~j zepXmj1cb;4j_p+iqWd~i3zQtjU=2wkog>t;I!CuU64b*~!POC}{wa`J_4T5nl_6_e z+N1^nJ&0V=2y#n{CltS04<KL?YZZCA*47Vg6}kG>NX(PhHVN$59XLLl)e_8)at}W! z6h@Jf*zoIAYaA^02vFm`Jjuxu#LZ&pt5hdQ!gYnM(x^8|JI|a(CaliL#2AvDCiV?~ zj?)g8%k29+_EeB)!K;jrbi+}$mG|8$J00B8;c_>nu?mHySDg`u5H=^+mfx}>Lw`v) zUEr4T;?aG5&O!83zRp-u&a-IqY-eOtnsPR^cC_PwTa^Xl#;u~f%t>zM$xL~=EFG7Z zmuM4|N`ul{I@FoYv8Ovl!qVZ~-)8!lVD8ZZn^U|Odcs=ga1pGCPRyWwaIw9Zr4(!M zc#_COm*$0?2cmRES_(e^_lfLbUi_?g$x|C1oTKfA2~#l<eOm}W-h(%n7z*65gUQyF z$;K(o%3i3*XKY1=%RS(5k8oLf#@F4^3%UV0a?3S~ovQt)>sC(otZ+MYD4+tg?=*8b zX%|(*byFAV+HhLCzZWRpF2MC;TEswg0oqm$L!I(<?b(TW8wv4GLl*BFT#WPcz$B)L z5KDx)PH!iQ3(~emQ1GWR>E5bf_fUFyFVDHoRGfPDo-z5RHm9a-4k!>A&CxoZ{Sd_@ zXDlc(IHL31TSL%4wqUqWCfZz-4>V~5XZEnP$r`6RefzDve0Ht7rJsOI71W{^C$}Kn zqr*@>M;1x|+$)7B<j|jopa*1L2WR){B2$SN$a@%j&2+jE%r2>Y3=BGbJ~5sP1XBq; zz6en)fO!wij6-l*8$pP)8@shtX*oB7no2i}a<DA+TN@LZykj!{C5Y6prNVm;?vP7C zXrEYCaR?;luoFxjq#-J+l==resf(8k_^$|VOvD>>=Y1w>&FY0u%I6_SZwV^Ws>MWn zeM~M4?Y4sw&?%D23*-3Zbk2gaE-Pm0=w8xo_l723{xHT)UCjM7?JR{`yUtFG)WIE^ z50P{0my9TtvOT1eHHi^%Qws?cE-}o)N|{56C?UrgDogV@?J{3ZtB*SIwQ`0F?VZZe z{8aCn>jdLCloc)%DBwRyELeh(bKUVbPLng1b!_CF607PY>SvcNF6QrXGs+`pg;Cgk z?0KufH=R9xP#IS;sqQWGT;;tTNtSPgN1+OkPUpC=Wn4Lbu`|6qI4w$JCm>>mpM{sm zShc|KK$nTw`2acY_@cl$n%eA2{wXz{%S!&?=$&XSQy%)<Tii3OlDtjLA|%ky_e80} zhc?i2C@uqV;raC*J$qWUN~1CPRZ0TN7#@)Jt09D~wq2F7%0uDAi0e@8kNfYm^G!Zn zF;WH3V%1?Sg;#`h?K;w~b-8JfdGtdYQ44pK5T!U$pbq0&C0=yN*;Nf%Oz%;K-isT% z!(cXJE3Hk7S$L_kbY$YDAw6lUB_|4(vK8TGmDKkc<akM<DnVD;O#JkEdYE$9Jravc zc?JeEpDeV>;ZYULJ+;eWPAHS7WnD;w^wfR79XbT2ktw}(4(`Lf7$u$~CCD(ir^9SU zxZ$kEuT}bSnj$Z>j-A`;wBC0(Ccl24RzP&p%tAt!A+^DB5vtwK0hn6jdJtu!$*jQZ z$t@Wd?>L6G*KVX=8KvL0K&<g^p?b2LtC|Y#@?=_Pzx1=9JRRcR7++gYw@9QV7C+B+ zu@acFul8cPM4tWJzo4>R>Ry9FWyMYO4RoA{o2b&fzn*$(F;)f_k))lBR=Jau-d84Y zz+P=+737=A!uK*t(tsODbg(d%nHf#`DfgcGW!=X0Xs&D{bB=_7u1=!_rxZ~N#R3kQ ziUtSQ`oTz7!|IARX-T^ver+OX#B=geUy`!SL4(2NHqoWa=+;CObscQxe1#6B!5jP% zakp<t7epYO+H{BRQ`s-k^FPWrAxva_zc|BZn5xVtp(x2*1={LOPd#cRxUgp>ThvJ= z1`neUv#<?U4{$T>Awv|`UFgDHiArN%=&_v+@LOzM@SU2>x$2Z&<&?Z-4M(_G0^09P z2`iD=RiYurBA%i}DO=&2fv&2H2YKYSnV}bBf@h_dlFH;?_<Cj4VELnFkaVqFDk3Zw z8o{Hpwoic^r{{y#QN0@I`;G5c9?KWf=5L`Ybr<JSo7_CiIqVb&D>T&QO|ueQ(eb{R zPoIhPA`6wy+#-8rWR;rH_MLXAC8DJ4K0O<Al{tz<1^k_)&UlRLv>a>+mr4mQgiW6x z;^n&=qS(p=Q`^?PC$WeX&NThf`}wtXB6JEVfc7b~9PQ7tv*z)&fy5^(S8afAS={vT z6%8yU)J;p8h}QCWse@dqb&PRd&eymiu%o=LJdBBW)yvnIxU>f0SBPMJ?v>=Kvw^M+ z4^J0S>>KqWC)w0VL;2sIxhd|dgh-<hug@fYr^=QtUZ;n%F?-Ko!yv`2b*}!6t2l~} z?K1brGS|m`d86mChbVHAmw5@{NE_KG-!Vv^6`MiQQ$52nq1I0}p>>Kw!{Gibavee& zzXkHi_5<jGrD9!%oUF_(s-OVf`;|Hvl3CZdv@|5fCVCG`B{Uygw1ViPCDKVV1|>*Y zVhucbTrm-uypGgx`wnl13uDO*#Nue;%gT3HV3&CuG2&b)d>+;=9o+>YJ2Qqa!_+J) zp=roBDi#>i70V3+t7)(5R`T9bqxCQ+KWCSOw&9tWoU(wF_VD6Z(L|?_JOFJeX=Wod zQ98JmzQ8o|v;jNP!s43wwDi-1M__)Fd5OV2Q@ZjG+G%|{Rb6*&l9Zo&rHYXSL0!8a zUYJGpjPw&Q6mhJ)$_(4wW{U3q0Su{pyNRDTpO^pyfB^#h?E2&Y0>A&`z`sP?FX5;E zNBzYI;Wodu-8}q7`$Yg_o1D#vTf2VYzvCx>o|}b!ng50V;uDOgmeS6-|HWrdQaj!f zzuDf6VgOELy!u-xl<62CelztGR|NpIUormM{}ungQM`uz2SKnm|7RHVI1K#6^$!lh z{N_U+JWB#$!v2H-0GS6~L#u(l*f$gZ#Q);c>O=a^)A;<&he+c!qT7*{IHP~!`HK(x z5ccxQ1m<r(bONuzm3oIHlCJ&4L4VQ%nN4ALB+d92pBAqX8>oDqA;I8I0ziN9XKuIC z<uLrjPXY<f!|^_`A&XVHNY_ss^oI|wy>i0(vm-$3;1#&S681L+`ojl)XPsZ61e~qM zA`<rtz%S<T7ytO=|8n5a<Le0^{{lf6+S*_0{~o{c$-hKme=&~ZC;ZJP{R1CMCQ0T@ z+&H`dJ>LD}K$ug)zhngVmvrKTUt%tA;{aen_b(jJKS|>;!v-Jtmm^m|;{Y5$2syCJ z`wfFIsEHE=v<S%mMo$FhO`4LOH<9lHivfq<As`IJ{!e}cp!pm9$v>iyCpyp1)82+9 zIQ$g^!Z7EZ$Y4bP@(cXwGk?M1(?bq`IB@_`=|5p04Abg~2m-At{)7GF3GP+{0FD?S z*u|%S?H>??q478o!9YmJzxgLx@LK>HRzM99{^o;fPed%hy7XW0!M8)ZAUN>cpY+h< zPH3cnXABDQQ$7Iz41^y5XhB%AY8)VYoUxA`{`w@G2&}*qK^~a=ME<#x2jink0RR#t z4ooiaPXGu*{WJZ-z}={H;M`w)HC;qq`Kiy64-fE$5c-=>d6Iq*7GT7$K0><oCzGm# zw`;`TY*nK-5I!d=`<wss{~qVf033ct{Z9Y@XvaMOfTtLIc8f`zu>A)HVJP>H#nR>{ zo~Q-908YUi>v+e?K8OPtx&ZQW3=pOD69e%1=Qur(W0P3f;MV-atrPQ4P=NO0Dg=ec z6`we2u_s|qo<9%<IEnus4gg$~cQ(f!YoIUmY$w980s!0f4PDsd>q+TxtRB0QzuH@% z!ht(c31tRPd;otP@J~;%<Yn9m|0jq~xf%v9hDE8-{X_^S4o(D=Dm&hPievQ0dms$- zcl;+A^ojV6!3hl+bb0&Qu|$5NYGmr0;sp=}hCR^%fWR8^k96YEJ$v+_^jHGro#;Pz z`0MjaBe4G$pJ?yJwDoZq&CxFg-Ut1$KM=^j_`gZSf7^}!8$R?`rurTAi9ih2_yhbM zKm6oE{|Wm?A|`_U!T#b?x?B9g|B@K4H2u;3@Co*b>xKUW{FVsT<dUp^YoOoP2l{N` zt<!J(k3fL!=d1j!{^3J55by9$-~Z-dk<d$ja1aKE_@{h7&eDHvzsvW(!6a4uEjy-# z6gkcxhA0}=tCP<da-1OeW96#t_o#=`D#pJ%uJJoA4B_!#=N}W*8$5qCG0el_W?t7X zkb(BpHL-%c8~n-P)-OMGkN?5}fWk1^?a7A+(SeuFou2*ma04Q%D+ix1Wqi!9P(;@{ z-rYappQJfK?q7+=rx16Xo<Cs13GF!ja(~Y9xAb3G(|_g9zsY~e0?kkV(m=oO*I(ej z#1K6Um&Jv}_?xxIFzCPK=evO*7mW7)F$e!=J_rW@**T=5(j3+RzzyIX=vVy00P(T@ zZ%2kb<|A`CeDS8w`Zx^qi|?rctc#2$9AkeRSvmmlr;5+yg{uO`7WOZ`fikn(zQ})M zXkz>wD!whzRlG{ggZnrClJconpOgOMi6Pzw0F02WP#3^NenJO8ztY2^93$&Ar}-28 zXAhE&!l!~*K?eY&e?h<bSbJM-#J}hOaCRThXT(4oL9YmLCt;vpd~P5L`1zbd5`G;; zz?zQdQ&9qhq!@yq;BP)q4j{_#7$Zmn^D_v)=kUQ{fm7@N#f2^~K2dlF`V~Jw4_q<9 zn{-r77asoUK<eoL7I>`#P^_E<VNNi-hdmJhBG46k{5?eD?+gIJCj;+5RNDX+dIN9F zW&3{GCNKy?|MNru5dgse9su`o>M>v<e13W2y=DPm!BGGq7z-iA9pgzbtUMMk;Nzme zCkCVsq)h+-0utPFTvDQO5CF^Sj|F^jgy>@u2IUs@&ou;{1F%3AZkvky7>Dcw0Q2rK zU+xqw=q3h4i#_JE6C7IqEKdOtBY=h71li6A<G%<XSvWlZkb=VT8xI6+HjIN09P{Dq zNzXB;V+rr*al_CK)wpR7AOr+t;sNF(YH@0fon*8z9U$X~#UpSCNEbta!Ap1-0Mlz^ zzva5hhXDhaW8lmeV*G{j0Kon@zgl2QjXeQ@0YDfq7C3PM-=|B##4x-@4nF~OXg2`} z0S*9gBdY*G9=-s@9`k=0calL<Cb~#+FqR#q3jA^qN&q-Vgu|Z<2Lg_b8wdjgodm)+ zvW^y#?-s`bKnV5(k;i`{L1+OeXP(T`J=Y{v_T!QfbbODF9lZ4`0K*vK5#XN^lOLym zgP?-J=}+N+Oah+rlaJg#;S(&(_&`D50UR7S4#PWnxGW9=mV0#kT!V!1ck|fc|L=(p z?ybO0VP&>A6665f2?8i~lk%pVdGPf3{5Npq2+VOj`1g5hya%AL#OVMd`Tt_=t;6El zxxV263KWOpZU>6HJH=WkR@|+)I}~@f7A=E&ad$87Qrrg^28Y3|@0@dPInVn(-+y1O zT#>bZlkA<WoylHV$%4%)|7I*0Njhj$)0J6#+X0UBI}eOW{s@E-Ve<zGSOj>J$5sOX z{+al@URX*gP7LtsD*(`{r~N15J=LEfto%PC!0Y3F_8iC-+$;G1l+WK*4r?peU&)^% zGgYwUUpTn`@IMub^(z2sB=%qAKLg~<h+J5k|M6Ehy$SrgQ~ra8`vc&jLwb|@Uwky2 zi^`wBdjlBKI^OzMC;kTypaPiCAln1}ZY~%M9xm{YKj8puxIh*3t$)$s{(C<FC;SKS zpKs&893tjlkM=59rccoV>t95;f8!+p04fex<NwFOO9axuh_HGQslKB8UDcoM1Nf5& z0I>g~<i7|c1mzDuU@6Xj_3U3n0NlUv?<4^K)1eIBuDybh7+(FSM_@U)f8!<o?Ct-} zQIq}ugGczkAK+h=QIlW(qguHC+>eC%Kgj<`QvdJsJymOwe}MjxWMKJ61_1Z3^07*& z5C6*w|3IL0jEZXiH~(+^Yqm`<iT{%SkwWL~`X6{0hr>i1Fh2Y$@hTBEIKolEIw%mv z$uQ25c=ZMa#>`uP*ZgM)y9#q+2(}_$G<@G>c>mZGC<I1Un*K=zl;_V9J{`WN+b}Hb zU%(@_ms0wR3_!pqpdA&~?38`z%jXKQr@`Uh{p&*3YNiAyPs52rr)YBDLf>v9$=`T5 z9*DX?7o=-HHkX3^tO+xOdE&1N$<z&hgbOY;s5Oh%veZe|6^;Il2T1;}O#{G__}BG+ zMlc(YtT-^~6dW8P@_%hW0&u8dHXu#%YO$Szl6q&(VOAhjF1C%G0{^lCi2w&Djt#T_ z64r>mwLp9pZUE^q-!@3pCq=V!PNlPL60rWMJ2|{HuDc+xARxKQlhwa?T^18h8`(mB zPEMP;VmiSuYHDD_$xfj32X~2ut{jfNCTM|9VZ?cM=VeT;i?745g2K+>S0(ePW(q;% z>D0tEjzM`fhB@4tqUy|dInN3)&%&|3l(8V*xL629ttm)QtNKXOZx@SwL1k!yC}rb| zqND398MJVZqW0;I=2us1527NJW>E`-XwA~p09|E}Rdf)6;)gAWRCrGvr|?P2;QrAx zV6f}iQ})f?d?!71m0VU3-fk@|Iw~{ML69+CH9#-T%OxD8%Pw(nA8i|*^xGev_zZd* zzc|8ACqDENvwU}uzw_N>=O<Ow|7LR*aHIE_#-`s2I|tK)qN$T)UA$rHg!}R1%ba*a z-|1|lW59~M^?mb|9l_QDGy6%B!(xG6$yLTPeZYsDS<9;oUpEZBO&+m+GMz`ny{@eA zzVRzdtX&Cex%=gUy(Yc2XfJIrPvJ)SX?+)9!?a^;&+|2fcmjp$h2Z9dX?w5x2pq0W zwuYhL&tIJ`&|<6ek%L9IUp{S=g&#X#o_WH{H9QwjAQunv=An=mCEVdaDu-kL4@XEN z>yR@9EJ`_T)-3(A$5DXQr!M^J!5w~At%}-i!k;YFM2y9a2i2FF5xCvjy2=!aNiI1x zoTQ>}I&&C!(tiVl#V}7NC|T>;$&Qvk)f%K^raUNA(pHJt$57gR^Xx?FflWSqt0n?4 zC)KZ?7vCPl&fnM9Z=D{`T&}X@#if)Rk*Li9d-&Y7Iz(150=^8`t@{43_Dnpt<z!hR z`3>+oyLalXV+U)Zc~%6yvxW4>-xoep+>#!hA=-O9cUeQ0=iH7L&yV+%wZQ~uq_p9g zYqvbUAoA~Pt`^E5P@UC+`)=a2!H;wHr|-Wwq2T1<X2KLLV5golbcLC_@{*nM>~)iW z_qQuq8{g$6RNkAg?_2TfUx@WAMw7?7S`{3&P%)AwHa4}(EAVFR$){}qc>bX-^dE&1 zEusDW@BRLD2X7m0;xBj-tJUq5CzvqstQqm;&F$~A%u+mu<b!l&?eYQE57)6l4kSw4 zBj1At^l4(ameFpUwNM7VIrk7ENW`_bg)Jf(WfGdd0QBN7upM^J!v+b$7d|ZyY?D8Z z#Cg5R>FlNAyMO8AIt%em`4DE&a{ag%P3UlThvZ6KKXrX_LC0tPvV&ew_X5o+vxK}m zm*_|gc-x-ZIJfuG9_ms!F;`Ea9naD&K5TE(cyt?SX@fOOjJ=|0bvNM2kG%Ue9iz+t zH=v}uHn`mpi1$gR;az1V>(OnPpTaZa^4Emj;tz3PQsXE~NJ9yV#ZbeG@JayriFo`? z&XAAPlV<}!_E!7IiKfb&(t5={)F{!o?jHRYZHKA-z4uToyf)}6$W^;CVT9M0Svbe8 zPe@i=F%LCpd0OskxhT<@BpH^8AlRs-@-_nbaobf$6NKFTLDe+P-7zzxwk$6RSFj<a z;MHBmrDGoe11`dOa9@G~Q%HZ5%5felE{)#yni)vL(2asqIuSqkoL2PI5;gyzE`$QU zcoqwtKRtM>GZSK+*BnG9zZihoM@PRxv}l{RlbBLqGSUF&#=GonLcM!0IlbSc))j6& zPyOz=Cw1ShV*&o@9aUXR`q6IJx1FwUyIqOYLs4@6x8aF42%RV59XH=y?W{AwyOT7+ z;N+%4W8ZjwQf?>dIwK1+J}B1Yy}L|nKe*(BOL@Zhi}(A=mLM6<(Q|*CT#$0W{gQ>( z5%2ATvr<g=+<~IfX|Q`1@o*N(_=CrWM%-T35qo@xxoXmf7@XnVIaBaw!vTaE^CC>Q zj#x{!{1A<uz<Fw+F?T63ICLCoq-#QQLVVnJT9PspNEP=XE55xaVpKOdREo~zKPR!0 z?_XmuGxs|PxN!nd#l9OVj(6KSxcC6~(S$^&_LI%?aK8l<4WaFHzb4??I|~^1Q2V}j zaQWcPzj*b4tJa>IWhv|O_MLkt@u!f1*XChs-?H5w=?a&9dB8>nwZ%C6a6%<mq4fQ( zL&t(|gvrLpif_6|pG=v!?~Q45QxK#~u1qf}Lwv1TPgh3~&FUo!l?BEsc&}U>t0C)% z86*tn2)-(x4R)7KV`_ga9fR<2$T4wTc=gDErjhVBnF6wzqa81!A=XtBCSS11HA#_v z11>r2I$EUrzFx}9W9(Bpe8bRd?LWR#bbDA0!}NQ(c!QUdtifDou$PkgL|Qr{=ktP< zGxNc!8C)%VY=To@e@u?WsAQ+Jwh8UO87szgIP-pQWyh~D_8D*5byW$J(C|ub;K1iz z`pDLHdGTf|k>AE!AU)VC{m6+`4tKr|-)znC0Q6=|)T+z#UVZo^Y<zQT9X3p18p$9u zRI{I1;;M}~GQb7<8j3gCGwj-%q)F8s%n?~F9XeG0>QcQngyO^m8J!9G;)AZ-e*;ts zKF?{z@Pm79Vvg@AriB^XrBeJ2e?jo~B4fS$k!mBU-}EN1_~H5Vj|>@(Y1B>(DI7az zPKnL6t%ZJBq?iPnhn+uTHZ)F60F5#cXT0lUp_Y{U{XS5O@}TR$wHDzfDC7#EEoMJ^ zQ&LkE+cqzKe6IXqp6jPA8^q!(g3WILOYuVNYjxI4${-6X?-q#jgFu&<h0<8JO$XM^ zBVradln%${V`Cb7?vaIe9lw8wuFZ|>ls4u#ux#!KV~N7Y`<W1AEb8a;p#dxR)UN!4 zYgY+cgqUd4V7l;3^&VGQ(L0OZ0EBMIi@CJ<>o$Q?xAX|=>}Nwi;J#PnGALUM-$q<% zP_MbKJYi}fHKoL@lj9T!UGVk02$e-Z;)AqnXIpD@t`^va#8SwHbn%78nO@MEpwlyY z&k066cDBt<Uk~bjOf!H!s6D9G#q&*4IK8+=K$ElK@h_<2-X44=X?akKeR)yAtNOag z0yBnKFT{0A@!-`@Bvwv&;Jdm~ufiNltBZwIwdTWNhZAnPi4u%IiPE@7FuNPTtZU_2 z4?fHC)EOE7NrA(LvyKwhyIK5f%7|Ey?R?I<jTmgTjr*yokvY>#k}I;)qZ7I#_P4*l zA(`)RTHJq&Az<Av1CXVm`xXR5NBanI2H_}XcV@_Z?~TSNAs#v&SmmK-3Lk^q%Y3pb zQ(A65(-<di_9Dgd7ylfbPCqH>bG^s<O-<ai$Rj<u`qp2mVfxH+Xj2GsaXVRFZMhqt zqlTHgnLGn9n)-fYGjaes|NeE^%GlNXvfyt(Elx>20$u^PB%zvyGp}fBG?xc)kS_ho zY1U?nye4Z!q13IUE>&IO$e|xry$yHxCaZZ`h3Ly%lAoy|QQV#9pBqZbJ{8HQFxN(i z;d=Osg`-Y2Tc2?kcx7LvGyc5IQ0-8BKDSWv$cEB*Mx7C3NIXmqg|xTPB)2b4M^>^| zJ2w}nn1yN=xOu*(lt!5jOny9cKnOQmYfe5W=|E+8%1_cWHnCrt8#~Q!{P<EJUOIKi z{Sf<)1di^pPQU1P8ZgS9fHGsBw-WBCQ?^>@CGc(Xwn)i8h#M*_L3fj}MTWyE-g6XO z^@id?5@w`+I~s<|%3q!-+IMXA#Jrx$bc$>2&qR%SXeJ7`l<>A;UV;Q?vOCKNp`QOi z3-RJMB?zhJC>y3a6Oh_bP?T9cQLv$nY>OXlmy)!ct&{$CP}6jA$RGgW)2%2SRXp)& zvSZgiey8|qH^)yLgWJUoL9}H=o((ZAr0!R}a^vbKwv9%-0erR2T%=H(UzH`v#kEzo zeQl#uSuge!wW`i5OGXUQNJ~6*jBZZ*(lQNVzX858HWzGRHdj&V{8$hJCi~XjGiYjv z3#nJHv`KJoZ6CEpouLCF{@}yo%bTLwH-<n<BGlr8Qt}h8Pn)#RGkmfFg6p%8ayMRs zi+H<DM4n^~9Q*Krjm=He9elS1M0SWi;m}N+jzi5_X(eeT_ykR+GO=c(%30?#UNaRH z$+{OfnORydcTF?^g*}Aq;Ivzt=gE)myRY-cX6lH0eLx*^&6<m2F>MXVHzy$i+`@(; zzcR{|e@54f?a-ygPTlu(%5QO|?3G+tsOIM$?iQA~Vzh~dV9lfO%v_RCfLOcEkBd!; z8ve?fLCy_Nz2i&@K+26v6yF`<*Uny>0RBFg(9tyHMq(EnxTO9AJ0%D8G85MinwA+B z<~1pxIJCJE+G6|ouyML^id~}@;Yks|B%~)~oq8dj0^uIUbJdGI%Rd9*D#SchfB0tC z;662Z|J9Mb@FONxafdSx)<$bUSE<4wylL~)wqMD4*K|0lF5>R`gUw0R=o6LvUTD4M z$T|B5m`@LFgg<Po-gt62-Avr@zx{f$mUE^Yx4wEwI<;|W(EjZia?#$d&<N1-77z59 z+M>A3qIS<&cQI(WQ7slBegbV!?o(Xk=JIBrt@}EhZYWfo9Epm%k9eFVuP-TQ^gRFK z#xO7V{Nl3_AbLijqvqYP?izRLSAx6yC||DFDefjvI$?E|@wC|SV!MHeXm^S+caJVU zY>G|3(?r=)91-VY^g)roI>qP4t~KJjw}*b$PkGRzTh*1w*$NHefJo;fLH3EO)Pf0E zKW(mV?}k;i`{pU6kl&*G&Uu|YsOZZ+HZtzizKt$;bU8%P=DxM+AgV;5#Q&qWkv0LX z15nKVBKVy2;?Da{N+x|M)!%!fAn4I@cN_D^BAziq-0jAqFE8||d{9LNSuGigZ(y1# zB7B^xMaY`eqo<{nZz`O5zn)P<K6FxL$fTE{T?*FmZq+mUn&DMy_Q9y7ne84%Vh=F) z&_lOo{te(z#FlAg)TL!iUxl_Avhfg{#QjQ~G9QPqe|8QR0`1eUgu5s#qiZhL`0KCO zU&VKkC*vJ+7jo$n?UHQfKgf8~^YTp5x2-u>(B`ihnIK0CW9?eoOG_;AGQ_*q=~*30 z+To0_eUIlo2Jz_$jLj>ip+ndSmjjhE-m|lP6A)&e+psvKcUToQAMY2S+b@#jSJiKU zI87#wNq5Z8X+!MXh(IjM&V!Vbjpa5ty}U!Ii~ZzudVE^YDP^K8=Al9@C3bo%I}O;M zIu!|tLhnZNb_sB$>+}6Kk8r0>($;kt!GyTTp7p!|^eT$Y23c};Kd4T(>aDD1HSU5d z_No8{>66gAqT&droTYUs=U?%F8TTPhPSSK;Zt9CKimo0x0%PWVy4q_HLi2O4M~=6E zYg4KdbAa|id9?r*k_ZrIGho#EMW9AnN-u5%cEnh*&x?;;ddob-@B*8+G_>whH<`#% zSxU9`yYTe8Q(%WnN`<Ku$<ujsf>j!r!Y59+1ZLj#{Q+^2@E*yuvL>HidA0NDgdeDa zhaXe#iCWh)yJqWLsCVQ`?ao=*H<SVb%%R1-!5(3)fxDkIFpFZso6r==EQc%8iO#7M zXhyyb#<FniqK*f-#@WL561t$Ad4&@Nrnft=V3aab#+qwDsJ8?c%bIge%<xli?s1ek zhpCRz*Nac>Bf6TyX^52Z*s67!l%)AOAB{;SRnqZhnZRMb&}4Nzq`F)A9*1~ybMw|L zKhSsbBn|Res4F54iwE)M8;nvoIZzy*q9U^4T~TKZt1ijab!x%+DbNhqQ@m5|V-f~B zQAM$*YdZ;&a7YQ=B)ATqv$}`CM^j<Ylznvl?CRP4bd!2P9XGJ12e*vwNR=N)qfcU& z8EG6kV_tU;deiSNDZ8tXIZ^9i$4|5B#2~wQtbiNv8^Bp6AqowG0<nNwzF-8f0HuI= z`ENkmu2R-_F)-!s&kE7t14ke91{n;WJ+8feem!A8B<TXmbjA+u4=JCoxWWu<E8>a) z^SaQG!i{cvQ#<|%|J&L?gR}RXTP{Ib!dN73_kF}+p0_k_<1T@=c;3->5V9Z;^B_5; z?nShd!=5LEkUV56)`o(gkKld}NwDR%r$=jH4`wH>boZG&htik6+GlyeKe_a$OGiQG zdqz@D=%mh#a^^FuO9FB4B&L&V2$0O#nBRXQ>TA=0_aj+OK|Sa!^w*h>U`gSGlWT=m zoVuf7`stj=sSU%5L$o8IXM#uP6C00p(IP6Qh&jjJ6k!h8gee;FMrT)ZRM<sCm|I%} z8V}E$+_!a%<q)~f;j`tvYX*Wb_Q_{{hQqPQ8M_^CS>3PO^>@95E#g^Lus288?an=; z!WoKI%^2F5;fs3Y%;QUU06BylVYD$Xz6Xgu6@$$ZjAX4_I*sOQfBAHZ*K7Fux<8V2 z|8=uGgoe<F1kPIb*otwEjynks971=PwU)MV+0a+{L^D?r3c|&lz3o?fVO{&a8ieWy zC{s5=%CXqGn^lrm(R2xEE~~g^{+ypM$UI4|Gk;h)(C)siXg36XeeB71QWmho<R1|= zZS1Jd3@B@h%E=7jcmyyN3Mz3z`$PtPp7Sp_+xTE{3HJRq*%`qkhr>MkhwNEo{hkJ4 z2{jBxCL6nnuis)G;wZCp)Jl(Fb?b=7;>MOJ)+HB@%MrA*J<%5GCk>3|nwM^M&(|Ug zKhyoFp2!j#@KB}1gflubjbA}I4!(*8V^yPn4~Da~Q)49)*D8RPFVDME3%*Px^~9HN zLN|ST8`p=i-UnICZB@KEvc~#D%rSDBXzz`E^d2r&$Q*c3pEiOP%$OFmuRhjuyV(pG zX+>)=Ub%;A`!!P!kcT!GaSQZ2->^+=o;<8mW*JTvl)aXB)IRlB2|Lf%GM7(zSkzlZ zf+AJE%owerX%u@tEiWrqelPsub3^mfW0x<su<`2kYHL8fDpiexJwwVG_s}&H5vPW} z`ENk_a>@pCKy0JYyECw_eg3l1arXsT>OyxxsK>&vI8159aK<P5g3;P2nd`nLRF0i7 zMol@p+s^fvvrVPJ-dyC&qXs|UzK{c}z!2L$$H(&#ot<bh=N;h@obCy;W5D7EsZR_| z)=+Jds<nIY34`sG&6&4#tjMO-TUAgxe#qr&$0%YcmH$c(fDoc@a+#a8idX>2ZDDFq z&=+1c940`9%tjoZhl@|mLhuRCzn3xdUxi}?RtI)#9Gmicu<nnauKxxAixwd7=WzL1 zG{gejAJqvmwL=q86%Frw-_`g@*`NB1aSa~i>Jf%5r7j^Wt@K~V<bGOghFH((cvR(( zJdI;)YPnnQM<_g0>8SDlEUH<Ig_9K*b#)m14M5TGBxJC=Ns)KBA5*SFodNJQ-S)Y> zxqy0JfUld+6;Fq2&5!d8YQ|;rmVioYQ=pBB#yb;Biz?EW5}{`=`qd7O!*0b7X>ZyR zX!jEbc%D!Pdb=y|^U3hVSuIC9|LM)d^5TC@j6PDuUx6Ygq*a$7CG&e$bmeAJi*;KA zwg*amOtyfbZTPJiod>vj^sQj_Z537p=sS~`4(EtfJ)%4wsUfXQZfnaK4O94as@jDw zcFB}}s_nw@ke-JtI@TMcNo<Xq^9PhEq30C_?waeHOd>SdO2SX0^+9AYVS1iBY^Jo^ zE3cDfmtP!Uy9y?12BM~>M<W@kMg!0lIwAg8IRf5&H#cb^y5`KddM(f=Ax+LZ@bIH! z>uD^SEvV+cjmusbV1Mfv87G<sZ!YDiSd*sZxgl^I9NhF}vB6E;?46CL8*atHPc5C6 zK=vkR4G>zrMrNyR@5}EVIvq*J^~2uZKI|?l_}2}WJPj*m*Z8`@g+?=^Z0T@CqQW0X z%J;6Rr#e?q(Zh4B0|F4oObhoPO}0Q<IgOaa9_97ytm26>?Ek_0PM^Ci{rH#1^O~Ad z<B~G)cJiz~k5{-2Wx>so#tk@CVk>E{J|?^}W}y{YLyVu1JW_Lxefq@-Hr3C~i;pAK zVeQB6k56kEQzG61y@x}zsJFLs;B_X_4~~z=LVr09D1zgij2uie9&$dN#=<CT*&Q09 zhT}xg0y5?OxHD23P4;NO!4REzeg+yeX8d}v)~hxX4TY2278uFN5iY{d;&Zy6B(a2` z&afD}4xMKt2~ZeGB`3Iz=WV}&;6Zq^rCIZB&_c9^uOqzU45|Y#abpDPW6=3t1IQA$ zCXVn~)luJ43KV=U9H-!4cd<ON`XBNt+-&#cF7@Jx2O%%5UoP9{jnm)PblY1fo*S2F zTM$Vxc#g-?T6}*t-7VP(^Y6ykcT2FLWO&DKa6=3avdXqm+q==>hURq<thpI7sz6ic z8Rx?7p08|1_oU%;Y5x$OSo0}<5v~K5=+yh&i?&MGEr5`dSU1`9e4Fkf(+`U3QuHih z9s<5TG9>$pg=&_2N(ybnPPGb2?LWNx^h?h(YZ|@ir2Eo!vfC__gREi8r`^Bm<5l#{ z9hv7X4#LU}_p+SOlxcVki40GsLfRD^ug*QSzQR&C-V?nq=ILlgTrob=Yr;Z|=Jn<w zPn~TmIs&g1AE{<_EqfVZ6?Y*C*{QuaTJELZW)r==PUL`&FYu?`-sUEoXGDPZY772> zLdDxN91IQLmqD)U_3YmOy=w`IEK^6onnylngemv?^6G`?M&%@}-PsUz3mF_;pKkOv z(^3$hzQgK^REabXLG92~fXO;ulk3V{NK!giIDQ?qs_dFw+AD=jAMA}$d<_3GCYHn7 zwnx8@3nBXgqdgTQCkuqFXN1PxbqfL;5UhIP%@o^$I;aYq+}5ns$4La|<`2(B@R8BN zw<4yt37V(K<ziUJcjEP1FE__@%=AR?4<4v|65bT|y<kqcOeK!>=B3-ZEUZ2KIvti& z1-j=TBda6fF5ovu<v6;?Q$F0h$kbqZ(7r`y8Y5$ubCEDt5ytTfZ8D(u-Z-E4L%yNy zdAU-SUv9VL0iBGL$*x$3hm0;MIe0#>iP>Xx3|-5t@#g6oH9Rkoop!}}L#_eTkzhUK zO)(dLDVpbBO}oNHGIO1`Dz!W0Fr=LMX!Y}G%VvxNCT2t$9y#$rku0toTm}=ivEm($ z`6m$*S9b{>VIT@mh)<2b=dF~9)Y_UoUolS11#d0~m7MZ-{WK|K>W&Bddc?Llz>M%E zLNLCj&M!9DPMmO}d2EHwL9dIeO<eV_BX$Fp`dmtsYi{~ozm4L5QSP9rbz;u$*h^|o zu<+{a6W4CB1yj;&wy@tjryyMRH6m(T>4veMJU&v{wdU15iEhP7uIhSybgn=o#R6z_ z&2S_eFMj9{+1p|`OD7c~qg9L!R7&i(hW|m~Im@sDd@do2=`%E-)<XoE8q_hF8D&)> zxxkKtgH7B_D8Dm|t+QD1#)&-VW3b5R?w}PQxO-;~I$OSRwj^*i)!rNOBwDvHi`Ph@ zB@>%%A`I1+clebe)OOdMj*8TXs~k|kyeEzTFn`H$q!>R=Z>C*Kry%KUpa_@=89p9p zJN+JuG1$fOCe~vSd?bg)S1<F_x~QDcg=W=T$=t@$U^TPd{@y<9)Z_R!z^uT$GhoE# z5q+PoZnkc`?N@p1Kq@BetLN>N_{cNXWq{OE&h%fo;jcN|PYJpu{$|(FtK`C8_T*1+ zgKZzTdD}c|yOOxAstH%H6v@N|+cir}wB$CK+;~Af*THZhH8Hb-?exC^M#apApa?8$ z<D;7RuZsr^$bYooX2R6#2iATAK2-7uFT+G&ZN7fHhix~8?;*EeNeX}JF<b&)A()LK z=3Y|aAs?(oo;)F=8}#lkzGsWHBW$=!YrsKBx=BI64XIjB^r11}*detm?l>x8h&}29 zx@7L{2~05%R5Lcy_GZ8txnW}T9+byY&KybPW3*F`8oAjaWC6`0yAGBjgsD;Wo9u^_ zyK{M&ZyP$euNF<R*J<O-B0)NzYT9!*_gh$_w0x*ji&)63J9t`7?AxL%J>)}dby2+; z@AQ2HZZhT|PKzhpG5hZiDESnU1z@AGazex-Lr~p=)>jQR-;MJF37hTtj5kmBZHUOP zJ4#CS4?RWc@;5H~#FC1S{I1iT`xl<7tPEi*WL4D`f=?~>nM1>7G1Y0^3xGR2toNVJ ze11K#V!dX?8g(Y^bgDYMZI3hD>N47>7cdla4RBttlB0YdUEJh0C7ADZ6(xV8^@-l! z`MEqi9i+XpKEvN<*Q#d2!)Dh#<<{g3q<hySlk2reclD&^yxiaD^QH`{02H^Ky`~>( zuWp!O>F7Leb#GokN2Vy{>TH}2Pv&!dk)u65^gYj%+NUk(yh^#Byj&6!0(C#F^Ry0% zlwPOyaOR+IUB)&z-a+Gj*hmctUQ`Q2^KJHnQ#bn?(~5j1s%W0-C#!h%7QQ^uTHRhw zRVoUfy?^o9v*Dd8l9>?WYH9-IIo;RnY_15swPv<Fv=Lg|VeKdJ!(VkxI5KJ_2=5CZ z2q4f8^Hgf=z7BuH{JMyg_W~VyosSSJ!Wg_9W)$XreUag@wcj<(!u#>uJ(|YrPGNo_ z-ofa*l-f{9w{|o}>&1(Vd5*1%|0Vtxo6L+M@5d5y@M*esj4-tR)(AIPzZFWlxuD4y zFK=$~WDY_9octr+Jvi=b(-57w>#%$dZU_t&(!9&xea_}1_7?fH>n*b5uw%fM{*A8^ z*1E3}=A5)~JG<O7(CCkyY@_3O(X&UeXfjwKuiDFUl41@_F|*%@_}u+->-g<BXvtR4 zNb7deM=Ze8k?Ohik%41FSk3K4KOg}^ve0z>{8~Bv5$0tQ)jYnxT$#2PXlPZ&-*;SQ z&)rQ~RazkmIyo{q`73v9J>_^EHA_5KwVfQG9&vS6rVWfQIj8=?TL4?*8V1sWqp!p5 z*4f`T`qGcZ={Zq~Y#l!j7iFG(1@|?CD$cvoS-|E+osRtvfjS-60mD`s!x-VuG|9zD z3r!Q9hkF9z_0;_Ccn};VZ10$esXo?t+++*c(Oc~nYhg66?n5+Wc|m^VWJWpMRO8pg zReqNV0B?tFQie6#J|u%xG0zt;2fra3vY@_F(44Y^SB%+edIam?-QwdLVPo%AhVo{t zB$baSG0nvy4+_7U%E1k}O$)7X5VGvsSvY%Z-|ovbmU9qVnQIy`beS#FmQ5>wMhLA5 zBW-BIIjzaQ%-L3F6PLj8%CG1+zEol2V{bf8Yq}>)j5ZFpvB(^iD8;|lC9SFN(URRY z7sDoSOomrul!iG(^0SbSaSt7`?23cfV1c!h%LR%vE@?ek4kmqmxn#v|+Cj2T3%m%y zz=0}zyA*U=n(`sd-VcV7vUL!rTmC^h%lgiYjd$cGlT91rV#(xO3XGb!%98ZM;MYQN zSna!(O{Uv;-jni;;1$jibC({jlG>q~%+9f07PguB@R0Q>kighF0@cqtP}tgmcx2qC zK$v`=eUR4!P_0v8V4*MIWqwuGv~^{X^J*@5!a0W_k_}ny5kqCwKVYP^eX^F-2}>k@ z;K+9eQSl|IdB-)GWnqemeRWVn?ep|f!Si?0PT(p5Y<}{gq!Yqv+j+EL8X@oR1)+#b zfsTHP=?14&=!lr_^0&z|c#70>QN6P(JjZN}?wOv7Id(NG+8ixkpbo&Sw>T9wK4tBC zgz#Aex^hpd1g+4HW;^RYREiFEIkLgFYU0#WU_CBSu`(sRip^a=W2krVb@nr*YE0=n z5&ZS2pFcEt-@JWvTS46e?LG_j3=EWCHWImtEQq3rf2no$<A&g@#2Au3Db;T~(IB*3 znHH>n=`~`lSn&K(`wOEV>_3fhij}4Jx@p#sJjHjeND(=qfHH7qy^frXT&H9mXE!0I zOGxx~x?0=i{17Hn%T__$5X&;p93xZh_`X3dwScbwL7{`fXxG(MqT1h8#p%27#y6F- z2&7Tw=jatjZ*D4kEb$;P2}0+UsHH*~)AXsIpj(W?<6)Jm@!Dm)LODBGZxHHhd!x(O z3+D&^^Z*-IF}Jg@;Qi7kZUQMO<f%+k63H;TplDEl$lm^zO6J~9K_*e<nVdI#^gWbw z<YPzs45uDl<41+^WwP=v!Sdy!r+C}Yj;edZju%r*>JjD9)Fb%NP4d~=PixwhAG}Jz z=q_tbi~jY-!t|8~X%@9e!)C8g^O=%ICr)B)PBPV3-&~L_Vs#`!I8%-c1DH^)F|w<& z#C+yUaU5FYSZlSMIrV7kgH#Rm9G*<q6zuzxKb^@BC=A$rKf*VaUI|2{S8N<&VBm`i z-w|YtZX298@b{7Ptt6+>G2;IzvCNN)O1G1qriI9#NJf;>g!nniwiA)9z2gFx^#JUA zLU5hVv+#KiTP0K>UJrJ9NcHM(z`u2m00>Bk|BvpGa}rGZDCqyuJ%TAJ{iS<UN+4jm zhr>C`LsXL<7M&7lKawmh%`<7*Gl{W>uBc*27)v^;I?BwlIZIT6FJ<Shv{~6<gXA=b z#P(AXsFxVtTbVLy?lGlF)W~i}lGpv3SF%;Ivn!H67DKp1@{wi9aoB_2(X$*UE~OgS zm`Y&XGzByc<U)gvb$_tUTn2K}46kBQo#7M4VhJ<LeKL2xQi^s5J1)eE5D|9UcG$-M z27Izq8cF2O+Me;5Y&o6`JRR@<JS3a!&SpZEW+*e@99H6>E8EN*eA7{rt{D}Ykf9X# zoD$55U(;rX58p&|of5{W<VrQF!DopSN*y%8VPK2SkfNAql}}_x9bCwP{p^5=us}qf zx<z89du~eMtho{$Vcl|%<r95)^ak9X_bFLb%f>{FV7sxHsP8btoT@j**bXLK=hSi8 z8%u*Np6k~A27s_I6m-~eKfe@g1gM^gm)_>g`%E2*?rW{_>2_!YSdBCul(=5mVWr)_ z`Tl6S15_{Cs|zqV6R*0>S@fAY>I7eJoWtd6lxw$}Y`eN`ZVB}{g};^W6gQc>eUmp~ zA$V?i5lK7~VM;-07Du5-dTCxlGjPh5ozXX9u6SuXd6>)gi@fG(fv^Pv{cNzF2lffI zny#<B>S^^`_coeL5)Q+nJH^HRSbKo1JX5qySx~l7MV&j1DdX22)ZYW(=#~|xq#;6O zIKP{ya6~}&7nG@c6#dxz>uVCsly%7DUikt(IOU0`rb0)Lt2)Eh2h^b#@8uEV@wwe; z@WJxU@@Pk0|Mm(-#J)Ck(YH@;BaX6$%kIVkG8{V?>+{YdE7HqAJ_TkOtjNrzXxpgh zqjU5fMV=F_@+w>mdqZXdtm?4_OKFeu`-zG&RXW%bDg4shf_n9m@8rS9ySLU$;r@8# zP94Uaic5Aq&YN-G?`R!O7gNa!Qufovhqsfu1tdr`B-!>Q4^8^GweZM%zSy6@Cyo?d z!*mEZRd|Xv{ikFLis~2rPZB?gOQ(^h9-f@=kOFqKRu6@hF~{nOXUIFmTy42T3^sw( z@igB#md!hzE)#I>Py*HPx}jsNH5_)QL{`Lz(B(Q)oSfSd!(_Z6sjLkjo@LCfk|<fy zyCKaAgjI?=S;|atBdBm5_g1Wifrla}iRh^MBNIHmu-fwxqf&y`kMfG;_UTgQH++oW z>6g;*^#UY@XqzdVGKj@$x9`DVpzEWbob~pyhZ%qk1GYMGlOPk}oQ?`wkBU3O*9+m~ zJedW+C8ZwVEprymq=boK3chqo!XF4|YY9GCU{pT*!WcFWFKbCV3uu(PNH0Ueh;rjM zDmNw({32b&X-uPLWRHYs!&Nis=$ntwwQx`!Tdx(W!epyg4EqF#vI4aI>c5RAf8T~F z20r>qEI>|U4O=H!%y!mw5?m1fa(TBuEZ#kEhgU#I?mBmUrHPBX2Z<#kr7Ag7D}S~6 zpiuz|`6&IA<r(**oV1f&=-IW22%(u+En;ktC~#Q=>fmhZB<#0?y=kj=Hg{F^x)pu+ z<5iG`NA>Q`7x)b&A@7&0hqWSY(&{l~pvT9Xr)9Qy@T88Ea?)h&(QP34c3QId`{-== zKOCPDzqy;IH#Kjm^Q4Lwn@11|cDQB^{X58bQ?nG^+7DmU>Q_{uof_39S!ae6L)||` z0><QxFM$xg`6Th`0(_4`8jrG6q0Hi~KDLDr^k6}#PPLNqMvU0VsX|qoBt43C6@Db_ z8`C7ZGM`9h!Z(1xt2ui8m#B7bG8#>yqCkJ~(0aP!<$(9j;SpILgDo#v85I72Z=YGJ z-&kSSdhc-_h>WBR5g-}^&90PzGu2!Uz9X$r(S7jvZDutWKOC<en7`A^E4Fyqpf1xw zd)3fO{$hBE4GG5<x{Av&NNvmrb$w#ttqz%mT<yP<d!~NTJe#Yho$4{aQ}jjs#K1?w z{YjsciLqaB9G$4-(GNV@1>H6BzTE7%E#h}|=T~#bPa=a?TvJ#V+|X$2G~b+!o~NHD zSln;Qo#=xrx2%+W^%Q_Q<{6RgC#rX~|JnNv9X5D}lFXX>W&SaBBsnR_hPR4UiN7D- z<A{6t3)^aKGES-k10>$t8Pnm*f=<eQaJX6WN5u)BoL2$^DbCOMS_&0D+9+~Uk=*>8 zIumCiO0^bq_(B@CyI7}>^N*NURLhooy1f+=J!xV77__zrxxNNbL2RU(P3i@Lwri4u z%ol?1Y$f0mFu_AY^sOkV+&ph7bMwR*)}spW(luT%g6a=`QV`Zm7Omdoo0IGHVmdW# zvyuRe{m7>lfWw{i`({D+=2jN{v9FWvUPUuI9^_~GGUQc<RH3c*I@P0<-2_fk2=qJY zc{Wr$kyB2`zDYpRLuqxPA$ps{Bdq4KD`mQ?)OdCciZ~$hLsQYtf1L8tC~`d!&Z%IQ z=7S96FuWN^u@QECYKQ`wk!%JjRTu^Y4H_vTY<n-AyRCL^t@U>hJNgxQ<+6yG5#6(G zPMa%*^oqpKh_fb!yH@%<dvw2xXD7Q{*0o)X?S`)^bEvES4d_;W{kit)zM}ipwi&6N zIn;9x9ofzT|BjHf>xXvpxqH?4JC|SUaOB9dXCoe*5+Eq$)MyAik1Yd+SMT(R7#lh@ zkjGa^$g;7&f=rWz=#Z#u2#BZxN}ieom=C^w<x+<y@r#MoLFv!Wwg3VWU^)j`Qvi9+ zkTD(+q|Fi6YmYx(WlWOJzI`v&dsp~5zhmxzua0x?D(1-G{HgeO+!X0m2lLr-w=TlB z9VXp`id9TU%BqmZq~lk+16&lYZ)Dbk2vidIP^+Cl_d03_TOJ~m_ABmc$R#1KwGGBK zh=4p(W}(>fOzAcP*}7V<VR|(bVkRATCqXDkTJS79+F!>pHs-8nZ*qwK^kKXkhI77< z6aLBUKO>|<%mW;^i5<r`+wZFmJ8Bj*Oqj4jdTj`~WJa+HLdy6#6ccqn-b;~IdOnq4 z?-Lb&Q|=BUrZmSx0m`o|hccBcb>|HUe(3~R-rozVi3cs^h@-4}<Pf4Pdt|8}8kMn> zmWpAiCd0|iva422UA|8BBIO1V*MA+YG(7pnM1_hSDfOPYrzQAYktXBfsoa=&O$b{$ zp#w$u5%0*y_4~wX|AxB`-OyS;J&BX2k1S)tkoq?|R35j>6mpD>;rN5o8~Moav(Jup z{mP&FgdA=phEbor25Z>nag6kA`9zzfF6sk1C@_COL%?<}FM))?G)t9fu8d&j4jfbW zpk`;k*G;SU^5nSA6}yZ(-p})yWo`fUrEu>uZv_B@#6sDwU%(j6nf%#y8{YNa`xD^* zujGcEdXejs8OKV5fX>RzR5IGD`EGXLof-Ga95_{kwlndT^S+6ws*k|8;u@`T*}JEW z+@BB{+cA#vUe9Fd36GlSn=hC@-qq{x0B0hcSRsI4HEaAL9cHFrHb$!MA&E?TM~y`Y zglcm>*t!eN#H@7TJc<y22&2XMf6?!la5|i?75Rpkh_LNv{CKxzFZ`3jflU4cK?!cm zDATyXH6Uf#c@w*`P^kcd#xf@^g837TK2@*)vKq@->W`#47c^ZxfoMpvasJaF-HlQw zcNiJSsTWRlzb>*>sb`zym<MOOkCVGn%^ZzUr(KK?H@R`mruxmH+jl1hF3M(COF*Eq z>_N3i(J3x3Zo5WMf<ynCax8p=_EY;0RoGnfeakA)2zkOB<Wt_<yse{(KkiH%@2nzh zo@{MkCmJBis+%(JN3|6}u`yF0-m{0@V7I<)wS1Kp(#YEGn$9>>&T+78(Ao9OOcawF zF9&&7R`liTvD43M+YWaJwV-l2sRb&jfC_!3msn<pmqq*tJ2IrPLz6-JQWY&5kBF^l z=hXysPEdrkx_7{GSYCUh>jEYs<jDOMLg(QtIN|cLbLi8#2EUI_FVYoz+6_~4Vg8yG zgaOUUy-ZtpWQB*_NGB4*B}96RP_04^A=cV6KdW>5HZ>`+SIL?8nQ@@?P@a*mKa;0S z?+nb4x+=gvepp@6+;1+?w=8M<B?Xx-9B(rqBzB6?kQDsdi|EC{ef{u@ejcu!0_XQQ zy?BP!vA*UC>Ej8;FqVqZ6PT#YJ8gCKjH`yQckH4{zk7~r;x{1U^eQ^d8<c6l{D=&v zWk?t?`KHVZ^<`6Um5du<Ac<%i@I{jEQ>(3iGlOa06k4pLC-97W!3cP{-R_}h{^|KJ z<?#rl_{|&4pY0q)79c;+`l-lEy_)24d_ur8b5pPr8fez-vo7)_XXD1;$;I0*;Q!7j zS@Gxv3<i8ifOO4nU?5|_R0fXQ?<#r%LG|o9&m}A3Ct}ks(P<Hco~P|43Cf2TcVq$X z%bpkak5d#0>(8?)B;UL;ck7n9O_~CXZ*!JJ_ZsS@rfxsNIgsyPKt~-ZMe<P;D|q?l zUuMq48+>|_lSev@);>i}cjX;1HY^)BuINt?tUFM+#`c+@hIl@@;;$KMoS~~&VF{lY zA{Hd%b|tYhAL1|Qm#VRZ^S4&zH2*AdK=>lE-rR17pKjoUT1CnC(V5S5HOg>96#?gI z+!CNR8s~b38<WCkSAgun<2^6Q7UH9R)IUltB7fPhEKH;71)9QAe!pWVKDBD$%NcCO z@pCUGd@0RJi-~JJTP<%Fb_R8`@RNJsf`p5!fC(E0$$80`P${55+p_X#-!7wU#%$~@ zkkN3!Xrjd}J-#=<K3^J#@98=!Zb;aY|EZr*x6EE0b(Grk4fMHF8CaLeFQd5~{;4<x zos^C?KHxr%0{*<!$5_Z0MErT-(^xSp&!}7G-l)x0xWKn}PXqUZhJ<7!7WdY8<`>-Y z{mQyVA0mZTw=L~%V^qzuYz2DzVBb(u3&z%I4pVDg(?bl6Kzp2bI_|`LujP53V)xQK zFzL&j8R{`iH8ejKFl=)(qPwI+V1|rm*h#{+Jh(1O8$AoTt1&Fo64||g^@8%8RtXAK zL&+U%2HRrUgak1bY3#D01%o)2OomB)h6EGmLky-fz@N=f;uv_2pY_lv4Hv>m0*RsQ zh-}fT_yNnyXVA~PLEDq6qVe^29fzG}>626#5=X$(_U>$#v&kE3t&S7;@rrwWy5rBk z-0s1#lA4OQ*8@@a{ZkCSEs9sPv&C+C?dqUv5s|G=mT?y)O=?)*K6BF&_%xPYWEGO& z22>EW$6sE#yMp{P)MZ};d|XqkJlY3Le9`Y8hV(9Eu0q))()%+Bvm&f=1cI8%1E#!C z-Kx4FLT5u(vnuGN$?$eZPwD**q*Ks^>-3r0+nZoitCq-u*NtoLLrDwR`VocZWHWal zpwLTfjV}9Y0}60#v4d!ZsYU8TLvwsbU5u|;J!*^s#97aoKKBY6EjG5LYsfqFo+G;Q z+I_h<cz@|Z#$)3_uJ~AjkMxxAXFBR{faUv};Kk}DeGeHcVlCD#cYIyDfFYm+lDx1P z!Rg8w{4EmMi&Ja$Bu!R^n3sMYdTR4nqcp46V=j|9=kmgX$^j1l*;xcwyFMXDP*&~R z`yDe*9kcjnf5+Hpfhr8MiVC|)s*rvBBlv1xXL6jMa@vfDVM%9x%aO%Qz_t4|RJ(A- zQPCn#-X^CWjJTeG(7avgx{MzuLE3MwQsVACZo&z5dwThrVVXy?X!es-=!1J^p@`P8 zG2%m#jPZlcE5w>fx)cU`aOXO@68Xg}L;$4W9fXq3hu-3h9`nLqjYvt$p^PRK3c8fp zbrbW^tv&g<D#X%TR&RxGlh+1zetFyk$$$UZ8LHF><oFpFZKlU5MHBUrT(nui=E||z zCcP<}7{6FA7oGb1Ng#e9{#u1%!i!n1<VNU=+C~85nRxPT&Zy7Sp6K3d`m@JWH__12 zO75P_A%>Y^b#=;coPLx*PUR9{{r*!CS3#I#uuWrR0jQ8SB8<-0R^o{LB`c(2Cb1Lc zY5x_n(DnJD;R~FVFB7wz*)M7Ybk@syG5?wx;%$A|p?%Lf2HHjgo1cP~`wJX4>n-j? z<%K0VwayyM4f_e*VjQYpN|bXr(&%r6VbYaxwg|Ihm_B(<cg<AR^7h3=?BT`>u{e4M zd%v$r{J3=TF`KB`T+buPW>K*XTh_OS&E1#gd-2K_<)eT<GY;@P3!BSz3!Us>?Uaax zskr}?v58*PJKRY~k(OPTyqG}RZBwT9@ye_2DkLIzTT|=aYhC6;Q|kgMruNmxj(n0u zxD=Vl!yI8(o1+a(zSU}^BhLv_L!QgwD*OcTYK>=pxzjtd;UOEy88-Rbu(*;u=9m(H zm?l=;uu$@@-kwTP`SP!FaA?!ImZ8@Tnz2E+rCok?^>n}-kh8KJlGC?^PbvjmAx?jS zOj6N<Y7=q}bpkQc*6;VoLM#`ivX;Djea*07XQ}ZAWIF}!8CjcFc=+;5pN}$DNR#Kh zPe-`A0oq(!T+d>=g>3eh`tpywcR4mv6*Z3$qmyQ^XCB*=p_y-v-n#0;^Z{i$3zpBK zQ~24g?u{ek>>;xL+)pTU`BUO>7_ttI^=}et2#WC{qkqh}NuIW2Zzzpr?x<aUN|rqn zcKp2QDmFud`jJn>hVkKz!oUSd$QC`yLrzpDlkWsLLgkJ_OIe;@YbaC;&Ux#e?rE8m z{^2NXO0aq=M?l`%fQp5a*2r^u$fA~`1$E|PdB{!tQ)y+YYik%>$>iDUAL@97{$3tB zsy*F#6<UXAJ?9es)jN(}zKXD-e^w)*Pl>Z;XVPkF<Y@Srv^Al7X>v%>)6NI9=W1mn z=qP*y?59u)ba-t7dnyC>D{sOn%o0bJ_RP;0r}p}<CLxVT@XA_KWY4rWvpYx_Jm+Iu zvrNx%T1Wo$w-G-#yog>6aa~itsG=7W9D8ZS$)A@Qm1%26j4mTd>j>ONDX$8duxk;J zSm&e#hqH7(NIVmm?!oEOa|T-{A*y?N9x6Hv7?yilS_goiql8WSef)aHWu-7U$~SQ} z2f}Xz*Y1>Wg!Q5{!ZaPH8}!h}7S9dxm)|Y_1dR#6$yn~zQ@Pzn)!|1Nct5JUAPYU3 zt5`V_TSBmS^f%CrroC)xsVKt(WEKy{i8HkvYKBB=meIQ^co1+M99+>6J_`Ef>SN`R ziG6X6UpVanXU>X@*m1ztZWH#laE7;JcBy_m+I=X=XWAJk?fw9NPAAZ9NJYF^(d48> zVOaCPTgpKW+&X}*)KwR~ou?Lz`hJI1SzHp|U(pN12sg?~Jh_bu{GP@RSLSyrh`hq- zBp1f`YfRwTd;s|mw4R`@bKLjg{`?i<nzi_Y3+K1thAbTRqkw{u_K0zsssPPD#C~Wu z*uA4}POA6mwiF0AyB{CcRQwI77J$?tA!`-$A|W(9YVkAIjrC3pDH~P(!e%Jw$Fs&C z<U;7n7NL6KM!Gy7tUm7{GZk>Dk1<)Ge6MO`=qs-H0VWkU{%r3Cd(M)9C-h&;M=js9 zW_?4%By*^y5-lDJNvTw&_4?p{80J{ql(xzCP?achJp}2}k(`%_IcYxxBFehoDah2| zSK~!z=BwICb3QSj8(8zbNg=A))U}U$mvS=zM70L8=lM0sN=V?+w(I!aF2>3C?l_N{ zWuEsR`Qk~}J-Bq8erIh#)3YVE*8$i#8(*h-{Tc@WTk|>JTRpte!?8cFFS}DvX@_%9 zn7jn0emQ;MAf*E#aewnMGzuN-e~UCRG$_sWsJ<mrh}z#TH=wr?fm2YP+?bM8-BAUX znFg$-h1m+(dPLw7c|t;^p)(XTa)Qqo&<<9^CTKQG^6lXEf^YZ;1zNmvT5dwb^WztJ zZ3AoEkT248m!m9ZVlzXOdGJ<o9L~|j;t@q=DW?%jy75~w720~uQL+0vElJx{@2&Y$ zhWd$?Z}sYmR9q>u_+-~h9AJ8H<}j%d0{cOlo>L4aDJBj<C3N)7*HxadKZ@7QcjBrq z$>IH-a)h69aBgxKZz2h<JB#rmCUG5#FR*{aI-&X^apGe;3*I^Kg|1)eHzTmalO$<0 zpX<aR!!|t#a_H5IDs~G=^E_x1M5gyADdvP1Rc5ClN24$CDF@RBk*YV2AZJ@!=o$(v z$1pPVMrH}h#;?7vK*wUVSejM$8(QaZdi*#HJty|ZH9{|~^@@WjD#CWJs1^`a#TJdF zvGLwSvm^9U4Nzd^Q^Cni=f!X&g%WT$Arp}WL1|L7w&}*Ly34FdxY6Q2ZFiRMzEF;? zBL`(&;Mdr`p-?jTsxtwYgP02SvSPiGgr;7GgB-Ini@FHLo;<!}1GY1u#9XIy%*Sif z5AEU~dUI9ff>;KLM@8UVf?Wf-zvF}a;SLy|l94#b=49%h#8cW{TM|WYqH*97LdJQF z;zq2~q9txQ<1(SlvWBrOIJ4&PLmz@<{9-vK9_H!K-XkU8;!gB2!2`^%13SKf7Vnv; z6G0eN7;r0HMxo;^>ii8xOu;6odZtHwz+9~u<Dd}?3ywjLswGx3_uKPQlVmS=^Mn-q zV;(+fq5Xg#js7JX_?1H?@jvaw68R#Q;j@L&L2lc%_Zo}694$Xq?*#HSzK7q`dYlH+ zqC17ynecPF{^_|Yit>lY67IK95=Vy--0su|QMU%R4+nTK-l8RM$!c;w!#{^9K4kQv zNkf$1TiF{Ii%agH!K8cqxbBSU%$6oRK?|%+FS@T}5n?;R{4dyK-0{D@;nWr~CzRo& z_tJuPN`RJq$lO=AcH5aOQ(yw;SSIhsV(`>DzrR1E9eS%cmD8p(HnslxW7xw$6pk7w z6&u}{8KL)-m6(jquV@xQ6QK}|cJN8X$+ED;BmV0|e86${82o`D*KKSwd+%E^(9)e? z`Fs2zoMj3i0-xxF{i9pz3+=a^w9(rO*-#l-wsjya2z&SB>8Whmi&~|>LG9pdealj4 zv3qI6kmxGV%PhPpU2(^8EExw+tKd}lWi@}LJ59dnYZ5tHl!WyiVF}UBT3OIns)3YM zy!v!yVMC5iv)B`X0lP~Pr_;F(^gOrQ%#xB0a%pe9p03&f5XhI$k<lkH0zVVBk($Zv z6WC<MSD#2qU>jc_9hwre81KDcc#X(H#Vi>MKOkFPL4W9wdyj)b56LWs3r7+$XCiWn zUc-+3Kh(W-R9s89FWOC`jk~+MJA}q1xVsZHxNGBX2^K84YjAf72~N-icL@$5NM7%A zzWu#>_PuYsaqj)+z0oyBb@y6bt7`VFnpIPNldood$Y+%R>H;lj{T^#^cC;I89xiO) z0e6RSvAMm3*+1_)kD1Flx<~fuHt1CxiO;JSqE?kUt-d5v`RWPNoIutaV)b-#jA2Oi zl=qKvox{;XOd?nO9VDeDOQN0T@)|k1AuaA{jCs(2+!pgW#l;YrD_=xIxG&yy4wEq6 zR$3`M>-NFtfYHAAng>q5E7R-Up3R(B9Ne-%*Fl>GR<wO4$2KcJUD3T~WYjlm9t?WU zNEe~EA0p5Nu}R-<uwLtQVYm)4+Y+9~4hdDqZ{A2koJLqYLa$o9r5Pn}tcb1hKg&;k zvCXOSQyz($lu%6P{Y4&oeUaB@f9aZ+X}_de`*?b2cLVJ=-hU?eHpQB~Kf-Qyc!Iq` z=J9ykZaLXYu`h~^^@cADPVDs_TMU`<o4v0&(L9WheQ6fLSS@t$inUWYkFe8s@$uO3 z-~0)EsG*gegelujJ0KE^%BBP)>f!tFNv?(a=n_u*bG`txKBHx?w);+$fItVm@F+Id zL6^+(&?NQYPegkhTC(-~A0oIN^#yh6r*n(a-AJ^gR~<ES1kBX;^3JoWS~6`u5-Skq zkxM@Dl9inkqCF8bCG^;s2hWh5%V}n;!c0L7aO(%Yp6Br4K4w=eOjBJOf+bUb04#v; zzAm<^U_^E3!?lw!!O~2QN&Wsi?&hB|q&Yh=`E4A!n}I*jpxw^h@ACzBCByh}D}GD9 zUhfS}W)s^dh_ATT$e^|Cbh=sDW5zt-?-tsY?erl}9(aR#dCpV3&qVJs{c$4peKy(E z*(!?pkBJ7@nja(jD4+V{Bq(P8Ui{(+(7b0WI%hz7-t?lJ=yLw}njsU-l{(3clSwxp zKhcpbV`+y0VT-?hx_S_AYkMnKgm6JT1Q)G1%7ZzBn;*7wM`s+Geu6Q(gTvX4`E;4! z=ei~yvbK}S4{1Bnea*$nU9@^Gwr_}@S{$_No$&I-Kcw^u3_gV~T_0-6ihbgYZfdnv zUT=Nsh#~kcb}=HhPa-OAAvM#hZ}IIavvJ|}RS4G;gOhj9qyMBxWu32Qhe{Xo&6lMK zJ3+6ZxxF^iLms!oSA_(_?zbj)QAXEWoH?8xS`4Qj#?ClWSGF{JtDez=fRVq<Hk%+T zLHawnZd2OzxNxyrJ|`+IT3$KbEMFvaM`yhKp1ycC=+=pm@qWj6jI3$|8EwMd2e}+% zrg=@Hn(9AJ5PNzMD>VrEJqbve?<MCEk-D7#Rd)~k+|PPxmeTW$^4g{t`0py~^>*H# z4BeZ^hw}>cRom=X_pgA!p$3vZZaOXDGE!P;Is;MY?|K(QB+4VFuKRv=)+4@g3)vJ8 zQKR@@eL`cE)iT&<{*`QhNinai*)sEdUVpT`o{}&R7NGkjKK_JM!&M1zzJBi0*|{L4 zMD!+4UjO})FZ_`WlQL%Q(cMx1L=dBQ-u2{+P)f>t?ylrTjPhcWnjYV8mlWnWCRY`> z`{O~T&fCe6OPujO+5UNF7080KM7g@AINwERm!2>zIhg4cn}6h2Q{xeX*NB@gc*F&2 zW51?3jVWwn5?JUV)Y%Prm;61)4<m~F4Rh5M@)=vTkh1K2*Ao^3EB&s9yl+fs{q(7w z5%I9bo2NR_f)#(|s7g21JG=R|CPLphqn3%r{5PUft&;3NGpE-60EDo5mEA^AeBL*) zAUoVH?f+VxYsCFnGBQ>F;bpL8%i%gIboIfk%=UpSv9Cj$<IA4uxPxKq4|@t##+qur zA&LtmfLM5GYBh1?RZ)*+>~ik>b;2;y_SS;iHP220!m7#nKnIlV%U1S-EdZg=Oi-Sr z`*!CKz|X94oWlJwlP^X$qB2l)M29ad>g4PkNzwoH=QZXiVae`-t{zOo#BY;moWdSN zX{19nV*@Z{n*}NGL<2%TOptTT#E)&Xf<(g5!f};gG;B9}5h10y$2%eP7I2N|sL@?| z#H}dDIFZZBDIAQ@j&&V*n{7;x_Xpq~E7c_HFiv!9-#3JP**2SQ$X9G;q^1V6_mnQ} zZ*_O93`SMq9uhL*K&Uu{Dfu|~IP_0t1FiSiP7^&lWY9_##|nDiT~^?!#x6t&%U(1t zr-8V#>A%_(%xRGDBks2d%A^}f=cpqvsPbZWHy-J&8@o=i;X$k27GR#*Yd=3mO@ul0 zNHn;;rDQ8|wh!#}cg`OD0}vD6*NXif7jd4+Jk_%eMb!4&LPm0&__!<gbwaFq{Xss{ zW0f9#zimKz{6o%QC&Z~N+TAQcoP~hU{<`gc!W1b)e16hso;k%n+AnQW>gM-Yc>6iP z=uj(>yvXUBV!}e_)qJiU;<TBW0)om|E_~ySTw?d}QfQpJOyJU+Qic7k-GH7lTN^K< z)7RnA9+Ww6aL#RxSJGU|#Jo@E{PtY($?1!~N_jPv>myvDbzki&KS0i3y$PI}#hyCb z&X2<7v$db7GR27WvOh`yoMMYf7cKQTM}FIw_T&@z9kk8XfjZHb?|L~zlH+pFJ$3nT zhVi!GngjI4qMRg@oH{utb?-=IL)S{~W!uwv9YEEZY3FF`;79C}PV2kp>9?SwKT*ot zxvBB;bswFfV8r9h`}E6%R|2`otbBsE`N%?$nI#`}QwOnIU7)w$Ye#|nwlDkYwd3Se z1}4cuX#&YMqN=G0B%d)XjwK=cZSxp1U%%O(QK*dhh1FCE+<9+2biDKz@gse3V)}u1 zc<(1Qyy@Rl-v2!u@^$$74<KMbb>gP|wLs<pAl&K;=B_>~N6XhMwy~M?$;PvD(WLXO zPmz1V&JWj2crA5qP`>*?gthqi>jPg5*Kg!Dm)_}n(am61MF(`A(4++trzC2dpY=89 z#EvEn%<bEx#6GuSStl&%RNtZ+_3^#xOZqG8C>q(&)8|oq*Za;U#-oUpz!~#a%m#j9 z-B@`Hl)?i_R?dqw3-_#xL>ighuYq%&7OeRE*&1nJ=Cp<~OQVFg0I-0H0F{O+of~it zY*j<XdM-d5Q9(IgWtGcK78UZ!iWrXzYia%wjcGyvJvktIEf){h(E~0q?ux~zz2(4k zh9&V_C~@r3eXUJce<c^MbLlCFN<)ia?A7|POs%<wS|%@FWBQvB2is)L9t-8-m~4sj zE)du)>|A^+>uCkZoc&d2^#Cj&`MNfwiD)lP#_w@35|;o&i$s8-_!?Os!<x$}l8dTT zSmsl%m3q@JWw%<JO0#%Ve3;0Dxj3<60sq2R0)asAFyJI0415U&&i5C*(gl`<8zgmr ziYv5Gz43B(%ltpUm4E=4gVQqwZx=<#U`))rmInW4!R((m7eO0(6z*zEl-ep12KB^0 zk|kbaS$=OXVX;^5;2X<XYtk9ir1kyuL<OXgS`ey+01Ol$)e0)1Uu6)3!)w#&$N{e5 zH6>?wvWS}Q*i_$DplOFn3apjzf>9q@NNhB;3dB(}ql)j|<2~=pr!Zu>MNLe^hT^0X zMtb2TYt2ItI6wj0M#_+Sd4e!jp_k{IAT2wv`3^~0xKT4h&uv0_b-K0CHV5>p(&x2p zAIXwZJ7W&nh~9?f-hrEG{vSu1kG<)}b@|P^v;wR}6|`5>gNC$k2G0N$)Xp{~n!pC% zR46(EHacJ;MZ@2sOL|V59TeLCDP;3=>J@VF=tb3~rq*|8HbFsQUO4dE7pk~OF7-q4 zf^2Q|7;-}f;^cr-l*SaQD!fVb<hsSx3VLopY$E3u<07_f9Z_a{*0&EplNn&uu^=Hf zO>wM_s@4K?H%#P={}`cJF!D+1W}!_X$aD5~r=HS*K@*eB-XgM4goQ@x0uXP4-gMh~ zi#>B&4PwJDJt(Q^7>frMp?8xf+#xCNZBoj}tkiuY?-+(C0C<ax5aQsKoiv?{lKETZ z@Rz@TkMDEj*lu3a1Vv+&XKIN`6+p)Hi)N>O;jAjb#p#fI@J0u%NIek^lT>g@pFJnB zm7H)Pn_8i+TLelnIzkWO6?@QJGY%Ig^%qboK8TgS9&GilL$v`-GzNe}a<B6?RQ9`i z#3+5{nj@jI<3+Iee$Sm=x2t+#tdF@0z+-JVXedAY4oi0V+l6}OR#IHo2|Lm1qh8k^ zwgSCtXmhzNuYb4*DLD6=Z6q_#V0`GZ^hY$(&l5b)mD*fI(8F@g+RB)FvPq^Y3H$-} zCxQdaQwna-7r6#yP{Vs7CRlNQC9d2f6%g43q-|5lOBRZjdS{+cIga{RZ3H#_ACyKH zJ+Qi^llFNTiTf#*NeqUm8{S~V-fo=5Ky=_QI^UU?sC?toOx|=ZA!c@fMa{1T!ZeDS zwADJcTP&H`yNjSPKTrR&N(Fp96`f4q5(mU>ZhfXYFbgjUSrLk3gRrXqW=Jy<j$g9u z4&m8s#<;6)t<cN($*o^hr=&K56Ll=+@>906fER1hRwb^?Hw=^Q=f#R~k%r8qEK?_4 z4@MlZLgV`lr~i`zqVY-gDOxro>=M6U``<2T6NKYTBDzEVJLM2{yoES<W4Gww9KKB) zFjFRVklTA4p$Y_ol+61yinj$MBp-aD6`m8a)8S?|1ksQ;^sku2GZU4OVrG8cpB|c= zxzQ3y^%Imzb!KA9(UW2#t3zhY2Ne3z?Lu4k@lX&FKoRJ1j$w`@74t}Lmbz&c{cuvq zQO!yo5D3>PXE?QPHecGUvJ6|i4tUFCsUxdB%>=%G!2z1xqUw4ptFeGavh%+^PS_7I zsxX$Sy+2DtN$gqt0kFbHZr}BnOUh`b=<A!ukpZAgmf~vH-e+rV&Of^TJJlC*wA4@@ zZ_Gjljzk_5{M|nQ!T)9put%<D7y$w+l9vZ}AZiEmLq4~=zowag+<ak9o3P>e5He<n zN27JmVP?zOl)3Wdbnnjn*(dRC8h`EozO@<;g<7FPos|>+*|e6V#cto{%C%q7Vhzjv zagQh0>~*~G0EIa7dw$dE%R-vcPH5j|Ef`OkfYA2cjPELgx=NPNTa<8_nJez+=FG>b zESyi5AsU7HktE{RVX_be^siKGWBn`D1tcd4OS0JWuZyFE6l-|a%Z7G&cfz|u`AOj2 zOAdh5q5CvWB<@}Vi^4t&d~i&X*z4}1;V~=_lccY^1b5R?CaQ(=;nL|#uBgpk*b{MY z`o$acsc_()DgQB=6UM0@$g>kP_8WzW?_DD`LgA{Oeuqd4MY-M5A3F0fZPHV#JGAS| zeP+{-Z2rhY8>NLVVKV^r;~I*b9Zatg(~JRMwqix?Yi5PNgF+E=*ti)zZ$zjRM-y@3 zEGJt&(G5twCv+!hQdbHcY$HRCK^TTszhKPNDdQ^*>3kR1E%?eR9yjW$M<NSYI=i0c zB3}k1`+5xj0T8`XmO;!z_WukOPQeo9PvI~8URqn^S7^WHgl9_Psu`oL|HRTGT*u=g zTZu-E@b<iRlf0o8S?jk<#R@iR@mnD#4}0u+_~CP=a2?DHzk<;y0Afau3@Y9Xz}yVw zncxcvi+W4YKgm(eB8p3=nbe#qHg=f}FB_^=u=MKVj~lbaNn1|lYK6E{Q<Lks=1TbX zXe#w`ZBgsmM8Qtr_n&zk-b4Te7GZPNnJgtf(eE^P_d>Wy^Yc<vIVeNj%PUBzvZ!D2 zrMsZyOl-p!vG>@X9LPTnsozP3CNVTNSB2`62%F=7$Gq^46qM7}linX3tK&ro4?2<3 z>O?z^P}w#ts=x=se{7vjhsv*cO!g6ZNLOK)V5-rs913h64j(T{9)`COf7!qdf5pAy zBl3fv>amT)*TdxH{ph1@+}Y7q*YB%9+q9p*)AJi%&Wq+Z2bVimWTQ$G<&bG~W`DH| zwg;j#d?$1{s%Aptb^%i3UAL?oqAA7Zp)1Rf4#duQf8CTa_h&}}#|?Kn<vEs_LT+<` zHO($P>R&Tg3IHc{B-|&=AS)sgJN~zCls=wFr2+|P;xeD`3yrxGE+>$ny#-`(VRCU5 z$8c+TaFromA(=mKuEg^{=}=@ZxI^9CIoX}=S{^{)>jvpS)o%nx92<n9Otl#=%s<n+ z!}>cVsVz|~w34<Gz8hU!;LykN012Z_h?)a0q1RF*^bfDohbpck^GT_yWW>_4NHySG zJZanDN1Nlm_mMit4c!C_u8HZnsG)Bxz26Zl_gSd9jr=GM&J+GM4Sw2HVPoncI*S{? zA@q7jEtce*mr;^KgcX~HbD#K|8w#34wzJGt%C0=tvt(V+K~8q|&zGc$4=5}6I_TwE z3eQX@4=81Tg{wBSqA6vB7AflW4@puZ(ax5^?-VX$z#?OE*P;8akj;XuQSO3GJAg#L zA%2_aVatln!q(}|MV0Z_)C%+w9iU$h;#5SNlnv2-!yau!0g!1Ot_v~idurv9rr5?0 zv%SY26sd+`e+^;YmnicnD^c-HSk#ue>?B5)rut%~%5c>bGL9rNk>imkJAmLS>cn_= z2J;rkfcH*;>*Cj<e-A48ayDA1?IOC?^&l)Xe8-%}6^e|Ag7G_-3Hr$J<H8_>Ylb@P zeW53p;8O!<v2VD3_E6X<N<w%)3^X<QA8e$P@Xfnh7e2}~h#H>}uCG??B;T#DuHB(X z)`=m1*(aN?cTPO_I!Vgxec?d|7?`2?2N2)Pyn{(EAcssn1iqaUn0ujTe2t<xx!FOS zU9AE~^8<n?f7e_bA(OPVarWs;1|5k|#dN}D->Ar%ejINb%uv`oK3UN~n)RbxiZk}d zhfT@^d54a4covg?F3`8Ah&i%#PM#)6Ms>t50yE_a8#lT+F$a29a`0<vlV9vb3(u3V z-`!08oK*sR(s#&8sLIhPHFcec^5(6;GNS?)hARbcUImS0In7%-`i4L+dsnu*{C%BY zx<3-{iS`znhqiIV)|jwhyzSem1-o*n@Xnn*ol&H9c<X~4<#1x64mT+hh&0t@SadQ# zY=?$5Ap2Ru99+IprPH+KAsOj9S7iy@hc7`JKdHF}WE)taskG6Qn_@1lzIE&Qq`e?r z8pHwsxEe$xH$>Ru?5=P9IUD=;m^w4$b<<zW%l4$qIB?`10JH2Q8RG4)p4}sP6Y@Yy z2Kg;U87B>YG;|Gdz0M9`A;ZrGy&J#+#L+{0G?lrm(*y|YZ|>CT?M8asm<xZHgm_e$ zROeGSDpBt{Vo3D+Za7_<^oR)tDu#W-d_@3*|9s0Wi^~u4CqkEU9r2v>l^AAlHktKP zJ+IIgD4j2|`}Pg~pzT+HRDIdCU-!BT1&2cYrjx}xmy68`n5(zsFt`RTj@9HFHC01^ zmQ7gAigg?m0S_Yv>v{75kUACll^lxo`1OByZu7$!#jB1+AyN>26n^Opwe)wbruU5q z(RB-OZ6x)uwaY6_c=W~5oLjos&wfrfx1M4dUWLZ><5n$rKTl$A+fH!dlPF?PpX~9s z`VQOGiE(3m9UcD;?xWx=x=%`sRB5v>QqZc-Jsp#(>V(fFuq<+NHwq+xMJbt#2B_R< zzrVqw<drJ{9cQ{U1$=HSCG8t#^s|?fNXh8X%%7GZDT96$rf8dOA*-ZZXBO;N|3lAD zP^(0<*?fwICwrV<<zNj~Q%6zG@F=_wK>DlKu|ZABJy@6FumHiM{AoTM%uURT#Yo?m zDK5Vj)EW&k6~NZhhq{CEJF}B}rRZ^LDE6t-E}oPA{Zu?-_dWb8q`k?8&|@Uc!dAVr zxaOXTzCg4zFNt%BGM00`ubbp*9(skz&B-m=!QY<DZ#EmCtPn4=15zE&r%*gf@Y8-N za=KoD!V`vB?caR-;4Vo@A(VeeBKMUMpM4epe`bJ>FuvY?2@jovl0&#*JRWJq%sT_F zx<C@*9J2TO7-)*|Z2lUw38t~fwe<Ln2fna;l)*_gMwl~z4}an>G?i#Ni2|jP$_8r> zoYF<8CEUDxc{Zm?5ESKz_bl5-?lNR*Qr87e{TdQq;(~y5JQ3;ni&<ExJWDwONQgBI z?={dbp=1M=cqx!i+ULopmy+nXH3Ppw5@=i>#<rS1(7gmu&sp^O>Zz7uqgV@6&GqPs z3bo8}RYRa2Kt`>^oL16_5aIbchB&+QA7dz->NQ;e4KO3}t++64<58@_y9|sRtNotK z8+eg}_UNHY9=ZB{Q_cp;>VK2u)Ys|7d7?2YN|}%)#e`|4i(r6uQc%wQtD}N-fT`qP zB(cnvMx=2HiMR)yr`cL~cbZ;c^an#B#U-xJ{#)U3PTB<DH(<PY`TX%)6ksW2C8Q>g zyHo54RIFE~z(7&hDriDUx2{`@PT(nnsevub!#JZ3w+{#AX}=Z7*QWykWEs9qp!Bq5 zf^;$s{YFH9EcmWvK-B~e@BLg9Z@VEZRh>_kc?JZ>lRty_9INqu1-}dYXiMn)s|v{k z{@2YU7B>+*)?0HzXu&cR2!Psw%8$%ub$%%@h`8VdedfPB`?=p{?q6K2I+A+Wr?nH* zG~#`8@#EUra~O+Hkzyc9z(R*q$p~5?C!iJiQF?f}&Z3Y=mqM%SP?w<>Zbp_dmRub7 zt;CkvdQ8xP+5FC9Nc1ZH&Z9&*8nAB0yT~;)hA8G-l~t$cbrDn`>i5g6`U4?x*j_rP zTXOWtUa7Rt_v2Ul*V3m+G<UX6w6b;^M)!$ub)sOkWy2BU7q?lyTt=Y|LR!-KssM^j z!O+0?7$=!IMwFYEzeP9O=Qs1(FW!-|47lNCS6juX!^iEO6~;;VxNoX^X0Gx!AfIYk zlcpvYG8%QN>b<J3ezV3Xj=y=q8nb)~j=uRlFBal*@hFu*g5{&d|F*)zcOCgUs^Ki5 z^#jm5>++*L1`I@BxOa~_(mtC)3wzYCuoJFuK0A8c0Pjt7+T`-?IJPD?PMr5M^nn9D zWqYwsi7%b87gQrlIpEp5_)>5La1c*+2|KSMoqYKDd9JrA5FQyAN-oA;N$LJ{z^=m4 zJNOuXIa2L0KlMV)5pw#XwuI4SnBLpwdfhCNTm2DI#7N_Iv;OyJ$(LL47(^BE<}GJj zV)D8}k))cIcQ8p74^YTBPRRZmZ6o~v?Ks|@+TL#oA}N{>qnVwSn*sOn5}G?j!}=H$ zWD9B8A_vT?#Ym*_SJWBQm9D+5okwV<;uX`49P87qO&+!s&|@$0%lcX~3yGBY^B^gQ z;}7B*g+B{JWpJH(qUAe+S3VvPQ4IW8z3TG$%`Q#0d$IT+lgF~-nHP;|>2}2#=ti<B z_<TPoeig3@^W4KS+qtQ4uOmVB{T{8r&p7{YfwI8P?VECVNmPV2MMs_+6~Fet#Z1m| z6TY`wJp~gd8~TN9l!|GaYY$YvK;?(U_fIw9TN^V}+{wOb4~Q&j)e~18W_!WSOs`b8 zW#kn$T*c#V#(Ll1nug9GBSA1#dpmI{ou@mJhUg1GB{yCZgO8MHQ(;(`S9nv0`6$7F z;BVzrOp&<Xzr3F2yo0)2$Md^r1(JW-bUqAGfJNa~EVxK}x(8F1|9dT%YsSCow~jeN z8>G9VVMqSK768;zDe!GxiQsN>@73zMUsQ46{#Haep=@jy!lLoB>Lol4B-*|yG)b*a zZoDye|C=EN7Z$T8nY$guZK7VVyF{oC@w3ZXYR2N+%zWtJiIYigM1D+;q7I|8?3pT_ z<$Ho5F97ZI7$?jX_I$rzP)>ohzT8h8`Q1-rKOHnjkM1B>Ro#Z@lQT56BPkRItUMD4 zm-L>7lph`m1GSdB%&h!SfL|$3B^HSlCDVgKB}O?HXQD(RfGv6uE4?aNOh>|9#@@Fw z?h>E2#&P;K8Z+z3KmL2Xzh;@JN=R@r3Ya>{XyDz}MiC~%Qf-C4Csx_YDRPAu$`nud z1pglVxT@+L;&IRyGXG8XIrA|#iX0i}8TLx|xrapG`|Nqxszo;-QlciPbK(?w!y%G* zmE>`pIe%3rU3DC6mHehC=NqQmo|pJxP*9<%Xw%2<{)|#j`A?2E4?G^f)lL$~WAwrG z%D626@s%g|5XvHI?Cy!6ZHno-yLaLE{Q(6OKe_S#0AyZ;{{hrGo-{>Yp=vbt;E*@1 zL6P3vgp?P(q{G#~?a1Wf6+cu*U!5l_Wp59MTyBvw<nqu0-AYkbR#wXPe!GyK<+HYx zN1bPsg~}O<yOkRU@j`O!K!Mx-v3D%Desl{kWx(SX4vgw5*ELQX>4oGYN!p>XRGch) zpVqPEA$`@}={2OP3T48sx()lw{G+6f7e|Z0+21}PBfM26@6%`RiqPdj#qRvDewJcC z6CR&|FMs4}Z%5jVGTBc~{!HL?06F_&z@h-ugr98zOjhaK&Fi~l6_z&06$VYZuD0HY zh2fy#LZUoE`T!#fcXT*DS#R~hvss=|QF~v0Kc4SS!w_PuvJt`fQ>(#a@?}tOz(H-T z1%-VHzAL+F6a_~-AJXqzB5NvsC~Li)#AwL4?NbzZFqy;(lS>LO6}^;T#=|rXwe$4s zXXmShU^pQ)`A@ES<iT;BRtr@Wd&wbleqL>|)(<R!eJXzoiOU~VK0rYW8ouRbglsBK z>aCg9Q@02>`{IZsLa$_H*lN_>5ErJ#{7K|<ey3%nX5BZ3r<W?a4{@WBM3Pe3K}JBh z9*}5#k|+C6m)@_tXK%@Y0@XYhTgCQF5iwzjWz4vTFK#oiDZ}y-p4h3Pb{4(e>v}=` z<DfPA^aK08bO8LB2&+G9eN{8-n77CKtR?0v^7WL;bMy|4neMzMkI1EHW0tc+Tjc?X zFpWj5Tds~x9t$u)6YU(z<@&D060Tm#dUW2J9k~E`9&a`j&{_1B-Fwyb_`=5BUI|Ko z2ipYlW?z9(HkAJWVBmi>*CDt0YA+33aH$1ekr;U_xAQMaAvYd>0L59vHm!q{sNFIV zNZQFS6df?M6Xw&$2XWU3z@namBCSf}C1x0<Q{{GjX??#uMx!4lB>0qfIQ*xZPm$UC zFQ)Rw(#g<1UNOCw{l0O33=+9*xF<AM$)$eaA3*b~oWD<5`wfb*!_jgwBS56>sj}g) zyI^GkBt>yLKQA4>zZkR{3w($gC&0=yy#fgUeUq?(RD&G$KZBp*o@~_cHbNhvArkFO zv&kNG3kbh*8Eup5EB+!~km_HA%gSK-xb@P05prDnuCJWJfcod2Xl&y#?IAils!O3~ z<|8?3cmmSVcR#&!Z`i_bG|P2TrgnI`L>-+SArq4uyD@XhqX`_Z)7S7;>zMye=1NzC zm|ZD*+%fWvT*?ngS!!fY`^99>)FaRPx!!DRT{|q<_EUgZexZ;xen>dE?l7yH(PCHt zNl}pC-@2%&^xCrwP`kXs8**R+_PCYjgeTnQYy}y+w?&cmci7(lxh0LO9bF3GUfpl$ z1Uiiku1+c}N}RU%udmO=r+a~9dxG8~Pkq;@!@E9dG42dwLKpyl<Byn(tpVr%F9i+| zGb{Rm)0)i8WBUQsH&|S=|9<mDn$$j9cLpE+Js!evsyiP77LeKgrZo~yN1c3OY&||q zqeVdcV)}iLoHuoGb^OsYn)YgLz-AuDD&z|GMQF4eRk5Ax)~jqLi(Qbsp5R0`(UvSx z9`SEqB7acHSHK|U>%rzIXpDUU=*~;;S|{mJ{Jl`_mpwnZ%5OS<g@1Dvr#CL3{lfU7 z=E)#h>Sg$l@&}+6Sh&4BQbARFfMnXdNiozmdB7S|RXOo=@JtXgYx_(P@VpolwyE(B zJT)HufJ=;62YOndJlVkG_6<o%UgvRX6wtfHC}>+LIfCU%0YOEG-S>|cdFWX{__<^a zgD3v#LGm(MhuwdlNgWc+nGqvOE5IDl2;s)Iw{ZId3Qf7r`9E-r=&~ediZu2_``((5 zl4^UpzvBZm9s$f`RZi8<#lk5hlc~m1tj4)_iLTK65XHh#TfBbyBT~yl?-sOw-ue^i z_{SUO9h}o93GKj2g3wOHuOg*aQ+~T>ZM!H6PIkQ1+u6h6;31u9d4NS+G<>Cwf8El; zumQ4-(+sX;TK6+T0esU)B~re+4m?5>I_Ch<5?7%#2>lShnsX?xXcMnUkd~*~xC~*_ ze=#3@bgDeO;kL^oIR*Ik=e9!D0Y4M}0dG_S4Gup(^pg)+MsiLHwvyEw$x!)OK^}Om z64kLo#kW=vC{qe`I~g3zGzbuJ%jf?!P4Z;>F_?F{kN99C;re{k?|w(@@iIT?KQ1H& z^K2znSqH)+-n)|pXX7!cm$%A-PKkHS5-#gUeV2B`9RK51ktf@{U>;3XeQrVyTL0I+ zC5oi#x^z+TAD6to8>iChSFj;?25<a5M+W@Djxv&s?Pu%DWOGQ6H?Efms>qY8j_(-C z{yLKze14YsO?M<v!7hK#QAlitkDmV&x`J9d<%uZ{S0!}XuD}qEQsoBVr`9wjYO-<W z<%YfuhCAuB9xiG0oC}pMa{8(jfu>K#OR&;x0Uh{gv0K5roXtXCX*?f1tcfs*rhoWo zqJ>Q2=uZT(2l6q+>A;6KMN{_K=M;Za{?JX0YqW?q+Htg1B?RC@bTgV(FvO4zBmbmw zqAE?l(Da=qSi3~kbFy%5Q6w)dNs=l-fu1X_qBIf=NbrdF^B-T)xd2}nd7ZUejgK^C z6wu4Dp9ThjWuCa+6iTO8kB7LL1f<F|3!<vK+n_}v%0L>8@YS98C0oS==_5ZOx?e}f zE0lhS+~fx=mB^yv>`T(O&ElmCzQ#cW(d}2l1Eiz5n3!$)R8wX5s0*}rBVQM%Y3PU1 zeRpk%b+N{7&!#{moonbZKyks-76@MYo8+HAhiFEu#`Z^kqJtxQ(|{-zi$#zB0nPkE zu*)kJ8+InlGpB)9NX8%^w=TBHQLyM*!Z*U8X2F-#ad=rS3!zeaw>*C9OkjM0JEsk9 zbDRfpCgH8TqtpTtu^3`%e$~#?MHo##i|{m*dcDlPM8K4atS{MLw%LbPPyGfGOO5b> z0T4DuLzJe%X^>~|T33!K|B^Md*jVTgY6?E@wI3Por{lXz4k>8qE7UHGKkOg1m0uhx zLzbkez`7T$<}gX3qtad`hGj8t4F?F!2!Sy25t#fS4W}U4uJ^JvlKpEu(BF)H)}c(o zu;@Bq8*1b)M;2X&O4+LFM+-H1Wnd{hihzqgZTuidmQK<7>gdUr0%8>iSklGx({>tT zj4C<+z8^icQ7g41j;T-&k6lpXTq7b7mvsoAMiYa;iU@OX>;izC?Ni1cioOZo4@pMb z?CFJ&>ahaXkM~o8>lzTFq53@`F8>yL`xMf-Y}F7j6r7cMUUUeVV}n=bfUHXuo35ew ztAb$Kueq84Z3xzzW80@ziM_^}2sz|E8HDBKLys3D%By9>Fl}-Jn!AuUtz0-g=s@ZQ z1W$Ae9om7nBg9cEhF2)KVb*x)0LxF{BluK+{oon96i%2s3JKE}mD*svyi(hO0YnVc zSEX*+VHkvI*27A#XBSC;xHOjYB`UhUZDHYvyV4yOstc}yEkx2#nr3bO_`{4yk&iQN z3rMTqP?^u}rt_i#m<`w5l<-u;@oPXa1_Coqp(0#(aLek^?R$+@bhva&0UsS)YmMX& zQ7jfi4_lL7T29uTx{yg7fX}f@i#-9U6mSL=eb%3Gx0<V}n`gGGlY{HR)w3ZamQb0d zImJv*2XhgSMaC(|g(5Rzq37``DS!^p1txwTCo$ogr)k6_fVwZR6E!M-pd4j!PWXnC z$xa~&*lz1*C^8ksJx4pR4A7g^I4WdyEl9QipljXzdy&^G6Us^mtXxD-V7+YnndFRx z{iQ%qR~<s!egM;B>EvTJ-TL;zf?>#Fh9d!|ymYkKTP#6_KZ$}6`)zmhPf?CF(CCDe zYQED8B9mUDj8Z#k5qst4AxFff2>X&@U%>rXa3!kla8`VwvQ9$Cnxbqk3h0%8$4k(` z1m7{b;`}93!`)rvD6IdEp)hJI49sC6d;E-0H*3Xh8u0_A+<yul22}%UpE1cY;m1Uh zg>)=K&W0&JHQ`Ic|G=?KEfE5AQX^>Ks*?JsB3SqHsrPUNAcH^mOnv_h^%Cpy+O2@> zBABq`lPQ5@>lz?AQYmM&((+oEKVHg@L&{+yb%h1DxXtOVAj~Q(n#Ca|%6`ty5aF6_ zz=;h@>Vv&g-<)}Y=5Rq>N0XPG6gB`L!X*bLox{=~h2S4=D#8aEOWLR+8O*h8XU0uh zxn^W4Y3Rpu98a=RNz?b?jtFWpI%8*`kkv80471-!{F~+X#;w*0<G~Sx@5Ows69AqN zkywDcPrg>yk*@EnuSxPZe^GpMF+WxZAxTfEfC_z*=LGZhbeUx>=9p*d_NE&dcIbpZ zy`}f7Eu+ttS2yOdQ@K^2aZc3djniBqJ4~VLP9ycHPUAI!vuaG}40yx!)p)00wX7F7 ztCSG5A$6x{AM6m6@~8WL{sCx_*ht9V`~e(2a{V^@`=FFE?#%_4mkZnDD>aM<wFO&a zl_uP>=o}aY!Yd=NQ1o*4{o=1$euaq`3ekqU8E<2dQ~rR$V?FM@gC2Yo<14`@#6)ze zwd8FRL@ei1AT?!i@+|Q?=zp@Qin)X=L~lR-0sKNJ)X@)7d--Vc_vz!=?-lQaPY}yA z>BcSfFBmysF=;xwl=HBpM@xU}7(z_d68`F9)9C#z>75Kh;-<?YpK~vc21Y2~$&2?) zRl#68aCLz8WV(XeJK0WZ1xrEXpLT<rYFH;=2Qz?dp^nw7zqJAXQu?RcqK>1Gnm63i zDc)$pH|sC-1ZgpBL;>mKxIgaKg6$n6;vl+kowLVzLP_sZ9MGu>dYCu94MojHG|-z9 ztJVFZxkM|^;W7tgC_f3dHeG~NIH@ExGXq9o7#hWb`a~cpf-DxDp||;~apmf_3T$vh zCnBOS{GX4{eNP@kYPYdv2P&X=(oFQL#BBIA1)8~B;LcM^p%PJaT^yQvwB?DPUD_vk z(V5mrQ`X=j7cLh?{eUeM%-C{iby0r)De=fID>`Rv9|1?qxp~occ(sH(|G6-w`Zq!) zC3J7TwR^A)>UH9V08oF7{cOeqkQdkjx(1Y+X$>I7pBzvAHdFM~GmgUc9mV>ohz#>( z3e|?Esf09Hj}cp&B(=^hNN<p&aFI8c-h-V{qKK!3BxP+Rl^{+(CT$5)A;45PJFI7P zCC!UB?w?eP#%QE;+zlD2wlu71h?xdbA^o?~8c_X%RWDJlB4{&y$iymM;)9*TYrxb{ zg&l(??oA)Z;NWMMq-9F9nbXcYhWuz@OUsKXk{l*U{Fb+>-46*Bv97HqD^NT7)MXT^ z(q@sv2AUWt!vYB+UNk^yMTTE73-)Z)+KBk5=dl1cp<;03KX{E~xWdeYkt72i50PmQ zmbwUxRS1M5T1BbrG?!GTX4MmFO?Zp0l4`<4gBQvf`ny&dnHHbE-s_?FP}-7(bc>#! z$|lpoLtWl+txi(bx|o^#(SZDrZ$L$45$+R`@o<e&0khn!C?4Io(lUO?7el<rHDwK1 znHcS)v=JWypLRo;cd^pQd1;O{-jWD9dcY%Bn2QiiC}JjS{FEZZ^iG($pHv;?oPFH9 zL8oo_G1KvF>&p7Wly@iGj~)Rj;c-%P0#0&bWfUk*zm$c{&v^%B^OTF|tyaDI#s8cz zG&iy3sK-Mn@~;to^bM8)ueJ#Bu&9ugJYJj{El1)B*!2G!)muBm9nDasnx)dJer^K= zEW7DzoBw7LuxBzq47XQ7?_EXUfRDlL-aO<9(N@&U<Nwo}!On#@m(&ed0`U5XxgS)S zzMl4Q%b90bFeQRWY}#2sC~lH8#3;+-RFHKQo+;l?AA9Q|!yTX*Z~@D3UD&p}ngunX zOj?@f*sGw$5IgivJ3`=gyBuAWIf9h^NFk;8+ui{zG+W|kM;=Aut~o9&mJ_zpR}ER_ zSGR~llya=74JD$QGEU$Ez&cUQ4X(9tC5R)vQQ-qQNW|6v$}pm}rw}1YJZMo;0s*QR zZpMjNUO&t$GKKL`$zj|{cU`%q5r;bytSIl;Ys?7=oM34Qn1D#<ao$;UU&7mC0d>q> zm~u6B0CMqfqwchFu|o<6NSJX!A2iz{Qv%|w^=TGSTzey!sTPjYNT|1zl5zb=up`R2 zun_Z>lc;oX!=XIET<OR<-8H};Z?IsYdAZGS^ePi#7AwO3r+NWKkx7)(N^p_6Tn4O= zM|A{dgNa>HVvJGg#*|a*f4(_8!dUsAE)hW+zHCESRJ|l-X?T-ln0lq;)<6vw26|S= z)();I+F#^9L{wD5Nr(9pnX}U1uOL_G7BH!kD5xYTr+t{C9!R^5NMQg+tt;c_P2d(F zKAJnypXpK5&Ma1zW6=OCNx}-qs?oP0MA-&{O@^Wq$e6;<6o^|&z%(7EL^yJEEtyM} zbMf0+V}$(SLq$GC_G*9E-fVjWJt=tPG*?1tjJyhima-%R)E+3}Svo*z?!u^G`#41K zkSU@cdLU{j`B|%)c7bSA(f2hL6fQLC3Jz{`!0=2PYEOm%^0I-$$AMV&2np(S?o<tz zpfCxqAJRAJp4EO8ekn>zNiZqm6`fQIzQGp_bB7c#r7vjnE6OqGO4K_RPvvpQy?B3g zW>kPB|G|b10VA^PYZ$O-sI3H5rr0-Yzsm_~JRh4!V2hE*9KKqPkz{?3VUH{C8<6gd zvzywj$MZ9w{F6wNzch*ob*N!XB)CbA7D(~sfTNk=fBEN}22p*tl~jSE4$FCsOR;lM z+1Jug&FgyuwMaO1s4zyxj7UY5II&f`^4$6QADt+z-X+^=bTR4jS?1|_I;R;cbi($V z-H2lECcCV#yg|AN)8&O#8PsT1)So<ixr@cLJ>6C|gQ@)CXqa-=Sx%h9rVwdu)+gu} zJT_+ecbEHB;hr4h`90w|F0`CB3uWP%op)&vNVy_C5p|?+>BMA@8vw(_qH?5d)&QD} zpT%sdXS+$YX|+#^0_nYI5Dr&ITqfLvDmGVhq^wSyVicy#5(7}BIol!yv$^9se1xh! z7kfJl5!=~3loW%`GK$Gi$-KnmgFb>S90VCx8;dlAg82`iJ?2sPxjZ1_iphqfhITm7 z5|Yr5JRz{fBR;iO3zaIYK;<T9NQb1>#4)EZpU+|gz;#ha3|;ND7wl5wh~TAOJNU{H zmQ}%Hfw-BpHq}l~N0coW?^>3`gF79<EJZ9b@p%@ui8Y}Q7*$lv?YiV-ep=Ruk*dab zht9hKpk*+${SP3_NfhJlm)0T|&}=a2I$E5xQor`lYX$9o*yGXngUEVsuYRu^Buf!7 ztCAbOLPD?8wle|t8H+=6tVG{Dvoa(%*tHBrxmVR9!%;QiIAe*?N3p;&mt_#VmV}1@ zLKXTA-kBe}4gjbvOrdtS7IAWRWh=h)>x{+-gJXT_m-TH3@6=l1R6_>{Ed)Nit4Xyk zJic)Xhpu(=#RC8ZsgWr9t~-Pn=)1|j5-9O-hF^VMB;OZIx!v3VQ?oT%sgl-zYGuog zc7UJ*$FC!lE>Jg{FmxB=K0kx!kJw)kN)7?!2_fmZ#C$7SrCA<<><eDvL~4QfocMFR z6!1}X6|~B&$ND6Il^PioEJdt#{^SrEUS2^0SNpdV^g5b`iEj^BkTPeC2{z!NpqNc3 zLy+}(!$KBsgtx4d##~xq^kU-Z)7my2T!HY3oCvWZSuRC6U{tC3;vyOXkVig8cJ`ef z6dqIuMY+D^VWNgqctv{DgB2EU6%N(8`bRz~FP`K{dwPWGfxHHmPyrzQfE!w9dP=Iy zA_6gwArE-D!dJn<BA!RmA_WT`%5p>xK!XFhO~{t&em$;Mh(y&#Mp>4mL2`GEs1O}I zfhR9hog8g|M;1BV$Nn-+F+f<ISoe+C-fjUY+P6=1H34IG+sP*siA9GG8j2McUK-aa zd>KHKd#PeoU17aXI>DXZU;K4S+)ffqGvt=()mUqn)M>*7KLAQyujRIe$2N>y$kgpT z54<0$q*{iOR!B=hs0jQ~iv*jcWdLA92Y8oi@eZd!_!+wwWc9@A$_!C)d$5yW(w9+_ z-lC&brB)3HhTzI^WV#a6@RaGSC~`2gQ{ziD&B^bKwjW`vZKQR-hb<asc!)P^A@K>y z9R0^v=SSZTQ2{WsS#Fjw9Dl@tl_4F6yYm4RdprQG6M#hVn@9%m9?UfSLjMU6VaVo+ z1V6SQeF<i=6jAosUpW~;Us(p>*i_a)Q=q5-ghh#K4CYv_>Te3f?-*8@9Kcc<0Fp() z<4V%Y*K&kdEYqh?-FcF+%F&oK=Q=1*B1lzkc_@#lFoBLg5qAl)Yl?*w*Q7Pa17e-1 zPWfwqAVwH9N`pvu*YJrn3f><3)mBKE64lM%&Zo<0fgxG}az}yM{v3rm^mP>%nMKOn zC-wjfm0>A8#$(nu#O>2iB%<I(1P!j9NVyV#5K~}V0i(Y+08oK!ja9VD-7|uJX8VCY zbSmj1`5X{^IdDEI^(gum7lo*DK`3GtZ({grhYZCQQJYj-)w$?Xm15!?6(a+0F`0eU zV09fr_u{YwbEx5JoNAgUp_L|eJ3HloQm6)hQA3P>y^#zx!C;IQAG)!3RGtrwrLLS? zBssK8u49syNcf9JjG6AevDlrDAY7qcdX?dJM+Nx{GPOu{|Ht;Y*s}M30Cj%n2V(cv z@2*3-Wh|JvKn^{P>=OGM(HLYxu3JN}s?as^uj*f){+}yUTht9Gx{f)inH=YBK}=#y zs>I}fG$7=<hYCw-{J;FAu+-jvZG12#`+|5_>0d5R2cnI<zKOaMWiUhJs4wP@7}8}v z=+`vx$rk#;+aE%_DUtC1<qL3Pp(7^<H=PmrRBx3I{(sTse^8j{Q3)}rUFyUC;B?ma z^zMsP5gGO4rx@?xBG?X{z3J6h;b%>)C(OT<mH+9;{0Fd`VTiXYdDn2a;RJY;YPb*2 zC;v4fi;Ydg5a80veoLmPRRHb*aqNaK0S`TunHxsh`diRx;aPB%q;{B?S1OQC_mDjJ z?4&KiN;{0X;L{epphRVAG}OxdyXS58heNamE-1j73I-=c%%$wDxkQmLEx7QGu?i48 z91{`odJVCq)K^1C>e|Cs+ff?iBKR+TYZQv)>U}VL2Lq&^<<F=T$70Uh=q@g2S_mLh zIkomHIB{Nu8-?W0kN@`d_)j-Y81k@zou-x{7A769h@Tud200ZsKF0XcWIZC5IEu3h zAlfd7^%hQC2oWMKqa>={>L=J0FDTKNc8k%Btw}+$>C?M+@gD2}n1^m-A?MNl7HF zn=L{Bm5Igkngtq!v*Ms*xM9Vsaw}xNCl$r>L>6U1i9l|Ux>Ld?BxP}*?q0er-b5cP z?Zf#4pzQmvXT*?S=^2q)cVW37HUk<D#Pod1J%%UA_VmsoT-A0E+%nDMJdwB>L^1U3 zZBaH<Oa$#O(-)f7@HR<YTl$+IFof}#`7(DR7UW8R`)f5jYo?;qB}~q?Q$ojVx_$X3 z(}`P&kiXTU|LMB>d>cEkEfZrWq8&n6Etg2bhs*P-D1uLr^hI^1{EbXHj~#t@Wz4u$ zHma@zrwX&(;pTH_G~<*n#i`#k{*S{{425;B00*{!cz2`k@aSVXN1xl85e$%U9gK!{ z2W9jDo1k}0slFN}zj$UXsR&aiz8TVks3n<cu^cMV5zXf%rEor^>5)QLL=uAp2q{&8 z852Jl!boV08iv~+DncQ<RCA_jgy9rwE^{|zfU0ibH@6sj0r{rA^EEi!`=@^ylK!PN z*wB9#wA@hv#&8TQ&Cu}s&4nx0`h(zNqx`*wq~oUO;31kX_ZGCJ`*{6ZA1|eU7i1KW z>5E5&itaCQXKZGDk%MT3T@CH7_v<(D7#?F_S&N@C!%tbd${?Z^e~z+~Ma&}(oqQ#t z{|!9D0!LhNSE&ly3|)i_ui`a~Ix&1)9NzV!;mWjO&qWS9&&UoQe8D&)LeAFG_$uzY z`!Egqku3C^im((ZVlWFF=?#XHHrHTo95E+>U_?llWrl~N#WFdjB6N)3+Yj{56oC1e z417cn6rD$aSS3;@DQEG8*vxe)?>g7r*ebX*CdApkA22kv$bX`SFE#Fd{%*!bKH*ZQ zgf+T^4QCgXcOB1!t3N#0SVqtH@_wzH@s~)w<>Oc48awRoqL`zP^)tWz<(T;|9anFo zmQaBmq5U^;VS}-ID*L)AG27IiH&$6uPX_?@A_B4kPhiiUh(4Qf3130NU}xu0PS}BV zLI3EYMpuDT!}x9nnTF*T?=GWA+oJ}tyVyJ2T&}LL(645Q%ia8$L5g2DLpi31nng@x zW+F|)m*D0_G$mWZ?kO(?A`#0W%uPYE2+V`quRUJuQ(DHU3NQniGjtHJG}K?3=TLIw zkxTGO-(^`r_C^3;;PL^`S;(cCRdr9COUlyJ*^-ap_>QbxFSG1XW47NYn~&|ry>vIn zezkKlK7A0W;19sDt-cBhvt{2*d^vM{yu9mx(4MuyRFnJ6Mn8MY7RZ$k$zaJ2l36!2 zfAYZ66Q>(np<%ZE0k~0&l3*bthX31O`7b^z)E|26I~q&45?_zwLvoXiwTBq3)FQ|{ zzT2;%`qVIEO=2_sl8}poD*zwJCXybOj_@_imt3w<3k{KWft(?ZEqu^s`=s-M;X~Ax zk(`oH?$3MG1cgrw3*og{Q8DOH1cj*+U(p5Lthqmcm}X|?WONc2!^o`2E(9D>s*brL ztQiF9+lQa)Ju?+?ic~JK(rrX;Ifb2kW#M~>Ff_{-5#Wrc#49KhaN=-6{wF_7qlvYe zhZz3r8DhU#MMZ=K&nPAWmiV}pqTo}x;f(p#%!kVDCjW0AvHx5pXKF0=MBR1}qT|Nz zZhR!<2e-y#W7V_hes{~(H>1UIzPqz{8hZ^%o%O*}q$w(xw~$Q4)eAK&R3IAxvh09x zvexKobGOtGS=K8-y|Q~ZGBVMzNVv#oGK%<Q!pZPcO#FiO&*`CTL_#nW06Q&KLydVC zKLtS%M~smnAQi!^wmevF>pdCSHv(lz0P+Y##sPjXkw8)~`zuQwrhLW5jHYij8zu8- zDXNrq=!o<;ir#>>8fKPaAXP(_Tjs;*Ak<<pD10uzsc_)xg*#rlVCF@_(i7}%jCC&& z)}uH75B8U8j7~cnOJKXw4fjOxnJ#++=!eDu3+@K?G=d3HU;	${)l5;*2Fz5<`Y~ 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 MX>b43|NZuV0O%|OasU7T literal 0 HcmV?d00001 diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/readme.md b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/readme.md new file mode 100644 index 0000000..4f00e6f --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/readme.md @@ -0,0 +1,55 @@ +XMM — Probabilistic Models for Continuous Motion Recognition and Mapping +=========================================== + +XMM is a portable, cross-platform C++ library that implements Gaussian Mixture Models and Hidden Markov Models for recognition and regression. The XMM library was developed for movement interaction in creative applications and implements an interactive machine learning workflow with fast training and continuous, real-time inference. + +### Major Update! [Sept. 2016] + +We just updated XMM to the newest API version! + +This version is not compatible with the initial API, which is still available on a separate branch: https://github.com/Ircam-RnD/xmm/tree/v0-historic-api. + +### Contact + +Jules Francoise: <jules.francoise@ircam.fr> + +### author + +This code has been initially authored by <a href="http://julesfrancoise.com">Jules Francoise</a> during his PhD thesis, supervised by <a href="frederic-bevilacqua.net">Frederic Bevilacqua</a>, in the <a href="http://ismm.ircam.fr">Sound Music Movement Interaction</a> team of the <a href="http://www.ircam.fr/stms.html?&L=1">STMS Lab</a> - IRCAM - CNRS - UPMC (2011-2015). + +### Copyright + +Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + +### Licence + +This project is released under the <a href="http://www.gnu.org/licenses/gpl-3.0.en.html">GPLv3</a> license. +For commercial applications, a proprietary license is available upon request to Frederick Rousseau <frederick.rousseau@ircam.fr>. + +XMM is free software: you can 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. + +XMM is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with XMM. If not, see <http://www.gnu.org/licenses/>. + +### Citing this work + +If you use this code for research purposes, please cite one of the following publications: + +- J. Francoise, N. Schnell, R. Borghesi, and F. Bevilacqua, Probabilistic Models for Designing Motion and Sound Relationships. In Proceedings of the 2014 International Conference on New Interfaces for Musical Expression, NIME’14, London, UK, 2014. +- J. Francoise, N. Schnell, and F. Bevilacqua, A Multimodal Probabilistic Model for Gesture-based Control of Sound Synthesis. In Proceedings of the 21st ACM international conference on Multimedia (MM’13), Barcelona, Spain, 2013. + +### Dependencies + + The library depends on <a href="https://github.com/open-source-parsers/jsoncpp">jsoncpp</a> for JSON file I/O. The library is distributed with this softare. The units tests rely on the <a href="https://github.com/philsquared/Catch">Catch</a> testing framework + +## Documentation + +The full documentation is available on Github Pages: http://ircam-rnd.github.io/xmm/ diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmAttribute.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmAttribute.cpp new file mode 100644 index 0000000..bdf3655 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmAttribute.cpp @@ -0,0 +1,108 @@ +/* + * xmmAttribute.hpp + * + * Generic Attributes + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "xmmAttribute.hpp" +#include <string> + +template <> +void xmm::checkLimits<bool>(bool const& value, bool const& limit_min, + bool const& limit_max) {} + +template <> +void xmm::checkLimits<unsigned char>(unsigned char const& value, + unsigned char const& limit_min, + unsigned char const& limit_max) { + if (value < limit_min || value > limit_max) + throw std::domain_error("Attribute value out of range. Range: [" + + std::to_string(limit_min) + " ; " + + std::to_string(limit_max) + "]"); +} + +template <> +void xmm::checkLimits<char>(char const& value, char const& limit_min, + char const& limit_max) { + if (value < limit_min || value > limit_max) + throw std::domain_error("Attribute value out of range. Range: [" + + std::to_string(limit_min) + " ; " + + std::to_string(limit_max) + "]"); +} + +template <> +void xmm::checkLimits<unsigned int>(unsigned int const& value, + unsigned int const& limit_min, + unsigned int const& limit_max) { + if (value < limit_min || value > limit_max) + throw std::domain_error("Attribute value out of range. Range: [" + + std::to_string(limit_min) + " ; " + + std::to_string(limit_max) + "]"); +} + +template <> +void xmm::checkLimits<int>(int const& value, int const& limit_min, + int const& limit_max) { + if (value < limit_min || value > limit_max) + throw std::domain_error("Attribute value out of range. Range: [" + + std::to_string(limit_min) + " ; " + + std::to_string(limit_max) + "]"); +} + +template <> +void xmm::checkLimits<long>(long const& value, long const& limit_min, + long const& limit_max) { + if (value < limit_min || value > limit_max) + throw std::domain_error("Attribute value out of range. Range: [" + + std::to_string(limit_min) + " ; " + + std::to_string(limit_max) + "]"); +} + +template <> +void xmm::checkLimits<float>(float const& value, float const& limit_min, + float const& limit_max) { + if (value < limit_min || value > limit_max) + throw std::domain_error("Attribute value out of range. Range: [" + + std::to_string(limit_min) + " ; " + + std::to_string(limit_max) + "]"); +} + +template <> +void xmm::checkLimits<double>(double const& value, double const& limit_min, + double const& limit_max) { + if (value < limit_min || value > limit_max) + throw std::domain_error("Attribute value out of range. Range: [" + + std::to_string(limit_min) + " ; " + + std::to_string(limit_max) + "]"); +} + +template <> +void xmm::checkLimits<std::string>(std::string const& value, + std::string const& limit_min, + std::string const& limit_max) {} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmAttribute.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmAttribute.hpp new file mode 100644 index 0000000..d1dcfc8 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmAttribute.hpp @@ -0,0 +1,644 @@ +/* + * xmmAttribute.hpp + * + * Generic Attributes + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmAttribute_h +#define xmmAttribute_h + +#include <functional> +#include <limits> +#include <stdexcept> +#include <string> +#include <vector> + +namespace xmm { + +#pragma mark - +#pragma mark === Functions checkLimits === +/** + @ingroup Common + @brief checks the validity of the requested value with respect to the current + limits + @param value requested attribute value + @param limit_min minimum value + @param limit_max maximum value + */ +template <typename T> +void checkLimits(T const& value, T const& limit_min, T const& limit_max) { + throw std::runtime_error( + "Attribute limits are not implemented for the current type."); +} + +template <> +void checkLimits<bool>(bool const& value, bool const& limit_min, + bool const& limit_max); + +template <> +void checkLimits<unsigned char>(unsigned char const& value, + unsigned char const& limit_min, + unsigned char const& limit_max); + +template <> +void checkLimits<char>(char const& value, char const& limit_min, + char const& limit_max); + +template <> +void checkLimits<unsigned int>(unsigned int const& value, + unsigned int const& limit_min, + unsigned int const& limit_max); + +template <> +void checkLimits<int>(int const& value, int const& limit_min, + int const& limit_max); + +template <> +void checkLimits<long>(long const& value, long const& limit_min, + long const& limit_max); + +template <> +void checkLimits<float>(float const& value, float const& limit_min, + float const& limit_max); + +template <> +void checkLimits<double>(double const& value, double const& limit_min, + double const& limit_max); + +template <> +void checkLimits<std::string>(std::string const& value, + std::string const& limit_min, + std::string const& limit_max); + +#pragma mark - +#pragma mark === Class AttributeBase === +/** + @ingroup Common + @brief Base Class for Generic Attributes + */ +class AttributeBase { + public: + virtual ~AttributeBase() {} + + /** + @brief Default Constructor + */ + AttributeBase() : changed(false) {} + + /** + @brief Defines if the value has been changed + */ + bool changed; +}; + +#pragma mark - +#pragma mark === Class Attribute === +/** + @ingroup Common + @brief Generic Attribute + @tparam T attribute type + */ +template <typename T> +class Attribute : public AttributeBase { + public: + typedef std::function<void(AttributeBase*)> AttributeChangeCallback; + + template <typename U, typename args, class ListenerClass> + void onAttributeChange(U* owner, + void (ListenerClass::*listenerMethod)(args)) { + using namespace std::placeholders; + if (owner) + callback_ = std::bind(listenerMethod, owner, _1); + else + callback_ = nullptr; + } + + /** + @brief Default Constructor + @param value attribute value + @param limit_min minimum limit + @param limit_max maximum limit + */ + Attribute(T const& value = T(), T const& limit_min = defaultLimitMin(), + T const& limit_max = defaultLimitMax()) + : limit_min_(limit_min), limit_max_(limit_max) { + set(value, true); + changed = false; + } + + /** + @brief Copy Constructor + @param src source attribute + @warning the listener object is not copied from the source attribute + */ + Attribute(Attribute const& src) + : value_(src.value_), + limit_min_(src.limit_min_), + limit_max_(src.limit_max_) { + changed = false; + } + + /** + @brief Assignment operator + @param src source attribute + @return copy of the source Attribute object + @warning the listener object is not copied from the source attribute + */ + template <typename U> + Attribute& operator=(Attribute<U> const& src) { + if (this != &src) { + value_ = src.value_; + limit_min_ = src.limit_min_; + limit_max_ = src.limit_max_; + changed = false; + } + return *this; + } + + /** + @brief Set the attribute value + @param value requested value + @param silently if true, don't notify the listener object + @throws domain_error exception if the value exceeds the limits + @throws runtime_error exception if the limit checking are not implemented + for the current type + */ + void set(T const& value, bool silently = false) { + checkLimits(value, limit_min_, limit_max_); + value_ = value; + changed = true; + if (!silently && callback_) callback_(this); + } + + /** + @brief get the attribute's current value + @return the attribute's current value + */ + T get() const { return value_; } + + /** + @brief set the attribute's minimum value + @param limit_min minimum value + */ + void setLimitMin(T const& limit_min = defaultLimitMin()) { + limit_min_ = limit_min; + } + + /** + @brief set the attribute's maximum value + @param limit_max maximum value + */ + void setLimitMax(T const& limit_max = defaultLimitMax()) { + limit_max_ = limit_max; + } + + /** + @brief set the attribute's limit values + @param limit_min minimum value + @param limit_max maximum value + */ + void setLimits(T const& limit_min = defaultLimitMin(), + T const& limit_max = defaultLimitMax()) { + setLimitMin(limit_min); + setLimitMax(limit_max); + } + + protected: + /** + @brief Attribute default minimum value + */ + static T defaultLimitMin() { return std::numeric_limits<T>::lowest(); } + + /** + @brief Attribute default maximum value + */ + static T defaultLimitMax() { return std::numeric_limits<T>::max(); } + + /** + @brief Current value of the attribute + */ + T value_; + + /** + @brief Minimum value of the attribute + */ + T limit_min_; + + /** + @brief Maximum value of the attribute + */ + T limit_max_; + + /** + @brief Callback function to be called on attribute change + */ + AttributeChangeCallback callback_; +}; + +#pragma mark - +#pragma mark === Class Attribute: vector specialization === +/** + @ingroup Common + @brief Generic Attribute (Vector Specialization) + @tparam T Vector base type + */ +template <typename T> +class Attribute<std::vector<T>> : public AttributeBase { + public: + typedef std::function<void(AttributeBase*)> AttributeChangeCallback; + + template <typename U, typename args, class ListenerClass> + void onAttributeChange(U* owner, + void (ListenerClass::*listenerMethod)(args)) { + using namespace std::placeholders; + if (owner) + callback_ = std::bind(listenerMethod, owner, _1); + else + callback_ = nullptr; + } + + /** + @brief Default Constructor + @param value attribute value + @param limit_min minimum limit + @param limit_max maximum limit + @param size size of the vector attribute (if 0, no size checking on set) + */ + Attribute(std::vector<T> const& value = std::vector<T>(), + T const& limit_min = defaultLimitMin(), + T const& limit_max = defaultLimitMax(), unsigned int size = 0) + : limit_min_(limit_min), limit_max_(limit_max), size_(size) { + set(value, true); + changed = false; + } + + /** + @brief Copy Constructor + @param src source attribute + @warning the listener object is not copied from the source attribute + */ + Attribute(Attribute const& src) + : value_(src.value_), + limit_min_(src.limit_min_), + limit_max_(src.limit_max_), + size_(src.size_) { + changed = false; + } + + /** + @brief Assignment operator + @param src source attribute + @return copy of the source Attribute object + @warning the listener object is not copied from the source attribute + */ + template <typename U> + Attribute& operator=(Attribute<U> const& src) { + if (this != &src) { + value_ = src.value_; + limit_min_ = src.limit_min_; + limit_max_ = src.limit_max_; + size_ = src.size_; + changed = false; + } + return *this; + } + + /** + @brief Set the attribute value + @param value requested value + @param silently if true, don't notify the listener object + @throws domain_error exception if the value exceeds the limits, or if the + value does not + match the attribute's size (if the attribute's size is > 0) + @throws runtime_error exception if the limit checking are not implemented + for the current type + */ + void set(std::vector<T> const& value, bool silently = false) { + if (size_ > 0 && value.size() != size_) { + throw std::domain_error("Attribute value has the wrong size"); + } + for (auto& val : value) { + checkLimits(val, limit_min_, limit_max_); + } + value_ = value; + changed = true; + if (!silently && callback_) callback_(this); + } + + /** + @brief get the attribute's current value + @return the attribute's current value + */ + std::vector<T> get() const { return value_; } + + /** + @brief get the attribute's current value at a given index + @param index index in the value vector + @return the attribute's current value at a given index + */ + T at(unsigned int index) const { + if (index < size_) { + return value_[index]; + } else { + throw std::out_of_range("Index out of range"); + } + } + + /** + @brief set the attribute's minimum value + @param limit_min minimum value + */ + void setLimitMin(T const& limit_min = defaultLimitMin()) { + limit_min_ = limit_min; + } + + /** + @brief set the attribute's maximum value + @param limit_max maximum value + */ + void setLimitMax(T const& limit_max = defaultLimitMax()) { + limit_max_ = limit_max; + } + + /** + @brief set the attribute's limit values + @param limit_min minimum value + @param limit_max maximum value + */ + void setLimits(T const& limit_min = defaultLimitMin(), + T const& limit_max = defaultLimitMax()) { + setLimitMin(limit_min); + setLimitMax(limit_max); + } + + /** + @brief set the attribute's size (vector Attribute). if 0, there is not + size-checking on set. + @param size vector size + */ + void resize(unsigned int size) { + value_.resize(size, T()); + size_ = size; + } + + /** + @brief get the attribute's current size (vector Attribute) + @return value vector size + */ + unsigned int size() const { return value_.size(); } + + protected: + /** + @brief Attribute default minimum value + */ + static T defaultLimitMin() { return std::numeric_limits<T>::lowest(); } + + /** + @brief Attribute default maximum value + */ + static T defaultLimitMax() { return std::numeric_limits<T>::max(); } + + /** + @brief Current value of the attribute + */ + std::vector<T> value_; + + /** + @brief Minimum value of the attribute + */ + T limit_min_; + + /** + @brief Maximum value of the attribute + */ + T limit_max_; + + /** + @brief Size of the vector of values + */ + unsigned int size_; + + /** + @brief Callback function to be called on attribute change + */ + AttributeChangeCallback callback_; +}; + +#pragma mark - +#pragma mark === Class Attribute: vector<string> specialization === +/** + @ingroup Common + @brief Generic Attribute (Vector Specialization) + */ +template <> +class Attribute<std::vector<std::string>> : public AttributeBase { + public: + typedef std::function<void(AttributeBase*)> AttributeChangeCallback; + + template <typename U, typename args, class ListenerClass> + void onAttributeChange(U* owner, + void (ListenerClass::*listenerMethod)(args)) { + using namespace std::placeholders; + if (owner) + callback_ = std::bind(listenerMethod, owner, _1); + else + callback_ = nullptr; + } + + /** + @brief Default Constructor + @param value attribute value + @param limit_min minimum limit + @param limit_max maximum limit + @param size size of the vector attribute (if 0, no size checking on set) + */ + Attribute(std::vector<std::string> const& value = {}, + std::string const& limit_min = "", + std::string const& limit_max = "", unsigned int size = 0) + : limit_min_(limit_min), limit_max_(limit_max), size_(size) { + set(value, true); + changed = false; + } + + /** + @brief Copy Constructor + @param src source attribute + @warning the listener object is not copied from the source attribute + */ + Attribute(Attribute const& src) + : value_(src.value_), + limit_min_(src.limit_min_), + limit_max_(src.limit_max_), + size_(src.size_) { + changed = false; + } + + /** + @brief Assignment operator + @param src source attribute + @return copy of the source Attribute object + @warning the listener object is not copied from the source attribute + */ + template <typename U> + Attribute& operator=(Attribute<U> const& src) { + if (this != &src) { + value_ = src.value_; + limit_min_ = src.limit_min_; + limit_max_ = src.limit_max_; + size_ = src.size_; + changed = false; + } + return *this; + } + + /** + @brief Set the attribute value + @param value requested value + @param silently if true, don't notify the listener object + @throws domain_error exception if the value exceeds the limits, or if the + value does not + match the attribute's size (if the attribute's size is > 0) + @throws runtime_error exception if the limit checking are not implemented + for the current type + */ + void set(std::vector<std::string> const& value, bool silently = false) { + if (size_ > 0 && value.size() != size_) { + throw std::domain_error("Attribute value has the wrong size"); + } + for (auto& val : value) { + checkLimits(val, limit_min_, limit_max_); + } + value_ = value; + changed = true; + if (!silently && callback_) callback_(this); + } + + /** + @brief get the attribute's current value + @return the attribute's current value + */ + std::vector<std::string> get() const { return value_; } + + /** + @brief get the attribute's current value at a given index + @param index index in the value vector + @return the attribute's current value at a given index + */ + std::string at(unsigned int index) const { + if (index < size_) { + return value_[index]; + } else { + throw std::out_of_range("Index out of range"); + } + } + + /** + @brief set the attribute's minimum value + @param limit_min minimum value + */ + void setLimitMin(std::string const& limit_min = defaultLimitMin()) { + limit_min_ = limit_min; + } + + /** + @brief set the attribute's maximum value + @param limit_max maximum value + */ + void setLimitMax(std::string const& limit_max = defaultLimitMax()) { + limit_max_ = limit_max; + } + + /** + @brief set the attribute's limit values + @param limit_min minimum value + @param limit_max maximum value + */ + void setLimits(std::string const& limit_min = defaultLimitMin(), + std::string const& limit_max = defaultLimitMax()) { + setLimitMin(limit_min); + setLimitMax(limit_max); + } + + /** + @brief set the attribute's size (vector Attribute). if 0, there is not + size-checking on set. + @param size vector size + */ + void resize(unsigned int size) { + value_.resize(size, ""); + size_ = size; + } + + /** + @brief get the attribute's current size (vector Attribute) + @return value vector size + */ + unsigned int size() const { + return static_cast<unsigned int>(value_.size()); + } + + protected: + /** + @brief Attribute default minimum value + */ + static std::string defaultLimitMin() { return ""; } + + /** + @brief Attribute default maximum value + */ + static std::string defaultLimitMax() { return ""; } + + /** + @brief Current value of the attribute + */ + std::vector<std::string> value_; + + /** + @brief Minimum value of the attribute + */ + std::string limit_min_; + + /** + @brief Maximum value of the attribute + */ + std::string limit_max_; + + /** + @brief Size of the vector of values + */ + unsigned int size_; + + /** + @brief Callback function to be called on attribute change + */ + AttributeChangeCallback callback_; +}; +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmCircularbuffer.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmCircularbuffer.hpp new file mode 100644 index 0000000..c435761 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmCircularbuffer.hpp @@ -0,0 +1,195 @@ +/* + * xmmCircularBuffer.hpp + * + * Simple Circular Buffer Utility + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmCircularbuffer_h +#define xmmCircularbuffer_h + +#include <exception> +#include <stdexcept> +#include <vector> + +namespace xmm { +/** + @ingroup Common + @brief Simple CircularBuffer Class + @details Multichannel Circular Buffer + @tparam T Data type + @tparam channels number of channels + */ +template <typename T, unsigned int channels = 1> +class CircularBuffer { + public: + /** + @brief Constructor + @param length length of the CircularBuffer + */ + CircularBuffer(unsigned int length = 1) { + length_ = length; + for (int c = 0; c < channels; c++) { + data_[c].resize(length_); + } + current_index_ = 0; + full_ = false; + } + + /** + @brief Access data by index & channel + @return value at the given index and channel + */ + T operator()(unsigned int channel, unsigned int index) const { + if (channel >= channels) + throw std::out_of_range("CircularBuffer: channel out of bounds"); + unsigned int m = full_ ? length_ : current_index_; + if (index >= m) + throw std::out_of_range("CircularBuffer: index out of bounds"); + return data_[channel][index]; + } + + /** + @brief Clear the content of the buffer + */ + void clear() { + current_index_ = 0; + full_ = false; + } + + /** + @brief Add an element to the buffer (single-channel method) + @param value element to add to the buffer + @throws invalid_argument if the buffer is multi-channel + */ + void push(T const value) { + if (channels > 1) + throw std::invalid_argument("You must pass a vector or array"); + data_[0][current_index_] = value; + current_index_++; + if (current_index_ == length_) full_ = true; + current_index_ %= length_; + } + + /** + @brief Add an element to the buffer (multi-channel method) + @param value element to add to the buffer + */ + void push(T const *value) { + for (int c = 0; c < channels; c++) { + data_[c][current_index_] = value[c]; + } + current_index_++; + if (current_index_ == length_) full_ = true; + current_index_ %= length_; + } + + /** + @brief Add an element to the buffer (multi-channel method) + @param value element to add to the buffer + */ + void push(std::vector<T> const &value) { + for (int c = 0; c < channels; c++) { + data_[c][current_index_] = value[c]; + } + current_index_++; + if (current_index_ == length_) full_ = true; + current_index_ %= length_; + } + + /** + @brief Get the size of the CircularBuffer + @return size of the CircularBuffer (length) + */ + unsigned int size() const { return length_; } + + /** + @brief Get the actual size of the CircularBuffer (< size() if the buffer is + not full) + @return actual size of the CircularBuffer (length) + */ + unsigned int size_t() const { return (full_ ? length_ : current_index_); } + + /** + @brief Resize the buffer to a specific length + @param length target length of the CircularBuffer + */ + void resize(unsigned int length) { + if (length == length_) return; + if (length > length_) { + full_ = false; + } else if (current_index_ >= length) { + full_ = true; + current_index_ = 0; + } + length_ = length; + for (int c = 0; c < channels; c++) { + data_[c].resize(length_); + } + } + + /** + @brief Compute the mean of the buffer + @return vector containing the mean of the buffer + */ + std::vector<T> mean() const { + std::vector<T> _mean(channels, 0.0); + int size = full_ ? length_ : current_index_; + for (int c = 0; c < channels; c++) { + for (int i = 0; i < size; i++) { + _mean[c] += data_[c][i]; + } + _mean[c] /= T(size); + } + return _mean; + } + + protected: + /** + @brief buffer data + */ + std::vector<T> data_[channels]; + + /** + @brief length of the buffer + */ + unsigned int length_; + + /** + @brief current index in the buffer + */ + unsigned int current_index_; + + /** + @brief Defines if the CircularBuffer is already full + */ + bool full_; +}; +} + +#endif \ No newline at end of file diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmEvents.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmEvents.hpp new file mode 100644 index 0000000..6468eb7 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmEvents.hpp @@ -0,0 +1,113 @@ +/* + * xmmEvents.hpp + * + * Template classes for Event generators + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmEvents_h +#define xmmEvents_h + +#include <functional> +#include <map> +#include <set> + +namespace xmm { +/** + @ingroup Common + @brief Generator class for a specific type of events + @tparam EventType Type of Events that can be sent + */ +template <typename EventType> +class EventGenerator { + public: + typedef std::function<void(EventType&)> EventCallBack; + + /** + @brief Default constructor + */ + EventGenerator() {} + + /** + @brief Destructor + @details Also notifies all listeners that this generators is deleted + */ + virtual ~EventGenerator() {} + + /** + @brief Adds a listener object to be notified when events are sent + @param owner Pointer to the listener object + @param listenerMethod Method to be called in the target class + @tparam U type of the target object + @tparam args callback arguments + @tparam ListenerClass Listener Class + */ + template <typename U, typename args, class ListenerClass> + void addListener(U* owner, void (ListenerClass::*listenerMethod)(args)) { + callbacks_.insert(std::pair<void*, EventCallBack>( + static_cast<void*>(owner), + std::bind(listenerMethod, owner, std::placeholders::_1))); + } + + /** + @brief Removes a listener object + @param owner Pointer to the listener object + @param listenerMethod Method to be called in the target class + @tparam U type of the target object + @tparam args callback arguments + @tparam ListenerClass Listener Class + */ + template <typename U, typename args, class ListenerClass> + void removeListener(U* owner, void (ListenerClass::*listenerMethod)(args)) { + callbacks_.erase(static_cast<void*>(owner)); + } + + /** + @brief Removes all listeners + */ + void removeListeners() { callbacks_.clear(); } + + /** + @brief Propagates the event to all listeners + @param e event + */ + void notifyListeners(EventType& e) const { + for (auto& callback : callbacks_) { + callback.second(e); + } + } + + private: + /** + @brief Set of listener objects + */ + std::map<void*, EventCallBack> callbacks_; +}; +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmJson.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmJson.cpp new file mode 100644 index 0000000..96d864b --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmJson.cpp @@ -0,0 +1,133 @@ +/* + * xmmJson.cpp + * + * Set of utility functions for JSON I/O + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "xmmJson.hpp" + +template <> +void xmm::json2array(Json::Value const& root, float* a, unsigned int n) { + if (!root.isArray()) + throw JsonException(JsonException::JsonErrorType::JsonTypeError); + if (root.size() != n) + throw JsonException(JsonException::JsonErrorType::JsonValueError); + unsigned int i = 0; + for (auto it : root) { + a[i++] = it.asFloat(); + } +} + +template <> +void xmm::json2array(Json::Value const& root, double* a, unsigned int n) { + if (!root.isArray()) + throw JsonException(JsonException::JsonErrorType::JsonTypeError); + if (root.size() != n) + throw JsonException(JsonException::JsonErrorType::JsonValueError); + unsigned int i = 0; + for (auto it : root) { + a[i++] = it.asDouble(); + } +} + +template <> +void xmm::json2array(Json::Value const& root, bool* a, unsigned int n) { + if (!root.isArray()) + throw JsonException(JsonException::JsonErrorType::JsonTypeError); + if (root.size() != n) + throw JsonException(JsonException::JsonErrorType::JsonValueError); + unsigned int i = 0; + for (auto it : root) { + a[i++] = it.asBool(); + } +} + +template <> +void xmm::json2array(Json::Value const& root, std::string* a, unsigned int n) { + if (!root.isArray()) + throw JsonException(JsonException::JsonErrorType::JsonTypeError); + if (root.size() != n) + throw JsonException(JsonException::JsonErrorType::JsonValueError); + unsigned int i = 0; + for (auto it : root) { + a[i++] = it.asString(); + } +} + +template <> +void xmm::json2vector(Json::Value const& root, std::vector<float>& a, + unsigned int n) { + if (!root.isArray()) + throw JsonException(JsonException::JsonErrorType::JsonTypeError); + if (root.size() != n) + throw JsonException(JsonException::JsonErrorType::JsonValueError); + unsigned int i = 0; + for (auto it : root) { + a[i++] = it.asFloat(); + } +} + +template <> +void xmm::json2vector(Json::Value const& root, std::vector<double>& a, + unsigned int n) { + if (!root.isArray()) + throw JsonException(JsonException::JsonErrorType::JsonTypeError); + if (root.size() != n) + throw JsonException(JsonException::JsonErrorType::JsonValueError); + unsigned int i = 0; + for (auto it : root) { + a[i++] = it.asDouble(); + } +} + +template <> +void xmm::json2vector(Json::Value const& root, std::vector<bool>& a, + unsigned int n) { + if (!root.isArray()) + throw JsonException(JsonException::JsonErrorType::JsonTypeError); + if (root.size() != n) + throw JsonException(JsonException::JsonErrorType::JsonValueError); + unsigned int i = 0; + for (auto it : root) { + a[i++] = it.asBool(); + } +} + +template <> +void xmm::json2vector(Json::Value const& root, std::vector<std::string>& a, + unsigned int n) { + if (!root.isArray()) + throw JsonException(JsonException::JsonErrorType::JsonTypeError); + if (root.size() != n) + throw JsonException(JsonException::JsonErrorType::JsonValueError); + unsigned int i = 0; + for (auto it : root) { + a[i++] = it.asString(); + } +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmJson.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmJson.hpp new file mode 100644 index 0000000..8a27eee --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmJson.hpp @@ -0,0 +1,323 @@ +/* + * xmmJson.hpp + * + * Set of utility functions for JSON I/O + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmJson_h +#define xmmJson_h + +#include "../../../dependencies/jsoncpp/include/json.h" +#include <fstream> +#include <vector> + +namespace xmm { +/** + @ingroup Common + @brief Abstract class for handling JSON + File I/O + @details the JSON I/O methods need to be implemented. writeFile and readFile + methods + can be used in Python for file I/O. The __str__() Python method is implemented + to use + with "print" in Python. It return the pretty-printed JSON String. + */ +class Writable { + public: + virtual ~Writable() {} + + /** @name Json I/O */ + ///@{ + + /** + @brief Write the object to a JSON Structure + @return Json value containing the object's information + */ + virtual Json::Value toJson() const = 0; + + /** + @brief Read the object from a JSON Structure + @param root JSON value containing the object's information + @throws JsonException if the JSON value has a wrong format + */ + virtual void fromJson(Json::Value const& root) = 0; + +///@} + +#ifdef SWIGPYTHON + /** @name Python File I/O */ + ///@{ + + /** + @brief write method for python wrapping ('write' keyword forbidden, name + has to be different) + @warning only defined if SWIGPYTHON is defined + */ + void writeFile(char* fileName) const { + std::ofstream outStream; + outStream.open(fileName); + outStream << this->toJson(); + outStream.close(); + } + + /** + @brief read method for python wrapping ('read' keyword forbidden, name has + to be different) + @warning only defined if SWIGPYTHON is defined + */ + void readFile(char* fileName) { + std::string jsonstring; + std::ifstream inStream; + inStream.open(fileName); + // inStream.seekg(0, std::ios::end); + // jsonstring.reserve(inStream.tellg()); + // inStream.seekg(0, std::ios::beg); + // + // jsonstring.assign((std::istreambuf_iterator<char>(inStream)), + // std::istreambuf_iterator<char>()); + Json::Value root; + Json::Reader reader; + if (reader.parse(inStream, root)) { + this->fromJson(root); + } else { + throw std::runtime_error("Cannot Parse Json File"); + } + inStream.close(); + } + + /** + @brief "print" method for python => returns the results of write method + @warning only defined if SWIGPYTHON is defined + */ + std::string __str__() const { return this->toJson().toStyledString(); } + +///@} +#endif +}; + +/** + @ingroup Common + @brief Exception class for handling JSON parsing errors + */ +class JsonException : public std::exception { + public: + /** + @brief Type of Json parsing errors + */ + enum class JsonErrorType { + /** + @brief A Node is Missing in the Json Value + */ + JsonMissingNode, + + /** + @brief The current node has wrong data type + */ + JsonTypeError, + + /** + @brief The current node has an inadmissible value + */ + JsonValueError + }; + + /** + @brief Default Constructor + @param errorType type of parsing error + @param nodename name of the JSON node where the error occurred + */ + JsonException(JsonErrorType errorType, std::string nodename = "") + : errorType_(errorType) { + nodename_.push_back(nodename); + } + + /** + @brief Constructor From exception message + @param src Source Exception + @param nodename name of the + */ + explicit JsonException(JsonException const& src, std::string nodename) + : errorType_(src.errorType_), nodename_(src.nodename_) { + nodename_.push_back(nodename); + } + + /** + @brief Copy Constructor + @param src Source exception + */ + JsonException(JsonException const& src) + : errorType_(src.errorType_), nodename_(src.nodename_) {} + + /** + @brief Assigment + @param src Source exception + */ + JsonException& operator=(JsonException const& src) { + if (this != &src) { + errorType_ = src.errorType_; + nodename_ = src.nodename_; + } + return *this; + } + + /** + @brief Get exception message + @return exception message + */ + virtual const char* what() const throw() { + std::string message; + switch (errorType_) { + case JsonErrorType::JsonMissingNode: + message = "Json Structure Error: Missing Node"; + break; + + case JsonErrorType::JsonTypeError: + message = "Json Structure Error: Type Error"; + break; + + case JsonErrorType::JsonValueError: + message = "Json Structure Error: Value Error"; + break; + + default: + message = "Json unknown error type"; + break; + } + message += " (root"; + for (auto& node : nodename_) message += " > " + node; + message += ")"; + return message.c_str(); + } + + private: + /** + @brief Type of Json Parsing Error + */ + JsonErrorType errorType_; + + /** + @brief Name of the Json Node presenting an error + */ + std::vector<std::string> nodename_; +}; + +/** + @ingroup Common + @brief Writes a C-style array to a Json Value + @param a array + @param n array size + @return Json Value containing the array in Json Format + */ +template <typename T> +Json::Value array2json(T const* a, unsigned int n) { + Json::Value root; + root.resize(static_cast<Json::ArrayIndex>(n)); + for (int i = 0; i < n; i++) { + root[i] = a[i]; + } + return root; +} + +/** + @ingroup Common + @brief Reads a C-style array from a Json Value + @param root Json Value containing the array in Json Format + @param a array + @param n array size + */ +template <typename T> +void json2array(Json::Value const& root, T* a, unsigned int n) { + if (!root.isArray()) + throw JsonException(JsonException::JsonErrorType::JsonTypeError); + if (root.size() != n) + throw JsonException(JsonException::JsonErrorType::JsonValueError); + unsigned int i = 0; + for (auto it : root) { + a[i++] = it.asInt(); + } +} + +template <> +void json2array(Json::Value const& root, float* a, unsigned int n); +template <> +void json2array(Json::Value const& root, double* a, unsigned int n); +template <> +void json2array(Json::Value const& root, bool* a, unsigned int n); +template <> +void json2array(Json::Value const& root, std::string* a, unsigned int n); + +/** + @ingroup Common + @brief Writes a vector to a Json Value + @param a vector + @return Json Value containing the vector data in Json Format + */ +template <typename T> +Json::Value vector2json(std::vector<T> const& a) { + Json::Value root; + root.resize(static_cast<Json::ArrayIndex>(a.size())); + for (int i = 0; i < a.size(); i++) { + root[i] = a[i]; + } + return root; +} + +/** + @ingroup Common + @brief Reads a vector from a Json Value + @param root Json Value containing the vector data in Json Format + @param a vector + @param n vector size + @warning the target vector must already have the appropriate size + */ +template <typename T> +void json2vector(Json::Value const& root, std::vector<T>& a, unsigned int n) { + if (!root.isArray()) + throw JsonException(JsonException::JsonErrorType::JsonTypeError); + if (root.size() != n) + throw JsonException(JsonException::JsonErrorType::JsonValueError); + unsigned int i = 0; + for (auto it : root) { + a[i++] = it.asInt(); + } +} + +template <> +void json2vector(Json::Value const& root, std::vector<float>& a, + unsigned int n); +template <> +void json2vector(Json::Value const& root, std::vector<double>& a, + unsigned int n); +template <> +void json2vector(Json::Value const& root, std::vector<bool>& a, unsigned int n); +template <> +void json2vector(Json::Value const& root, std::vector<std::string>& a, + unsigned int n); +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmMatrix.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmMatrix.hpp new file mode 100644 index 0000000..b9611eb --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/common/xmmMatrix.hpp @@ -0,0 +1,359 @@ +/* + * xmmMatrix.hpp + * + * Matrix Utilities + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmMatrix_h +#define xmmMatrix_h + +#include <cmath> +#include <exception> +#include <iostream> +#include <stdexcept> +#include <vector> + +namespace xmm { +/** + @defgroup Common [Core] Common Classes and Utilities + */ + +/** + @ingroup Common + @brief Dirty and very incomplete Matrix Class + @details Contains few utilities for matrix operations, with possibility to + share data with vectors + @tparam T data type of the matrix (should be used with float/double) + */ +template <typename T> +class Matrix { + public: + /** + @brief Epsilon value for Matrix inversion + @details defines + */ + static const double kEpsilonPseudoInverse() { return 1.0e-9; } + + /** + @brief number of rows of the matrix + */ + unsigned int nrows; + + /** + @brief number of columns of the matrix + */ + unsigned int ncols; + + /** + @brief Matrix Data if not shared + */ + std::vector<T> _data; + + /** + @brief Data iterator + @details Can point to own data vector, or can be shared with another + container. + */ + typename std::vector<T>::iterator data; + + /** + @brief Defines if the matrix has its own data + */ + bool ownData; + + /** + @brief Default Constructor + @param ownData_ defines if the matrix stores the data itself (true by + default) + */ + Matrix(bool ownData_ = true) : nrows(0), ncols(0), ownData(ownData_) {} + + /** + @brief Square Matrix Constructor + @param nrows_ Number of rows (defines a square matrix) + @param ownData_ defines if the matrix stores the data itself (true by + default) + */ + Matrix(unsigned int nrows_, bool ownData_ = true) { + nrows = nrows_; + ncols = nrows_; + ownData = ownData_; + if (ownData) { + _data.assign(nrows * ncols, T(0.0)); + data = _data.begin(); + } + } + + /** + @brief Constructor + @param nrows_ Number of rows + @param ncols_ Number of columns + @param ownData_ defines if the matrix stores the data itself (true by + default) + */ + Matrix(unsigned int nrows_, unsigned int ncols_, bool ownData_ = true) { + nrows = nrows_; + ncols = ncols_; + ownData = ownData_; + if (ownData) { + _data.assign(nrows * ncols, T(0.0)); + data = _data.begin(); + } + } + + /** + @brief Constructor from vector (shared data) + @param nrows_ Number of rows + @param ncols_ Number of columns + @param data_it iterator to the vector data + */ + Matrix(unsigned int nrows_, unsigned int ncols_, + typename std::vector<T>::iterator data_it) { + nrows = nrows_; + ncols = ncols_; + ownData = false; + data = data_it; + } + + /** + @brief Resize the matrix + @param nrows_ Number of rows + @param ncols_ Number of columns + @throws runtime_error if the matrix is not square + */ + void resize(unsigned int nrows_, unsigned int ncols_) { + nrows = nrows_; + ncols = ncols_; + _data.resize(nrows * ncols); + } + + /** + @brief Resize a Square Matrix + @param nrows_ Number of rows + */ + void resize(unsigned int nrows_) { + if (nrows != ncols) throw std::runtime_error("Matrix is not square"); + + nrows = nrows_; + ncols = nrows; + _data.resize(nrows * ncols); + } + + /** + @brief Compute the Sum of the matrix + @return sum of all elements in the matrix + */ + float sum() const { + float sum_(0.); + for (unsigned int i = 0; i < nrows * ncols; i++) sum_ += data[i]; + return sum_; + } + + /** + @brief Print the matrix + */ + void print() const { + for (unsigned int i = 0; i < nrows; i++) { + for (unsigned int j = 0; j < ncols; j++) { + std::cout << data[i * ncols + j] << " "; + } + std::cout << std::endl; + } + } + + /** + @brief Compute the transpose matrix + @return pointer to the transpose Matrix + @warning Memory is allocated for the new matrix (need to be freed) + */ + Matrix<T> *transpose() const { + Matrix<T> *out = new Matrix<T>(ncols, nrows); + for (unsigned int i = 0; i < ncols; i++) { + for (unsigned int j = 0; j < nrows; j++) { + out->data[i * nrows + j] = data[j * ncols + i]; + } + } + return out; + } + + /** + @brief Compute the product of matrices + @return pointer to the Matrix resulting of the product + @warning Memory is allocated for the new matrix (need to be freed) + @throws runtime_error if the matrices have wrong dimensions + */ + Matrix<T> *product(Matrix const *mat) const { + if (ncols != mat->nrows) + throw std::runtime_error("Wrong dimensions for matrix product"); + + Matrix<T> *out = new Matrix<T>(nrows, mat->ncols); + for (unsigned int i = 0; i < nrows; i++) { + for (unsigned int j = 0; j < mat->ncols; j++) { + out->data[i * mat->ncols + j] = 0.; + for (unsigned int k = 0; k < ncols; k++) { + out->data[i * mat->ncols + j] += + data[i * ncols + k] * mat->data[k * mat->ncols + j]; + } + } + } + return out; + } + + /** + @brief Compute the Pseudo-Inverse of a Matrix + @param det Determinant (computed with the inversion) + @return pointer to the inverse Matrix + @warning Memory is allocated for the new matrix (need to be freed) + */ + Matrix<T> *pinv(double *det) const { + Matrix<T> *inverse = NULL; + if (nrows == ncols) { + inverse = gauss_jordan_inverse(det); + if (inverse) { + return inverse; + } + } + + inverse = new Matrix<T>(ncols, nrows); + Matrix<T> *transp, *prod, *dst; + transp = this->transpose(); + if (nrows >= ncols) { + prod = transp->product(this); + dst = prod->gauss_jordan_inverse(det); + inverse = dst->product(transp); + } else { + prod = this->product(transp); + dst = prod->gauss_jordan_inverse(det); + inverse = transp->product(dst); + } + *det = 0; + delete transp; + delete prod; + delete dst; + return inverse; + } + + /** + @brief Compute the Gauss-Jordan Inverse of a Square Matrix + @param det Determinant (computed with the inversion) + @return pointer to the inverse Matrix + @warning Memory is allocated for the new matrix (need to be freed) + @throws runtime_error if the matrix is not square + @throws runtime_error if the matrix is not invertible + */ + Matrix<T> *gauss_jordan_inverse(double *det) const { + if (nrows != ncols) { + throw std::runtime_error( + "Gauss-Jordan inversion: Can't invert Non-square matrix"); + } + *det = 1.0f; + Matrix<T> mat(nrows, ncols * 2); + Matrix<T> new_mat(nrows, ncols * 2); + + unsigned int n = nrows; + + // Create matrix + for (unsigned int i = 0; i < n; i++) { + for (unsigned int j = 0; j < n; j++) { + mat._data[i * 2 * n + j] = data[i * n + j]; + } + mat._data[i * 2 * n + n + i] = 1; + } + + for (unsigned int k = 0; k < n; k++) { + unsigned int i(k); + while (std::fabs(mat._data[i * 2 * n + k]) < + kEpsilonPseudoInverse()) { + i++; + if (i == n) { + throw std::runtime_error("Non-invertible matrix"); + } + } + *det *= mat._data[i * 2 * n + k]; + + // if found > Exchange lines + if (i != k) { + mat.swap_lines(i, k); + } + + new_mat._data = mat._data; + + for (unsigned int j = 0; j < 2 * n; j++) { + new_mat._data[k * 2 * n + j] /= mat._data[k * 2 * n + k]; + } + for (i = 0; i < n; i++) { + if (i != k) { + for (unsigned int j = 0; j < 2 * n; j++) { + new_mat._data[i * 2 * n + j] -= + mat._data[i * 2 * n + k] * + new_mat._data[k * 2 * n + j]; + } + } + } + mat._data = new_mat._data; + } + + Matrix<T> *dst = new Matrix<T>(nrows, ncols); + for (unsigned int i = 0; i < n; i++) + for (unsigned int j = 0; j < n; j++) + dst->_data[i * n + j] = mat._data[i * 2 * n + n + j]; + return dst; + } + + /** + @brief Swap 2 lines of the matrix + @param i index of the first line + @param j index of the second line + */ + void swap_lines(unsigned int i, unsigned int j) { + T tmp; + for (unsigned int k = 0; k < ncols; k++) { + tmp = data[i * ncols + k]; + data[i * ncols + k] = data[j * ncols + k]; + data[j * ncols + k] = tmp; + } + } + + /** + @brief Swap 2 columns of the matrix + @param i index of the first column + @param j index of the second column + */ + void swap_columns(unsigned int i, unsigned int j) { + T tmp; + for (unsigned int k = 0; k < nrows; k++) { + tmp = data[k * ncols + i]; + data[k * ncols + i] = data[k * ncols + j]; + data[k * ncols + j] = tmp; + } + } +}; +} + +#endif \ No newline at end of file diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/distributions/xmmGaussianDistribution.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/distributions/xmmGaussianDistribution.cpp new file mode 100644 index 0000000..475f0a5 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/distributions/xmmGaussianDistribution.cpp @@ -0,0 +1,717 @@ +/* + * xmmGaussianDistribution.cpp + * + * Multivariate Gaussian Distribution + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "../common/xmmMatrix.hpp" +#include "xmmGaussianDistribution.hpp" +#include <algorithm> +#include <math.h> + +#ifdef WIN32 + +#define M_PI 3.14159265358979323846264338328 /**< pi */ +//#define max(a,b) (((a) > (b)) ? (a) : (b)) +#endif + +#pragma mark Constructors +xmm::GaussianDistribution::GaussianDistribution(bool bimodal, + unsigned int dimension_, + unsigned int dimension_input_, + CovarianceMode covariance_mode_) + : dimension(dimension_, (bimodal) ? 2 : 1), + dimension_input(dimension_input_, 0, (bimodal) ? dimension_ - 1 : 0), + covariance_mode(covariance_mode_), + bimodal_(bimodal), + covariance_determinant_(0.), + covariance_determinant_input_(0.) { + dimension.onAttributeChange(this, + &xmm::GaussianDistribution::onAttributeChange); + dimension_input.onAttributeChange( + this, &xmm::GaussianDistribution::onAttributeChange); + covariance_mode.onAttributeChange( + this, &xmm::GaussianDistribution::onAttributeChange); + allocate(); +} + +xmm::GaussianDistribution::GaussianDistribution(GaussianDistribution const& src) + : dimension(src.dimension), + dimension_input(src.dimension_input), + mean(src.mean), + covariance_mode(src.covariance_mode), + covariance(src.covariance), + bimodal_(src.bimodal_), + covariance_determinant_(src.covariance_determinant_), + inverse_covariance_(src.inverse_covariance_) { + dimension.onAttributeChange(this, + &xmm::GaussianDistribution::onAttributeChange); + dimension_input.onAttributeChange( + this, &xmm::GaussianDistribution::onAttributeChange); + covariance_mode.onAttributeChange( + this, &xmm::GaussianDistribution::onAttributeChange); + covariance_determinant_input_ = src.covariance_determinant_input_; + inverse_covariance_input_ = src.inverse_covariance_input_; + output_covariance = src.output_covariance; +} + +xmm::GaussianDistribution::GaussianDistribution(Json::Value const& root) + : covariance_determinant_(0.), covariance_determinant_input_(0.) { + bimodal_ = root.get("bimodal", false).asBool(); + dimension.set(root.get("dimension", bimodal_ ? 2 : 1).asInt()); + dimension_input.set(root.get("dimension_input", bimodal_ ? 1 : 0).asInt()); + covariance_mode.set( + static_cast<CovarianceMode>(root["covariance_mode"].asInt())); + + allocate(); + + json2vector(root["mean"], mean, dimension.get()); + json2vector(root["covariance"], covariance, + dimension.get() * dimension.get()); + + // updateInverseCovariance(); + // read from json instead of calling updateInverseCovariance() : + json2vector(root["inverse_covariance"], inverse_covariance_, + dimension.get() * dimension.get()); + covariance_determinant_ = root.get("covariance_determinant", 0.).asDouble(); + json2vector(root["inverse_covariance_input"], inverse_covariance_input_, + dimension_input.get() * dimension_input.get()); + covariance_determinant_input_ = + root.get("covariance_determinant_input", 0.).asDouble(); + + dimension.onAttributeChange(this, + &xmm::GaussianDistribution::onAttributeChange); + dimension_input.onAttributeChange( + this, &xmm::GaussianDistribution::onAttributeChange); + covariance_mode.onAttributeChange( + this, &xmm::GaussianDistribution::onAttributeChange); +} + +xmm::GaussianDistribution& xmm::GaussianDistribution::operator=( + GaussianDistribution const& src) { + if (this != &src) { + bimodal_ = src.bimodal_; + dimension = src.dimension; + dimension_input = src.dimension_input; + covariance_mode = src.covariance_mode; + + mean = src.mean; + covariance = src.covariance; + inverse_covariance_ = src.inverse_covariance_; + covariance_determinant_ = src.covariance_determinant_; + covariance_determinant_input_ = src.covariance_determinant_input_; + inverse_covariance_input_ = src.inverse_covariance_input_; + output_covariance = src.output_covariance; + } + return *this; +}; + +void xmm::GaussianDistribution::onAttributeChange(AttributeBase* attr_pointer) { + if (attr_pointer == &dimension) { + dimension_input.setLimitMax(dimension.get() - 1); + } + if (attr_pointer == &dimension || attr_pointer == &dimension_input) { + allocate(); + } + if (attr_pointer == &covariance_mode) { + if (covariance_mode.get() == CovarianceMode::Diagonal) { + std::vector<double> new_covariance(dimension.get()); + for (unsigned int d = 0; d < dimension.get(); ++d) { + new_covariance[d] = covariance[d * dimension.get() + d]; + } + covariance = new_covariance; + inverse_covariance_.resize(dimension.get()); + if (bimodal_) + inverse_covariance_input_.resize(dimension_input.get()); + } else if (covariance_mode.get() == CovarianceMode::Full) { + std::vector<double> new_covariance( + dimension.get() * dimension.get(), 0.0); + for (unsigned int d = 0; d < dimension.get(); ++d) { + new_covariance[d * dimension.get() + d] = covariance[d]; + } + covariance = new_covariance; + inverse_covariance_.resize(dimension.get() * dimension.get()); + if (bimodal_) + inverse_covariance_input_.resize(dimension_input.get() * + dimension_input.get()); + } + updateInverseCovariance(); + if (bimodal_) { + updateOutputCovariance(); + } + } + attr_pointer->changed = false; +} + +#pragma mark Likelihood & Regression +double xmm::GaussianDistribution::likelihood(const float* observation) const { + if (covariance_determinant_ == 0.0) + throw std::runtime_error("Covariance Matrix is not invertible"); + + double euclidianDistance(0.0); + if (covariance_mode.get() == CovarianceMode::Full) { + for (int l = 0; l < dimension.get(); l++) { + double tmp(0.0); + for (int k = 0; k < dimension.get(); k++) { + tmp += inverse_covariance_[l * dimension.get() + k] * + (observation[k] - mean[k]); + } + euclidianDistance += (observation[l] - mean[l]) * tmp; + } + } else { + for (int l = 0; l < dimension.get(); l++) { + euclidianDistance += inverse_covariance_[l] * + (observation[l] - mean[l]) * + (observation[l] - mean[l]); + } + } + + double p = + exp(-0.5 * euclidianDistance) / + sqrt(covariance_determinant_ * pow(2 * M_PI, double(dimension.get()))); + + if (p < 1e-180 || std::isnan(p) || std::isinf(fabs(p))) p = 1e-180; + + return p; +} + +double xmm::GaussianDistribution::likelihood_input( + const float* observation_input) const { + if (!bimodal_) + throw std::runtime_error( + "'likelihood_input' can't be used when 'bimodal_' is off."); + + if (covariance_determinant_input_ == 0.0) + throw std::runtime_error( + "Covariance Matrix of input modality is not invertible"); + + double euclidianDistance(0.0); + if (covariance_mode.get() == CovarianceMode::Full) { + for (int l = 0; l < dimension_input.get(); l++) { + double tmp(0.0); + for (int k = 0; k < dimension_input.get(); k++) { + tmp += + inverse_covariance_input_[l * dimension_input.get() + k] * + (observation_input[k] - mean[k]); + } + euclidianDistance += (observation_input[l] - mean[l]) * tmp; + } + } else { + for (int l = 0; l < dimension_input.get(); l++) { + euclidianDistance += inverse_covariance_[l] * + (observation_input[l] - mean[l]) * + (observation_input[l] - mean[l]); + } + } + + double p = exp(-0.5 * euclidianDistance) / + sqrt(covariance_determinant_input_ * + pow(2 * M_PI, double(dimension_input.get()))); + + if (p < 1e-180 || std::isnan(p) || std::isinf(fabs(p))) p = 1e-180; + + return p; +} + +double xmm::GaussianDistribution::likelihood_bimodal( + const float* observation_input, const float* observation_output) const { + if (!bimodal_) + throw std::runtime_error( + "'likelihood_bimodal' can't be used when 'bimodal_' is off."); + + if (covariance_determinant_ == 0.0) + throw std::runtime_error("Covariance Matrix is not invertible"); + + unsigned int dimension_output = dimension.get() - dimension_input.get(); + double euclidianDistance(0.0); + if (covariance_mode.get() == CovarianceMode::Full) { + for (int l = 0; l < dimension.get(); l++) { + double tmp(0.0); + for (int k = 0; k < dimension_input.get(); k++) { + tmp += inverse_covariance_[l * dimension.get() + k] * + (observation_input[k] - mean[k]); + } + for (int k = 0; k < dimension_output; k++) { + tmp += + inverse_covariance_[l * dimension.get() + + dimension_input.get() + k] * + (observation_output[k] - mean[dimension_input.get() + k]); + } + if (l < dimension_input.get()) + euclidianDistance += (observation_input[l] - mean[l]) * tmp; + else + euclidianDistance += + (observation_output[l - dimension_input.get()] - mean[l]) * + tmp; + } + } else { + for (int l = 0; l < dimension_input.get(); l++) { + euclidianDistance += inverse_covariance_[l] * + (observation_input[l] - mean[l]) * + (observation_input[l] - mean[l]); + } + for (unsigned int l = dimension_input.get(); l < dimension.get(); l++) { + euclidianDistance += + inverse_covariance_[l] * + (observation_output[l - dimension_input.get()] - mean[l]) * + (observation_output[l - dimension_input.get()] - mean[l]); + } + } + + double p = + exp(-0.5 * euclidianDistance) / + sqrt(covariance_determinant_ * pow(2 * M_PI, (double)dimension.get())); + + if (p < 1e-180 || std::isnan(p) || std::isinf(fabs(p))) p = 1e-180; + + return p; +} + +void xmm::GaussianDistribution::regression( + std::vector<float> const& observation_input, + std::vector<float>& predicted_output) const { + if (!bimodal_) + throw std::runtime_error( + "'regression' can't be used when 'bimodal_' is off."); + + unsigned int dimension_output = dimension.get() - dimension_input.get(); + predicted_output.resize(dimension_output); + + if (covariance_mode.get() == CovarianceMode::Full) { + for (int d = 0; d < dimension_output; d++) { + predicted_output[d] = mean[dimension_input.get() + d]; + for (int e = 0; e < dimension_input.get(); e++) { + float tmp = 0.; + for (int f = 0; f < dimension_input.get(); f++) { + tmp += inverse_covariance_input_[e * dimension_input.get() + + f] * + (observation_input[f] - mean[f]); + } + predicted_output[d] += + covariance[(d + dimension_input.get()) * dimension.get() + + e] * + tmp; + } + } + } else { + for (int d = 0; d < dimension_output; d++) { + predicted_output[d] = mean[dimension_input.get() + d]; + } + } +} + +#pragma mark JSON I/O +Json::Value xmm::GaussianDistribution::toJson() const { + Json::Value root; + root["bimodal"] = bimodal_; + root["dimension"] = static_cast<int>(dimension.get()); + root["dimension_input"] = static_cast<int>(dimension_input.get()); + root["covariance_mode"] = static_cast<int>(covariance_mode.get()); + root["mean"] = vector2json(mean); + root["covariance"] = vector2json(covariance); + + root["inverse_covariance"] = vector2json(inverse_covariance_); + root["covariance_determinant"] = covariance_determinant_; + root["inverse_covariance_input"] = vector2json(inverse_covariance_input_); + root["covariance_determinant_input"] = covariance_determinant_input_; + + return root; +} + +void xmm::GaussianDistribution::fromJson(Json::Value const& root) { + try { + GaussianDistribution tmp(root); + *this = tmp; + } catch (JsonException& e) { + throw e; + } +} + +#pragma mark Utilities +void xmm::GaussianDistribution::allocate() { + mean.resize(dimension.get()); + if (covariance_mode.get() == CovarianceMode::Full) { + covariance.resize(dimension.get() * dimension.get()); + inverse_covariance_.resize(dimension.get() * dimension.get()); + if (bimodal_) + inverse_covariance_input_.resize(dimension_input.get() * + dimension_input.get()); + } else { + covariance.resize(dimension.get()); + inverse_covariance_.resize(dimension.get()); + if (bimodal_) inverse_covariance_input_.resize(dimension_input.get()); + } +} + +void xmm::GaussianDistribution::regularize(std::vector<double> regularization) { + if (covariance_mode.get() == CovarianceMode::Full) { + for (int d = 0; d < dimension.get(); ++d) { + covariance[d * dimension.get() + d] += regularization[d]; + } + } else { + for (int d = 0; d < dimension.get(); ++d) { + covariance[d] += regularization[d]; + } + } +} + +void xmm::GaussianDistribution::updateInverseCovariance() { + if (covariance_mode.get() == CovarianceMode::Full) { + Matrix<double> cov_matrix(dimension.get(), dimension.get(), false); + + Matrix<double>* inverseMat; + double det; + + cov_matrix.data = covariance.begin(); + inverseMat = cov_matrix.pinv(&det); + covariance_determinant_ = det; + copy(inverseMat->data, + inverseMat->data + dimension.get() * dimension.get(), + inverse_covariance_.begin()); + delete inverseMat; + inverseMat = NULL; + + // If regression active: create inverse covariance matrix for input + // modality. + if (bimodal_) { + Matrix<double> cov_matrix_input(dimension_input.get(), + dimension_input.get(), true); + for (int d1 = 0; d1 < dimension_input.get(); d1++) { + for (int d2 = 0; d2 < dimension_input.get(); d2++) { + cov_matrix_input._data[d1 * dimension_input.get() + d2] = + covariance[d1 * dimension.get() + d2]; + } + } + inverseMat = cov_matrix_input.pinv(&det); + covariance_determinant_input_ = det; + copy(inverseMat->data, + inverseMat->data + + dimension_input.get() * dimension_input.get(), + inverse_covariance_input_.begin()); + delete inverseMat; + inverseMat = NULL; + } + } else // DIAGONAL COVARIANCE + { + covariance_determinant_ = 1.; + covariance_determinant_input_ = 1.; + for (unsigned int d = 0; d < dimension.get(); ++d) { + if (covariance[d] <= 0.0) + throw std::runtime_error("Non-invertible matrix"); + inverse_covariance_[d] = 1. / covariance[d]; + covariance_determinant_ *= covariance[d]; + if (bimodal_ && d < dimension_input.get()) { + inverse_covariance_input_[d] = 1. / covariance[d]; + covariance_determinant_input_ *= covariance[d]; + } + } + } + if (bimodal_) { + this->updateOutputCovariance(); + } +} + +void xmm::GaussianDistribution::updateOutputCovariance() { + if (!bimodal_) + throw std::runtime_error( + "'updateOutputVariances' can't be used when 'bimodal_' is off."); + + unsigned int dimension_output = dimension.get() - dimension_input.get(); + + // CASE: DIAGONAL COVARIANCE + if (covariance_mode.get() == CovarianceMode::Diagonal) { + output_covariance.resize(dimension_output); + copy(covariance.begin() + dimension_input.get(), + covariance.begin() + dimension.get(), output_covariance.begin()); + return; + } + + // CASE: FULL COVARIANCE + Matrix<double>* inverseMat; + double det; + + Matrix<double> cov_matrix_input(dimension_input.get(), + dimension_input.get(), true); + for (int d1 = 0; d1 < dimension_input.get(); d1++) { + for (int d2 = 0; d2 < dimension_input.get(); d2++) { + cov_matrix_input._data[d1 * dimension_input.get() + d2] = + covariance[d1 * dimension.get() + d2]; + } + } + inverseMat = cov_matrix_input.pinv(&det); + Matrix<double> covariance_gs(dimension_input.get(), dimension_output, true); + for (int d1 = 0; d1 < dimension_input.get(); d1++) { + for (int d2 = 0; d2 < dimension_output; d2++) { + covariance_gs._data[d1 * dimension_output + d2] = + covariance[d1 * dimension.get() + dimension_input.get() + d2]; + } + } + Matrix<double> covariance_sg(dimension_output, dimension_input.get(), true); + for (int d1 = 0; d1 < dimension_output; d1++) { + for (int d2 = 0; d2 < dimension_input.get(); d2++) { + covariance_sg._data[d1 * dimension_input.get() + d2] = + covariance[(dimension_input.get() + d1) * dimension.get() + d2]; + } + } + Matrix<double>* tmptmptmp = inverseMat->product(&covariance_gs); + Matrix<double>* covariance_mod = covariance_sg.product(tmptmptmp); + output_covariance.resize(dimension_output * dimension_output); + for (int d1 = 0; d1 < dimension_output; d1++) { + for (int d2 = 0; d2 < dimension_output; d2++) { + output_covariance[d1 * dimension_output + d2] = + covariance[(dimension_input.get() + d1) * dimension.get() + + dimension_input.get() + d2] - + covariance_mod->data[d1 * dimension_output + d2]; + } + } + delete inverseMat; + delete covariance_mod; + delete tmptmptmp; + inverseMat = NULL; + covariance_mod = NULL; + tmptmptmp = NULL; +} + +xmm::Ellipse xmm::GaussianDistribution::toEllipse(unsigned int dimension1, + unsigned int dimension2) { + if (dimension1 >= dimension.get() || dimension2 >= dimension.get()) + throw std::out_of_range("dimensions out of range"); + + Ellipse gaussian_ellipse; + gaussian_ellipse.x = mean[dimension1]; + gaussian_ellipse.y = mean[dimension2]; + + // Represent 2D covariance with square matrix + // |a b| + // |b c| + double a, b, c; + if (covariance_mode.get() == CovarianceMode::Full) { + a = covariance[dimension1 * dimension.get() + dimension1]; + b = covariance[dimension1 * dimension.get() + dimension2]; + c = covariance[dimension2 * dimension.get() + dimension2]; + } else { + a = covariance[dimension1]; + b = 0.0; + c = covariance[dimension2]; + } + + // Compute Eigen Values to get width, height and angle + double trace = a + c; + double determinant = a * c - b * b; + double eigenVal1 = 0.5 * (trace + sqrt(trace * trace - 4 * determinant)); + double eigenVal2 = 0.5 * (trace - sqrt(trace * trace - 4 * determinant)); + gaussian_ellipse.width = sqrt(5.991 * eigenVal1); + gaussian_ellipse.height = sqrt(5.991 * eigenVal2); + gaussian_ellipse.angle = atan(b / (eigenVal1 - c)); + if (isnan(gaussian_ellipse.angle)) { + gaussian_ellipse.angle = M_PI_2; + } + + return gaussian_ellipse; +} + +void xmm::GaussianDistribution::fromEllipse(Ellipse const& gaussian_ellipse, + unsigned int dimension1, + unsigned int dimension2) { + if (dimension1 >= dimension.get() || dimension2 >= dimension.get()) + throw std::out_of_range("dimensions out of range"); + + mean[dimension1] = gaussian_ellipse.x; + mean[dimension2] = gaussian_ellipse.y; + + double eigenVal1 = gaussian_ellipse.width * gaussian_ellipse.width / 5.991; + double eigenVal2 = + gaussian_ellipse.height * gaussian_ellipse.height / 5.991; + double tantheta = std::tan(gaussian_ellipse.angle); + double a, b, c; + b = (eigenVal1 - eigenVal2) * tantheta / (tantheta * tantheta + 1.); + c = eigenVal1 - b / tantheta; + a = eigenVal2 + b / tantheta; + + if (covariance_mode.get() == CovarianceMode::Full) { + covariance[dimension1 * dimension.get() + dimension1] = a; + covariance[dimension1 * dimension.get() + dimension2] = b; + covariance[dimension2 * dimension.get() + dimension1] = b; + covariance[dimension2 * dimension.get() + dimension2] = c; + } else { + covariance[dimension1] = a; + covariance[dimension2] = c; + } + updateInverseCovariance(); +} + +// void xmm::GaussianDistribution::makeBimodal(unsigned int dimension_input_) +//{ +// if (bimodal_) +// throw std::runtime_error("The model is already bimodal"); +// if (dimension_input_ >= dimension.get()) +// throw std::out_of_range("Request input dimension exceeds the current +// dimension"); +// this->bimodal_ = true; +// dimension_input.setLimitMax(dimension.get() - 1); +// dimension_input.set(dimension_input_, true); +// if (covariance_mode.get() == CovarianceMode::Full) { +// this->inverse_covariance_input_.resize(dimension_input_*dimension_input_); +// } else { +// this->inverse_covariance_input_.resize(dimension_input_); +// } +// this->updateInverseCovariance(); +// this->updateOutputVariance(); +//} +// +// void xmm::GaussianDistribution::makeUnimodal() +//{ +// if (!bimodal_) +// throw std::runtime_error("The model is already unimodal"); +// this->bimodal_ = false; +// this->dimension_input.set(0, true); +// this->inverse_covariance_input_.clear(); +//} +// +// xmm::GaussianDistribution +// xmm::GaussianDistribution::extractSubmodel(std::vector<unsigned int>& +// columns) +// const +//{ +// if (columns.size() > dimension.get()) +// throw std::out_of_range("requested number of columns exceeds the +// dimension of the current model"); +// for (unsigned int column=0; column<columns.size(); ++column) { +// if (columns[column] >= dimension.get()) +// throw std::out_of_range("Some column indices exceeds the dimension +// of the current model"); +// } +// size_t new_dim =columns.size(); +// GaussianDistribution target_distribution(NONE, +// static_cast<unsigned int>(new_dim), 0, relative_regularization, +// absolute_regularization); +// target_distribution.allocate(); +// for (unsigned int new_index1=0; new_index1<new_dim; ++new_index1) { +// unsigned int col_index1 = columns[new_index1]; +// target_distribution.mean[new_index1] = mean[col_index1]; +// target_distribution.scale[new_index1] = scale[col_index1]; +// if (covariance_mode.get() == CovarianceMode::Full) { +// for (unsigned int new_index2=0; new_index2<new_dim; ++new_index2) +// { +// unsigned int col_index2 = columns[new_index2]; +// target_distribution.covariance[new_index1*new_dim+new_index2] +// = covariance[col_index1*dimension.get()+col_index2]; +// } +// } else { +// target_distribution.covariance[new_index1] = +// covariance[col_index1]; +// } +// } +// try { +// target_distribution.updateInverseCovariance(); +// } catch (std::exception const& e) { +// } +// return target_distribution; +//} +// +// xmm::GaussianDistribution xmm::GaussianDistribution::extractSubmodel_input() +// const +//{ +// if (!bimodal_) +// throw std::runtime_error("The distribution needs to be bimodal"); +// std::vector<unsigned int> columns_input(dimension_input.get()); +// for (unsigned int i=0; i<dimension_input.get(); ++i) { +// columns_input[i] = i; +// } +// return extractSubmodel(columns_input); +//} +// +// xmm::GaussianDistribution xmm::GaussianDistribution::extractSubmodel_output() +// const +//{ +// if (!bimodal_) +// throw std::runtime_error("The distribution needs to be bimodal"); +// std::vector<unsigned int> columns_output(dimension.get() - +// dimension_input.get()); +// for (unsigned int i=dimension_input.get(); i<dimension.get(); ++i) { +// columns_output[i-dimension_input.get()] = i; +// } +// return extractSubmodel(columns_output); +//} +// +// xmm::GaussianDistribution xmm::GaussianDistribution::extract_inverse_model() +// const +//{ +// if (!bimodal_) +// throw std::runtime_error("The distribution needs to be bimodal"); +// std::vector<unsigned int> columns(dimension.get()); +// for (unsigned int i=0; i<dimension.get()-dimension_input.get(); ++i) { +// columns[i] = i + dimension_input.get(); +// } +// for (unsigned int i=dimension.get()-dimension_input.get(), j=0; +// i<dimension.get(); ++i, ++j) { +// columns[i] = j; +// } +// GaussianDistribution target_distribution = extractSubmodel(columns); +// target_distribution.makeBimodal(dimension.get() - dimension_input.get()); +// return target_distribution; +//} + +xmm::Ellipse xmm::covariance2ellipse(double c_xx, double c_xy, double c_yy) { + Ellipse gaussian_ellipse; + gaussian_ellipse.x = 0.; + gaussian_ellipse.y = 0.; + + // Compute Eigen Values to get width, height and angle + double trace = c_xx + c_yy; + double determinant = c_xx * c_yy - c_xy * c_xy; + double eigenVal1 = 0.5 * (trace + sqrt(trace * trace - 4 * determinant)); + double eigenVal2 = 0.5 * (trace - sqrt(trace * trace - 4 * determinant)); + gaussian_ellipse.width = sqrt(5.991 * eigenVal1); + gaussian_ellipse.height = sqrt(5.991 * eigenVal2); + gaussian_ellipse.angle = atan(c_xy / (eigenVal1 - c_yy)); + if (isnan(gaussian_ellipse.angle)) { + gaussian_ellipse.angle = M_PI_2; + } + + return gaussian_ellipse; +} + +template <> +void xmm::checkLimits<xmm::GaussianDistribution::CovarianceMode>( + xmm::GaussianDistribution::CovarianceMode const& value, + xmm::GaussianDistribution::CovarianceMode const& limit_min, + xmm::GaussianDistribution::CovarianceMode const& limit_max) { + if (value < limit_min || value > limit_max) + throw std::domain_error( + "Attribute value out of range. Range: [" + + std::to_string(static_cast<int>(limit_min)) + " ; " + + std::to_string(static_cast<int>(limit_max)) + "]"); +} + +template <> +xmm::GaussianDistribution::CovarianceMode +xmm::Attribute<xmm::GaussianDistribution::CovarianceMode>::defaultLimitMax() { + return xmm::GaussianDistribution::CovarianceMode::Diagonal; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/distributions/xmmGaussianDistribution.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/distributions/xmmGaussianDistribution.hpp new file mode 100644 index 0000000..646e156 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/distributions/xmmGaussianDistribution.hpp @@ -0,0 +1,376 @@ +/* + * xmmGaussianDistribution.hpp + * + * Multivariate Gaussian Distribution + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmGaussianDistribution_h +#define xmmGaussianDistribution_h + +#include "../common/xmmAttribute.hpp" +#include "../common/xmmJson.hpp" + +namespace xmm { +/** + @defgroup Distributions [Core] Distributions + */ + +/** + @ingroup Distributions + @brief Structure for storing Ellipse parameters + */ +struct Ellipse { + /** + @brief x center position + */ + float x; + + /** + @brief y center position + */ + float y; + + /** + @brief width: minor axis length + */ + float width; + + /** + @brief height: major axis length + */ + float height; + + /** + @brief angle (radians) + */ + float angle; +}; + +/** + @ingroup Distributions + @brief Multivariate Gaussian Distribution + @details Full covariance, optionally multimodal with support for regression + */ +class GaussianDistribution : public Writable { + public: + /** + @brief Covariance Mode + */ + enum class CovarianceMode { + /** + @brief Full covariance + */ + Full = 0, + + /** + @brief Diagonal covariance (diagonal matrix) + */ + Diagonal = 1 + }; + + /** + @brief Default Constructor + @param bimodal specify if the distribution is bimodal for use in regression + @param dimension dimension of the distribution + @param dimension_input dimension of the input modality in bimodal mode. + @param covariance_mode covariance mode (full vs diagonal) + */ + GaussianDistribution(bool bimodal = false, unsigned int dimension = 1, + unsigned int dimension_input = 0, + CovarianceMode covariance_mode = CovarianceMode::Full); + + /** + @brief Copy constructor + @param src source distribution + */ + GaussianDistribution(GaussianDistribution const& src); + + /** + @brief Constructor from Json Structure + @param root Json Value + */ + explicit GaussianDistribution(Json::Value const& root); + + /** + @brief Assignment + @param src source distribution + */ + GaussianDistribution& operator=(GaussianDistribution const& src); + + /** @name Likelihood & Regression */ + ///@{ + + /** + @brief Get Likelihood of a data vector + @param observation data observation (must be of size @a dimension) + @return likelihood + @throws runtime_error if the Covariance Matrix is not invertible + */ + double likelihood(const float* observation) const; + + /** + @brief Get Likelihood of a data vector for input modality + @param observation_input observation (must be of size @a dimension_input) + @return likelihood + @throws runtime_error if the Covariance Matrix of the input modality is not + invertible + @throws runtime_error if the model is not bimodal + */ + double likelihood_input(const float* observation_input) const; + + /** + @brief Get Likelihood of a data vector for bimodal mode + @param observation_input observation of the input modality + @param observation_output observation of the output modality + @throws runtime_error if the Covariance Matrix is not invertible + @throws runtime_error if the model is not bimodal + @return likelihood + */ + double likelihood_bimodal(const float* observation_input, + const float* observation_output) const; + + /** + @brief Linear Regression using the Gaussian Distribution (covariance-based) + @param observation_input input observation (must be of size: @a + dimension_input) + @param predicted_output predicted output vector (size: + dimension-dimension_input) + @throws runtime_error if the model is not bimodal + */ + void regression(std::vector<float> const& observation_input, + std::vector<float>& predicted_output) const; + + ///@} + + /** @name Utilities */ + ///@{ + + /** + @brief Add @a offset to the diagonal of the covariance matrix + @details Ensures convergence + generalization on few examples + */ + void regularize(std::vector<double> regularization); + + /** + @brief Compute inverse covariance matrix + @throws runtime_error if the covariance matrix is not invertible + */ + void updateInverseCovariance(); + + /** + @brief Compute the 68%?? Confidence Interval ellipse of the Gaussian + @details the ellipse is 2D, and is therefore projected over 2 axes + @param dimension1 index of the first axis + @param dimension2 index of the second axis + @throws out_of_range if the dimensions are out of bounds + @return ellipse parameters + */ + Ellipse toEllipse(unsigned int dimension1, unsigned int dimension2); + + /** + @brief Sets the parameters of the Gaussian distribution according to the + 68%?? Confidence Interval ellipse + @details the ellipse is 2D, and is therefore projected over 2 axes + @param gaussian_ellipse 68% Confidence Interval ellipse parameters (1x std) + @param dimension1 index of the first axis + @param dimension2 index of the second axis + @throws out_of_range if the dimensions are out of bounds + */ + void fromEllipse(Ellipse const& gaussian_ellipse, unsigned int dimension1, + unsigned int dimension2); + + ///@} + + /** @name JSON I/O */ + ///@{ + + /** + @brief Write the object to a JSON Structure + @return Json value containing the object's information + */ + Json::Value toJson() const; + + /** + @brief Read the object from a JSON Structure + @param root JSON value containing the object's information + @throws JsonException if the JSON value has a wrong format + */ + void fromJson(Json::Value const& root); + + ///@} + + // /** @name Conversion & Extraction */ + // ///@{ + // + // /** + // @brief Convert to bimodal distribution in place + // @param dimension_input dimension of the input modality + // @throws runtime_error if the model is already bimodal + // @throws out_of_range if the requested input dimension is too + // large + // */ + // void makeBimodal(unsigned int dimension_input); + // + // /** + // @brief Convert to unimodal distribution in place + // @throws runtime_error if the model is already unimodal + // */ + // void makeUnimodal(); + // + // /** + // @brief extract a sub-distribution with the given columns + // @param columns columns indices in the target order + // @throws runtime_error if the model is training + // @throws out_of_range if the number or indices of the requested + // columns exceeds the current dimension + // @return a Gaussian Distribution from the current model + // considering only the target columns + // */ + // GaussianDistribution extractSubmodel(std::vector<unsigned int>& + // columns) const; + // + // /** + // @brief extract the sub-distribution of the input modality + // @throws runtime_error if the model is training or if it is not + // bimodal + // @return a unimodal Gaussian Distribution of the input modality + // from the current bimodal model + // */ + // GaussianDistribution extractSubmodel_input() const; + // + // /** + // @brief extract the sub-distribution of the output modality + // @throws runtime_error if the model is training or if it is not + // bimodal + // @return a unimodal Gaussian Distribution of the output modality + // from the current bimodal model + // */ + // GaussianDistribution extractSubmodel_output() const; + // + // /** + // @brief extract the model with reversed input and output + // modalities + // @throws runtime_error if the model is training or if it is not + // bimodal + // @return a bimodal Gaussian Distribution that swaps the input and + // output modalities + // */ + // GaussianDistribution extract_inverse_model() const; + // + // ///@} + + /** + @brief Total Dimension of the multivariate normal + */ + Attribute<unsigned int> dimension; + + /** + @brief Input Dimension of the multivariate normal + */ + Attribute<unsigned int> dimension_input; + + /** + @brief Mean of the Gaussian Distribution + */ + std::vector<double> mean; + + /** + @brief Covariance Mode + */ + Attribute<CovarianceMode> covariance_mode; + + /** + @brief Covariance Matrix of the Gaussian Distribution + */ + std::vector<double> covariance; + + /** + @brief Conditional Output Variance (updated when covariances matrices are + inverted) + */ + std::vector<double> output_covariance; + + protected: + /** + @brief Resize Mean and Covariance Vectors to appropriate dimension. + */ + void allocate(); + + /** + @brief notification function called when a member attribute is changed + */ + virtual void onAttributeChange(AttributeBase* attr_pointer); + + /** + @brief Compute the conditional variance vector of the output modality + (conditioned over the input). + @throws runtime_error if the model is not bimodal + */ + void updateOutputCovariance(); + + /** + @brief Defines if regression parameters need to be computed + */ + bool bimodal_; + + /** + @brief Determinant of the covariance matrix + */ + double covariance_determinant_; + + /** + @brief Inverse covariance matrix + */ + std::vector<double> inverse_covariance_; + + /** + @brief Determinant of the covariance matrix of the input modality + */ + double covariance_determinant_input_; + + /** + @brief Inverse covariance matrix of the input modality + */ + std::vector<double> inverse_covariance_input_; +}; + +Ellipse covariance2ellipse(double c_xx, double c_xy, double c_yy); + +template <> +void checkLimits<GaussianDistribution::CovarianceMode>( + GaussianDistribution::CovarianceMode const& value, + GaussianDistribution::CovarianceMode const& limit_min, + GaussianDistribution::CovarianceMode const& limit_max); + +template <> +GaussianDistribution::CovarianceMode +Attribute<GaussianDistribution::CovarianceMode>::defaultLimitMax(); +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModel.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModel.hpp new file mode 100644 index 0000000..522660b --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModel.hpp @@ -0,0 +1,633 @@ +/* + * xmmModel.hpp + * + * Probabilistic machine learning model for multiclass recognition and + * regression + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmModel_h +#define xmmModel_h + +#include "xmmModelConfiguration.hpp" +#include "xmmModelResults.hpp" +#include "xmmModelSingleClass.hpp" +#include <atomic> +#include <thread> + +namespace xmm { +/** + @ingroup Model + @brief Probabilistic machine learning model for multiclass recognition and + regression + @tparam SingleClassModel Type of the associated Single-class Model + @tparam ModelType Model Type Name + */ +template <typename SingleClassModel, typename ModelType> +class Model : public Writable { + public: + /** + @brief Constructor + @param bimodal use true for a use with Regression / Generation. + */ + Model(bool bimodal = false) + : shared_parameters(std::make_shared<SharedParameters>()), + cancel_required_(false), + is_training_(false), + is_joining_(false), + models_still_training_(0) { + shared_parameters->bimodal.set(bimodal); + if (shared_parameters->bimodal.get()) { + shared_parameters->dimension.set(2, true); + shared_parameters->dimension_input.set(1, true); + } else { + shared_parameters->dimension.set(1, true); + shared_parameters->dimension_input.set(0, true); + } + } + + /** + @brief Copy Constructor + @param src Source Model + */ + Model(Model<SingleClassModel, ModelType> const& src) + : shared_parameters( + std::make_shared<SharedParameters>(*src.shared_parameters)), + configuration(src.configuration), + training_events(src.training_events), + cancel_required_(false), + is_training_(false), + is_joining_(false), + models_still_training_(0) { + if (src.is_training_) + throw std::runtime_error( + "Cannot copy: source model is still training"); + models = src.models; + for (auto& model : models) { + model.second.training_events.removeListeners(); + model.second.training_events.addListener( + this, + &xmm::Model<SingleClassModel, ModelType>::onTrainingEvent); + } + } + + /** + @brief Constructor from Json Structure + @param root Json Value + */ + explicit Model(Json::Value const& root) + : shared_parameters(std::make_shared<SharedParameters>()), + cancel_required_(false), + is_training_(false), + is_joining_(false), + models_still_training_(0) { + shared_parameters->fromJson(root["shared_parameters"]); + configuration.fromJson(root["configuration"]); + models.clear(); + for (auto p : root["models"]) { + std::string l = p["label"].asString(); + models.insert(std::pair<std::string, SingleClassModel>( + l, SingleClassModel(shared_parameters, p))); + models[l].training_events.removeListeners(); + models[l].training_events.addListener( + this, + &xmm::Model<SingleClassModel, ModelType>::onTrainingEvent); + } + } + + /** + @brief Assignment + @param src Source Model + */ + Model<SingleClassModel, ModelType>& operator=( + Model<SingleClassModel, ModelType> const& src) { + if (this != &src) { + if (is_training_) + throw std::runtime_error( + "Cannot copy: target model is still training"); + if (src.is_training_) + throw std::runtime_error( + "Cannot copy: source model is still training"); + shared_parameters = + std::make_shared<SharedParameters>(*src.shared_parameters); + configuration = src.configuration; + training_events = src.training_events; + is_joining_ = false; + is_training_ = false; + cancel_required_ = false; + models_still_training_ = 0; + + models.clear(); + models = src.models; + for (auto& model : this->models) { + model.second.training_events.removeListeners(); + model.second.training_events.addListener( + this, + &xmm::Model<SingleClassModel, ModelType>::onTrainingEvent); + } + } + return *this; + } + + /** + @brief Destructor + */ + virtual ~Model() { + cancelTraining(); + clear(); + } + + /** @name Class Manipulation */ + ///@{ + + /** + @brief Get the number of classes in the model + @return the number of classes in the model + */ + unsigned int size() const { + return static_cast<unsigned int>(models.size()); + } + + /** + @brief Checks if a class exists + @param label class label + @return true if the class labeled 'label' exists + */ + bool hasClass(std::string const& label) const { + checkTraining(); + return (models.count(label) > 0); + } + + /** + @brief Checks if a class exists + @param label class label + @return true if the class labeled 'label' exists + */ + int getIndex(std::string const& label) const { + checkTraining(); + int i(-1); + for (auto& m : models) { + i++; + if (m.first == label) { + return i; + } + } + return -1; + } + + /** + @brief Remove a specific class by label + @param label label of the class to remove + */ + virtual void removeClass(std::string const& label) { + while (is_joining_) { + } + cancelTraining(label); + auto it = models.find(label); + if (it == models.end()) + throw std::out_of_range("Class " + label + " does not exist"); + models.erase(it); + reset(); + } + + /** + @brief Remove all classes + */ + virtual void clear() { + if (is_training_) cancelTraining(); + models.clear(); + reset(); + } + + ///@} + + /** @name Training */ + ///@{ + + /** + @brief Checks if the model is trained (training finished and not empty) + */ + bool trained() const { return (!is_training_ && size() > 0); } + + /** + @brief Checks if the model is still training + */ + bool training() const { return is_training_; } + + /** + @brief Train all classes from the training set passed in argument + @param trainingSet Training Set + */ + virtual void train(TrainingSet* trainingSet) { + if (!trainingSet) return; + cancelTraining(); + clear(); + + is_training_ = true; + + // Fetch training set parameters + shared_parameters->dimension.set(trainingSet->dimension.get()); + if (shared_parameters->bimodal.get()) { + shared_parameters->dimension_input.set( + trainingSet->dimension_input.get()); + } + shared_parameters->column_names.set(trainingSet->column_names.get()); + + // Update models + bool contLoop(true); + while (contLoop) { + contLoop = false; + for (auto it = models.begin(); it != models.end(); ++it) { + if (trainingSet->labels().count(it->first) == 0) { + models.erase(it->first); + contLoop = true; + break; + } + } + } + for (typename std::set<std::string>::iterator it = + trainingSet->labels().begin(); + it != trainingSet->labels().end(); ++it) { + addModelForClass(*it); + } + + // Start class training + for (auto it = this->models.begin(); it != this->models.end(); ++it) { + it->second.is_training_ = true; + it->second.cancel_training_ = false; + models_still_training_++; + if ((configuration.multithreading == + MultithreadingMode::Parallel) || + (configuration.multithreading == + MultithreadingMode::Background)) { + training_threads_[it->first] = + std::thread(&SingleClassModel::train, &it->second, + trainingSet->getPhrasesOfClass(it->first)); + } else { + it->second.train(trainingSet->getPhrasesOfClass(it->first)); + } + } + if (configuration.multithreading == MultithreadingMode::Parallel) { + joinTraining(); + } + if (configuration.multithreading == MultithreadingMode::Sequential) { + is_training_ = false; + } + } + + /** + @brief Train a specific class from the training set passed in argument + @param trainingSet Training Set + @param label label of the class to train + @throw out_of_range if the label does not exist + @throw runtime_error if the dimensions of the training set don't match the + dimensions + of the current model + */ + virtual void train(TrainingSet* trainingSet, std::string const& label) { + if (!trainingSet) return; + if (trainingSet->labels().count(label) == 0) + throw std::out_of_range("Class " + label + " does not exist"); + + // Cancel Training of the class + cancelTraining(label); + + // Check Consistency of the new Training Set + if (size() > 0) { + if ((shared_parameters->dimension.get() != + trainingSet->dimension.get()) || + (shared_parameters->bimodal.get() && + (shared_parameters->dimension_input.get() != + trainingSet->dimension_input.get()))) + throw std::runtime_error( + "Dimensions of the new Training Set do not match existing " + "models"); + } + + is_training_ = true; + + // Fetch training set parameters + shared_parameters->dimension.set(trainingSet->dimension.get()); + if (shared_parameters->bimodal.get()) { + shared_parameters->dimension_input.set( + trainingSet->dimension_input.get()); + } + shared_parameters->column_names.set(trainingSet->column_names.get()); + + addModelForClass(label); + + // Start class training + models[label].is_training_ = true; + models[label].cancel_training_ = false; + models_still_training_++; + if (configuration.multithreading == MultithreadingMode::Sequential) { + models[label].train(trainingSet->getPhrasesOfClass(label)); + } else { + training_threads_[label] = + std::thread(&SingleClassModel::train, &(this->models[label]), + trainingSet->getPhrasesOfClass(label)); + } + if (configuration.multithreading == MultithreadingMode::Parallel) { + joinTraining(); + } + if (configuration.multithreading == MultithreadingMode::Sequential) { + is_training_ = false; + } + } + + /** + @brief Cancels the training of all models + */ + void cancelTraining() { + if (is_training_) { + for (auto& it : this->models) { + cancel_required_ = true; + it.second.cancelTraining(); + while (it.second.isTraining()) { + } + } + joinTraining(); + } + cancel_required_ = false; + } + + /** + @brief Cancels the training of a given class + @param label label of the class to cancel + */ + void cancelTraining(std::string const& label) { + if (is_training_ && (this->models.count(label) > 0)) { + cancel_required_ = true; + models[label].cancelTraining(); + while (models[label].isTraining()) { + } + if (models_still_training_ == 0) { + joinTraining(); + } + } + cancel_required_ = false; + } + + ///@} + + /** @name Performance */ + ///@{ + + /** + @brief Resets the fitering process (recognition or regression) + */ + virtual void reset() { + checkTraining(); + // checkConfigurationChanges(); + for (auto it = this->models.begin(); it != this->models.end(); ++it) { + it->second.reset(); + } + } + + /** + @brief filters a incoming observation (performs recognition or regression) + @details the results of the inference process are stored in the results + attribute + @param observation observation vector + */ + virtual void filter(std::vector<float> const& observation) { + checkTraining(); + // checkConfigurationChanges(); + } + + ///@} + + /** @name Json I/O */ + ///@{ + + /** + @brief Write the object to a JSON Structure + @return Json value containing the object's information + */ + virtual Json::Value toJson() const { + Json::Value root; + root["shared_parameters"] = shared_parameters->toJson(); + root["configuration"] = configuration.toJson(); + root["models"].resize(static_cast<Json::ArrayIndex>(size())); + Json::ArrayIndex modelIndex(0); + for (auto& it : models) { + root["models"][modelIndex++] = it.second.toJson(); + } + return root; + } + + /** + @brief Read the object from a JSON Structure + @param root JSON value containing the object's information + @throws JsonException if the JSON value has a wrong format + */ + void fromJson(Json::Value const& root) { + try { + EventGenerator<TrainingEvent> _tmp_training_events(training_events); + Model<SingleClassModel, ModelType> tmp(root); + *this = tmp; + training_events = _tmp_training_events; + } catch (JsonException& e) { + throw e; + } + } + + ///@} + + /** + @brief Set of Parameters shared among classes + */ + std::shared_ptr<SharedParameters> shared_parameters; + + /** + @brief Configuration (default and class-specific parameters) + */ + Configuration<ModelType> configuration; + + /** + @brief Generator for training process events + */ + EventGenerator<TrainingEvent> training_events; + + /** + @brief models stored in a map. Each Model is associated with a label + */ + std::map<std::string, SingleClassModel> models; + + protected: + /** + @brief Finishes the background training process by joining threads and + deleting the models which training failed + */ + virtual void joinTraining() { + if (!is_training_) return; + bool expectedState(false); + if (is_joining_.compare_exchange_weak(expectedState, true)) { + while (!training_threads_.empty()) { + training_threads_.begin()->second.join(); + training_threads_.erase(training_threads_.begin()); + } + bool classesUntrained(true); + while (classesUntrained) { + classesUntrained = false; + for (auto it = this->models.begin(); it != this->models.end(); + it++) { + if (it->second.training_status.status == + TrainingEvent::Status::Cancel || + it->second.training_status.status == + TrainingEvent::Status::Error) { + models.erase(it); + classesUntrained = true; + break; + } + } + } + is_joining_ = false; + is_training_ = false; + reset(); + TrainingEvent event(this, "", TrainingEvent::Status::Alldone); + training_events.notifyListeners(event); + } else { + while (is_joining_) { + } + } + } + + /** + @brief Monitors the training of each Model of the group. + */ + void onTrainingEvent(TrainingEvent const& e) { + event_mutex_.lock(); + TrainingEvent event(e); + event.model = this; + training_events.notifyListeners(event); + if (e.status != TrainingEvent::Status::Run) { + models_still_training_--; + ((SingleClassModel*)e.model)->is_training_ = false; + if (configuration.multithreading == + MultithreadingMode::Background && + !is_joining_ && // avoid to call "joinTraining" if already + // called by the main thread + !cancel_required_ && // avoid to call "joinTraining" if cancel + // required by the main thread + models_still_training_ == 0) { + is_joining_ = false; + std::thread(&Model<SingleClassModel, ModelType>::joinTraining, + this) + .detach(); + } + } + event_mutex_.unlock(); + } + + /** + @brief Checks if the Model is still training + @throws runtime_error if the Model is training. + */ + inline void checkTraining() const { + if (is_training_) throw std::runtime_error("The Model is training"); + while (is_joining_) { + } + } + + /** + @brief Look for configuration changes and throws an exception if the model + is not up to date. + */ + inline void checkConfigurationChanges() const { + bool configChanged(false); + if (configuration.changed) configChanged = true; + for (auto& config : configuration.class_parameters_) { + if (config.second.changed) configChanged = true; + } + if (configChanged) { + throw std::runtime_error( + "Configuration has changed, models need to be trained."); + } + } + + /** + @brief Update training set for a specific label + @param label label of the sub-training set to update + @throws out_of_range if the label does not exist + */ + virtual void addModelForClass(std::string const& label) { + if (models.count(label) > 0 && models[label].isTraining()) + throw std::runtime_error("The Model is already training"); + + if (models.find(label) == models.end()) { + models.insert(std::pair<std::string, SingleClassModel>( + label, shared_parameters)); + models[label].training_events.addListener( + this, + &xmm::Model<SingleClassModel, ModelType>::onTrainingEvent); + models[label].label = label; + } + if (configuration.class_parameters_.count(label) > 0) { + models[label].parameters = configuration.class_parameters_[label]; + } else { + models[label].parameters = configuration; + } + } + + /** + @brief Training Threads + */ + std::map<std::string, std::thread> training_threads_; + + /** + @brief locks the Model while the models are training + Used in cancel method + */ + std::atomic<bool> cancel_required_; + + /** + @brief locks the Model while the models are training + Used in cancel method + */ + std::atomic<bool> is_training_; + + /** + @brief specifies if a thread for joining the training process has been + launched. + */ + std::atomic<bool> is_joining_; + + /** + @brief Number of models that are still training + */ + unsigned int models_still_training_; + + /** + @brief Mutex that prevents concurrent calls to onEvent() + */ + std::mutex event_mutex_; +}; +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelConfiguration.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelConfiguration.hpp new file mode 100644 index 0000000..1c77826 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelConfiguration.hpp @@ -0,0 +1,226 @@ +/* + * xmmModelConfiguration.hpp + * + * Configuration for probabilistic models with multiple classes + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmModelConfiguration_h +#define xmmModelConfiguration_h + +#include "xmmModelParameters.hpp" +#include <map> + +namespace xmm { +/** + @brief Regression estimator for multiclass models + */ +enum class MultiClassRegressionEstimator { + /** + @brief the output is estimated as the output values of the likeliest class + */ + Likeliest = 0, + + /** + @brief the output is estimated as a weight sum of the output values of each + class + */ + Mixture = 1 +}; + +/** + @brief Multithreading mode for multiple-class training + */ +enum class MultithreadingMode { + /** + @brief No multithreading: all classes are trained sequentially + */ + Sequential, + + /** + @brief Multithreading: all classes are trained in parallel in different + threads. the train + function returns after all classes have finished training. + */ + Parallel, + + /** + @brief Multithreading in Background: all classes are trained in parallel in + different threads. the train + function returns after the training has started + @warning when the train function return, models are still training in + background. + */ + Background +}; + +/** + @ingroup Model + @brief Model configuration + @details The object contains both default parameters and class-specific + parameters + */ +template <typename ModelType> +class Configuration : public ClassParameters<ModelType> { + public: + template <typename SingleClassModel, typename ModelType_> + friend class Model; + + /** + @brief Default Constructor + */ + Configuration() + : multithreading(MultithreadingMode::Parallel), + multiClass_regression_estimator( + MultiClassRegressionEstimator::Likeliest) {} + + /** + @brief Copy Constructor + @param src Source Object + */ + Configuration(Configuration const& src) + : ClassParameters<ModelType>(src), + multithreading(src.multithreading), + multiClass_regression_estimator(src.multiClass_regression_estimator), + class_parameters_(src.class_parameters_) {} + + /** + @brief Constructor from Json Structure + @param root Json Value + */ + explicit Configuration(Json::Value const& root) { + ClassParameters<ModelType>::fromJson(root["default_parameters"]); + multithreading = static_cast<MultithreadingMode>( + root.get("multithreading", 0).asInt()); + multiClass_regression_estimator = + static_cast<MultiClassRegressionEstimator>( + root.get("multiClass_regression_estimator", 0).asInt()); + class_parameters_.clear(); + for (auto p : root["class_parameters"]) { + class_parameters_[p["label"].asString()].fromJson(p); + } + } + + /** + @brief Assignment + @param src Source Object + */ + Configuration& operator=(Configuration const& src) { + if (this != &src) { + ClassParameters<ModelType>::operator=(src); + class_parameters_ = src.class_parameters_; + multithreading = src.multithreading; + multiClass_regression_estimator = + src.multiClass_regression_estimator; + } + return *this; + } + + /** + @brief access the parameters of a given class by label + @details If the parameters have not been edited for this class yet, they + are set to the + default parameters. + @param label class label + @return a reference to the parameters of the given class + */ + ClassParameters<ModelType>& operator[](std::string label) { + if (class_parameters_.count(label) == 0) { + class_parameters_[label] = *this; + } + return class_parameters_[label]; + } + + /** + @brief Reset the parameters of all classes to default + */ + void reset() { class_parameters_.clear(); } + + /** + @brief Reset the parameters of a given classes to default + @param label class label + */ + void reset(std::string label) { + if (class_parameters_.count(label) > 0) { + class_parameters_.erase(label); + } + } + + /** + @brief Write the object to a JSON Structure + @return Json value containing the object's information + */ + virtual Json::Value toJson() const { + Json::Value root; + root["multithreading"] = static_cast<int>(multithreading); + root["multiClass_regression_estimator"] = + static_cast<int>(multiClass_regression_estimator); + root["default_parameters"] = ClassParameters<ModelType>::toJson(); + int i = 0; + for (auto p : class_parameters_) { + root["class_parameters"][i] = p.second.toJson(); + root["class_parameters"][i]["label"] = p.first; + i++; + } + return root; + } + + /** + @brief Read the object from a JSON Structure + @param root JSON value containing the object's information + @throws JsonException if the JSON value has a wrong format + */ + virtual void fromJson(Json::Value const& root) { + try { + Configuration<ModelType> tmp(root); + *this = tmp; + } catch (JsonException& e) { + throw e; + } + } + + /** + @brief Multithreading Training Mode + */ + MultithreadingMode multithreading; + + /** + @brief Regression mode for multiple class (prediction from likeliest class + vs interpolation) + */ + MultiClassRegressionEstimator multiClass_regression_estimator; + + protected: + /** + @brief Parameters for each class + */ + std::map<std::string, ClassParameters<ModelType>> class_parameters_; +}; +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelParameters.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelParameters.hpp new file mode 100644 index 0000000..aec8752 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelParameters.hpp @@ -0,0 +1,80 @@ +/* + * xmmModelParameters.hpp + * + * Model Parameters for each class (label) + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmModelParameters_h +#define xmmModelParameters_h + +#include "../common/xmmAttribute.hpp" +#include "../common/xmmJson.hpp" + +namespace xmm { +/** + @ingroup Model + @brief Class-specific Model Parameters. + @details this structure is then encapsulated in a Configuration object that + propagates default parameters + or class-specific parameters to the SingleClassModel. + */ +template <typename ModelType> +class ClassParameters : public Writable { + public: + /** + @brief Default Constructor + */ + ClassParameters() : changed(true) {} + + /** + @brief Copy Constructor + @param src Source Object + */ + ClassParameters(ClassParameters const& src) : changed(true) {} + + /** + @brief Constructor from Json Structure + @param root Json value + */ + explicit ClassParameters(Json::Value const& root) : changed(true) {} + + /** + @brief Assignment + @param src Source Object + */ + ClassParameters& operator=(ClassParameters const& src) { changed = true; } + + /** + @brief specifies if parameters have changed (model is invalid) + */ + bool changed; +}; +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelResults.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelResults.hpp new file mode 100644 index 0000000..c65fd38 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelResults.hpp @@ -0,0 +1,125 @@ +/* + * xmmModelResults.hpp + * + * Results structures for probabilistic models + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmModelResults_h +#define xmmModelResults_h + +#include <string> +#include <vector> + +namespace xmm { +/** + @ingroup Model + @brief Class-specific Results of the filtering/inference process. + @details The default results contain both likelihoods for recognition + and vectors for the results of a regression + */ +template <typename ModelType> +struct ClassResults { + /** + @brief Instantaneous likelihood + */ + double instant_likelihood; + + /** + @brief Cumulative log-likelihood computed on a sliding window + */ + double log_likelihood; + + /** + @brief Predicted Output parameter vector (only used in regression mode) + @warning this variable is not allocated if the model is not bimodal + */ + std::vector<float> output_values; + + /** + @brief Predicted Output variance associated with the generated parameter + vector (only used in regression mode) + @warning this variable is not allocated if the model is not bimodal + */ + std::vector<float> output_covariance; +}; + +/** + @ingroup Model + @brief Results of the filtering/inference process (for a Model with multiple + classes). + @details The default results contain both likelihoods for recognition + and vectors for the results of a regression + */ +template <typename ModelType> +struct Results { + /** + @brief Instantaneous likelihood of each class + */ + std::vector<double> instant_likelihoods; + + /** + @brief Normalized instantaneous likelihood of each class + */ + std::vector<double> instant_normalized_likelihoods; + + /** + @brief Smoothed likelihood of each class + */ + std::vector<double> smoothed_likelihoods; + + /** + @brief Normalized smoothed likelihood of each class + */ + std::vector<double> smoothed_normalized_likelihoods; + + /** + @brief Cumulative smoothed log-likelihood of each class + */ + std::vector<double> smoothed_log_likelihoods; + + /** + @brief Label of the likeliest class + */ + std::string likeliest; + + /** + @brief Output values estimated by regression + @warning this variable is not allocated if the Model is not bimodal + */ + std::vector<float> output_values; + + /** + @brief Output variance over the values estimated by regression + @warning this variable is not allocated if the Model is not bimodal + */ + std::vector<float> output_covariance; +}; +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelSharedParameters.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelSharedParameters.cpp new file mode 100644 index 0000000..21d74a8 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelSharedParameters.cpp @@ -0,0 +1,162 @@ +/* + * xmmModelSharedParameters.cpp + * + * Shared Parameters class + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "xmmModelSharedParameters.hpp" + +xmm::SharedParameters::SharedParameters() + : bimodal(false), + dimension((bimodal.get()) ? 2 : 1, (bimodal.get()) ? 2 : 1), + dimension_input((bimodal.get()) ? 1 : 0, 0, + (bimodal.get()) ? dimension.get() : 0), + em_algorithm_min_iterations(10, 1), + em_algorithm_max_iterations(0), + em_algorithm_percent_chg(0.01, 0.), + likelihood_window(1, 1) { + bimodal.onAttributeChange(this, &xmm::SharedParameters::onAttributeChange); + dimension.onAttributeChange(this, + &xmm::SharedParameters::onAttributeChange); + dimension_input.onAttributeChange( + this, &xmm::SharedParameters::onAttributeChange); + em_algorithm_min_iterations.onAttributeChange( + this, &xmm::SharedParameters::onAttributeChange); + em_algorithm_max_iterations.onAttributeChange( + this, &xmm::SharedParameters::onAttributeChange); + em_algorithm_percent_chg.onAttributeChange( + this, &xmm::SharedParameters::onAttributeChange); + likelihood_window.onAttributeChange( + this, &xmm::SharedParameters::onAttributeChange); + column_names.onAttributeChange(this, + &xmm::SharedParameters::onAttributeChange); +} + +xmm::SharedParameters::SharedParameters(SharedParameters const& src) + : bimodal(src.bimodal), + dimension(src.dimension), + dimension_input(src.dimension_input), + column_names(src.column_names), + em_algorithm_min_iterations(src.em_algorithm_min_iterations), + em_algorithm_max_iterations(src.em_algorithm_max_iterations), + em_algorithm_percent_chg(src.em_algorithm_percent_chg), + likelihood_window(src.likelihood_window) { + bimodal.onAttributeChange(this, &xmm::SharedParameters::onAttributeChange); + dimension.onAttributeChange(this, + &xmm::SharedParameters::onAttributeChange); + dimension_input.onAttributeChange( + this, &xmm::SharedParameters::onAttributeChange); + em_algorithm_min_iterations.onAttributeChange( + this, &xmm::SharedParameters::onAttributeChange); + em_algorithm_max_iterations.onAttributeChange( + this, &xmm::SharedParameters::onAttributeChange); + em_algorithm_percent_chg.onAttributeChange( + this, &xmm::SharedParameters::onAttributeChange); + likelihood_window.onAttributeChange( + this, &xmm::SharedParameters::onAttributeChange); + column_names.onAttributeChange(this, + &xmm::SharedParameters::onAttributeChange); +} + +xmm::SharedParameters::SharedParameters(Json::Value const& root) + : SharedParameters() { + bimodal.set(root.get("bimodal", false).asBool()); + dimension.set(root.get("dimension", bimodal.get() ? 2 : 1).asInt()); + dimension_input.set( + root.get("dimension_input", bimodal.get() ? 1 : 0).asInt()); + em_algorithm_min_iterations.set( + root.get("em_algorithm_min_iterations", 10).asInt()); + em_algorithm_max_iterations.set( + root.get("em_algorithm_max_iterations", 0).asInt()); + em_algorithm_percent_chg.set( + root.get("em_algorithm_percent_chg", 0.01).asFloat()); + likelihood_window.set(root.get("likelihood_window", 1).asInt()); + std::vector<std::string> tmpColNames(dimension.get()); + for (int i = 0; i < tmpColNames.size(); i++) + tmpColNames[i] = root["column_names"].get(i, "").asString(); + column_names.set(tmpColNames); +} + +xmm::SharedParameters& xmm::SharedParameters::operator=( + SharedParameters const& src) { + if (this != &src) { + bimodal = src.bimodal; + dimension = src.dimension; + dimension_input = src.dimension_input; + column_names = src.column_names; + em_algorithm_min_iterations = src.em_algorithm_min_iterations; + em_algorithm_max_iterations = src.em_algorithm_max_iterations; + em_algorithm_percent_chg = src.em_algorithm_percent_chg; + likelihood_window = src.likelihood_window; + } + return *this; +} + +Json::Value xmm::SharedParameters::toJson() const { + Json::Value root; + root["bimodal"] = bimodal.get(); + root["dimension"] = static_cast<int>(dimension.get()); + root["dimension_input"] = static_cast<int>(dimension_input.get()); + for (int i = 0; i < column_names.size(); i++) + root["column_names"][i] = column_names.at(i); + root["em_algorithm_min_iterations"] = em_algorithm_min_iterations.get(); + root["em_algorithm_max_iterations"] = em_algorithm_max_iterations.get(); + root["em_algorithm_percent_chg"] = em_algorithm_percent_chg.get(); + root["likelihood_window"] = static_cast<int>(likelihood_window.get()); + return root; +} + +void xmm::SharedParameters::fromJson(Json::Value const& root) { + try { + SharedParameters tmp(root); + *this = tmp; + } catch (JsonException& e) { + throw e; + } +} + +void xmm::SharedParameters::onAttributeChange(AttributeBase* attr_pointer) { + if (attr_pointer == &bimodal) { + if (bimodal.get()) { + dimension.setLimitMin(2); + if (dimension.get() < 2) dimension.set(2); + dimension_input.setLimitMin(1); + if (dimension_input.get() < 1) dimension_input.set(1); + } else { + dimension.setLimitMin(1); + if (dimension.get() < 1) dimension.set(1); + dimension_input.setLimitMax(0); + dimension_input.set(0); + } + } else if (attr_pointer == &dimension) { + dimension_input.setLimitMax(dimension.get() - 1); + column_names.resize(dimension.get()); + } + attr_pointer->changed = false; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelSharedParameters.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelSharedParameters.hpp new file mode 100644 index 0000000..aa05ae5 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelSharedParameters.hpp @@ -0,0 +1,160 @@ +/* + * xmmModelSharedParameters.hpp + * + * Shared Parameters class + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmModelSharedParameters_h +#define xmmModelSharedParameters_h + +#include "../common/xmmEvents.hpp" +#include "../trainingset/xmmTrainingSet.hpp" +#include <mutex> + +namespace xmm { +/** + @defgroup Model [Core] Probabilistic Models + */ + +/** + @ingroup Model + @brief Shared Parameters for models with multiple classes. + @details This structure is shared by pointer between the class-specific models + to avoid + data duplication and ensures that all class-specific models share the same + common attributes. + */ +class SharedParameters : public Writable { + public: + template <typename SingleClassModel, typename ModelType> + friend class Model; + friend class SingleClassProbabilisticModel; + friend class SingleClassGMM; + friend class SingleClassHMM; + friend class HierarchicalHMM; + friend class GMM; + + /** + @brief Default Constructor + */ + SharedParameters(); + + /** + @brief Copy Constructor + @param src Source Object + */ + SharedParameters(SharedParameters const& src); + + /** + @brief Constructor from Json Structure + @param root Json Value + */ + explicit SharedParameters(Json::Value const& root); + + /** + @brief Assignment + @param src Source Object + */ + SharedParameters& operator=(SharedParameters const& src); + + /** @name Json I/O */ + ///@{ + + /** + @brief Write the object to a JSON Structure + @return Json value containing the object's information + */ + virtual Json::Value toJson() const; + + /** + @brief Read the object from a JSON Structure + @param root JSON value containing the object's information + @throws JsonException if the JSON value has a wrong format + */ + virtual void fromJson(Json::Value const& root); + + ///@} + + /** + @brief defines if the phrase is bimodal (true) or unimodal (false) + */ + Attribute<bool> bimodal; + + /** + @brief total dimension of the training data + */ + Attribute<unsigned int> dimension; + + /** + @brief Dimension of the input modality + */ + Attribute<unsigned int> dimension_input; + + /** + @brief labels of the columns of input/output data (e.g. descriptor names) + */ + Attribute<std::vector<std::string>> column_names; + + /** + @brief Minimum number of iterations of the EM algorithm + */ + Attribute<unsigned int> em_algorithm_min_iterations; + + /** + @brief Maximum number of iterations of the EM algorithm. + @details If this value is superior to + minSteps, this criterion is used. Otherwise, only the + em_algorithm_percent_chg criterion applies. + */ + Attribute<unsigned int> em_algorithm_max_iterations; + + /** + @brief log-likelihood difference threshold necessary to stop the EM + algorithm. + @details When the percent-change in likelihood of the training data given + the + estimated parameters gets under this threshold, the EM algorithm is + stopped. + */ + Attribute<double> em_algorithm_percent_chg; + + /** + @brief Size of the window (in samples) used to compute the likelihoods + */ + Attribute<unsigned int> likelihood_window; + + protected: + /** + @brief notification function called when a member attribute is changed + */ + virtual void onAttributeChange(AttributeBase* attr_pointer); +}; +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelSingleClass.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelSingleClass.cpp new file mode 100644 index 0000000..28259e4 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelSingleClass.cpp @@ -0,0 +1,238 @@ +/* + * xmmModelSingleClass.hpp + * + * Abstract class for Single-class Probabilistic Machine learning models based + * on the EM algorithm + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "xmmModelSingleClass.hpp" +#include <cmath> + +#pragma mark - +#pragma mark Constructors +xmm::SingleClassProbabilisticModel::SingleClassProbabilisticModel( + std::shared_ptr<SharedParameters> p) + : label(""), + shared_parameters(p), + training_status(this, label), + is_training_(false), + cancel_training_(false) { + if (p == NULL) { + throw std::runtime_error( + "Cannot instantiate a probabilistic model without Shared " + "parameters."); + } + likelihood_buffer_.resize(shared_parameters->likelihood_window.get()); +} + +xmm::SingleClassProbabilisticModel::SingleClassProbabilisticModel( + SingleClassProbabilisticModel const& src) + : label(src.label), + shared_parameters(src.shared_parameters), + training_status(this, label), + is_training_(false), + cancel_training_(false) { + if (is_training_) + throw std::runtime_error("Cannot copy: target model is still training"); + if (src.is_training_) + throw std::runtime_error("Cannot copy: source model is still training"); +} + +xmm::SingleClassProbabilisticModel::SingleClassProbabilisticModel( + std::shared_ptr<SharedParameters> p, Json::Value const& root) + : label(""), + shared_parameters(p), + training_status(this, label), + is_training_(false), + cancel_training_(false) { + if (p == NULL) { + throw std::runtime_error( + "Cannot instantiate a probabilistic model without Shared " + "parameters."); + } + label = root["label"].asString(); + training_status.label = label; +} + +xmm::SingleClassProbabilisticModel& xmm::SingleClassProbabilisticModel:: +operator=(SingleClassProbabilisticModel const& src) { + if (this != &src) { + if (is_training_) + throw std::runtime_error( + "Cannot copy: target model is still training"); + if (src.is_training_) + throw std::runtime_error( + "Cannot copy: source model is still training"); + label = src.label; + training_status = TrainingEvent(this, label), + shared_parameters = src.shared_parameters; + is_training_ = false; + cancel_training_ = false; + } + return *this; +}; + +xmm::SingleClassProbabilisticModel::~SingleClassProbabilisticModel() { + while (this->isTraining()) { + } +} + +#pragma mark - +#pragma mark Accessors +bool xmm::SingleClassProbabilisticModel::isTraining() const { + return is_training_; +} + +#pragma mark - +#pragma mark Training +void xmm::SingleClassProbabilisticModel::train(TrainingSet* trainingSet) { + training_mutex_.lock(); + bool trainingError(false); + + training_status.status = TrainingEvent::Status::Run; + + if (trainingSet && !trainingSet->empty()) { + this->allocate(); + } else { + trainingError = true; + } + + if (cancelTrainingIfRequested()) return; + if (!trainingError) { + try { + this->emAlgorithmInit(trainingSet); + } catch (std::exception& e) { + trainingError = true; + } + } + + training_status.label = label; + training_status.log_likelihood = -std::numeric_limits<double>::max(); + training_status.iterations = 0; + double old_log_prob = training_status.log_likelihood; + + while (!emAlgorithmHasConverged(training_status.iterations, + training_status.log_likelihood, + old_log_prob)) { + if (cancelTrainingIfRequested()) return; + old_log_prob = training_status.log_likelihood; + if (!trainingError) { + try { + training_status.log_likelihood = + this->emAlgorithmUpdate(trainingSet); + } catch (std::exception& e) { + trainingError = true; + } + } + + if (std::isnan(100. * + fabs((training_status.log_likelihood - old_log_prob) / + old_log_prob)) && + (training_status.iterations > 1)) + trainingError = true; + + if (trainingError) { + is_training_ = false; + training_mutex_.unlock(); + training_status.status = TrainingEvent::Status::Error; + training_events.notifyListeners(training_status); + return; + } + + ++training_status.iterations; + + if (shared_parameters->em_algorithm_max_iterations.get() > + shared_parameters->em_algorithm_min_iterations.get()) + training_status.progression = + float(training_status.iterations) / + float(shared_parameters->em_algorithm_max_iterations.get()); + else + training_status.progression = + float(training_status.iterations) / + float(shared_parameters->em_algorithm_min_iterations.get()); + + training_events.notifyListeners(training_status); + } + + if (cancelTrainingIfRequested()) return; + this->emAlgorithmTerminate(); + + training_mutex_.unlock(); +} + +bool xmm::SingleClassProbabilisticModel::emAlgorithmHasConverged( + int step, double log_prob, double old_log_prob) const { + if (step >= 1000) return true; + if (shared_parameters->em_algorithm_max_iterations.get() >= + shared_parameters->em_algorithm_min_iterations.get()) + return (step >= shared_parameters->em_algorithm_max_iterations.get()); + else + return (step >= shared_parameters->em_algorithm_min_iterations.get()) && + (100. * fabs((log_prob - old_log_prob) / log_prob) <= + shared_parameters->em_algorithm_percent_chg.get()); +} + +void xmm::SingleClassProbabilisticModel::emAlgorithmTerminate() { + training_status.status = TrainingEvent::Status::Done; + training_events.notifyListeners(training_status); + this->is_training_ = false; +} + +void xmm::SingleClassProbabilisticModel::cancelTraining() { + if (isTraining()) { + cancel_training_ = true; + } +} + +bool xmm::SingleClassProbabilisticModel::cancelTrainingIfRequested() { + if (!cancel_training_) return false; + training_mutex_.unlock(); + training_status.label = label; + training_status.status = TrainingEvent::Status::Cancel; + training_events.notifyListeners(training_status); + is_training_ = false; + return true; +} + +#pragma mark - +#pragma mark Performance +void xmm::SingleClassProbabilisticModel::reset() { + check_training(); + likelihood_buffer_.resize(shared_parameters->likelihood_window.get()); + likelihood_buffer_.clear(); +} + +#pragma mark - +#pragma mark File IO +Json::Value xmm::SingleClassProbabilisticModel::toJson() const { + check_training(); + Json::Value root; + root["label"] = label; + return root; +} \ No newline at end of file diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelSingleClass.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelSingleClass.hpp new file mode 100644 index 0000000..cad4a34 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/model/xmmModelSingleClass.hpp @@ -0,0 +1,372 @@ +/* + * xmmModelSingleClass.hpp + * + * Abstract class for Single-class Probabilistic Machine learning models based + * on the EM algorithm + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmModelSingleClass_h +#define xmmModelSingleClass_h + +#include "../common/xmmCircularbuffer.hpp" +#include "../common/xmmEvents.hpp" +#include "../trainingset/xmmTrainingSet.hpp" +#include "xmmModelSharedParameters.hpp" +#include <memory> +#include <mutex> + +namespace xmm { +/** + @ingroup Model + @brief Event for monitoring the training process + */ +class TrainingEvent { + public: + /** + @brief Status of the training process + */ + enum Status { + /** + @brief Training is still running + */ + Run, + + /** + @brief An error occured during training + */ + Error, + + /** + @brief The training has been cancelled. + */ + Cancel, + + /** + @brief Training is done without error + */ + Done, + + /** + @brief The training of all classes has finished + */ + Alldone + }; + + /** + @brief Type of Training Error + */ + enum class ErrorType { + /** + @brief Convergence Errors (numerical errors in the training process). + @details these errors can be due to issues with the training data (e.g. + nan values), or + bad choice of parameters (e.g. regularization too low). + */ + ConvergenceError + }; + + /** + @brief Constructor + @param model_ Source model + @param label_ Label of the model sending the notification + @param status_ status of the training process + */ + TrainingEvent(void* model_, std::string label_, + Status status_ = Status::Run) + : model(model_), + label(label_), + status(status_), + progression(0), + log_likelihood(0), + iterations(0) {} + + /** + @brief Copy constructor + @param src source event + */ + TrainingEvent(TrainingEvent const& src) + : model(src.model), + label(src.label), + status(src.status), + progression(src.progression), + log_likelihood(src.log_likelihood), + iterations(src.iterations) {} + + /** + @brief Assignment operator + @param src source event + */ + TrainingEvent& operator=(TrainingEvent const& src) { + if (this != &src) { + model = src.model; + label = src.label; + status = src.status; + progression = src.progression; + log_likelihood = src.log_likelihood; + iterations = src.iterations; + } + return *this; + } + + /** + @brief Source Model + */ + void* model; + + /** + @brief Label of the source model, if any. + */ + std::string label; + + /** + @brief Status of the training process + */ + Status status; + + /** + @brief progression within the training algorithm + */ + float progression; + + /** + @brief Log-likelihood of the data given the model's parameters at the en of + training + */ + double log_likelihood; + + /** + @brief Number of EM iterations + */ + double iterations; +}; + +/** + @ingroup Model + @brief Generic Template for Machine Learning Probabilistic models based on the + EM algorithm + */ +class SingleClassProbabilisticModel : public Writable { + public: + /** + @brief Constructor + @param p pointer to a shared parameters object (owned by a Model) + */ + SingleClassProbabilisticModel(std::shared_ptr<SharedParameters> p = NULL); + + /** + @brief Copy Constructor + @param src Source Model + */ + SingleClassProbabilisticModel(SingleClassProbabilisticModel const& src); + + /** + @brief Constructor from Json + @param p pointer to a shared parameters object (owned by a Model) + @param root Json structure + */ + explicit SingleClassProbabilisticModel(std::shared_ptr<SharedParameters> p, + Json::Value const& root); + + /** + @brief Assignment + @param src Source Model + */ + SingleClassProbabilisticModel& operator=( + SingleClassProbabilisticModel const& src); + + /** + @brief Destructor + */ + virtual ~SingleClassProbabilisticModel(); + + /** @name Training */ + ///@{ + + /** + @brief Checks if the model is training + @return true if the model is training + */ + bool isTraining() const; + + /** + @brief Main training method based on the EM algorithm + @details the method performs a loop over the pure virtual method + emAlgorithmUpdate() until convergence. + The @a emAlgorithmUpdate method computes both E and M steps of the EM + algorithm. + @param trainingSet Training Set to train the model. + @see emAlgorithmUpdate + */ + void train(TrainingSet* trainingSet); + + /** + @brief Cancels the training process : sets a flag so that the training + stops at the next + possible exit in the training process. + @warning the model is still training when this function returns. This + function only requests the training + process to cancel. + */ + void cancelTraining(); + + ///@} + + /** @name Performance */ + ///@{ + + /** + @brief Resets the fitering process (recognition or regression) + */ + virtual void reset(); + + /** + @brief filters a incoming observation (performs recognition or regression) + @details the results of the inference process are stored in the results + attribute + @param observation observation vector + @return likelihood of the observation + */ + virtual double filter(std::vector<float> const& observation) = 0; + + ///@} + + /** @name Json I/O */ + ///@{ + + /** + @brief Write the object to a JSON Structure + @return Json value containing the object's information + */ + virtual Json::Value toJson() const; + + /** + @brief Read the object from a JSON Structure + @param root JSON value containing the object's information + @throws JsonException if the JSON value has a wrong format + */ + virtual void fromJson(Json::Value const& root) = 0; + + ///@} + + /** + @brief label associated with the given model + */ + std::string label; + + /** + @brief Pointer to the shared parameters owned by a multi-class model + */ + std::shared_ptr<SharedParameters> shared_parameters; + + /** + @brief Generator for events monitoring the training process + */ + EventGenerator<TrainingEvent> training_events; + + /** + @brief Event containing information on the current status of the training + process + */ + TrainingEvent training_status; + + protected: + /** + @brief Allocate memory for the model's parameters + @details called when dimensions are modified + */ + virtual void allocate() = 0; + + /** + @brief Initialize the training algorithm + */ + virtual void emAlgorithmInit(TrainingSet* trainingSet) = 0; + + /** + @brief Update Method of the EM algorithm + @details performs E and M steps of the EM algorithm. + @return likelihood of the training data given the current model parameters + (before re-estimation). + */ + virtual double emAlgorithmUpdate(TrainingSet* trainingSet) = 0; + + /** + @brief Terminate the training algorithm + */ + virtual void emAlgorithmTerminate(); + + /** + @brief checks if the training has converged according to the object's EM + stop criterion + @param step index of the current step of the EM algorithm + @param log_prob log-likelihood returned by the EM update + @param old_log_prob log-likelihood returned by the EM update at the + previous step + */ + bool emAlgorithmHasConverged(int step, double log_prob, + double old_log_prob) const; + + /** + @brief checks if a cancel request has been sent and accordingly cancels the + training process + @return true if the training has been canceled. + */ + bool cancelTrainingIfRequested(); + + /** + @brief Checks if the model is still training + @throws runtime_error if the model is training. + */ + inline void check_training() const { + if (this->isTraining()) + throw std::runtime_error("The model is training"); + } + + /** + @brief Likelihood buffer used for smoothing + */ + CircularBuffer<double> likelihood_buffer_; + + /** + @brief Mutex used in Concurrent Mode + */ + std::mutex training_mutex_; + + /** + @brief defines if the model is being trained. + */ + bool is_training_; + + /** + @brief defines if the model received a request to cancel training + */ + bool cancel_training_; +}; +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/trainingset/xmmPhrase.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/trainingset/xmmPhrase.cpp new file mode 100644 index 0000000..ba9d79c --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/trainingset/xmmPhrase.cpp @@ -0,0 +1,582 @@ +/* + * xmmPhrase.cpp + * + * Multimodal data phrase + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "xmmPhrase.hpp" +#include <limits> +#include <algorithm> + +xmm::Phrase::Phrase(MemoryMode memoryMode, Multimodality multimodality) + : own_memory_(memoryMode == MemoryMode::OwnMemory), + bimodal_(multimodality == Multimodality::Bimodal), + empty_(true), + length_(0), + input_length_(0), + output_length_(0), + max_length_(0) { + dimension.onAttributeChange(this, &xmm::Phrase::onAttributeChange); + dimension_input.onAttributeChange(this, &xmm::Phrase::onAttributeChange); + label.onAttributeChange(this, &xmm::Phrase::onAttributeChange); + dimension.setLimitMin((bimodal_) ? 2 : 1); + dimension.set((bimodal_) ? 2 : 1, true); + dimension_input.setLimits((bimodal_) ? 1 : 0, (bimodal_) ? 2 : 0); + dimension_input.set((bimodal_) ? 1 : 0, true); + data_ = new float*[bimodal_ ? 2 : 1]; + data_[0] = NULL; + if (bimodal_) data_[1] = NULL; +} + +xmm::Phrase::Phrase(Phrase const& src) + : dimension(src.dimension), + dimension_input(src.dimension_input), + label(src.label), + column_names(src.column_names), + own_memory_(src.own_memory_), + bimodal_(src.bimodal_), + empty_(src.empty_), + length_(src.length_), + input_length_(src.input_length_), + output_length_(src.output_length_), + max_length_(src.max_length_) { + if (own_memory_) { + data_ = new float*[bimodal_ ? 2 : 1]; + if (max_length_ > 0) { + unsigned int modality_dim = + bimodal_ ? dimension_input.get() : dimension.get(); + data_[0] = new float[max_length_ * modality_dim]; + std::copy(src.data_[0], src.data_[0] + max_length_ * modality_dim, + data_[0]); + if (bimodal_) { + modality_dim = dimension.get() - dimension_input.get(); + data_[1] = new float[max_length_ * modality_dim]; + std::copy(src.data_[1], + src.data_[1] + max_length_ * modality_dim, data_[1]); + } + } + } else { + data_[0] = src.data_[0]; + if (bimodal_) data_[1] = src.data_[1]; + } + dimension.onAttributeChange(this, &xmm::Phrase::onAttributeChange); + dimension_input.onAttributeChange(this, &xmm::Phrase::onAttributeChange); + label.onAttributeChange(this, &xmm::Phrase::onAttributeChange); +} + +xmm::Phrase::Phrase(Json::Value const& root) + : own_memory_(true), + bimodal_(false), + empty_(true), + length_(0), + input_length_(0), + output_length_(0), + max_length_(0) { + if (!own_memory_) + throw std::runtime_error("Cannot read Phrase with Shared memory"); + + dimension.onAttributeChange(this, &xmm::Phrase::onAttributeChange); + dimension_input.onAttributeChange(this, &xmm::Phrase::onAttributeChange); + label.onAttributeChange(this, &xmm::Phrase::onAttributeChange); + + bimodal_ = root.get("bimodal", false).asBool(); + dimension.setLimitMin((bimodal_) ? 2 : 1); + dimension_input.setLimits((bimodal_) ? 1 : 0, (bimodal_) ? 2 : 0); + dimension.set(root.get("dimension", bimodal_ ? 2 : 1).asInt(), true); + dimension_input.set(root.get("dimension_input", bimodal_ ? 1 : 0).asInt(), + true); + data_ = new float*[bimodal_ ? 2 : 1]; + data_[0] = NULL; + if (bimodal_) data_[1] = NULL; + + column_names.resize(dimension.get(), ""); + for (int i = 0; i < root["column_names"].size(); i++) { + column_names[i] = root["column_names"].get(i, "").asString(); + } + + label.set(root["label"].asString()); + + length_ = static_cast<unsigned int>(root.get("length", 0).asInt()); + max_length_ = length_; + input_length_ = length_; + output_length_ = length_; + empty_ = (length_ == 0 && input_length_ == 0 && output_length_ == 0); + + if (bimodal_) { + data_[0] = + reallocate<float>(data_[0], max_length_ * dimension_input.get(), + length_ * dimension_input.get()); + data_[1] = reallocate<float>( + data_[1], max_length_ * (dimension.get() - dimension_input.get()), + length_ * (dimension.get() - dimension_input.get())); + json2array(root["data_input"], data_[0], + length_ * dimension_input.get()); + json2array(root["data_output"], data_[1], + length_ * (dimension.get() - dimension_input.get())); + } else { + data_[0] = reallocate<float>(data_[0], max_length_ * dimension.get(), + length_ * dimension.get()); + json2array(root["data"], data_[0], length_ * dimension.get()); + } +} + +xmm::Phrase& xmm::Phrase::operator=(Phrase const& src) { + if (this != &src) { + if (own_memory_) { + if (data_) { + if (bimodal_) try { + delete[] data_[1]; + } catch (std::exception& e) { + } + try { + delete[] data_[0]; + } catch (std::exception& e) { + } + } + try { + delete[] data_; + } catch (std::exception& e) { + } + data_ = NULL; + } + own_memory_ = src.own_memory_; + bimodal_ = src.bimodal_; + empty_ = src.empty_; + dimension = src.dimension; + dimension_input = src.dimension_input; + max_length_ = src.max_length_; + length_ = src.length_; + input_length_ = src.input_length_; + output_length_ = src.output_length_; + column_names = src.column_names; + label = src.label; + + if (own_memory_) { + data_ = new float*[bimodal_ ? 2 : 1]; + if (max_length_ > 0) { + unsigned int modality_dim = + bimodal_ ? dimension_input.get() : dimension.get(); + data_[0] = new float[max_length_ * modality_dim]; + std::copy(src.data_[0], + src.data_[0] + max_length_ * modality_dim, data_[0]); + if (bimodal_) { + modality_dim = dimension.get() - dimension_input.get(); + data_[1] = new float[max_length_ * modality_dim]; + std::copy(src.data_[1], + src.data_[1] + max_length_ * modality_dim, + data_[1]); + } + } + } else { + data_[0] = src.data_[0]; + if (bimodal_) data_[1] = src.data_[1]; + } + dimension.onAttributeChange(this, &xmm::Phrase::onAttributeChange); + dimension_input.onAttributeChange(this, + &xmm::Phrase::onAttributeChange); + label.onAttributeChange(this, &xmm::Phrase::onAttributeChange); + } + return *this; +} + +xmm::Phrase::~Phrase() { + if (own_memory_) { + if (bimodal_) { + delete[] data_[1]; + } + delete[] data_[0]; + } + delete[] data_; +} + +bool xmm::Phrase::ownMemory() const { return own_memory_; } + +bool xmm::Phrase::bimodal() const { return bimodal_; } + +unsigned int xmm::Phrase::size() const { return length_; } + +unsigned int xmm::Phrase::inputSize() const { return input_length_; } + +unsigned int xmm::Phrase::outputSize() const { return output_length_; } + +bool xmm::Phrase::empty() const { return empty_; } + +float xmm::Phrase::getValue(unsigned int index, unsigned int dim) const { + if (dim >= dimension.get()) + throw std::out_of_range("Phrase: dimension out of bounds"); + if (bimodal_) { + if (dim < dimension_input.get()) { + if (index >= input_length_) + throw std::out_of_range("Phrase: index out of bounds"); + return data_[0][index * dimension_input.get() + dim]; + } else { + if (index >= output_length_) + throw std::out_of_range("Phrase: index out of bounds"); + return data_[1][index * (dimension.get() - dimension_input.get()) + + dim - dimension_input.get()]; + } + } else { + if (index >= length_) + throw std::out_of_range("Phrase: index out of bounds"); + return data_[0][index * dimension.get() + dim]; + } +} + +float* xmm::Phrase::getPointer(unsigned int index) const { + if (index >= length_) + throw std::out_of_range("Phrase: index out of bounds"); + if (bimodal_) + throw std::runtime_error( + "this phrase is bimodal_, use 'get_dataPointer_input' and " + "'get_dataPointer_output'"); + return data_[0] + index * dimension.get(); +} + +float* xmm::Phrase::getPointer_input(unsigned int index) const { + if (index >= length_) + throw std::out_of_range("Phrase: index out of bounds"); + if (!bimodal_) + throw std::runtime_error( + "this phrase is unimodal, use 'get_dataPointer'"); + return data_[0] + index * dimension_input.get(); +} + +float* xmm::Phrase::getPointer_output(unsigned int index) const { + if (index >= length_) + throw std::out_of_range("Phrase: index out of bounds"); + if (!bimodal_) + throw std::runtime_error( + "this phrase is unimodal, use 'get_dataPointer'"); + return data_[1] + index * (dimension.get() - dimension_input.get()); +} + +void xmm::Phrase::connect(float* pointer_to_data, unsigned int length) { + if (own_memory_) + throw std::runtime_error("Cannot connect a phrase with own data"); + if (bimodal_) + throw std::runtime_error( + "Cannot connect a single array, use 'connect_input' and " + "'connect_output'"); + + data_[0] = pointer_to_data; + input_length_ = length; + length_ = length; + empty_ = false; +} + +void xmm::Phrase::connect(float* pointer_to_data_input, + float* pointer_to_data_output, unsigned int length) { + if (own_memory_) + throw std::runtime_error("Cannot connect a phrase with own data"); + if (!bimodal_) + throw std::runtime_error("This phrase is unimodal, use 'connect'"); + + data_[0] = pointer_to_data_input; + data_[1] = pointer_to_data_output; + input_length_ = length; + output_length_ = length; + trim(); + empty_ = false; +} + +void xmm::Phrase::connect_input(float* pointer_to_data, unsigned int length) { + if (own_memory_) + throw std::runtime_error("Cannot connect a phrase with own data"); + if (!bimodal_) + throw std::runtime_error("This phrase is unimodal, use 'connect'"); + + data_[0] = pointer_to_data; + input_length_ = length; + trim(); + empty_ = false; +} + +void xmm::Phrase::connect_output(float* pointer_to_data, unsigned int length) { + if (own_memory_) + throw std::runtime_error("Cannot connect a phrase with own data"); + if (!bimodal_) + throw std::runtime_error("This phrase is unimodal, use 'connect'"); + + data_[1] = pointer_to_data; + output_length_ = length; + trim(); + empty_ = false; +} + +void xmm::Phrase::disconnect() { + if (own_memory_) + throw std::runtime_error("Cannot disconnect a phrase with own data"); + data_[0] = NULL; + if (bimodal_) data_[1] = NULL; + length_ = 0; + input_length_ = 0; + output_length_ = 0; + empty_ = true; +} + +void xmm::Phrase::record(std::vector<float> const& observation) { + if (!own_memory_) + throw std::runtime_error("Cannot record in shared data phrase"); + if (bimodal_ && input_length_ != output_length_) + throw std::runtime_error( + "Cannot record bimodal_ phrase in synchronous mode: modalities " + "have different length"); + if (observation.size() != dimension.get()) + throw std::invalid_argument("Observation has wrong dimension"); + + if (length_ >= max_length_ || max_length_ == 0) { + reallocateLength(); + } + + if (bimodal_) { + copy(observation.begin(), observation.begin() + dimension_input.get(), + data_[0] + input_length_ * dimension_input.get()); + copy(observation.begin() + dimension_input.get(), + observation.begin() + dimension.get(), + data_[1] + + output_length_ * (dimension.get() - dimension_input.get())); + input_length_++; + output_length_++; + } else { + copy(observation.begin(), observation.end(), + data_[0] + length_ * dimension.get()); + input_length_++; + } + + length_++; + empty_ = false; +} + +void xmm::Phrase::record_input(std::vector<float> const& observation) { + if (!own_memory_) + throw std::runtime_error("Cannot record in shared data phrase"); + if (!bimodal_) + throw std::runtime_error("this phrase is unimodal, use 'record'"); + if (observation.size() != dimension_input.get()) + throw std::invalid_argument("Observation has wrong dimension"); + + if (input_length_ >= max_length_ || max_length_ == 0) { + reallocateLength(); + } + + copy(observation.begin(), observation.end(), + data_[0] + input_length_ * dimension_input.get()); + input_length_++; + trim(); + empty_ = false; +} + +void xmm::Phrase::record_output(std::vector<float> const& observation) { + if (!own_memory_) + throw std::runtime_error("Cannot record in shared data phrase"); + if (!bimodal_) + throw std::runtime_error("this phrase is unimodal, use 'record'"); + + if (observation.size() != dimension.get() - dimension_input.get()) + throw std::invalid_argument("Observation has wrong dimension"); + + if (output_length_ >= max_length_ || max_length_ == 0) { + reallocateLength(); + } + + copy(observation.begin(), observation.end(), + data_[1] + output_length_ * (dimension.get() - dimension_input.get())); + output_length_++; + trim(); + empty_ = false; +} + +void xmm::Phrase::clear() { + if (!own_memory_) + throw std::runtime_error("Cannot clear a shared data phrase"); + + length_ = 0; + input_length_ = 0; + output_length_ = 0; + empty_ = true; +} + +void xmm::Phrase::clearInput() { + if (!own_memory_) + throw std::runtime_error("Cannot clear a shared data phrase"); + if (!bimodal_) length_ = 0; + input_length_ = 0; + trim(); +} + +void xmm::Phrase::clearOutput() { + if (!own_memory_) + throw std::runtime_error("Cannot clear a shared data phrase"); + if (!bimodal_) length_ = 0; + output_length_ = 0; + trim(); +} + +Json::Value xmm::Phrase::toJson() const { + Json::Value root; + root["bimodal"] = bimodal_; + root["dimension"] = static_cast<int>(dimension.get()); + root["dimension_input"] = static_cast<int>(dimension_input.get()); + root["length"] = static_cast<int>(length_); + root["label"] = label.get(); + for (int i = 0; i < column_names.size(); i++) + root["column_names"][i] = column_names[i]; + if (bimodal_) { + root["data_input"] = + array2json(data_[0], length_ * dimension_input.get()); + root["data_output"] = array2json( + data_[1], length_ * (dimension.get() - dimension_input.get())); + } else { + root["data"] = array2json(data_[0], length_ * dimension.get()); + } + return root; +} + +void xmm::Phrase::fromJson(Json::Value const& root) { + try { + Phrase tmp(root); + *this = tmp; + } catch (JsonException& e) { + throw e; + } +} + +std::vector<float> xmm::Phrase::mean() const { + std::vector<float> mean(dimension.get()); + for (unsigned int d = 0; d < dimension.get(); d++) { + mean[d] = 0.; + for (unsigned int t = 0; t < length_; t++) { + mean[d] += getValue(t, d); + } + mean[d] /= float(length_); + } + return mean; +} + +std::vector<float> xmm::Phrase::standardDeviation() const { + std::vector<float> stddev(dimension.get()); + std::vector<float> _mean = mean(); + for (unsigned int d = 0; d < dimension.get(); d++) { + stddev[d] = 0.; + for (unsigned int t = 0; t < length_; t++) { + stddev[d] += + (getValue(t, d) - _mean[d]) * (getValue(t, d) - _mean[d]); + } + stddev[d] /= float(length_); + stddev[d] = sqrtf(stddev[d]); + } + return stddev; +} + +std::vector<std::pair<float, float>> xmm::Phrase::minmax() const { + std::vector<std::pair<float, float>> minmax( + dimension.get(), {std::numeric_limits<float>::max(), + std::numeric_limits<float>::lowest()}); + for (unsigned int d = 0; d < dimension.get(); d++) { + for (unsigned int t = 0; t < length_; t++) { + minmax[d].first = std::min(getValue(t, d), minmax[d].first); + minmax[d].second = std::max(getValue(t, d), minmax[d].second); + } + } + return minmax; +} + +void xmm::Phrase::rescale(std::vector<float> offset, std::vector<float> gain) { + for (int t = 0; t < size(); t++) { + float* p; + if (bimodal_) { + p = getPointer_input(t); + for (int d = 0; d < dimension_input.get(); d++) { + p[d] -= offset[d]; + p[d] *= gain[d]; + } + p = getPointer_output(t); + for (int d = dimension_input.get(); d < dimension.get(); d++) { + p[d] -= offset[d]; + p[d] *= gain[d]; + } + } else { + p = getPointer(t); + for (int d = 0; d < dimension.get(); d++) { + p[d] -= offset[d]; + p[d] *= gain[d]; + } + } + } +} + +void xmm::Phrase::trim() { + if (bimodal_) { + length_ = std::min(input_length_, output_length_); + empty_ = std::max(input_length_, output_length_) == 0; + } +} + +void xmm::Phrase::reallocateLength() { + unsigned int modality_dim = + bimodal_ ? dimension_input.get() : dimension.get(); + data_[0] = + reallocate<float>(data_[0], max_length_ * modality_dim, + (max_length_ + AllocationBlockSize) * modality_dim); + if (bimodal_) { + modality_dim = dimension.get() - dimension_input.get(); + data_[1] = reallocate<float>( + data_[1], max_length_ * modality_dim, + (max_length_ + AllocationBlockSize) * modality_dim); + } + max_length_ += AllocationBlockSize; +} + +void xmm::Phrase::onAttributeChange(xmm::AttributeBase* attr_pointer) { + if (attr_pointer == &dimension || attr_pointer == &dimension_input) { + length_ = 0; + input_length_ = 0; + output_length_ = 0; + max_length_ = 0; + empty_ = true; + if (own_memory_) { + delete data_[0]; + } + data_[0] = nullptr; + if (bimodal_) { + if (own_memory_) { + data_[1] = nullptr; + } + delete data_[1]; + } + column_names.resize(dimension.get()); + } + if (attr_pointer == &dimension) + dimension_input.setLimitMax(dimension.get() - 1); + if (attr_pointer == &label) { + PhraseEvent event(this, PhraseEvent::Type::LabelChanged); + events.notifyListeners(event); + } + attr_pointer->changed = false; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/trainingset/xmmPhrase.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/trainingset/xmmPhrase.hpp new file mode 100644 index 0000000..225c318 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/trainingset/xmmPhrase.hpp @@ -0,0 +1,542 @@ +/* + * xmmPhrase.hpp + * + * Multimodal data phrase + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmPhrase_h +#define xmmPhrase_h + +#include "../common/xmmAttribute.hpp" +#include "../common/xmmEvents.hpp" +#include "../common/xmmJson.hpp" +#include <cmath> + +namespace xmm { +/** + @defgroup TrainingSet [Core] Training Sets + */ + +/** + @ingroup TrainingSet + @brief Type of memory management for training sets and phrases + */ +enum class MemoryMode { + /** + @brief memory is owned by the Phrase container. + @details Phrases can be recorded directly + */ + OwnMemory, + + /** + @brief memory is shared with other data structures + @details Phrases can be 'connected' to external data arrays + */ + SharedMemory +}; + +/** + @ingroup TrainingSet + @brief Number of modalities in the data phrase + */ +enum class Multimodality { + /** + @brief single modality (i.e. 1 data array) + @details can be used for recognition + */ + Unimodal, + + /** + @brief two modalities (i.e. 2 data arrays) + @details can be used for regression (input/output) + */ + Bimodal +}; + +class Phrase; + +/** + @ingroup TrainingSet + @brief Event that can be thrown by a phrase to a training set + */ +class PhraseEvent { + public: + /** + @brief Type of event + */ + enum class Type { + /** + @brief Thrown when the label if the phrase is modified. + */ + LabelChanged, + }; + + /** + @brief Default constructor + @param phrase_ pointer to the source phrase + @param type_ type of event + */ + PhraseEvent(Phrase* phrase_, Type type_) : phrase(phrase_), type(type_) {} + + /** + @brief Copy constructor + @param src source event + */ + PhraseEvent(PhraseEvent const& src) : phrase(src.phrase), type(src.type) {} + + /** + @brief pointer to the source phrase + */ + Phrase* phrase; + + /** + @brief Type of event + */ + Type type; +}; + +/** + @ingroup TrainingSet + @brief Data phrase + @details The Phrase class can be used to store unimodal and Bimodal data + phrases. + It can have an autonomous memory, or this memory can be shared with another + data + container. These attributes are specified at construction. + */ +class Phrase : public Writable { + public: + friend class TrainingSet; + + /** + @brief Constructor + @param memoryMode Memory mode (owned vs shared) + @param multimodality Number of modalities + */ + Phrase(MemoryMode memoryMode = MemoryMode::OwnMemory, + Multimodality multimodality = Multimodality::Unimodal); + + /** + @brief Copy Constructor + @param src source Phrase + */ + Phrase(Phrase const& src); + + /** + @brief Constructor from Json Structure + @param root Json Value + */ + explicit Phrase(Json::Value const& root); + + /** + @brief Assignment + @param src source Phrase + */ + Phrase& operator=(Phrase const& src); + + /** + @brief Destructor. + @details Data is only deleted if the memory is owned (construction with + MemoryMode::OwnMemory) + */ + virtual ~Phrase(); + + /** @name Accessors */ + ///@{ + + /** + @brief checks if the training set is owns the data + @return true if the training set owns data (construction with + MemoryMode::OwnMemory) + */ + bool ownMemory() const; + + /** + @brief checks if the training set is bimodal + @return true if the training set is bimodal (construction with + Multimodality::Bimodal) + */ + bool bimodal() const; + + ///@} + + /** @name Access Data */ + ///@{ + + /** + @brief get the number of frames in the phrase + @return the number of frames in the phrase + */ + unsigned int size() const; + + /** + @brief get the number of frames in the input array of the phrase + @return the number of frames in the input array of the phrase + */ + unsigned int inputSize() const; + + /** + @brief get the number of frames in the output array of the phrase + @return the number of frames in the output array of the phrase + */ + unsigned int outputSize() const; + + /** + @brief check if the phrase is empty + @return true if the phrase is empty (length 0) + */ + bool empty() const; + + /** + @brief Access data at a given time index and dimension. + @param index time index + @param dim dimension considered, indexed from 0 to the total dimension of + the data across modalities + @throws out_of_range if time index or dimension are out of bounds + */ + float getValue(unsigned int index, unsigned int dim) const; + + /** + @brief Get pointer to the data at a given time index + @param index time index + @warning this method can be used only for unimodal phrases (construction + with Multimodality::Unimodal) + @throws out_of_range if time index is out of bounds + @throws runtime_error if the phrase is bimodal (construction with + Multimodality::Bimodal) + @return pointer to the data array of the modality, for the given time index + */ + float* getPointer(unsigned int index) const; + + /** + @brief Get pointer to the data at a given time index for the input modality + @warning this method can be used only for bimodal phrases (construction + with Multimodality::Bimodal) + @param index time index + @throws out_of_range if time index is out of bounds + @throws runtime_error if the phrase is unimodal (construction with + Multimodality::Unimodal) + @return pointer to the data array of the modality, for the given time index + */ + float* getPointer_input(unsigned int index) const; + + /** + @brief Get pointer to the data at a given time index for the output + modality + @warning this method can be used only for bimodal phrases (construction + with Multimodality::Bimodal) + @param index time index + @throws out_of_range if time index is out of bounds + @throws runtime_error if the phrase is unimodal (construction with + Multimodality::Unimodal) + @return pointer to the data array of the modality, for the given time index + */ + float* getPointer_output(unsigned int index) const; + + ///@} + + /** @name Connect (MemoryMode = SharedData) */ + ///@{ + + /** + @brief Connect a unimodal phrase to a shared container + @warning This method is only usable in Shared Memory (construction with + MemoryMode::SharedMemory) + @param pointer_to_data pointer to the data array + @param length length of the data array + @throws runtime_error if data is owned (construction with + MemoryMode::OwnMemory flag) + */ + void connect(float* pointer_to_data, unsigned int length); + + /** + @brief Connect a Bimodal phrase to a shared container + @warning This method is only usable in Shared Memory (construction with + MemoryMode::SharedMemory) + @param pointer_to_data_input pointer to the data array of the input + modality + @param pointer_to_data_output pointer to the data array of the output + modality + @param length length of the data array + @throws runtime_error if data is owned (construction with + MemoryMode::OwnMemory flag) + */ + void connect(float* pointer_to_data_input, float* pointer_to_data_output, + unsigned int length); + + /** + @brief Connect a Bimodal phrase to a shared container for the input + modality + @warning This method is only usable in Shared Memory (construction with + MemoryMode::SharedMemory) + @param pointer_to_data pointer to the data array of the input modality + @param length length of the data array + @throws runtime_error if data is owned (construction with + MemoryMode::OwnMemory flag) + */ + void connect_input(float* pointer_to_data, unsigned int length); + + /** + @brief Connect a Bimodal phrase to a shared container for the output + modality + @warning This method is only usable in Shared Memory (construction with + MemoryMode::SharedMemory) + @param pointer_to_data pointer to the data array of the output modality + @param length length of the data array + @throws runtime_error if data is owned (construction with + MemoryMode::OwnMemory flag) + */ + void connect_output(float* pointer_to_data, unsigned int length); + + /** + @brief Disconnect a phrase from a shared container + @warning This method is only usable in Shared Memory (construction with + MemoryMode::SharedMemory) + @throws runtime_error if data is owned (construction with + MemoryMode::OwnMemory flag) + */ + void disconnect(); + + ///@} + + /** @name Record (MemoryMode = OwnData) */ + ///@{ + + /** + @brief Record observation + @details Appends the observation vector observation to the data array.\n + This method is only usable in Own Memory (construction with + MemoryMode::OwnMemory) + @param observation observation vector (C-like array which must have the + size of the total + dimension of the data across all modalities) + @throws runtime_error if data is shared (construction with + MemoryMode::SharedMemory flag) + */ + void record(std::vector<float> const& observation); + + /** + @brief Record observation on input modality + Appends the observation vector observation to the data array\n + This method is only usable in Own Memory (construction with + MemoryMode::OwnMemory) + @param observation observation vector (C-like array which must have the + size of the total + dimension of the data across all modalities) + @throws runtime_error if data is shared (construction with + MemoryMode::SharedMemory flag) + */ + void record_input(std::vector<float> const& observation); + + /** + @brief Record observation on output modality + Appends the observation vector observation to the data array\n + This method is only usable in Own Memory (construction with + MemoryMode::OwnMemory) + @param observation observation vector (C-like array which must have the + size of the total + dimension of the data across all modalities) + @throws runtime_error if data is shared (construction with + MemoryMode::SharedMemory flag) + */ + void record_output(std::vector<float> const& observation); + + /** + @brief Reset length of the phrase to 0 ==> empty phrase\n + This method is only usable in Own Memory (construction with + MemoryMode::OwnMemory) + @throws runtime_error if data is shared (construction with + MemoryMode::SharedMemory flag) + @warning the memory is not released (only done in destructor). + */ + void clear(); + void clearInput(); + void clearOutput(); + + ///@} + + /** @name JSON I/O */ + ///@{ + + /** + @brief Write the object to a JSON Structure + @return Json value containing the object's information + */ + Json::Value toJson() const; + + /** + @brief Read the object from a JSON Structure + @param root JSON value containing the object's information + @throws JsonException if the JSON value has a wrong format + */ + void fromJson(Json::Value const& root); + + ///@} + + /** @name Utilities */ + ///@{ + + /** + @brief Compute the mean of the data phrase along the time axis + @return mean of the phrase (along time axis, full-size) + */ + std::vector<float> mean() const; + + /** + @brief Compute the standard deviation of the data phrase along the time + axis + @return standard deviation of the phrase (along time axis, full-size) + */ + std::vector<float> standardDeviation() const; + + /** + @brief Compute the global min/max of the data phrase along the time axis + @return vector of min/max pairs ofthe phrases (along time axis, full-size) + */ + std::vector<std::pair<float, float>> minmax() const; + + /** + @brief rescale a phrase given an offset and gain + @param offset constant offset to be subtracted + @param gain gain to be applied + */ + void rescale(std::vector<float> offset, std::vector<float> gain); + + ///@} + + /** + @brief Total dimension of the phrase + */ + Attribute<unsigned int> dimension; + + /** + @brief Used in bimodal mode: dimension of the input modality. + */ + Attribute<unsigned int> dimension_input; + + /** + @brief Main label of the phrase + */ + Attribute<std::string> label; + + /** + @brief labels of the columns of the phrase (e.g. descriptor names) + */ + std::vector<std::string> column_names; + + protected: + /** + @brief trim phrase to minimal length of modalities + */ + void trim(); + + /** + @brief Memory Allocation + @details used record mode (no SHARED_MEMORY flag), the data vector is + reallocated + with a block size ALLOC_BLOCKSIZE + */ + void reallocateLength(); + + /** + @brief notification function called when a member attribute is changed + */ + virtual void onAttributeChange(AttributeBase* attr_pointer); + + static const unsigned int AllocationBlockSize = 256; + + /** + @brief Defines if the phrase stores the data itself. + */ + bool own_memory_; + + /** + @brief Defines if the phrase is bimodal (true) or unimodal (false) + */ + bool bimodal_; + + /** + @brief true if the phrase does not contain any data + */ + bool empty_; + + /** + @brief Length of the phrase. If bimodal, it is the minimal length between + modalities + */ + unsigned int length_; + + /** + @brief Length of the array of the input modality + */ + unsigned int input_length_; + + /** + @brief Length of the array of the output modality + */ + unsigned int output_length_; + + /** + @brief Allocated length (only used in own memory mode) + */ + unsigned int max_length_; + + /** + @brief Pointer to the Data arrays + @details data has a size 1 in unimodal mode, 2 in bimodal mode. + */ + float** data_; + + EventGenerator<PhraseEvent> events; +}; + +/** + @brief Reallocate a C-like array (using c++ std::copy) + @param src source array + @param dim_src initial dimension + @param dim_dst target dimension + @return resized array (content is conserved) + */ +template <typename T> +T* reallocate(T* src, unsigned int dim_src, unsigned int dim_dst) { + T* dst = new T[dim_dst]; + + if (!src) return dst; + + if (dim_dst > dim_src) { + std::copy(src, src + dim_src, dst); + } else { + std::copy(src, src + dim_dst, dst); + } + delete[] src; + return dst; +} +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/trainingset/xmmTrainingSet.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/trainingset/xmmTrainingSet.cpp new file mode 100644 index 0000000..0099ea4 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/trainingset/xmmTrainingSet.cpp @@ -0,0 +1,436 @@ +/* + * xmmTrainingSet.cpp + * + * Multimodal Training Set + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ +#include "xmmTrainingSet.hpp" +#include <limits> +#include <algorithm> + +xmm::TrainingSet::TrainingSet(MemoryMode memoryMode, + Multimodality multimodality) + : own_memory_(memoryMode == MemoryMode::OwnMemory), + bimodal_(multimodality == Multimodality::Bimodal) { + dimension.onAttributeChange(this, &xmm::TrainingSet::onAttributeChange); + dimension_input.onAttributeChange(this, + &xmm::TrainingSet::onAttributeChange); + column_names.onAttributeChange(this, &xmm::TrainingSet::onAttributeChange); + + dimension.setLimitMin((bimodal_) ? 2 : 1); + dimension.set((bimodal_) ? 2 : 1, true); + dimension_input.setLimits((bimodal_) ? 1 : 0, (bimodal_) ? 2 : 0); + dimension_input.set((bimodal_) ? 1 : 0, true); + column_names.resize(dimension.get()); +} + +xmm::TrainingSet::TrainingSet(TrainingSet const &src) + : dimension(src.dimension), + dimension_input(src.dimension_input), + column_names(src.column_names), + own_memory_(src.own_memory_), + bimodal_(src.bimodal_), + labels_(src.labels_), + phrases_(src.phrases_) { + dimension.onAttributeChange(this, &xmm::TrainingSet::onAttributeChange); + dimension_input.onAttributeChange(this, + &xmm::TrainingSet::onAttributeChange); + column_names.onAttributeChange(this, &xmm::TrainingSet::onAttributeChange); + for (auto phrase : src.phrases_) { + phrases_.insert(std::pair<int, std::shared_ptr<xmm::Phrase>>( + phrase.first, std::make_shared<Phrase>(*phrase.second))); + phrases_[phrase.first]->events.addListener( + this, &xmm::TrainingSet::onPhraseEvent); + } + update(); +} + +xmm::TrainingSet::TrainingSet(Json::Value const &root) + : own_memory_(true), bimodal_(false) { + if (!own_memory_) + throw std::runtime_error("Cannot read Training Set with Shared memory"); + + dimension.onAttributeChange(this, &xmm::TrainingSet::onAttributeChange); + dimension_input.onAttributeChange(this, + &xmm::TrainingSet::onAttributeChange); + column_names.onAttributeChange(this, &xmm::TrainingSet::onAttributeChange); + + bimodal_ = root.get("bimodal", false).asBool(); + + dimension.setLimitMin((bimodal_) ? 2 : 1); + dimension_input.setLimits((bimodal_) ? 1 : 0, (bimodal_) ? 2 : 0); + dimension.set(root.get("dimension", bimodal_ ? 2 : 1).asInt()); + dimension_input.set(root.get("dimension_input", bimodal_ ? 1 : 0).asInt()); + std::vector<std::string> tmpColNames(dimension.get()); + for (int i = 0; i < root["column_names"].size(); i++) { + tmpColNames[i] = root["column_names"].get(i, "").asString(); + } + column_names.set(tmpColNames); + + // Get Phrases + phrases_.clear(); + for (auto p : root["phrases"]) { + phrases_.insert(std::pair<int, std::shared_ptr<xmm::Phrase>>( + p["index"].asInt(), std::make_shared<Phrase>(p))); + phrases_[p["index"].asInt()]->events.addListener( + this, &xmm::TrainingSet::onPhraseEvent); + } + update(); +} + +xmm::TrainingSet &xmm::TrainingSet::operator=(TrainingSet const &src) { + if (this != &src) { + clear(); + own_memory_ = src.own_memory_; + bimodal_ = src.bimodal_; + dimension = src.dimension; + dimension_input = src.dimension_input; + column_names = src.column_names; + labels_ = src.labels_; + dimension.onAttributeChange(this, &xmm::TrainingSet::onAttributeChange); + dimension_input.onAttributeChange(this, + &xmm::TrainingSet::onAttributeChange); + column_names.onAttributeChange(this, + &xmm::TrainingSet::onAttributeChange); + for (auto phrase : src.phrases_) { + phrases_.insert(std::pair<int, std::shared_ptr<xmm::Phrase>>( + phrase.first, std::make_shared<Phrase>(*phrase.second))); + phrases_[phrase.first]->events.addListener( + this, &xmm::TrainingSet::onPhraseEvent); + } + update(); + } + return *this; +} + +xmm::TrainingSet::~TrainingSet() {} + +bool xmm::TrainingSet::ownMemory() const { return own_memory_; } + +bool xmm::TrainingSet::bimodal() const { return bimodal_; } + +bool xmm::TrainingSet::empty() const { return phrases_.empty(); } + +unsigned int xmm::TrainingSet::size() const { + return static_cast<unsigned int>(phrases_.size()); +} + +void xmm::TrainingSet::onAttributeChange(xmm::AttributeBase *attr_pointer) { + if (attr_pointer == &dimension) { + for (auto &phrase : phrases_) { + phrase.second->dimension.set(dimension.get()); + } + for (std::map<std::string, TrainingSet>::iterator it = + sub_training_sets_.begin(); + it != sub_training_sets_.end(); ++it) + it->second.dimension.set(dimension.get(), true); + + column_names.resize(dimension.get()); + dimension_input.setLimitMax(dimension.get() - 1); + } + if (attr_pointer == &dimension_input) { + for (auto &phrase : phrases_) { + phrase.second->dimension_input.set(dimension_input.get()); + } + for (std::map<std::string, TrainingSet>::iterator it = + sub_training_sets_.begin(); + it != sub_training_sets_.end(); ++it) + it->second.dimension_input.set(dimension_input.get(), true); + } + if (attr_pointer == &column_names) { + for (auto &phrase : phrases_) { + phrase.second->column_names = column_names.get(); + } + + for (std::map<std::string, TrainingSet>::iterator it = + sub_training_sets_.begin(); + it != sub_training_sets_.end(); ++it) + it->second.column_names.set(column_names.get(), true); + } + attr_pointer->changed = false; +} + +std::map<int, std::shared_ptr<xmm::Phrase>>::iterator +xmm::TrainingSet::begin() { + return phrases_.begin(); +} + +std::map<int, std::shared_ptr<xmm::Phrase>>::iterator xmm::TrainingSet::end() { + return phrases_.end(); +} + +std::map<int, std::shared_ptr<xmm::Phrase>>::reverse_iterator +xmm::TrainingSet::rbegin() { + return phrases_.rbegin(); +} + +std::map<int, std::shared_ptr<xmm::Phrase>>::reverse_iterator +xmm::TrainingSet::rend() { + return phrases_.rend(); +} + +std::map<int, std::shared_ptr<xmm::Phrase>>::const_iterator +xmm::TrainingSet::cbegin() const { + return phrases_.cbegin(); +} + +std::map<int, std::shared_ptr<xmm::Phrase>>::const_iterator +xmm::TrainingSet::cend() const { + return phrases_.cend(); +} + +std::map<int, std::shared_ptr<xmm::Phrase>>::const_reverse_iterator +xmm::TrainingSet::crbegin() const { + return phrases_.crbegin(); +} + +std::map<int, std::shared_ptr<xmm::Phrase>>::const_reverse_iterator +xmm::TrainingSet::crend() const { + return phrases_.crend(); +} + +std::shared_ptr<xmm::Phrase> xmm::TrainingSet::getPhrase(int n) const { + if (phrases_.count(n) == 0) return nullptr; + return phrases_.at(n); +} + +void xmm::TrainingSet::addPhrase(int phraseIndex, std::string label) { + phrases_[phraseIndex] = std::make_shared<Phrase>( + own_memory_ ? MemoryMode::OwnMemory : MemoryMode::SharedMemory, + bimodal_ ? Multimodality::Bimodal : Multimodality::Unimodal); + phrases_[phraseIndex]->events.addListener(this, + &xmm::TrainingSet::onPhraseEvent); + phrases_[phraseIndex]->dimension.set(dimension.get()); + phrases_[phraseIndex]->dimension_input.set(dimension_input.get()); + phrases_[phraseIndex]->column_names = this->column_names.get(); + phrases_[phraseIndex]->label.set(label, true); + update(); +} + +void xmm::TrainingSet::addPhrase(int phraseIndex, Phrase const &phrase) { + phrases_[phraseIndex] = std::make_shared<Phrase>(phrase); + phrases_[phraseIndex]->events.removeListeners(); + phrases_[phraseIndex]->events.addListener(this, + &xmm::TrainingSet::onPhraseEvent); + update(); +} + +void xmm::TrainingSet::addPhrase(int phraseIndex, + std::shared_ptr<Phrase> phrase) { + phrases_[phraseIndex] = phrase; + phrases_[phraseIndex]->events.addListener(this, + &xmm::TrainingSet::onPhraseEvent); + update(); +} + +void xmm::TrainingSet::removePhrase(int phraseIndex) { + phrases_.erase(phraseIndex); + update(); +} + +void xmm::TrainingSet::removePhrasesOfClass(std::string const &label) { + bool contLoop(true); + while (contLoop) { + contLoop = false; + for (auto &phrase : phrases_) { + if (phrase.second->label.get() == label) { + removePhrase(phrase.first); + contLoop = true; + break; + } + } + } + update(); +} + +void xmm::TrainingSet::clear() { + sub_training_sets_.clear(); + phrases_.clear(); + labels_.clear(); +} + +xmm::TrainingSet *xmm::TrainingSet::getPhrasesOfClass( + std::string const &label) { + std::map<std::string, TrainingSet>::iterator it = + sub_training_sets_.find(label); + if (it == sub_training_sets_.end()) return nullptr; + return &(it->second); +} + +void xmm::TrainingSet::onPhraseEvent(PhraseEvent const &e) { + if (e.type == PhraseEvent::Type::LabelChanged) { + update(); + } +} + +void xmm::TrainingSet::update() { + labels_.clear(); + for (auto &phrase : phrases_) { + labels_.insert(phrase.second->label.get()); + } + sub_training_sets_.clear(); + for (std::string label : labels_) { + sub_training_sets_.insert(std::pair<std::string, TrainingSet>( + label, + {own_memory_ ? MemoryMode::OwnMemory : MemoryMode::SharedMemory, + bimodal_ ? Multimodality::Bimodal : Multimodality::Unimodal})); + sub_training_sets_[label].dimension.set(dimension.get()); + sub_training_sets_[label].dimension_input.set(dimension_input.get()); + sub_training_sets_[label].column_names = this->column_names; + // int newPhraseIndex(0); + for (auto &phrase : phrases_) { + if (phrase.second->label.get() == label) { + sub_training_sets_[label].phrases_[phrase.first] = + this->phrases_[phrase.first]; + // newPhraseIndex++; + } + } + } +} + +std::vector<float> xmm::TrainingSet::mean() const { + std::vector<float> mean(dimension.get(), 0.0); + unsigned int total_length(0); + for (auto &phrase : phrases_) { + for (unsigned int d = 0; d < dimension.get(); d++) { + for (unsigned int t = 0; t < phrase.second->size(); t++) { + mean[d] += phrase.second->getValue(t, d); + } + } + total_length += phrase.second->size(); + } + + for (unsigned int d = 0; d < dimension.get(); d++) + mean[d] /= float(total_length); + + return mean; +} + +std::vector<float> xmm::TrainingSet::standardDeviation() const { + std::vector<float> stddev(dimension.get()); + std::vector<float> _mean = mean(); + unsigned int total_length(0); + for (auto &phrase : phrases_) { + for (unsigned int d = 0; d < dimension.get(); d++) { + for (unsigned int t = 0; t < phrase.second->size(); t++) { + stddev[d] += (phrase.second->getValue(t, d) - _mean[d]) * + (phrase.second->getValue(t, d) - _mean[d]); + } + } + total_length += phrase.second->size(); + } + + for (unsigned int d = 0; d < dimension.get(); d++) { + stddev[d] /= float(total_length); + stddev[d] = sqrtf(stddev[d]); + } + + return stddev; +} + +std::vector<std::pair<float, float>> xmm::TrainingSet::minmax() const { + std::vector<std::pair<float, float>> minmax( + dimension.get(), {std::numeric_limits<float>::max(), + std::numeric_limits<float>::lowest()}); + if (bimodal_) { + for (auto &phrase : phrases_) { + for (unsigned int d = 0; d < dimension_input.get(); d++) { + for (unsigned int t = 0; t < phrase.second->inputSize(); t++) { + minmax[d].first = std::min(phrase.second->getValue(t, d), + minmax[d].first); + minmax[d].second = std::max(phrase.second->getValue(t, d), + minmax[d].second); + } + } + for (unsigned int d = dimension_input.get(); d < dimension.get(); + d++) { + for (unsigned int t = 0; t < phrase.second->outputSize(); t++) { + minmax[d].first = std::min(phrase.second->getValue(t, d), + minmax[d].first); + minmax[d].second = std::max(phrase.second->getValue(t, d), + minmax[d].second); + } + } + } + } else { + for (auto &phrase : phrases_) { + for (unsigned int d = 0; d < dimension.get(); d++) { + for (unsigned int t = 0; t < phrase.second->size(); t++) { + minmax[d].first = std::min(phrase.second->getValue(t, d), + minmax[d].first); + minmax[d].second = std::max(phrase.second->getValue(t, d), + minmax[d].second); + } + } + } + } + return minmax; +} + +void xmm::TrainingSet::rescale(std::vector<float> offset, + std::vector<float> gain) { + for (auto &phrase : phrases_) { + phrase.second->rescale(offset, gain); + } +} + +void xmm::TrainingSet::normalize() { + std::vector<float> offset = mean(); + std::vector<float> gain = standardDeviation(); + for (auto &v : gain) v = 1. / v; + rescale(offset, gain); +} + +Json::Value xmm::TrainingSet::toJson() const { + Json::Value root; + root["bimodal"] = bimodal_; + root["dimension"] = static_cast<int>(dimension.get()); + root["dimension_input"] = static_cast<int>(dimension_input.get()); + for (int i = 0; i < dimension.get(); i++) + root["column_names"][i] = column_names.at(i); + + // Add Phrases + root["phrases"].resize(static_cast<Json::ArrayIndex>(size())); + Json::ArrayIndex phraseIndex(0); + for (auto &phrase : phrases_) { + root["phrases"][phraseIndex] = phrase.second->toJson(); + root["phrases"][phraseIndex]["index"] = phrase.first; + phraseIndex++; + } + + return root; +} + +void xmm::TrainingSet::fromJson(Json::Value const &root) { + try { + TrainingSet tmp(root); + *this = tmp; + } catch (JsonException &e) { + throw e; + } +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/trainingset/xmmTrainingSet.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/trainingset/xmmTrainingSet.hpp new file mode 100644 index 0000000..6fa03c6 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/core/trainingset/xmmTrainingSet.hpp @@ -0,0 +1,357 @@ +/* + * xmmTrainingSet.hpp + * + * Multimodal Training Set + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmTrainingSet_h +#define xmmTrainingSet_h + +#include "xmmPhrase.hpp" +#include <map> +#include <set> +#include <memory> + +namespace xmm { +/** + @ingroup TrainingSet + @brief Base class for the definition of training sets + @details Training sets host a collection of phrases + */ +class TrainingSet : public Writable { + public: + /** + @brief Constructor + @param memoryMode Memory mode (owned vs shared) + @param multimodality Number of modalities + */ + TrainingSet(MemoryMode memoryMode = MemoryMode::OwnMemory, + Multimodality multimodality = Multimodality::Unimodal); + + /** + @brief Copy Constructor + @param src source Training Set + */ + TrainingSet(TrainingSet const& src); + + /** + @brief Constructor from Json Structure + @param root Json Value + */ + explicit TrainingSet(Json::Value const& root); + + /** + @brief Assignment Operator + @param src source Training Set + */ + TrainingSet& operator=(TrainingSet const& src); + + /** + @brief Destructor + @warning phrases are only deleted if the training set is unlocked + @see lock() + */ + virtual ~TrainingSet(); + + /** @name Accessors */ + ///@{ + + /** + @brief checks if the training set is owns the data + @return true if the training set owns data (construction with + MemoryMode::OwnMemory) + */ + bool ownMemory() const; + + /** + @brief checks if the training set is bimodal + @return true if the training set is bimodal (construction with + Multimodality::Bimodal) + */ + bool bimodal() const; + + ///@} + + /** @name Manipulate Phrases */ + ///@{ + + /** + @brief checks if the training set is empty + @return true if the training set is empty (no training phrases) + */ + bool empty() const; + + /** + @brief Size of the training set + @return size of the training set (number of phrases) + */ + unsigned int size() const; + + /** + @brief iterator to the beginning of phrases + */ + std::map<int, std::shared_ptr<xmm::Phrase>>::iterator begin(); + + /** + @brief iterator to the end of phrases + */ + std::map<int, std::shared_ptr<xmm::Phrase>>::iterator end(); + + /** + @brief reverse iterator to the beginning of phrases + */ + std::map<int, std::shared_ptr<xmm::Phrase>>::reverse_iterator rbegin(); + + /** + @brief reverse iterator to the end of phrases + */ + std::map<int, std::shared_ptr<xmm::Phrase>>::reverse_iterator rend(); + + /** + @brief constant iterator to the beginning of phrases + */ + std::map<int, std::shared_ptr<xmm::Phrase>>::const_iterator cbegin() const; + + /** + @brief constant iterator to the end of phrases + */ + std::map<int, std::shared_ptr<xmm::Phrase>>::const_iterator cend() const; + + /** + @brief constant reverse iterator to the beginning of phrases + */ + std::map<int, std::shared_ptr<xmm::Phrase>>::const_reverse_iterator + crbegin() const; + + /** + @brief constant reverse iterator to the end of phrases + */ + std::map<int, std::shared_ptr<xmm::Phrase>>::const_reverse_iterator crend() + const; + + /** + @brief add a new phrase, or reset the phrase if existing + @details The phrase is set to an empty phrase with the current attributes + (dimensions, etc). + The phrase is created if it does not exists at the given index. + @param phraseIndex index of the data phrase in the trainingSet + @param label Label of the phrase + */ + void addPhrase(int phraseIndex, std::string label = ""); + + /** + @brief add a new phrase, or reset the phrase if existing + @details The phrase is set to a copy of the phrase passed in argument + The phrase is created if it does not exists at the given index. + @param phraseIndex index of the data phrase in the trainingSet + @param phrase source phrase + */ + void addPhrase(int phraseIndex, Phrase const& phrase); + + /** + @brief add a new phrase, or reset the phrase if existing + @details The phrase is set to point to the existing phrase passed in + argument. + The phrase is created if it does not exists at the given index. + @param phraseIndex index of the data phrase in the trainingSet + @param phrase pointer to an existing phrase + */ + void addPhrase(int phraseIndex, std::shared_ptr<Phrase> phrase); + + /** + @brief delete a phrase + @warning if the training set is locked, the phrase iself is not deleted + (only the reference) + @param phraseIndex index of the phrase + @throws out_of_bounds if the phrase does not exist + */ + void removePhrase(int phraseIndex); + + /** + @brief delete all phrases of a given class + @warning if the training set is locked, the phrases themselves are not + deleted (only the references) + @param label label of the class to delete + @throws out_of_bounds if the label does not exist + */ + void removePhrasesOfClass(std::string const& label); + + /** + @brief Access Phrase by index + @param phraseIndex index of the phrase + @return pointer to the phrase if it exists, else nullptr + */ + std::shared_ptr<xmm::Phrase> getPhrase(int phraseIndex) const; + + /** + @brief get the pointer to the sub-training set containing all phrases with + a given label + @warning in order to protect the phrases in the current training set, the + sub-training set returned is locked + @param label target label + @return pointer to the sub-training set containing all phrases with a given + label + @throws out_of_range if the label does not exist + */ + TrainingSet* getPhrasesOfClass(std::string const& label); + + /** + @brief delete all phrases + @warning if the training set is locked, the phrases themselves are not + deleted (only their references) + */ + void clear(); + + /** + @brief get the list of labels currently in the training set + @return reference to the set of labels in the training set + */ + const std::set<std::string>& labels() const { return labels_; } + + ///@} + + /** @name JSON I/O */ + ///@{ + + /** + @brief Write the object to a JSON Structure + @return Json value containing the object's information + */ + Json::Value toJson() const; + + /** + @brief Read the object from a JSON Structure + @param root JSON value containing the object's information + @throws JsonException if the JSON value has a wrong format + */ + void fromJson(Json::Value const& root); + + ///@} + + /** @name Utilities */ + ///@{ + + /** + @brief Compute the global mean of all data phrases along the time axis + @return global mean of all phrases (along time axis, full-size) + */ + std::vector<float> mean() const; + + /** + @brief Compute the global standard deviation of all data phrases along the + time axis + @return global standard deviation of all phrases (along time axis, + full-size) + */ + std::vector<float> standardDeviation() const; + + /** + @brief Compute the global min/max of all data phrases along the time axis + @return vector of min/max pairs across all phrases (along time axis, + full-size) + */ + std::vector<std::pair<float, float>> minmax() const; + + /** + @brief rescale a phrase given an offset and gain + @param offset constant offset to be subtracted + @param gain gain to be applied + */ + void rescale(std::vector<float> offset, std::vector<float> gain); + + /** + @brief normalize the training set by rescaling all phrases to the mean/std + of the whole training set + */ + void normalize(); + + ///@} + + /** + @brief total dimension of the training data + */ + Attribute<unsigned int> dimension; + + /** + @brief dimension of the input modality in bimodal mode + */ + Attribute<unsigned int> dimension_input; + + /** + @brief labels of the columns of the training set (e.g. descriptor names) + */ + Attribute<std::vector<std::string>> column_names; + + protected: + /** + @brief Monitors the training of each Model of the group. + */ + void onPhraseEvent(PhraseEvent const& e); + + /** + @brief notification function called when a member attribute is changed + */ + virtual void onAttributeChange(AttributeBase* attr_pointer); + + /** + @brief create all the sub-training sets: one for each label + @details each subset contains only the phrase for the given label + */ + virtual void update(); + + /** + @brief defines if the phrase has its own memory + */ + bool own_memory_; + + /** + @brief defines if the phrase is bimodal + */ + bool bimodal_; + + /** + @brief Set containing all the labels present in the training set + */ + std::set<std::string> labels_; + + /** + @brief Training Phrases + @details Phrases are stored in a map: allows the easy addition/deletion of + phrases by index. + */ + std::map<int, std::shared_ptr<Phrase>> phrases_; + + /** + @brief Sub-ensembles of the training set for specific classes + */ + std::map<std::string, TrainingSet> sub_training_sets_; +}; +} + +#endif \ No newline at end of file diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmm.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmm.cpp new file mode 100644 index 0000000..67c69dc --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmm.cpp @@ -0,0 +1,271 @@ +/* + * xmmGmm.hpp + * + * Gaussian Mixture Model for Continuous Recognition and Regression + * (Multi-class) + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "xmmGmm.hpp" +#include "../kmeans/xmmKMeans.hpp" + +xmm::GMM::GMM(bool bimodal) : Model<SingleClassGMM, GMM>(bimodal) {} + +xmm::GMM::GMM(GMM const& src) + : Model<SingleClassGMM, GMM>(src), results(src.results) {} + +xmm::GMM::GMM(Json::Value const& root) : Model<SingleClassGMM, GMM>(root) {} + +xmm::GMM& xmm::GMM::operator=(GMM const& src) { + if (this != &src) { + Model<SingleClassGMM, GMM>::operator=(src); + results = src.results; + } + return *this; +} + +void xmm::GMM::updateResults() { + double maxLogLikelihood = 0.0; + double normconst_instant(0.0); + double normconst_smoothed(0.0); + int i(0); + for (auto it = this->models.begin(); it != this->models.end(); ++it, ++i) { + results.instant_likelihoods[i] = it->second.results.instant_likelihood; + results.smoothed_log_likelihoods[i] = it->second.results.log_likelihood; + results.smoothed_likelihoods[i] = + exp(results.smoothed_log_likelihoods[i]); + + results.instant_normalized_likelihoods[i] = + results.instant_likelihoods[i]; + results.smoothed_normalized_likelihoods[i] = + results.smoothed_likelihoods[i]; + + normconst_instant += results.instant_normalized_likelihoods[i]; + normconst_smoothed += results.smoothed_normalized_likelihoods[i]; + + if (i == 0 || results.smoothed_log_likelihoods[i] > maxLogLikelihood) { + maxLogLikelihood = results.smoothed_log_likelihoods[i]; + results.likeliest = it->first; + } + } + + i = 0; + for (auto it = this->models.begin(); it != this->models.end(); ++it, ++i) { + results.instant_normalized_likelihoods[i] /= normconst_instant; + results.smoothed_normalized_likelihoods[i] /= normconst_smoothed; + } +} + +#pragma mark - +#pragma mark Performance +void xmm::GMM::reset() { + results.instant_likelihoods.resize(size()); + results.instant_normalized_likelihoods.resize(size()); + results.smoothed_likelihoods.resize(size()); + results.smoothed_normalized_likelihoods.resize(size()); + results.smoothed_log_likelihoods.resize(size()); + if (shared_parameters->bimodal.get()) { + unsigned int dimension_output = shared_parameters->dimension.get() - + shared_parameters->dimension_input.get(); + results.output_values.resize(dimension_output); + results.output_covariance.assign( + (configuration.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) + ? dimension_output * dimension_output + : dimension_output, + 0.0); + } + for (auto& model : models) { + model.second.reset(); + } +} + +void xmm::GMM::filter(std::vector<float> const& observation) { + checkTraining(); + int i(0); + for (auto& model : models) { + results.instant_likelihoods[i] = model.second.filter(observation); + i++; + } + + updateResults(); + + if (shared_parameters->bimodal.get()) { + unsigned int dimension = shared_parameters->dimension.get(); + unsigned int dimension_input = shared_parameters->dimension_input.get(); + unsigned int dimension_output = dimension - dimension_input; + + if (configuration.multiClass_regression_estimator == + MultiClassRegressionEstimator::Likeliest) { + results.output_values = + models[results.likeliest].results.output_values; + results.output_covariance = + models[results.likeliest].results.output_covariance; + + } else { + results.output_values.assign(dimension_output, 0.0); + results.output_covariance.assign( + (configuration.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) + ? dimension_output * dimension_output + : dimension_output, + 0.0); + + int i(0); + for (auto& model : models) { + for (int d = 0; d < dimension_output; d++) { + results.output_values[d] += + results.smoothed_normalized_likelihoods[i] * + model.second.results.output_values[d]; + if ((configuration.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full)) { + for (int d2 = 0; d2 < dimension_output; d2++) + results + .output_covariance[d * dimension_output + d2] += + results.smoothed_normalized_likelihoods[i] * + model.second.results + .output_covariance[d * dimension_output + + d2]; + } else { + results.output_covariance[d] += + results.smoothed_normalized_likelihoods[i] * + model.second.results.output_covariance[d]; + } + } + i++; + } + } + } +} + +//#pragma mark > Conversion & Extraction +// void xmm::GMM::makeBimodal(unsigned int dimension_input) +//{ +// check_training(); +// if (bimodal_) +// throw std::runtime_error("The model is already bimodal"); +// if (dimension_input >= dimension()) +// throw std::out_of_range("Request input dimension exceeds the current +// dimension"); +// +// try { +// this->referenceModel_.makeBimodal(dimension_input); +// } catch (std::exception const& e) { +// } +// bimodal_ = true; +// for (model_iterator it=this->models.begin(); it != this->models.end(); +// ++it) { +// it->second.makeBimodal(dimension_input); +// } +// set_trainingSet(NULL); +// results_predicted_output.resize(dimension() - this->dimension_input()); +// results_output_variance.resize(dimension() - this->dimension_input()); +//} +// +// void xmm::GMM::makeUnimodal() +//{ +// check_training(); +// if (!bimodal_) +// throw std::runtime_error("The model is already unimodal"); +// this->referenceModel_.makeUnimodal(); +// for (model_iterator it=this->models.begin(); it != this->models.end(); +// ++it) { +// it->second.makeUnimodal(); +// } +// set_trainingSet(NULL); +// results_predicted_output.clear(); +// results_output_variance.clear(); +// bimodal_ = false; +//} +// +// xmm::GMM xmm::GMM::extractSubmodel(std::vector<unsigned int>& columns) const +//{ +// check_training(); +// if (columns.size() > this->dimension()) +// throw std::out_of_range("requested number of columns exceeds the +// dimension of the current model"); +// for (unsigned int column=0; column<columns.size(); ++column) { +// if (columns[column] >= this->dimension()) +// throw std::out_of_range("Some column indices exceeds the dimension +// of the current model"); +// } +// GMM target_model(*this); +// target_model.set_trainingSet(NULL); +// target_model.bimodal_ = false; +// target_model.referenceModel_ = +// this->referenceModel_.extractSubmodel(columns); +// for (model_iterator it=target_model.models.begin(); it != +// target_model.models.end(); ++it) { +// it->second = this->models.at(it->first).extractSubmodel(columns); +// } +// target_model.results_predicted_output.clear(); +// target_model.results_output_variance.clear(); +// return target_model; +//} +// +// xmm::GMM xmm::GMM::extractSubmodel_input() const +//{ +// check_training(); +// if (!bimodal_) +// throw std::runtime_error("The model needs to be bimodal"); +// std::vector<unsigned int> columns_input(dimension_input()); +// for (unsigned int i=0; i<dimension_input(); ++i) { +// columns_input[i] = i; +// } +// return extractSubmodel(columns_input); +//} +// +// xmm::GMM xmm::GMM::extractSubmodel_output() const +//{ +// check_training(); +// if (!bimodal_) +// throw std::runtime_error("The model needs to be bimodal"); +// std::vector<unsigned int> columns_output(dimension() - dimension_input()); +// for (unsigned int i=dimension_input(); i<dimension(); ++i) { +// columns_output[i-dimension_input()] = i; +// } +// return extractSubmodel(columns_output); +//} +// +// xmm::GMM xmm::GMM::extract_inverse_model() const +//{ +// check_training(); +// if (!bimodal_) +// throw std::runtime_error("The model needs to be bimodal"); +// std::vector<unsigned int> columns(dimension()); +// for (unsigned int i=0; i<dimension()-dimension_input(); ++i) { +// columns[i] = i+dimension_input(); +// } +// for (unsigned int i=dimension()-dimension_input(), j=0; i<dimension(); ++i, +// ++j) { +// columns[i] = j; +// } +// GMM target_model = extractSubmodel(columns); +// target_model.makeBimodal(dimension()-dimension_input()); +// return target_model; +//} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmm.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmm.hpp new file mode 100644 index 0000000..03d9247 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmm.hpp @@ -0,0 +1,158 @@ +/* + * xmmGmm.hpp + * + * Gaussian Mixture Model for Continuous Recognition and Regression + * (Multi-class) + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmGmm_h +#define xmmGmm_h + +#include "../../core/distributions/xmmGaussianDistribution.hpp" +#include "../../core/model/xmmModel.hpp" +#include "xmmGmmSingleClass.hpp" + +namespace xmm { +/** + @ingroup GMM + @brief Gaussian Mixture Model for Continuous Recognition and Regression + (Multi-class) + */ +class GMM : public Model<SingleClassGMM, GMM> { + public: + /** + @brief Constructor + @param bimodal specifies if the model should be used for regression + */ + GMM(bool bimodal = false); + + /** + @brief Copy Constructor + @param src Source Model + */ + GMM(GMM const& src); + + /** + @brief Constructor from Json Structure + @param root Json Value + */ + explicit GMM(Json::Value const& root); + + /** + @brief Assignment + @param src Source Model + */ + GMM& operator=(GMM const& src); + + /** @name Performance */ + ///@{ + + /** + @brief Resets the fitering process (recognition or regression) + */ + virtual void reset(); + + /** + @brief filters a incoming observation (performs recognition or regression) + @details the results of the inference process are stored in the results + attribute + @param observation observation vector + */ + virtual void filter(std::vector<float> const& observation); + + ///@} + + // + // /** + // @brief Convert to bimodal GMM in place + // @param dimension_input dimension of the input modality + // @throws runtime_error if the model is already bimodal + // @throws out_of_range if the requested input dimension is too + // large + // */ + // void makeBimodal(unsigned int dimension_input); + // + // /** + // @brief Convert to unimodal GMM in place + // @throws runtime_error if the model is already unimodal + // */ + // void makeUnimodal(); + // + // /** + // @brief extract a submodel with the given columns + // @param columns columns indices in the target order + // @throws runtime_error if the model is training + // @throws out_of_range if the number or indices of the requested + // columns exceeds the current dimension + // @return a GMM from the current model considering only the target + // columns + // */ + // GMM extractSubmodel(std::vector<unsigned int>& columns) const; + // + // /** + // @brief extract the submodel of the input modality + // @throws runtime_error if the model is training or if it is not + // bimodal + // @return a unimodal GMM of the input modality from the current + // bimodal model + // */ + // GMM extractSubmodel_input() const; + // + // /** + // @brief extract the submodel of the output modality + // @throws runtime_error if the model is training or if it is not + // bimodal + // @return a unimodal GMM of the output modality from the current + // bimodal model + // */ + // GMM extractSubmodel_output() const; + // + // /** + // @brief extract the model with reversed input and output + // modalities + // @throws runtime_error if the model is training or if it is not + // bimodal + // @return a bimodal GMM that swaps the input and output modalities + // */ + // GMM extract_inverse_model() const; + + /** + @brief Results of the Filtering Process (Recognition + Regression) + */ + Results<GMM> results; + + protected: + /** + @brief Update the results (Likelihoods) + */ + virtual void updateResults(); +}; +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmmParameters.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmmParameters.cpp new file mode 100644 index 0000000..3e4fdb7 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmmParameters.cpp @@ -0,0 +1,132 @@ +/* + * xmmGmmParameters.cpp + * + * Parameters of Gaussian Mixture Models + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "xmmGmmParameters.hpp" + +xmm::ClassParameters<xmm::GMM>::ClassParameters() + : changed(true), + gaussians(10, 1), + relative_regularization(1.0e-2, 1e-20), + absolute_regularization(1.0e-3, 1e-20), + covariance_mode(GaussianDistribution::CovarianceMode::Full) { + gaussians.onAttributeChange( + this, &xmm::ClassParameters<xmm::GMM>::onAttributeChange); + relative_regularization.onAttributeChange( + this, &xmm::ClassParameters<xmm::GMM>::onAttributeChange); + absolute_regularization.onAttributeChange( + this, &xmm::ClassParameters<xmm::GMM>::onAttributeChange); + covariance_mode.onAttributeChange( + this, &xmm::ClassParameters<xmm::GMM>::onAttributeChange); +} + +xmm::ClassParameters<xmm::GMM>::ClassParameters(ClassParameters<GMM> const& src) + : changed(true), + gaussians(src.gaussians), + relative_regularization(src.relative_regularization), + absolute_regularization(src.absolute_regularization), + covariance_mode(src.covariance_mode) { + gaussians.onAttributeChange( + this, &xmm::ClassParameters<xmm::GMM>::onAttributeChange); + relative_regularization.onAttributeChange( + this, &xmm::ClassParameters<xmm::GMM>::onAttributeChange); + absolute_regularization.onAttributeChange( + this, &xmm::ClassParameters<xmm::GMM>::onAttributeChange); + covariance_mode.onAttributeChange( + this, &xmm::ClassParameters<xmm::GMM>::onAttributeChange); +} + +xmm::ClassParameters<xmm::GMM>::ClassParameters(Json::Value const& root) + : changed(true), + gaussians(10, 1), + relative_regularization(1.0e-2, 1e-20), + absolute_regularization(1.0e-3, 1e-20), + covariance_mode(GaussianDistribution::CovarianceMode::Full) { + gaussians.onAttributeChange( + this, &xmm::ClassParameters<xmm::GMM>::onAttributeChange); + relative_regularization.onAttributeChange( + this, &xmm::ClassParameters<xmm::GMM>::onAttributeChange); + absolute_regularization.onAttributeChange( + this, &xmm::ClassParameters<xmm::GMM>::onAttributeChange); + covariance_mode.onAttributeChange( + this, &xmm::ClassParameters<xmm::GMM>::onAttributeChange); + + gaussians.set(root["gaussians"].asInt()); + relative_regularization.set(root["relative_regularization"].asFloat()); + absolute_regularization.set(root["absolute_regularization"].asFloat()); + covariance_mode.set(static_cast<GaussianDistribution::CovarianceMode>( + root["covariance_mode"].asInt())); +} + +xmm::ClassParameters<xmm::GMM>& xmm::ClassParameters<xmm::GMM>::operator=( + ClassParameters<GMM> const& src) { + if (this != &src) { + changed = true; + gaussians = src.gaussians; + relative_regularization = src.relative_regularization; + absolute_regularization = src.absolute_regularization; + covariance_mode = src.covariance_mode; + + gaussians.onAttributeChange( + this, &xmm::ClassParameters<xmm::GMM>::onAttributeChange); + relative_regularization.onAttributeChange( + this, &xmm::ClassParameters<xmm::GMM>::onAttributeChange); + absolute_regularization.onAttributeChange( + this, &xmm::ClassParameters<xmm::GMM>::onAttributeChange); + covariance_mode.onAttributeChange( + this, &xmm::ClassParameters<xmm::GMM>::onAttributeChange); + } + return *this; +} + +Json::Value xmm::ClassParameters<xmm::GMM>::toJson() const { + Json::Value root; + root["gaussians"] = static_cast<int>(gaussians.get()); + root["relative_regularization"] = relative_regularization.get(); + root["absolute_regularization"] = absolute_regularization.get(); + root["covariance_mode"] = static_cast<int>(covariance_mode.get()); + return root; +} + +void xmm::ClassParameters<xmm::GMM>::fromJson(Json::Value const& root) { + try { + ClassParameters<GMM> tmp(root); + *this = tmp; + } catch (JsonException& e) { + throw e; + } +} + +void xmm::ClassParameters<xmm::GMM>::onAttributeChange( + AttributeBase* attr_pointer) { + changed = true; + attr_pointer->changed = false; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmmParameters.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmmParameters.hpp new file mode 100644 index 0000000..bafd8c5 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmmParameters.hpp @@ -0,0 +1,132 @@ +/* + * xmmGmmParameters.hpp + * + * Parameters of Gaussian Mixture Models + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmGMMParameters_hpp +#define xmmGMMParameters_hpp + +#include "../../core/distributions/xmmGaussianDistribution.hpp" +#include "../../core/model/xmmModelParameters.hpp" + +namespace xmm { +/** + @defgroup GMM [Models] Gaussian Mixture Models + */ + +/** + Dummy structure for template specialization + */ +class GMM; + +/** + @ingroup GMM + @brief Parameters specific to each class of a Gaussian Mixture Model + */ +template <> +class ClassParameters<GMM> : public Writable { + public: + /** + @brief Default Constructor + */ + ClassParameters(); + + /** + @brief Copy Constructor + @param src Source Object + */ + ClassParameters(ClassParameters<GMM> const& src); + + /** + @brief Constructor from Json Structure + @param root Json Value + */ + explicit ClassParameters(Json::Value const& root); + + /** + @brief Assignment + @param src Source Object + */ + ClassParameters& operator=(ClassParameters<GMM> const& src); + + /** @name Json I/O */ + ///@{ + + /** + @brief Write the object to a JSON Structure + @return Json value containing the object's information + */ + Json::Value toJson() const; + + /** + @brief Read the object from a JSON Structure + @param root JSON value containing the object's information + @throws JsonException if the JSON value has a wrong format + */ + virtual void fromJson(Json::Value const& root); + + ///@} + + /** + @brief specifies if parameters have changed (model is invalid) + */ + bool changed = false; + + /** + @brief Number of Gaussian Mixture Components + */ + Attribute<unsigned int> gaussians; + + /** + @brief Offset Added to the diagonal of covariance matrices for convergence + (Relative to Data Variance) + */ + Attribute<double> relative_regularization; + + /** + @brief Offset Added to the diagonal of covariance matrices for convergence + (minimum value) + */ + Attribute<double> absolute_regularization; + + /** + @brief Covariance Mode + */ + Attribute<GaussianDistribution::CovarianceMode> covariance_mode; + + protected: + /** + @brief notification function called when a member attribute is changed + */ + virtual void onAttributeChange(AttributeBase* attr_pointer); +}; +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmmSingleClass.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmmSingleClass.cpp new file mode 100644 index 0000000..64d7bd3 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmmSingleClass.cpp @@ -0,0 +1,641 @@ +/* + * xmmGmmSingleClass.cpp + * + * Gaussian Mixture Model Definition for a Single Class + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "../kmeans/xmmKMeans.hpp" +#include "xmmGmmSingleClass.hpp" +#include <algorithm> + +xmm::SingleClassGMM::SingleClassGMM(std::shared_ptr<SharedParameters> p) + : SingleClassProbabilisticModel(p) {} + +xmm::SingleClassGMM::SingleClassGMM(SingleClassGMM const& src) + : SingleClassProbabilisticModel(src), + parameters(src.parameters), + components(src.components), + mixture_coeffs(src.mixture_coeffs) { + beta.resize(parameters.gaussians.get()); +} + +xmm::SingleClassGMM::SingleClassGMM(std::shared_ptr<SharedParameters> p, + Json::Value const& root) + : SingleClassProbabilisticModel(p, root) { + parameters.fromJson(root["parameters"]); + + allocate(); + + json2vector(root["mixture_coeffs"], mixture_coeffs, + parameters.gaussians.get()); + + int c(0); + for (auto p : root["components"]) { + components[c++].fromJson(p); + } + + updateInverseCovariances(); +} + +xmm::SingleClassGMM& xmm::SingleClassGMM::operator=(SingleClassGMM const& src) { + if (this != &src) { + SingleClassProbabilisticModel::operator=(src); + parameters = src.parameters; + beta.resize(parameters.gaussians.get()); + mixture_coeffs = src.mixture_coeffs; + components = src.components; + } + return *this; +}; + +void xmm::SingleClassGMM::reset() { SingleClassProbabilisticModel::reset(); } + +double xmm::SingleClassGMM::filter(std::vector<float> const& observation) { + check_training(); + double instantaneous_likelihood = likelihood(observation); + if (shared_parameters->bimodal.get()) { + regression(observation); + } + return instantaneous_likelihood; +} + +void xmm::SingleClassGMM::emAlgorithmInit(TrainingSet* trainingSet) { + initParametersToDefault(trainingSet->standardDeviation()); + initMeansWithKMeans(trainingSet); + initCovariances_fullyObserved(trainingSet); + addCovarianceOffset(); + updateInverseCovariances(); +} + +Json::Value xmm::SingleClassGMM::toJson() const { + check_training(); + Json::Value root = SingleClassProbabilisticModel::toJson(); + root["mixture_coeffs"] = vector2json(mixture_coeffs); + root["parameters"] = parameters.toJson(); + root["components"].resize( + static_cast<Json::ArrayIndex>(parameters.gaussians.get())); + for (int c = 0; c < parameters.gaussians.get(); c++) { + root["components"][c] = components[c].toJson(); + } + return root; +} + +void xmm::SingleClassGMM::fromJson(Json::Value const& root) { + check_training(); + try { + SingleClassGMM tmp(shared_parameters, root); + *this = tmp; + } catch (JsonException& e) { + throw e; + } +} + +// void xmm::SingleClassGMM::makeBimodal(unsigned int dimension_input) +//{ +// check_training(); +// if (bimodal_) +// throw std::runtime_error("The model is already bimodal"); +// if (dimension_input >= dimension_) +// throw std::out_of_range("Request input dimension exceeds the current +// dimension"); +// flags_ = BIMODAL; +// bimodal_ = true; +// dimension_input_ = dimension_input; +// for (mixture_iterator component = components.begin() ; component != +// components.end(); ++component) { +// component->makeBimodal(dimension_input); +// } +// baseResults_predicted_output.resize(dimension_ - dimension_input_); +// results.output_variance.resize(dimension_ - dimension_input_); +//} +// +// void xmm::SingleClassGMM::makeUnimodal() +//{ +// check_training(); +// if (!bimodal_) +// throw std::runtime_error("The model is already unimodal"); +// flags_ = NONE; +// bimodal_ = false; +// dimension_input_ = 0; +// for (mixture_iterator component = components.begin() ; component != +// components.end(); ++component) { +// component->makeUnimodal(); +// } +// baseResults_predicted_output.clear(); +// results.output_variance.clear(); +//} +// +// xmm::SingleClassGMM +// xmm::SingleClassGMM::extractSubmodel(std::vector<unsigned int>& columns) const +//{ +// check_training(); +// if (columns.size() > dimension_) +// throw std::out_of_range("requested number of columns exceeds the +// dimension of the current model"); +// for (unsigned int column=0; column<columns.size(); ++column) { +// if (columns[column] >= dimension_) +// throw std::out_of_range("Some column indices exceeds the dimension +// of the current model"); +// } +// unsigned int new_dim =columns.size(); +// GMM target_model(*this); +// target_model.setTrainingCallback(NULL, NULL); +// target_model.bimodal_ = false; +// target_model.dimension_ = static_cast<unsigned int>(new_dim); +// target_model.dimension_input_ = 0; +// target_model.flags_ = NONE; +// target_model.allocate(); +// for (unsigned int c=0; c<nbMixtureComponents_; ++c) { +// target_model.components[c] = components[c].extractSubmodel(columns); +// } +// target_model.baseResults_predicted_output.clear(); +// target_model.results.output_variance.clear(); +// return target_model; +//} +// +// xmm::SingleClassGMM xmm::SingleClassGMM::extractSubmodel_input() const +//{ +// check_training(); +// if (!bimodal_) +// throw std::runtime_error("The model needs to be bimodal"); +// std::vector<unsigned int> columns_input(dimension_input_); +// for (unsigned int i=0; i<dimension_input_; ++i) { +// columns_input[i] = i; +// } +// return extractSubmodel(columns_input); +//} +// +// xmm::SingleClassGMM xmm::SingleClassGMM::extractSubmodel_output() const +//{ +// check_training(); +// if (!bimodal_) +// throw std::runtime_error("The model needs to be bimodal"); +// std::vector<unsigned int> columns_output(dimension_ - dimension_input_); +// for (unsigned int i=dimension_input_; i<dimension_; ++i) { +// columns_output[i-dimension_input_] = i; +// } +// return extractSubmodel(columns_output); +//} +// +// xmm::SingleClassGMM xmm::SingleClassGMM::extract_inverse_model() const +//{ +// check_training(); +// if (!bimodal_) +// throw std::runtime_error("The model needs to be bimodal"); +// std::vector<unsigned int> columns(dimension_); +// for (unsigned int i=0; i<dimension_-dimension_input_; ++i) { +// columns[i] = i+dimension_input_; +// } +// for (unsigned int i=dimension_-dimension_input_, j=0; i<dimension_; ++i, +// ++j) { +// columns[i] = j; +// } +// GMM target_model = extractSubmodel(columns); +// target_model.makeBimodal(dimension_-dimension_input_); +// return target_model; +//} + +void xmm::SingleClassGMM::allocate() { + mixture_coeffs.resize(parameters.gaussians.get()); + beta.resize(parameters.gaussians.get()); + components.assign( + parameters.gaussians.get(), + GaussianDistribution(shared_parameters->bimodal.get(), + shared_parameters->dimension.get(), + shared_parameters->dimension_input.get(), + parameters.covariance_mode.get())); +} + +double xmm::SingleClassGMM::obsProb(const float* observation, + int mixtureComponent) const { + double p(0.); + + if (mixtureComponent < 0) { + for (mixtureComponent = 0; + mixtureComponent < parameters.gaussians.get(); + mixtureComponent++) { + p += obsProb(observation, mixtureComponent); + } + } else { + if (mixtureComponent >= parameters.gaussians.get()) + throw std::out_of_range( + "The index of the Gaussian Mixture Component is out of bounds"); + p = mixture_coeffs[mixtureComponent] * + components[mixtureComponent].likelihood(observation); + } + + return p; +} + +double xmm::SingleClassGMM::obsProb_input(const float* observation_input, + int mixtureComponent) const { + if (!shared_parameters->bimodal.get()) + throw std::runtime_error( + "Model is not bimodal. Use the function 'obsProb'"); + double p(0.); + + if (mixtureComponent < 0) { + for (mixtureComponent = 0; + mixtureComponent < parameters.gaussians.get(); + mixtureComponent++) { + p += obsProb_input(observation_input, mixtureComponent); + } + } else { + p = mixture_coeffs[mixtureComponent] * + components[mixtureComponent].likelihood_input(observation_input); + } + + return p; +} + +double xmm::SingleClassGMM::obsProb_bimodal(const float* observation_input, + const float* observation_output, + int mixtureComponent) const { + if (!shared_parameters->bimodal.get()) + throw std::runtime_error( + "Model is not bimodal. Use the function 'obsProb'"); + double p(0.); + + if (mixtureComponent < 0) { + for (mixtureComponent = 0; + mixtureComponent < parameters.gaussians.get(); + mixtureComponent++) { + p += obsProb_bimodal(observation_input, observation_output, + mixtureComponent); + } + } else { + p = mixture_coeffs[mixtureComponent] * + components[mixtureComponent].likelihood_bimodal(observation_input, + observation_output); + } + + return p; +} + +void xmm::SingleClassGMM::initMeansWithKMeans(TrainingSet* trainingSet) { + if (!trainingSet || trainingSet->empty()) return; + int dimension = static_cast<int>(shared_parameters->dimension.get()); + + KMeans kmeans(parameters.gaussians.get()); + kmeans.initialization_mode = KMeans::InitializationMode::Biased; + kmeans.train(trainingSet); + for (int c = 0; c < parameters.gaussians.get(); c++) { + for (unsigned int d = 0; d < dimension; ++d) { + components[c].mean[d] = kmeans.centers[c * dimension + d]; + } + } +} + +void xmm::SingleClassGMM::initCovariances_fullyObserved( + TrainingSet* trainingSet) { + // TODO: simplify with covariance symmetricity + // TODO: If Kmeans, covariances from cluster members + if (!trainingSet || trainingSet->empty()) return; + int dimension = static_cast<int>(shared_parameters->dimension.get()); + + if (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) { + for (int n = 0; n < parameters.gaussians.get(); n++) + components[n].covariance.assign(dimension * dimension, 0.0); + } else { + for (int n = 0; n < parameters.gaussians.get(); n++) + components[n].covariance.assign(dimension, 0.0); + } + + std::vector<double> gmeans(parameters.gaussians.get() * dimension, 0.0); + std::vector<int> factor(parameters.gaussians.get(), 0); + for (auto phrase_it = trainingSet->begin(); phrase_it != trainingSet->end(); + phrase_it++) { + unsigned int step = + phrase_it->second->size() / parameters.gaussians.get(); + unsigned int offset(0); + for (int n = 0; n < parameters.gaussians.get(); n++) { + for (int t = 0; t < step; t++) { + for (int d1 = 0; d1 < dimension; d1++) { + gmeans[n * dimension + d1] += + phrase_it->second->getValue(offset + t, d1); + if (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) { + for (int d2 = 0; d2 < dimension; d2++) { + components[n].covariance[d1 * dimension + d2] += + phrase_it->second->getValue(offset + t, d1) * + phrase_it->second->getValue(offset + t, d2); + } + } else { + float value = + phrase_it->second->getValue(offset + t, d1); + components[n].covariance[d1] += value * value; + } + } + } + offset += step; + factor[n] += step; + } + } + + for (int n = 0; n < parameters.gaussians.get(); n++) { + for (int d1 = 0; d1 < dimension; d1++) { + gmeans[n * dimension + d1] /= factor[n]; + if (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) { + for (int d2 = 0; d2 < dimension; d2++) + components[n].covariance[d1 * dimension + d2] /= factor[n]; + } else { + components[n].covariance[d1] /= factor[n]; + } + } + } + + for (int n = 0; n < parameters.gaussians.get(); n++) { + for (int d1 = 0; d1 < dimension; d1++) { + if (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) { + for (int d2 = 0; d2 < dimension; d2++) + components[n].covariance[d1 * dimension + d2] -= + gmeans[n * dimension + d1] * gmeans[n * dimension + d2]; + } else { + components[n].covariance[d1] -= + gmeans[n * dimension + d1] * gmeans[n * dimension + d1]; + } + } + } +} + +double xmm::SingleClassGMM::emAlgorithmUpdate(TrainingSet* trainingSet) { + int dimension = static_cast<int>(shared_parameters->dimension.get()); + double log_prob(0.); + + int totalLength(0); + for (auto it = trainingSet->cbegin(); it != trainingSet->cend(); ++it) + totalLength += it->second->size(); + + std::vector<std::vector<double> > p(parameters.gaussians.get()); + std::vector<double> E(parameters.gaussians.get(), 0.0); + for (int c = 0; c < parameters.gaussians.get(); c++) { + p[c].resize(totalLength); + E[c] = 0.; + } + + int tbase(0); + + for (auto it = trainingSet->cbegin(); it != trainingSet->cend(); ++it) { + unsigned int T = it->second->size(); + for (int t = 0; t < T; t++) { + double norm_const(0.); + for (int c = 0; c < parameters.gaussians.get(); c++) { + if (shared_parameters->bimodal.get()) { + p[c][tbase + t] = + obsProb_bimodal(it->second->getPointer_input(t), + it->second->getPointer_output(t), c); + } else { + p[c][tbase + t] = obsProb(it->second->getPointer(t), c); + } + + if (p[c][tbase + t] == 0. || std::isnan(p[c][tbase + t]) || + std::isinf(p[c][tbase + t])) { + p[c][tbase + t] = 1e-100; + } + norm_const += p[c][tbase + t]; + } + for (int c = 0; c < parameters.gaussians.get(); c++) { + p[c][tbase + t] /= norm_const; + E[c] += p[c][tbase + t]; + } + log_prob += log(norm_const); + } + tbase += T; + } + + // Estimate Mixture coefficients + for (int c = 0; c < parameters.gaussians.get(); c++) { + mixture_coeffs[c] = E[c] / double(totalLength); + } + + // Estimate means + for (int c = 0; c < parameters.gaussians.get(); c++) { + for (int d = 0; d < dimension; d++) { + components[c].mean[d] = 0.; + tbase = 0; + for (auto it = trainingSet->cbegin(); it != trainingSet->cend(); + ++it) { + unsigned int T = it->second->size(); + for (int t = 0; t < T; t++) { + components[c].mean[d] += + p[c][tbase + t] * it->second->getValue(t, d); + } + tbase += T; + } + components[c].mean[d] /= E[c]; + } + } + + // estimate covariances + if (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) { + for (int c = 0; c < parameters.gaussians.get(); c++) { + for (int d1 = 0; d1 < dimension; d1++) { + for (int d2 = d1; d2 < dimension; d2++) { + components[c].covariance[d1 * dimension + d2] = 0.; + tbase = 0; + for (auto it = trainingSet->cbegin(); + it != trainingSet->cend(); ++it) { + unsigned int T = it->second->size(); + for (int t = 0; t < T; t++) { + components[c].covariance[d1 * dimension + d2] += + p[c][tbase + t] * (it->second->getValue(t, d1) - + components[c].mean[d1]) * + (it->second->getValue(t, d2) - + components[c].mean[d2]); + } + tbase += T; + } + components[c].covariance[d1 * dimension + d2] /= E[c]; + if (d1 != d2) + components[c].covariance[d2 * dimension + d1] = + components[c].covariance[d1 * dimension + d2]; + } + } + } + } else { + for (int c = 0; c < parameters.gaussians.get(); c++) { + for (int d1 = 0; d1 < dimension; d1++) { + components[c].covariance[d1] = 0.; + tbase = 0; + for (auto it = trainingSet->cbegin(); it != trainingSet->cend(); + ++it) { + unsigned int T = it->second->size(); + for (int t = 0; t < T; t++) { + float value = (it->second->getValue(t, d1) - + components[c].mean[d1]); + components[c].covariance[d1] += + p[c][tbase + t] * value * value; + } + tbase += T; + } + components[c].covariance[d1] /= E[c]; + } + } + } + + addCovarianceOffset(); + updateInverseCovariances(); + + return log_prob; +} + +void xmm::SingleClassGMM::initParametersToDefault( + std::vector<float> const& dataStddev) { + int dimension = static_cast<int>(shared_parameters->dimension.get()); + + double norm_coeffs(0.); + current_regularization.resize(dataStddev.size()); + for (int i = 0; i < dataStddev.size(); i++) { + current_regularization[i] = + std::max(parameters.absolute_regularization.get(), + parameters.relative_regularization.get() * dataStddev[i]); + } + for (int c = 0; c < parameters.gaussians.get(); c++) { + if (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) { + components[c].covariance.assign( + dimension * dimension, + parameters.absolute_regularization.get() / 2.); + } else { + components[c].covariance.assign(dimension, 0.); + } + components[c].regularize(current_regularization); + mixture_coeffs[c] = 1. / float(parameters.gaussians.get()); + norm_coeffs += mixture_coeffs[c]; + } + for (int c = 0; c < parameters.gaussians.get(); c++) { + mixture_coeffs[c] /= norm_coeffs; + } +} + +void xmm::SingleClassGMM::normalizeMixtureCoeffs() { + double norm_const(0.); + for (int c = 0; c < parameters.gaussians.get(); c++) { + norm_const += mixture_coeffs[c]; + } + if (norm_const > 0) { + for (int c = 0; c < parameters.gaussians.get(); c++) { + mixture_coeffs[c] /= norm_const; + } + } else { + for (int c = 0; c < parameters.gaussians.get(); c++) { + mixture_coeffs[c] = 1 / float(parameters.gaussians.get()); + } + } +} + +void xmm::SingleClassGMM::addCovarianceOffset() { + for (auto& component : components) { + component.regularize(current_regularization); + } +} + +void xmm::SingleClassGMM::updateInverseCovariances() { + try { + for (auto& component : components) { + component.updateInverseCovariance(); + } + } catch (std::exception& e) { + throw std::runtime_error( + "Matrix inversion error: varianceoffset must be too small"); + } +} + +void xmm::SingleClassGMM::regression( + std::vector<float> const& observation_input) { + check_training(); + unsigned int dimension_output = shared_parameters->dimension.get() - + shared_parameters->dimension_input.get(); + results.output_values.assign(dimension_output, 0.0); + results.output_covariance.assign( + (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) + ? dimension_output * dimension_output + : dimension_output, + 0.0); + std::vector<float> tmp_output_values(dimension_output, 0.0); + + for (int c = 0; c < parameters.gaussians.get(); c++) { + components[c].regression(observation_input, tmp_output_values); + for (int d = 0; d < dimension_output; ++d) { + results.output_values[d] += beta[c] * tmp_output_values[d]; + if (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) { + for (int d2 = 0; d2 < dimension_output; ++d2) + results.output_covariance[d * dimension_output + d2] += + beta[c] * beta[c] * + components[c] + .output_covariance[d * dimension_output + d2]; + } else { + results.output_covariance[d] += + beta[c] * beta[c] * components[c].output_covariance[d]; + } + } + } +} + +double xmm::SingleClassGMM::likelihood( + std::vector<float> const& observation, + std::vector<float> const& observation_output) { + check_training(); + double likelihood(0.); + for (int c = 0; c < parameters.gaussians.get(); c++) { + if (shared_parameters->bimodal.get()) { + if (observation_output.empty()) + beta[c] = obsProb_input(&observation[0], c); + else + beta[c] = + obsProb_bimodal(&observation[0], &observation_output[0], c); + } else { + beta[c] = obsProb(&observation[0], c); + } + likelihood += beta[c]; + } + for (int c = 0; c < parameters.gaussians.get(); c++) { + beta[c] /= likelihood; + } + + results.instant_likelihood = likelihood; + updateResults(); + return likelihood; +} + +void xmm::SingleClassGMM::updateResults() { + likelihood_buffer_.push(log(results.instant_likelihood)); + results.log_likelihood = 0.0; + unsigned int bufSize = likelihood_buffer_.size_t(); + for (unsigned int i = 0; i < bufSize; i++) { + results.log_likelihood += likelihood_buffer_(0, i); + } + results.log_likelihood /= double(bufSize); +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmmSingleClass.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmmSingleClass.hpp new file mode 100644 index 0000000..2543de0 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/gmm/xmmGmmSingleClass.hpp @@ -0,0 +1,343 @@ +/* + * xmmGmmSingleClass.hpp + * + * Gaussian Mixture Model Definition for a Single Class + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmGmmSingleClass_hpp +#define xmmGmmSingleClass_hpp + +#include "../../core/model/xmmModelResults.hpp" +#include "../../core/model/xmmModelSingleClass.hpp" +#include "xmmGmmParameters.hpp" +#include <memory> + +namespace xmm { +const std::vector<float> null_vector_float; + +/** + @ingroup GMM + @brief Single-Class Gaussian Mixture Model + @details Multivariate Gaussian Mixture Model. Supports Bimodal data and + Gaussian Mixture Regression. + Can be either autonomous or a state of a HMM: defines observation probabilities + for each state. + */ +class SingleClassGMM : public SingleClassProbabilisticModel { + public: + template <typename SingleClassModel, typename ModelType> + friend class Model; + friend class SingleClassHMM; + friend class HierarchicalHMM; + + /** + @brief Constructor + @param p pointer to a shared parameters object (owned by a Model) + */ + SingleClassGMM(std::shared_ptr<SharedParameters> p = NULL); + + /** + @brief Copy constructor + @param src Source GMM + */ + SingleClassGMM(SingleClassGMM const& src); + + /** + @brief Copy constructor + @param p pointer to a shared parameters object (owned by a Model) + @param root Json structure + */ + explicit SingleClassGMM(std::shared_ptr<SharedParameters> p, + Json::Value const& root); + + /** + @brief Assignment + @param src Source GMM + */ + SingleClassGMM& operator=(SingleClassGMM const& src); + + /** @name Performance */ + ///@{ + + /** + @brief Resets the fitering process (recognition or regression) + */ + void reset(); + + /** + @brief filters a incoming observation (performs recognition or regression) + @details the results of the inference process are stored in the results + attribute + @param observation observation vector + @return likelihood of the observation + */ + double filter(std::vector<float> const& observation); + + ///@} + + /** @name Json I/O */ + ///@{ + + /** + @brief Write the object to a JSON Structure + @return Json value containing the object's information + */ + Json::Value toJson() const; + + /** + @brief Read the object from a JSON Structure + @param root JSON value containing the object's information + @throws JsonException if the JSON value has a wrong format + */ + void fromJson(Json::Value const& root); + + ///@} + + // + // /** + // @brief Convert to bimodal GMM in place + // @param dimension_input dimension of the input modality + // @throws runtime_error if the model is already bimodal + // @throws out_of_range if the requested input dimension is too + // large + // */ + // void makeBimodal(unsigned int dimension_input); + // + // /** + // @brief Convert to unimodal GMM in place + // @throws runtime_error if the model is already unimodal + // */ + // void makeUnimodal(); + // + // /** + // @brief extract a submodel with the given columns + // @param columns columns indices in the target order + // @throws runtime_error if the model is training + // @throws out_of_range if the number or indices of the requested + // columns exceeds the current dimension + // @return a GMM from the current model considering only the target + // columns + // */ + // GMM extractSubmodel(std::vector<unsigned int>& columns) const; + // + // /** + // @brief extract the submodel of the input modality + // @throws runtime_error if the model is training or if it is not + // bimodal + // @return a unimodal GMM of the input modality from the current + // bimodal model + // */ + // GMM extractSubmodel_input() const; + // + // /** + // @brief extract the submodel of the output modality + // @throws runtime_error if the model is training or if it is not + // bimodal + // @return a unimodal GMM of the output modality from the current + // bimodal model + // */ + // GMM extractSubmodel_output() const; + // + // /** + // @brief extract the model with reversed input and output + // modalities + // @throws runtime_error if the model is training or if it is not + // bimodal + // @return a bimodal GMM that swaps the input and output modalities + // */ + // GMM extract_inverse_model() const; + + /** + @brief Model Parameters + */ + ClassParameters<GMM> parameters; + + /** + @brief Results of the filtering process (recognition & regression) + */ + ClassResults<GMM> results; + + /** + @brief Vector of Gaussian Components + */ + std::vector<GaussianDistribution> components; + + /** + @brief Mixture Coefficients + */ + std::vector<float> mixture_coeffs; + + /** + @brief Beta probabilities: likelihood of each component + */ + std::vector<double> beta; + + protected: + /** + @brief Allocate model parameters + */ + void allocate(); + + /** + @brief Observation probability + @param observation observation vector (must be of size 'dimension') + @param mixtureComponent index of the mixture component. if unspecified or + negative, + full mixture observation probability is computed + @return likelihood of the observation given the model + @throws out_of_range if the index of the Gaussian Mixture Component is out + of bounds + @throws runtime_error if the Covariance Matrix is not invertible + */ + double obsProb(const float* observation, int mixtureComponent = -1) const; + + /** + @brief Observation probability on the input modality + @param observation_input observation vector of the input modality (must be + of size 'dimension_input') + @param mixtureComponent index of the mixture component. if unspecified or + negative, + full mixture observation probability is computed + @return likelihood of the observation of the input modality given the model + @throws runtime_error if the model is not bimodal + @throws runtime_error if the Covariance Matrix of the input modality is not + invertible + */ + double obsProb_input(const float* observation_input, + int mixtureComponent = -1) const; + + /** + @brief Observation probability for bimodal mode + @param observation_input observation vector of the input modality (must be + of size 'dimension_input') + @param observation_output observation vector of the input output (must be + of size 'dimension - dimension_input') + @param mixtureComponent index of the mixture component. if unspecified or + negative, + full mixture observation probability is computed + @return likelihood of the observation of the input modality given the model + @throws runtime_error if the model is not bimodal + @throws runtime_error if the Covariance Matrix is not invertible + */ + double obsProb_bimodal(const float* observation_input, + const float* observation_output, + int mixtureComponent = -1) const; + + /** + @brief Initialize the EM Training Algorithm + @details Initializes the Gaussian Components from the first phrase + of the Training Set + */ + void emAlgorithmInit(TrainingSet* trainingSet); + + /** + @brief Update Function of the EM algorithm + @return likelihood of the data given the current parameters (E-step) + */ + double emAlgorithmUpdate(TrainingSet* trainingSet); + + /** + @brief Initialize model parameters to default values. + @details Mixture coefficients are then equiprobable + */ + void initParametersToDefault(std::vector<float> const& dataStddev); + + /** + @brief Initialize the means of the Gaussian components with a Biased + K-means + */ + void initMeansWithKMeans(TrainingSet* trainingSet); + + /** + @brief Initialize the Covariances of the Gaussian components using a fully + observed approximation + */ + void initCovariances_fullyObserved(TrainingSet* trainingSet); + + /** + @brief Normalize mixture coefficients + */ + void normalizeMixtureCoeffs(); + + /** + @brief Add offset to the diagonal of the covariance matrices + @details Guarantees convergence through covariance matrix invertibility + */ + void addCovarianceOffset(); + + /** + @brief Update inverse covariances of each Gaussian component + @throws runtime_error if one of the covariance matrices is not invertible + */ + void updateInverseCovariances(); + + /** + @brief Compute likelihood and estimate components probabilities + @details If the model is bimodal, the likelihood is computed only on the + input modality, + except if 'observation_output' is specified. + Updates the likelihood buffer used to smooth likelihoods. + @param observation observation vector (full size for unimodal, input + modality for bimodal) + @param observation_output observation vector of the output modality + */ + double likelihood( + std::vector<float> const& observation, + std::vector<float> const& observation_output = null_vector_float); + + /** + @brief Compute Gaussian Mixture Regression + @details Estimates the output modality using covariance-based regression + weighted by components' likelihood + @warning the function does not estimates the likelihoods, use 'likelihood' + before performing + the regression. + @param observation_input observation vector of the input modality + */ + void regression(std::vector<float> const& observation_input); + + /** + @brief update the content of the likelihood buffer and return average + likelihood. + @details The method also updates the cumulative log-likelihood computed + over a window (cumulativeloglikelihood) + */ + void updateResults(); + + /** + @brief vector containing the regularization values over each dimension + @details computed by combining relative and absolute regularization with + the + training set + */ + std::vector<double> current_regularization; +}; +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHierarchicalHmm.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHierarchicalHmm.cpp new file mode 100644 index 0000000..4afd41a --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHierarchicalHmm.cpp @@ -0,0 +1,634 @@ +/* + * hierarchical_hmm.cpp + * + * Hierarchical Hidden Markov Model for continuous recognition and regression + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "xmmHierarchicalHmm.hpp" +#include <algorithm> + +xmm::HierarchicalHMM::HierarchicalHMM(bool bimodal) + : Model<SingleClassHMM, HMM>(bimodal), forward_initialized_(false) {} + +xmm::HierarchicalHMM::HierarchicalHMM(HierarchicalHMM const &src) + : Model<SingleClassHMM, HMM>(src) { + results = src.results; + prior = src.prior; + exit_transition = src.exit_transition; + transition = src.transition; + frontier_v1_ = src.frontier_v1_; + frontier_v2_ = src.frontier_v2_; + forward_initialized_ = false; +} + +xmm::HierarchicalHMM::HierarchicalHMM(Json::Value const &root) + : Model<SingleClassHMM, HMM>(root), forward_initialized_(false) { + prior.resize(size()); + json2vector(root["prior"], prior, size()); + transition.resize(size()); + for (int i = 0; i < size(); i++) { + transition[i].resize(size()); + json2vector(root["transition"][i], transition[i], size()); + } + exit_transition.resize(size()); + json2vector(root["exit_transition"], exit_transition, size()); +} + +xmm::HierarchicalHMM &xmm::HierarchicalHMM::operator=( + HierarchicalHMM const &src) { + if (this != &src) { + Model<SingleClassHMM, HMM>::operator=(src); + results = src.results; + prior = src.prior; + exit_transition = src.exit_transition; + transition = src.transition; + frontier_v1_ = src.frontier_v1_; + frontier_v2_ = src.frontier_v2_; + forward_initialized_ = false; + } + return *this; +} + +void xmm::HierarchicalHMM::clear() { + Model<SingleClassHMM, HMM>::clear(); + prior.clear(); + transition.clear(); + exit_transition.clear(); +} + +void xmm::HierarchicalHMM::addExitPoint(int state, float proba) { + // prevent_attribute_change(); + for (auto &model : models) { + model.second.addExitPoint(state, proba); + } +} + +void xmm::HierarchicalHMM::normalizeTransitions() { + double sumPrior(0.0); + int num_models = static_cast<int>(size()); + for (int i = 0; i < num_models; i++) { + sumPrior += prior[i]; + double sumTrans(0.0); + for (int j = 0; j < num_models; j++) sumTrans += transition[i][j]; + if (sumTrans > 0.0) + for (int j = 0; j < num_models; j++) transition[i][j] /= sumTrans; + } + for (int i = 0; i < size(); i++) prior[i] /= sumPrior; +} + +void xmm::HierarchicalHMM::joinTraining() { + Model<SingleClassHMM, HMM>::joinTraining(); + updateTransitionParameters(); +} + +void xmm::HierarchicalHMM::updateTransitionParameters() { + if (this->size() == prior.size()) // number of primitives has not changed + return; + + updatePrior(); + updateTransition(); + + updateExitProbabilities(); // Update exit probabilities of Submodels + // (signal level) +} + +void xmm::HierarchicalHMM::updatePrior() { + prior.assign(size(), 1. / static_cast<double>(this->size())); +} + +void xmm::HierarchicalHMM::updateTransition() { + int num_classes = static_cast<int>(size()); + exit_transition.assign(num_classes, DEFAULT_EXITTRANSITION()); + transition.resize(num_classes); + for (int i = 0; i < num_classes; i++) { + transition[i].assign(num_classes, + 1. / static_cast<double>(num_classes)); + } +} + +void xmm::HierarchicalHMM::updateExitProbabilities() { + for (auto &model : models) { + model.second.updateExitProbabilities(); + } +} + +void xmm::HierarchicalHMM::addModelForClass(std::string const &label) { + Model<SingleClassHMM, HMM>::addModelForClass(label); + updateTransitionParameters(); +} + +void xmm::HierarchicalHMM::forward_init(std::vector<float> const &observation) { + checkTraining(); + double norm_const(0.0); + + int model_index(0); + for (auto &model : models) { + unsigned int N = model.second.parameters.states.get(); + + for (int i = 0; i < 3; i++) { + model.second.alpha_h[i].assign(N, 0.0); + } + + // Compute Emission probability and initialize on the first state of + // the + // primitive + if (model.second.parameters.transition_mode.get() == + HMM::TransitionMode::Ergodic) { + for (int i = 0; i < model.second.parameters.states.get(); i++) { + if (shared_parameters->bimodal.get()) { + model.second.alpha_h[0][i] = + model.second.prior[i] * + model.second.states[i].obsProb_input(&observation[0]); + } else { + model.second.alpha_h[0][i] = + model.second.prior[i] * + model.second.states[i].obsProb(&observation[0]); + } + model.second.results.instant_likelihood += + model.second.alpha_h[0][i]; + } + } else { + model.second.alpha_h[0][0] = this->prior[model_index]; + if (shared_parameters->bimodal.get()) { + model.second.alpha_h[0][0] *= + model.second.states[0].obsProb_input(&observation[0]); + } else { + model.second.alpha_h[0][0] *= + model.second.states[0].obsProb(&observation[0]); + } + model.second.results.instant_likelihood = + model.second.alpha_h[0][0]; + } + norm_const += model.second.results.instant_likelihood; + model_index++; + } + + // Normalize Alpha variables + for (auto &model : models) { + unsigned int N = model.second.parameters.states.get(); + for (unsigned int e = 0; e < 3; e++) + for (unsigned int k = 0; k < N; k++) + model.second.alpha_h[e][k] /= norm_const; + } + + forward_initialized_ = true; +} + +void xmm::HierarchicalHMM::forward_update( + std::vector<float> const &observation) { + checkTraining(); + double norm_const(0.0); + + // Frontier Algorithm: variables + double tmp(0); + std::vector<double> + front; // frontier variable : intermediate computation variable + + // Intermediate variables: compute the sum of probabilities of making a + // transition to a new primitive + likelihoodAlpha(1, frontier_v1_); + likelihoodAlpha(2, frontier_v2_); + + int num_classes = static_cast<int>(size()); + + // FORWARD UPDATE + // -------------------------------------- + int dst_model_index(0); + for (auto &dstModel : models) { + unsigned int N = dstModel.second.parameters.states.get(); + + // 1) COMPUTE FRONTIER VARIABLE + // -------------------------------------- + front.assign(N, 0.0); + + if (dstModel.second.parameters.transition_mode.get() == + HMM::TransitionMode::Ergodic) { + for (int k = 0; k < N; ++k) { + for (unsigned int j = 0; j < N; ++j) { + front[k] += dstModel.second.transition[j * N + k] / + (1 - dstModel.second.exit_probabilities_[j]) * + dstModel.second.alpha_h[0][j]; + } + + for (int src_model_index = 0; src_model_index < num_classes; + src_model_index++) { + front[k] += dstModel.second.prior[k] * + (frontier_v1_[src_model_index] * + this->transition[src_model_index] + [dst_model_index] + + this->prior[dst_model_index] * + frontier_v2_[src_model_index]); + } + } + } else { + // k=0: first state of the primitive + front[0] = + dstModel.second.transition[0] * dstModel.second.alpha_h[0][0]; + + for (int src_model_index = 0; src_model_index < num_classes; + src_model_index++) { + front[0] += frontier_v1_[src_model_index] * + transition[src_model_index][dst_model_index] + + this->prior[dst_model_index] * + frontier_v2_[src_model_index]; + } + + // k>0: rest of the primitive + for (int k = 1; k < N; ++k) { + front[k] += dstModel.second.transition[k * 2] / + (1 - dstModel.second.exit_probabilities_[k]) * + dstModel.second.alpha_h[0][k]; + front[k] += dstModel.second.transition[(k - 1) * 2 + 1] / + (1 - dstModel.second.exit_probabilities_[k - 1]) * + dstModel.second.alpha_h[0][k - 1]; + } + + for (int i = 0; i < 3; i++) { + for (int k = 0; k < N; k++) { + dstModel.second.alpha_h[i][k] = 0.0; + } + } + } + + // 2) UPDATE FORWARD VARIABLE + // -------------------------------------- + + dstModel.second.results.exit_likelihood = 0.0; + dstModel.second.results.instant_likelihood = 0.0; + + // end of the primitive: handle exit states + for (int k = 0; k < N; ++k) { + if (shared_parameters->bimodal.get()) + tmp = dstModel.second.states[k].obsProb_input(&observation[0]) * + front[k]; + else + tmp = dstModel.second.states[k].obsProb(&observation[0]) * + front[k]; + + dstModel.second.alpha_h[2][k] = + this->exit_transition[dst_model_index] * + dstModel.second.exit_probabilities_[k] * tmp; + dstModel.second.alpha_h[1][k] = + (1 - this->exit_transition[dst_model_index]) * + dstModel.second.exit_probabilities_[k] * tmp; + dstModel.second.alpha_h[0][k] = + (1 - dstModel.second.exit_probabilities_[k]) * tmp; + + dstModel.second.results.exit_likelihood += + dstModel.second.alpha_h[1][k] + dstModel.second.alpha_h[2][k]; + dstModel.second.results.instant_likelihood += + dstModel.second.alpha_h[0][k] + dstModel.second.alpha_h[1][k] + + dstModel.second.alpha_h[2][k]; + + norm_const += tmp; + } + + dstModel.second.results.exit_ratio = + dstModel.second.results.exit_likelihood / + dstModel.second.results.instant_likelihood; + + dst_model_index++; + } + + // Normalize Alpha variables + for (auto &model : models) { + unsigned int N = model.second.parameters.states.get(); + for (unsigned int e = 0; e < 3; e++) + for (unsigned int k = 0; k < N; k++) + model.second.alpha_h[e][k] /= norm_const; + } +} + +void xmm::HierarchicalHMM::likelihoodAlpha( + int exitNum, std::vector<double> &likelihoodVector) const { + if (exitNum < 0) { // Likelihood over all exit states + unsigned int l(0); + for (auto &model : models) { + likelihoodVector[l] = 0.0; + for (unsigned int exit = 0; exit < 3; ++exit) { + for (unsigned int k = 0; + k < model.second.parameters.states.get(); k++) { + likelihoodVector[l] += model.second.alpha_h[exit][k]; + } + } + l++; + } + + } else { // Likelihood for exit state "exitNum" + unsigned int l(0); + for (auto &model : models) { + likelihoodVector[l] = 0.0; + for (unsigned int k = 0; k < model.second.parameters.states.get(); + k++) { + likelihoodVector[l] += model.second.alpha_h[exitNum][k]; + } + l++; + } + } +} + +void xmm::HierarchicalHMM::removeClass(std::string const &label) { + Model<SingleClassHMM, HMM>::removeClass(label); + updateTransitionParameters(); +} + +void xmm::HierarchicalHMM::reset() { + Model<SingleClassHMM, HMM>::reset(); + results.instant_likelihoods.resize(size()); + results.instant_normalized_likelihoods.resize(size()); + results.smoothed_likelihoods.resize(size()); + results.smoothed_normalized_likelihoods.resize(size()); + results.smoothed_log_likelihoods.resize(size()); + if (shared_parameters->bimodal.get()) { + unsigned int dimension_output = + shared_parameters->dimension.get() - + shared_parameters->dimension_input.get(); + results.output_values.resize(dimension_output); + results.output_covariance.assign( + (configuration.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) + ? dimension_output * dimension_output + : dimension_output, + 0.0); + } + frontier_v1_.resize(this->size()); + frontier_v2_.resize(this->size()); + forward_initialized_ = false; + for (auto &model : models) { + model.second.is_hierarchical_ = configuration.hierarchical.get(); + model.second.reset(); + } +} + +void xmm::HierarchicalHMM::filter(std::vector<float> const &observation) { + checkTraining(); + if (configuration.hierarchical.get()) { + if (forward_initialized_) { + this->forward_update(observation); + } else { + this->forward_init(observation); + } + } else { + int i(0); + for (auto &model : models) { + results.instant_likelihoods[i] = model.second.filter(observation); + i++; + } + } + + // Compute time progression + for (auto &model : models) { + model.second.updateAlphaWindow(); + model.second.updateResults(); + } + updateResults(); + + if (shared_parameters->bimodal.get()) { + unsigned int dimension = shared_parameters->dimension.get(); + unsigned int dimension_input = shared_parameters->dimension_input.get(); + unsigned int dimension_output = dimension - dimension_input; + + for (auto &model : models) { + model.second.regression(observation); + } + + if (configuration.multiClass_regression_estimator == + MultiClassRegressionEstimator::Likeliest) { + results.output_values = + this->models[results.likeliest].results.output_values; + results.output_covariance = + this->models[results.likeliest].results.output_covariance; + } else { + results.output_values.assign(dimension_output, 0.0); + results.output_covariance.assign( + (configuration.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) + ? dimension_output * dimension_output + : dimension_output, + 0.0); + + int i(0); + for (auto &model : models) { + for (int d = 0; d < dimension_output; d++) { + results.output_values[d] += + results.smoothed_normalized_likelihoods[i] * + model.second.results.output_values[d]; + + if ((configuration.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full)) { + for (int d2 = 0; d2 < dimension_output; d2++) + results + .output_covariance[d * dimension_output + d2] += + results.smoothed_normalized_likelihoods[i] * + model.second.results + .output_covariance[d * dimension_output + + d2]; + } else { + results.output_covariance[d] += + results.smoothed_normalized_likelihoods[i] * + model.second.results.output_covariance[d]; + } + } + i++; + } + } + } +} + +void xmm::HierarchicalHMM::updateResults() { + double maxlog_likelihood = 0.0; + double normconst_instant(0.0); + double normconst_smoothed(0.0); + int i(0); + for (auto &model : models) { + results.instant_likelihoods[i] = + model.second.results.instant_likelihood; + results.smoothed_log_likelihoods[i] = + model.second.results.log_likelihood; + results.smoothed_likelihoods[i] = + exp(results.smoothed_log_likelihoods[i]); + + results.instant_normalized_likelihoods[i] = + results.instant_likelihoods[i]; + results.smoothed_normalized_likelihoods[i] = + results.smoothed_likelihoods[i]; + + normconst_instant += results.instant_normalized_likelihoods[i]; + normconst_smoothed += results.smoothed_normalized_likelihoods[i]; + + if (i == 0 || results.smoothed_log_likelihoods[i] > maxlog_likelihood) { + maxlog_likelihood = results.smoothed_log_likelihoods[i]; + results.likeliest = model.first; + } + i++; + } + + i = 0; + for (auto it = this->models.begin(); it != this->models.end(); ++it, ++i) { + results.instant_normalized_likelihoods[i] /= normconst_instant; + results.smoothed_normalized_likelihoods[i] /= normconst_smoothed; + } +} + +Json::Value xmm::HierarchicalHMM::toJson() const { + checkTraining(); + Json::Value root = Model<SingleClassHMM, HMM>::toJson(); + root["prior"] = vector2json(prior); + // int num_models = static_cast<int>(size()); + // std::vector<double> transition_flat(num_models * num_models, 0.0); + // for (int i = 0; i < num_models; i++) { + // for (int j = 0; j < num_models; j++) { + // transition_flat[i * num_models + j] = transition[i][j]; + // } + // } + root["transition"].resize(static_cast<Json::ArrayIndex>(size())); + for (int i = 0; i < size(); i++) { + root["transition"][i] = vector2json(transition[i]); + } + root["exit_transition"] = vector2json(exit_transition); + + return root; +} + +void xmm::HierarchicalHMM::fromJson(Json::Value const &root) { + checkTraining(); + try { + HierarchicalHMM tmp(root); + *this = tmp; + } catch (JsonException &e) { + throw e; + } +} + +// void xmm::HierarchicalHMM::makeBimodal(unsigned int dimension_input) +//{ +// checkTraining(); +// if (bimodal_) +// throw std::runtime_error("The model is already bimodal"); +// if (dimension_input >= dimension()) +// throw std::out_of_range("Request input dimension exceeds the current +// dimension"); +// +// try { +// this->referenceModel_.makeBimodal(dimension_input); +// } catch (std::exception const& e) { +// } +// bimodal_ = true; +// for (model_iterator it=this->models.begin(); it != this->models.end(); +// ++it) { +// model.second.makeBimodal(dimension_input); +// } +// set_trainingSet(NULL); +// results.output_values.resize(dimension() - this->dimension_input()); +// results.output_variance.resize(dimension() - this->dimension_input()); +//} +// +// void xmm::HierarchicalHMM::makeUnimodal() +//{ +// checkTraining(); +// if (!bimodal_) +// throw std::runtime_error("The model is already unimodal"); +// this->referenceModel_.makeUnimodal(); +// for (model_iterator it=this->models.begin(); it != this->models.end(); +// ++it) { +// model.second.makeUnimodal(); +// } +// set_trainingSet(NULL); +// results.output_values.clear(); +// results.output_variance.clear(); +// bimodal_ = false; +//} +// +// xmm::HierarchicalHMM +// xmm::HierarchicalHMM::extractSubmodel(std::vector<unsigned int>& columns) +// const +//{ +// checkTraining(); +// if (columns.size() > this->dimension()) +// throw std::out_of_range("requested number of columns exceeds the +// dimension of the current model"); +// for (unsigned int column=0; column<columns.size(); ++column) { +// if (columns[column] >= this->dimension()) +// throw std::out_of_range("Some column indices exceeds the dimension +// of the current model"); +// } +// HierarchicalHMM target_model(*this); +// target_model.set_trainingSet(NULL); +// target_model.bimodal_ = false; +// target_model.referenceModel_ = +// this->referenceModel_.extractSubmodel(columns); +// for (model_iterator it=target_model.models.begin(); it != +// target_model.models.end(); ++it) { +// model.second = this->models.at(model.first).extractSubmodel(columns); +// } +// return target_model; +//} +// +// xmm::HierarchicalHMM xmm::HierarchicalHMM::extractSubmodel_input() const +//{ +// checkTraining(); +// if (!bimodal_) +// throw std::runtime_error("The model needs to be bimodal"); +// std::vector<unsigned int> columns_input(dimension_input()); +// for (unsigned int i=0; i<dimension_input(); ++i) { +// columns_input[i] = i; +// } +// return extractSubmodel(columns_input); +//} +// +// xmm::HierarchicalHMM xmm::HierarchicalHMM::extractSubmodel_output() const +//{ +// checkTraining(); +// if (!bimodal_) +// throw std::runtime_error("The model needs to be bimodal"); +// std::vector<unsigned int> columns_output(dimension() - dimension_input()); +// for (unsigned int i=dimension_input(); i<dimension(); ++i) { +// columns_output[i-dimension_input()] = i; +// } +// return extractSubmodel(columns_output); +//} +// +// xmm::HierarchicalHMM xmm::HierarchicalHMM::extract_inverse_model() const +//{ +// checkTraining(); +// if (!bimodal_) +// throw std::runtime_error("The model needs to be bimodal"); +// std::vector<unsigned int> columns(dimension()); +// for (unsigned int i=0; i<dimension()-dimension_input(); ++i) { +// columns[i] = i+dimension_input(); +// } +// for (unsigned int i=dimension()-dimension_input(), j=0; i<dimension(); +// ++i, +// ++j) { +// columns[i] = j; +// } +// HierarchicalHMM target_model = extractSubmodel(columns); +// target_model.makeBimodal(dimension()-dimension_input()); +// return target_model; +//} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHierarchicalHmm.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHierarchicalHmm.hpp new file mode 100644 index 0000000..849850b --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHierarchicalHmm.hpp @@ -0,0 +1,313 @@ +/* + * hierarchical_hmm.h + * + * Hierarchical Hidden Markov Model for Continuous Recognition and Regression + * (Multi-class) + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmm_lib_hierarchical_hmm_h +#define xmm_lib_hierarchical_hmm_h + +#include "../../core/model/xmmModel.hpp" +#include "../gmm/xmmGmm.hpp" +#include "xmmHmmSingleClass.hpp" + +namespace xmm { +/** + @ingroup HMM + @brief Hierarchical Hidden Markov Model for Continuous Recognition and + Regression (Multi-class) + */ +class HierarchicalHMM : public Model<SingleClassHMM, HMM> { + public: + /** + @brief Default exit transition for the highest level + */ + static const double DEFAULT_EXITTRANSITION() { return 0.1; } + + /** + @brief Constructor + @param bimodal specifies if the model should be used for regression + */ + HierarchicalHMM(bool bimodal = false); + + /** + @brief Copy Constructor + @param src Source Model + */ + HierarchicalHMM(HierarchicalHMM const& src); + + /** + @brief Constructor from Json Structure + @param root Json Value + */ + explicit HierarchicalHMM(Json::Value const& root); + + /** + @brief Assignment + @param src Source Model + */ + HierarchicalHMM& operator=(HierarchicalHMM const& src); + + /** @name Class Manipulation */ + ///@{ + + /** + @brief Remove a specific class by label + @param label label of the class to remove + */ + virtual void removeClass(std::string const& label); + + /** + @brief Remove All models + */ + virtual void clear(); + + ///@} + + /** @name Accessors */ + ///@{ + + void addExitPoint(int state, float proba); + + ///@} + + /** @name Performance */ + ///@{ + + /** + @brief Resets the fitering process (recognition or regression) + */ + virtual void reset(); + + /** + @brief filters a incoming observation (performs recognition or regression) + @details the results of the inference process are stored in the results + attribute + @param observation observation vector + */ + virtual void filter(std::vector<float> const& observation); + + ///@} + + /** @name Json I/O */ + ///@{ + + /** + @brief Write the object to a JSON Structure + @return Json value containing the object's information + */ + virtual Json::Value toJson() const; + + /** + @brief Read the object from a JSON Structure + @param root JSON value containing the object's information + @throws JsonException if the JSON value has a wrong format + */ + virtual void fromJson(Json::Value const& root); + + ///@} + + // /** + // @brief Convert to bimodal HierarchicalHMM in place + // @param dimension_input dimension of the input modality + // @throws runtime_error if the model is already bimodal + // @throws out_of_range if the requested input dimension is too + // large + // */ + // void makeBimodal(unsigned int dimension_input); + // + // /** + // @brief Convert to unimodal HierarchicalHMM in place + // @throws runtime_error if the model is already unimodal + // */ + // void makeUnimodal(); + // + // /** + // @brief extract a submodel with the given columns + // @param columns columns indices in the target order + // @throws runtime_error if the model is training + // @throws out_of_range if the number or indices of the requested + // columns exceeds the current dimension + // @return a HierarchicalHMM from the current model considering only + // the target columns + // */ + // HierarchicalHMM extractSubmodel(std::vector<unsigned int>& + // columns) + // const; + // + // /** + // @brief extract the submodel of the input modality + // @throws runtime_error if the model is training or if it is not + // bimodal + // @return a unimodal GMM of the input modality from the current + // bimodal model + // */ + // HierarchicalHMM extractSubmodel_input() const; + // + // /** + // @brief extract the submodel of the output modality + // @throws runtime_error if the model is training or if it is not + // bimodal + // @return a unimodal HierarchicalHMM of the output modality from + // the current bimodal model + // */ + // HierarchicalHMM extractSubmodel_output() const; + // + // /** + // @brief extract the model with reversed input and output + // modalities + // @throws runtime_error if the model is training or if it is not + // bimodal + // @return a bimodal HierarchicalHMM that swaps the input and + // output modalities + // */ + // HierarchicalHMM extract_inverse_model() const; + + /** + @brief Results of the Filtering Process (Recognition + Regression) + */ + Results<HMM> results; + + /** + @brief Prior probabilities of the models + */ + std::vector<double> prior; + + /** + @brief exit probabilities of the model (probability to finish and go back + to the root) + */ + std::vector<double> exit_transition; + + /** + @brief Transition probabilities between models + */ + std::vector<std::vector<double>> transition; + + protected: + /** + @brief Finishes the background training process by joining threads and + deleting the models which training failed + @details: updates transition parameters after joining + */ + virtual void joinTraining(); + + /** + @brief update high-level parameters when a new primitive is learned + @details updated parameters: prior probabilities + transition matrix + */ + void updateTransitionParameters(); + + /** + @brief ergodic learning update high-level prior probabilities -> equal + prior probs + */ + void updatePrior(); + + /** + @brief ergodic learning: update high-level transition matrix + @details equal transition probabilities between primitive gestures + */ + void updateTransition(); + + /** + @brief Update exit probabilities of each sub-model + */ + void updateExitProbabilities(); + + virtual void addModelForClass(std::string const& label); + + /** + @brief Normalize segment level prior and transition matrices + */ + void normalizeTransitions(); + + /** + @brief Initialization of the Forward Algorithm for the hierarchical HMM. + see: Jules Francoise. Realtime Segmentation and Recognition of Gestures + using Hierarchical Markov Models. Master’s Thesis, Université Pierre et + Marie Curie, Ircam, 2011. + [http://articles.ircam.fr/textes/Francoise11a/index.pdf] + @param observation observation vector. If the model is bimodal, this should + be allocated for + both modalities, and should contain the observation on the input modality. + The predicted + output will be appended to the input modality observation + */ + void forward_init(std::vector<float> const& observation); + + /** + @brief Update of the Forward Algorithm for the hierarchical HMM. + see: Jules Francoise. Realtime Segmentation and Recognition of Gestures + using Hierarchical Markov Models. Master’s Thesis, Université Pierre et + Marie Curie, Ircam, 2011. + [http://articles.ircam.fr/textes/Francoise11a/index.pdf] + @param observation observation vector. If the model is bimodal, this should + be allocated for + both modalities, and should contain the observation on the input modality. + The predicted + output will be appended to the input modality observation + */ + void forward_update(std::vector<float> const& observation); + + /** + @brief get instantaneous likelihood + * + get instantaneous likelihood on alpha variable for exit state exitNum. + @param exitNum number of exit state (0=continue, 1=transition, 2=back to + root). if -1, get likelihood over all exit states + @param likelihoodVector likelihood vector (size nbPrimitives) + */ + void likelihoodAlpha(int exitNum, + std::vector<double>& likelihoodVector) const; + + /** + @brief Update the results (Likelihoods) + */ + void updateResults(); + + /** + @brief Defines if the forward algorithm has been initialized + */ + bool forward_initialized_; + + /** + @brief intermediate Forward variable (used in Frontier algorithm) + */ + std::vector<double> frontier_v1_; + + /** + @brief intermediate Forward variable (used in Frontier algorithm) + */ + std::vector<double> frontier_v2_; +}; +} + +#endif \ No newline at end of file diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmParameters.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmParameters.cpp new file mode 100644 index 0000000..2e4711a --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmParameters.cpp @@ -0,0 +1,199 @@ +/* + * xmmHmmParameters.cpp + * + * Parameters of Hidden Markov Models + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "xmmHmmParameters.hpp" + +xmm::ClassParameters<xmm::HMM>::ClassParameters() + : changed(true), + states(10, 1), + gaussians(1, 1), + relative_regularization(1.0e-2, 1e-20), + absolute_regularization(1.0e-3, 1e-20), + covariance_mode(GaussianDistribution::CovarianceMode::Full), + transition_mode(HMM::TransitionMode::LeftRight), + regression_estimator(HMM::RegressionEstimator::Full), + hierarchical(true) { + states.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + gaussians.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + relative_regularization.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + absolute_regularization.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + covariance_mode.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + transition_mode.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + regression_estimator.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + hierarchical.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); +} + +xmm::ClassParameters<xmm::HMM>::ClassParameters(ClassParameters<HMM> const& src) + : changed(true), + states(src.states), + gaussians(src.gaussians), + relative_regularization(src.relative_regularization), + absolute_regularization(src.absolute_regularization), + covariance_mode(src.covariance_mode), + transition_mode(src.transition_mode), + regression_estimator(src.regression_estimator), + hierarchical(src.hierarchical) { + states.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + gaussians.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + relative_regularization.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + absolute_regularization.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + covariance_mode.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + transition_mode.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + regression_estimator.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + hierarchical.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); +} + +xmm::ClassParameters<xmm::HMM>::ClassParameters(Json::Value const& root) + : ClassParameters() { + states.set(root["states"].asInt()); + gaussians.set(root["gaussians"].asInt()); + relative_regularization.set(root["relative_regularization"].asFloat()); + absolute_regularization.set(root["absolute_regularization"].asFloat()); + covariance_mode.set(static_cast<GaussianDistribution::CovarianceMode>( + root["covariance_mode"].asInt())); + transition_mode.set( + static_cast<HMM::TransitionMode>(root["transition_mode"].asInt())); + regression_estimator.set(static_cast<HMM::RegressionEstimator>( + root["regression_estimator"].asInt())); + hierarchical.set(root["hierarchical"].asBool()); +} + +xmm::ClassParameters<xmm::HMM>& xmm::ClassParameters<xmm::HMM>::operator=( + ClassParameters<HMM> const& src) { + if (this != &src) { + changed = true; + states = src.states; + gaussians = src.gaussians; + relative_regularization = src.relative_regularization; + absolute_regularization = src.absolute_regularization; + covariance_mode = src.covariance_mode; + transition_mode = src.transition_mode; + regression_estimator = src.regression_estimator; + states.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + gaussians.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + relative_regularization.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + absolute_regularization.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + covariance_mode.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + transition_mode.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + regression_estimator.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + hierarchical.onAttributeChange( + this, &xmm::ClassParameters<xmm::HMM>::onAttributeChange); + } + return *this; +} + +Json::Value xmm::ClassParameters<xmm::HMM>::toJson() const { + Json::Value root; + root["states"] = static_cast<int>(states.get()); + root["gaussians"] = static_cast<int>(gaussians.get()); + root["relative_regularization"] = relative_regularization.get(); + root["absolute_regularization"] = absolute_regularization.get(); + root["covariance_mode"] = static_cast<int>(covariance_mode.get()); + root["transition_mode"] = static_cast<int>(transition_mode.get()); + root["regression_estimator"] = static_cast<int>(regression_estimator.get()); + root["hierarchical"] = hierarchical.get(); + return root; +} + +void xmm::ClassParameters<xmm::HMM>::fromJson(Json::Value const& root) { + try { + ClassParameters<HMM> tmp(root); + *this = tmp; + } catch (JsonException& e) { + throw e; + } +} + +void xmm::ClassParameters<xmm::HMM>::onAttributeChange( + AttributeBase* attr_pointer) { + changed = true; + attr_pointer->changed = false; +} + +template <> +void xmm::checkLimits<xmm::HMM::TransitionMode>( + xmm::HMM::TransitionMode const& value, + xmm::HMM::TransitionMode const& limit_min, + xmm::HMM::TransitionMode const& limit_max) { + if (value < limit_min || value > limit_max) + throw std::domain_error( + "Attribute value out of range. Range: [" + + std::to_string(static_cast<int>(limit_min)) + " ; " + + std::to_string(static_cast<int>(limit_max)) + "]"); +} + +template <> +xmm::HMM::TransitionMode +xmm::Attribute<xmm::HMM::TransitionMode>::defaultLimitMax() { + return xmm::HMM::TransitionMode::LeftRight; +} + +template <> +void xmm::checkLimits<xmm::HMM::RegressionEstimator>( + xmm::HMM::RegressionEstimator const& value, + xmm::HMM::RegressionEstimator const& limit_min, + xmm::HMM::RegressionEstimator const& limit_max) { + if (value < limit_min || value > limit_max) + throw std::domain_error( + "Attribute value out of range. Range: [" + + std::to_string(static_cast<int>(limit_min)) + " ; " + + std::to_string(static_cast<int>(limit_max)) + "]"); +} + +template <> +xmm::HMM::RegressionEstimator +xmm::Attribute<xmm::HMM::RegressionEstimator>::defaultLimitMax() { + return xmm::HMM::RegressionEstimator::Likeliest; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmParameters.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmParameters.hpp new file mode 100644 index 0000000..326162b --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmParameters.hpp @@ -0,0 +1,208 @@ +/* + * xmmHmmParameters.hpp + * + * Parameters of Hidden Markov Models + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmHmmParameters_hpp +#define xmmHmmParameters_hpp + +#include "../../core/distributions/xmmGaussianDistribution.hpp" +#include "../../core/model/xmmModelParameters.hpp" + +namespace xmm { +/** + @defgroup HMM [Models] Hidden Markov Models + */ +class HMM { + public: + /** + @brief Type of Transition Matrix + */ + enum class TransitionMode { + /** + @brief Ergodic Transition Matrix + */ + Ergodic = 0, + + /** + @brief Left-Right Transition model + @details The only authorized transitions are: auto-transition and + transition to the next state + */ + LeftRight = 1 + }; + + /** + @enum RegressionEstimator + @brief Estimator for the regression with HMMs + */ + enum class RegressionEstimator { + /** + @brief The output is estimated by a weighted regression over all states + */ + Full = 0, + + /** + @brief The output is estimated by a weighted regression over a window + centered around + the likeliest state + */ + Windowed = 1, + + /** + @brief The output is estimated by a regression using the likeliest + state only. + */ + Likeliest = 2 + }; +}; + +/** + @ingroup HMM + @brief Parameters specific to each class of a Hidden Markov Model + */ +template <> +class ClassParameters<HMM> { + public: + /** + @brief Default Constructor + */ + ClassParameters(); + + /** + @brief Copy Constructor + @param src Source Object + */ + ClassParameters(ClassParameters const& src); + + /** + @brief Constructor from Json Structure + @param root Json Value + */ + explicit ClassParameters(Json::Value const& root); + + /** + @brief Assignment + @param src Source Object + */ + ClassParameters& operator=(ClassParameters const& src); + + /** @name Json I/O */ + ///@{ + + /** + @brief Write the object to a JSON Structure + @return Json value containing the object's information + */ + Json::Value toJson() const; + + /** + @brief Read the object from a JSON Structure + @param root JSON value containing the object's information + @throws JsonException if the JSON value has a wrong format + */ + virtual void fromJson(Json::Value const& root); + + ///@} + + /** + @brief specifies if parameters have changed (model is invalid) + */ + bool changed = false; + + /** + @brief Number of hidden states + */ + Attribute<unsigned int> states; + + /** + @brief Number of Gaussian Mixture Components + */ + Attribute<unsigned int> gaussians; + + /** + @brief Offset Added to the diagonal of covariance matrices for convergence + (Relative to Data Variance) + */ + Attribute<double> relative_regularization; + + /** + @brief Offset Added to the diagonal of covariance matrices for convergence + (minimum value) + */ + Attribute<double> absolute_regularization; + + /** + @brief Covariance Mode + */ + Attribute<GaussianDistribution::CovarianceMode> covariance_mode; + + /** + @brief Transition matrix of the model (left-right vs ergodic) + */ + Attribute<HMM::TransitionMode> transition_mode; + + /** + @brief Type of regression estimator + */ + Attribute<HMM::RegressionEstimator> regression_estimator; + + /** + @brief specifies if the decoding algorithm is hierarchical or + class-conditional + */ + Attribute<bool> hierarchical; + + protected: + /** + @brief notification function called when a member attribute is changed + */ + virtual void onAttributeChange(AttributeBase* attr_pointer); +}; + +template <> +void checkLimits<HMM::TransitionMode>(HMM::TransitionMode const& value, + HMM::TransitionMode const& limit_min, + HMM::TransitionMode const& limit_max); + +template <> +HMM::TransitionMode Attribute<HMM::TransitionMode>::defaultLimitMax(); + +template <> +void checkLimits<HMM::RegressionEstimator>( + HMM::RegressionEstimator const& value, + HMM::RegressionEstimator const& limit_min, + HMM::RegressionEstimator const& limit_max); + +template <> +HMM::RegressionEstimator Attribute<HMM::RegressionEstimator>::defaultLimitMax(); +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmResults.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmResults.hpp new file mode 100644 index 0000000..633df90 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmResults.hpp @@ -0,0 +1,93 @@ +/* + * xmmHmmResults.hpp + * + * Results of Hidden Markov Models for a single class + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmHmmResults_hpp +#define xmmHmmResults_hpp + +#include "../../core/model/xmmModelResults.hpp" + +namespace xmm { +/** + @ingroup HMM + @brief Results of Hidden Markov Models for a single class + */ +template <> +struct ClassResults<HMM> { + /** + @brief Instantaneous likelihood + */ + double instant_likelihood; + + /** + @brief Cumulative log-likelihood computed on a sliding window + */ + double log_likelihood; + + /** + @brief Predicted Output parameter vector (only used in regression mode) + @warning this variable only allocated if the model is bimodal + */ + std::vector<float> output_values; + + /** + @brief Predicted Output covariance associated with the generated parameter + vector (only used in regression mode) + @warning this variable only allocated if the model is bimodal + */ + std::vector<float> output_covariance; + + /** + @brief Estimated time progression. + @details The time progression is computed as the centroid of the state + probability distribution estimated by the forward algorithm + */ + double progress; + + /** + @brief Likelihood to exit the gesture on the next time step + */ + double exit_likelihood; + + /** + @brief Likelihood to exit the gesture on the next time step (normalized -/- + total likelihood) + */ + double exit_ratio; + + /** + @brief Index of the likeliest state + */ + unsigned int likeliest_state; +}; +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmSingleClass.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmSingleClass.cpp new file mode 100644 index 0000000..9a14d69 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmSingleClass.cpp @@ -0,0 +1,1480 @@ +/* + * xmmHmmSingleClass.cpp + * + * Hidden Markov Model Definition for a Single Class + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "xmmHmmSingleClass.hpp" + +xmm::SingleClassHMM::SingleClassHMM(std::shared_ptr<SharedParameters> p) + : SingleClassProbabilisticModel(p), is_hierarchical_(true) {} + +xmm::SingleClassHMM::SingleClassHMM(SingleClassHMM const& src) + : SingleClassProbabilisticModel(src), + parameters(src.parameters), + states(src.states), + prior(src.prior), + transition(src.transition), + is_hierarchical_(src.is_hierarchical_), + exit_probabilities_(src.exit_probabilities_) { + alpha.resize(parameters.states.get()); + previous_alpha_.resize(parameters.states.get()); + beta_.resize(parameters.states.get()); + previous_beta_.resize(parameters.states.get()); +} + +xmm::SingleClassHMM::SingleClassHMM(std::shared_ptr<SharedParameters> p, + Json::Value const& root) + : SingleClassProbabilisticModel(p, root), is_hierarchical_(true) { + parameters.fromJson(root["parameters"]); + + allocate(); + + if (parameters.transition_mode.get() == HMM::TransitionMode::Ergodic) { + json2vector(root["prior"], prior, parameters.states.get()); + json2vector(root["transition"], transition, + parameters.states.get() * parameters.states.get()); + } else { + json2vector(root["transition"], transition, + 2 * parameters.states.get()); + } + if (root.isMember("exitProbabilities")) { + json2vector(root["exitProbabilities"], exit_probabilities_, + parameters.states.get()); + } + + int s(0); + for (auto p : root["states"]) { + states[s++].fromJson(p); + } +} + +xmm::SingleClassHMM& xmm::SingleClassHMM::operator=(SingleClassHMM const& src) { + if (this != &src) { + SingleClassProbabilisticModel::operator=(src); + + is_hierarchical_ = src.is_hierarchical_; + parameters = src.parameters; + transition = src.transition; + prior = src.prior; + exit_probabilities_ = src.exit_probabilities_; + states = src.states; + + alpha.resize(parameters.states.get()); + previous_alpha_.resize(parameters.states.get()); + beta_.resize(parameters.states.get()); + previous_beta_.resize(parameters.states.get()); + } + return *this; +} + +#pragma mark - +#pragma mark Parameters initialization +void xmm::SingleClassHMM::allocate() { + unsigned int numStates = parameters.states.get(); + + if (parameters.transition_mode.get() == HMM::TransitionMode::Ergodic) { + prior.resize(numStates); + transition.resize(numStates * numStates); + } else { + prior.clear(); + transition.resize(numStates * 2); + } + alpha.resize(numStates); + previous_alpha_.resize(numStates); + beta_.resize(numStates); + previous_beta_.resize(numStates); + SingleClassGMM tmpGMM(shared_parameters); + tmpGMM.parameters.gaussians.set(parameters.gaussians.get()); + tmpGMM.parameters.relative_regularization.set( + parameters.relative_regularization.get()); + tmpGMM.parameters.absolute_regularization.set( + parameters.absolute_regularization.get()); + tmpGMM.parameters.covariance_mode.set(parameters.covariance_mode.get()); + states.assign(numStates, tmpGMM); + for (auto& state : states) { + state.allocate(); + } + if (is_hierarchical_) updateExitProbabilities(NULL); +} + +void xmm::SingleClassHMM::initParametersToDefault( + std::vector<float> const& dataStddev) { + if (parameters.transition_mode.get() == HMM::TransitionMode::Ergodic) { + setErgodic(); + } else { + setLeftRight(); + } + for (int i = 0; i < parameters.states.get(); i++) { + states[i].initParametersToDefault(dataStddev); + } +} + +void xmm::SingleClassHMM::initMeansWithAllPhrases(TrainingSet* trainingSet) { + if (!trainingSet || trainingSet->empty()) return; + int dimension = static_cast<int>(shared_parameters->dimension.get()); + unsigned int numStates = parameters.states.get(); + + for (int n = 0; n < numStates; n++) + for (int d = 0; d < dimension; d++) + states[n].components[0].mean[d] = 0.0; + + std::vector<int> factor(numStates, 0); + for (auto phrase_it = trainingSet->begin(); phrase_it != trainingSet->end(); + phrase_it++) { + unsigned int step = phrase_it->second->size() / numStates; + unsigned int offset(0); + for (unsigned int n = 0; n < numStates; n++) { + for (unsigned int t = 0; t < step; t++) { + for (unsigned int d = 0; d < dimension; d++) { + states[n].components[0].mean[d] += + phrase_it->second->getValue(offset + t, d); + } + } + offset += step; + factor[n] += step; + } + } + + for (int n = 0; n < numStates; n++) + for (int d = 0; d < dimension; d++) + states[n].components[0].mean[d] /= factor[n]; +} + +void xmm::SingleClassHMM::initCovariances_fullyObserved( + TrainingSet* trainingSet) { + // TODO: simplify with covariance symmetricity. + if (!trainingSet || trainingSet->empty()) return; + int dimension = static_cast<int>(shared_parameters->dimension.get()); + unsigned int numStates = parameters.states.get(); + + if (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) { + for (int n = 0; n < numStates; n++) + states[n].components[0].covariance.assign(dimension * dimension, + 0.0); + } else { + for (int n = 0; n < numStates; n++) + states[n].components[0].covariance.assign(dimension, 0.0); + } + + std::vector<int> factor(numStates, 0); + std::vector<double> othermeans(numStates * dimension, 0.0); + for (auto phrase_it = trainingSet->begin(); phrase_it != trainingSet->end(); + phrase_it++) { + unsigned int step = phrase_it->second->size() / numStates; + unsigned int offset(0); + for (unsigned int n = 0; n < numStates; n++) { + for (unsigned int t = 0; t < step; t++) { + for (unsigned int d1 = 0; d1 < dimension; d1++) { + othermeans[n * dimension + d1] += + phrase_it->second->getValue(offset + t, d1); + if (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) { + for (int d2 = 0; d2 < dimension; d2++) { + states[n].components[0].covariance[d1 * dimension + + d2] += + phrase_it->second->getValue(offset + t, d1) * + phrase_it->second->getValue(offset + t, d2); + } + } else { + float value = + phrase_it->second->getValue(offset + t, d1); + states[n].components[0].covariance[d1] += value * value; + } + } + } + offset += step; + factor[n] += step; + } + } + + for (unsigned int n = 0; n < numStates; n++) + for (unsigned int d1 = 0; d1 < dimension; d1++) { + othermeans[n * dimension + d1] /= factor[n]; + if (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) { + for (int d2 = 0; d2 < dimension; d2++) + states[n].components[0].covariance[d1 * dimension + d2] /= + factor[n]; + } else { + states[n].components[0].covariance[d1] /= factor[n]; + } + } + + for (int n = 0; n < numStates; n++) { + for (int d1 = 0; d1 < dimension; d1++) { + if (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) { + for (int d2 = 0; d2 < dimension; d2++) + states[n].components[0].covariance[d1 * dimension + d2] -= + othermeans[n * dimension + d1] * + othermeans[n * dimension + d2]; + } else { + states[n].components[0].covariance[d1] -= + othermeans[n * dimension + d1] * + othermeans[n * dimension + d1]; + } + } + states[n].addCovarianceOffset(); + states[n].updateInverseCovariances(); + } +} + +void xmm::SingleClassHMM::initMeansCovariancesWithGMMEM( + TrainingSet* trainingSet) { + unsigned int numStates = parameters.states.get(); + + for (unsigned int n = 0; n < numStates; n++) { + TrainingSet temp_ts(MemoryMode::SharedMemory, + shared_parameters->bimodal.get() + ? Multimodality::Bimodal + : Multimodality::Unimodal); + temp_ts.dimension.set(shared_parameters->dimension.get()); + temp_ts.dimension_input.set(shared_parameters->dimension_input.get()); + for (auto phrase_it = trainingSet->begin(); + phrase_it != trainingSet->end(); phrase_it++) { + unsigned int step = phrase_it->second->size() / numStates; + if (step == 0) continue; + temp_ts.addPhrase(phrase_it->first, label); + if (shared_parameters->bimodal.get()) + temp_ts.getPhrase(phrase_it->first) + ->connect(phrase_it->second->getPointer_input(n * step), + phrase_it->second->getPointer_output(n * step), + step); + else + temp_ts.getPhrase(phrase_it->first) + ->connect(phrase_it->second->getPointer(n * step), step); + } + if (temp_ts.empty()) continue; + SingleClassGMM tmpGMM(shared_parameters); + tmpGMM.parameters.gaussians.set(parameters.gaussians.get()); + tmpGMM.parameters.relative_regularization.set( + parameters.relative_regularization.get()); + tmpGMM.parameters.absolute_regularization.set( + parameters.absolute_regularization.get()); + tmpGMM.parameters.covariance_mode.set(parameters.covariance_mode.get()); + tmpGMM.train(&temp_ts); + for (unsigned int c = 0; c < parameters.gaussians.get(); c++) { + states[n].components[c].mean = tmpGMM.components[c].mean; + states[n].components[c].covariance = + tmpGMM.components[c].covariance; + states[n].updateInverseCovariances(); + } + } +} + +void xmm::SingleClassHMM::setErgodic() { + unsigned int numStates = parameters.states.get(); + + for (int i = 0; i < numStates; i++) { + prior[i] = 1 / (float)numStates; + for (int j = 0; j < numStates; j++) { + transition[i * numStates + j] = 1 / (float)numStates; + } + } +} + +void xmm::SingleClassHMM::setLeftRight() { + unsigned int numStates = parameters.states.get(); + + transition.assign(numStates * 2, 0.5); + transition[(numStates - 1) * 2] = 1.; + transition[(numStates - 1) * 2 + 1] = 0.; +} + +void xmm::SingleClassHMM::normalizeTransitions() { + unsigned int numStates = parameters.states.get(); + + double norm_transition; + if (parameters.transition_mode.get() == HMM::TransitionMode::Ergodic) { + double norm_prior(0.); + for (int i = 0; i < numStates; i++) { + norm_prior += prior[i]; + norm_transition = 0.; + for (int j = 0; j < numStates; j++) + norm_transition += transition[i * numStates + j]; + for (int j = 0; j < numStates; j++) + transition[i * numStates + j] /= norm_transition; + } + for (int i = 0; i < numStates; i++) prior[i] /= norm_prior; + } else { + for (int i = 0; i < numStates; i++) { + norm_transition = transition[i * 2] + transition[i * 2 + 1]; + transition[i * 2] /= norm_transition; + transition[i * 2 + 1] /= norm_transition; + } + } +} + +#pragma mark - +#pragma mark Forward-Backward algorithm +double xmm::SingleClassHMM::forward_init(const float* observation, + const float* observation_output) { + unsigned int numStates = parameters.states.get(); + + double norm_const(0.); + if (parameters.transition_mode.get() == HMM::TransitionMode::Ergodic) { + for (int i = 0; i < numStates; i++) { + if (shared_parameters->bimodal.get()) { + if (observation_output) + alpha[i] = prior[i] * + states[i].obsProb_bimodal(observation, + observation_output); + else + alpha[i] = prior[i] * states[i].obsProb_input(observation); + } else { + alpha[i] = prior[i] * states[i].obsProb(observation); + } + norm_const += alpha[i]; + } + } else { + alpha.assign(numStates, 0.0); + if (shared_parameters->bimodal.get()) { + if (observation_output) + alpha[0] = + states[0].obsProb_bimodal(observation, observation_output); + else + alpha[0] = states[0].obsProb_input(observation); + } else { + alpha[0] = states[0].obsProb(observation); + } + norm_const += alpha[0]; + } + if (norm_const > 0) { + for (int i = 0; i < numStates; i++) { + alpha[i] /= norm_const; + } + return 1 / norm_const; + } else { + for (int j = 0; j < numStates; j++) { + alpha[j] = 1. / double(numStates); + } + return 1.; + } +} + +double xmm::SingleClassHMM::forward_update(const float* observation, + const float* observation_output) { + unsigned int numStates = parameters.states.get(); + + double norm_const(0.); + previous_alpha_ = alpha; + for (int j = 0; j < numStates; j++) { + alpha[j] = 0.; + if (parameters.transition_mode.get() == HMM::TransitionMode::Ergodic) { + for (int i = 0; i < numStates; i++) { + alpha[j] += previous_alpha_[i] * transition[i * numStates + j]; + } + } else { + alpha[j] += previous_alpha_[j] * transition[j * 2]; + if (j > 0) { + alpha[j] += + previous_alpha_[j - 1] * transition[(j - 1) * 2 + 1]; + } else { + alpha[0] += previous_alpha_[numStates - 1] * + transition[numStates * 2 - 1]; + } + } + if (shared_parameters->bimodal.get()) { + if (observation_output) + alpha[j] *= + states[j].obsProb_bimodal(observation, observation_output); + else + alpha[j] *= states[j].obsProb_input(observation); + } else { + alpha[j] *= states[j].obsProb(observation); + } + norm_const += alpha[j]; + } + if (norm_const > 1e-300) { + for (int j = 0; j < numStates; j++) { + alpha[j] /= norm_const; + } + return 1. / norm_const; + } else { + return 0.; + } +} + +void xmm::SingleClassHMM::backward_init(double ct) { + for (int i = 0; i < parameters.states.get(); i++) beta_[i] = ct; +} + +void xmm::SingleClassHMM::backward_update(double ct, const float* observation, + const float* observation_output) { + unsigned int numStates = parameters.states.get(); + + previous_beta_ = beta_; + for (int i = 0; i < numStates; i++) { + beta_[i] = 0.; + if (parameters.transition_mode.get() == HMM::TransitionMode::Ergodic) { + for (int j = 0; j < numStates; j++) { + if (shared_parameters->bimodal.get()) { + if (observation_output) + beta_[i] += transition[i * numStates + j] * + previous_beta_[j] * + states[j].obsProb_bimodal( + observation, observation_output); + else + beta_[i] += transition[i * numStates + j] * + previous_beta_[j] * + states[j].obsProb_input(observation); + } else { + beta_[i] += transition[i * numStates + j] * + previous_beta_[j] * + states[j].obsProb(observation); + } + } + } else { + if (shared_parameters->bimodal.get()) { + if (observation_output) + beta_[i] += transition[i * 2] * previous_beta_[i] * + states[i].obsProb_bimodal(observation, + observation_output); + else + beta_[i] += transition[i * 2] * previous_beta_[i] * + states[i].obsProb_input(observation); + } else { + beta_[i] += transition[i * 2] * previous_beta_[i] * + states[i].obsProb(observation); + } + if (i < numStates - 1) { + if (shared_parameters->bimodal.get()) { + if (observation_output) + beta_[i] += transition[i * 2 + 1] * + previous_beta_[i + 1] * + states[i + 1].obsProb_bimodal( + observation, observation_output); + else + beta_[i] += transition[i * 2 + 1] * + previous_beta_[i + 1] * + states[i + 1].obsProb_input(observation); + } else { + beta_[i] += transition[i * 2 + 1] * previous_beta_[i + 1] * + states[i + 1].obsProb(observation); + } + } + } + beta_[i] *= ct; + if (std::isnan(beta_[i]) || std::isinf(fabs(beta_[i]))) { + beta_[i] = 1e100; + } + } +} + +#pragma mark - +#pragma mark Training algorithm +void xmm::SingleClassHMM::emAlgorithmInit(TrainingSet* trainingSet) { + if (!trainingSet || trainingSet->empty()) return; + unsigned int numStates = parameters.states.get(); + unsigned int numGaussians = parameters.gaussians.get(); + + initParametersToDefault(trainingSet->standardDeviation()); + + if (numGaussians > 0) { // TODO: weird > 0 + initMeansCovariancesWithGMMEM(trainingSet); + } else { + initMeansWithAllPhrases(trainingSet); + initCovariances_fullyObserved(trainingSet); + } + + unsigned int nbPhrases = trainingSet->size(); + + // Initialize Algorithm variables + // --------------------------------------- + gamma_sequence_.resize(nbPhrases); + epsilon_sequence_.resize(nbPhrases); + gamma_sequence_per_mixture_.resize(nbPhrases); + unsigned int maxT(0); + unsigned int i(0); + for (auto it = trainingSet->cbegin(); it != trainingSet->cend(); ++it) { + unsigned int T = it->second->size(); + gamma_sequence_[i].resize(T * numStates); + if (parameters.transition_mode.get() == HMM::TransitionMode::Ergodic) { + epsilon_sequence_[i].resize(T * numStates * numStates); + } else { + epsilon_sequence_[i].resize(T * 2 * numStates); + } + gamma_sequence_per_mixture_[i].resize(numGaussians); + for (int c = 0; c < numGaussians; c++) { + gamma_sequence_per_mixture_[i][c].resize(T * numStates); + } + if (T > maxT) { + maxT = T; + } + i++; + } + alpha_seq_.resize(maxT * numStates); + beta_seq_.resize(maxT * numStates); + + gamma_sum_.resize(numStates); + gamma_sum_per_mixture_.resize(numStates * numGaussians); +} + +void xmm::SingleClassHMM::emAlgorithmTerminate() { + normalizeTransitions(); + gamma_sequence_.clear(); + epsilon_sequence_.clear(); + gamma_sequence_per_mixture_.clear(); + alpha_seq_.clear(); + beta_seq_.clear(); + gamma_sum_.clear(); + gamma_sum_per_mixture_.clear(); + SingleClassProbabilisticModel::emAlgorithmTerminate(); +} + +double xmm::SingleClassHMM::emAlgorithmUpdate(TrainingSet* trainingSet) { + int dimension = static_cast<int>(shared_parameters->dimension.get()); + unsigned int numStates = parameters.states.get(); + + double log_prob(0.); + + // Forward-backward for each phrase + // ================================================= + int phraseIndex(0); + for (auto it = trainingSet->cbegin(); it != trainingSet->cend(); ++it) { + if (it->second->size() > 0) + log_prob += baumWelch_forwardBackward(it->second, phraseIndex); + phraseIndex++; + } + + baumWelch_gammaSum(trainingSet); + + // Re-estimate model parameters + // ================================================= + + // set covariance and mixture coefficients to zero for each state + for (int i = 0; i < numStates; i++) { + for (int c = 0; c < parameters.gaussians.get(); c++) { + states[i].mixture_coeffs[c] = 0.; + if (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) { + states[i].components[c].covariance.assign(dimension * dimension, + 0.0); + } else { + states[i].components[c].covariance.assign(dimension, 0.0); + } + } + } + + baumWelch_estimateMixtureCoefficients(trainingSet); + baumWelch_estimateMeans(trainingSet); + baumWelch_estimateCovariances(trainingSet); + if (parameters.transition_mode.get() == HMM::TransitionMode::Ergodic) + baumWelch_estimatePrior(trainingSet); + baumWelch_estimateTransitions(trainingSet); + + return log_prob; +} + +double xmm::SingleClassHMM::baumWelch_forward_update( + std::vector<double>::iterator observation_likelihoods) { + unsigned int numStates = parameters.states.get(); + + double norm_const(0.); + previous_alpha_ = alpha; + for (int j = 0; j < numStates; j++) { + alpha[j] = 0.; + if (parameters.transition_mode.get() == HMM::TransitionMode::Ergodic) { + for (int i = 0; i < numStates; i++) { + alpha[j] += previous_alpha_[i] * transition[i * numStates + j]; + } + } else { + alpha[j] += previous_alpha_[j] * transition[j * 2]; + if (j > 0) { + alpha[j] += + previous_alpha_[j - 1] * transition[(j - 1) * 2 + 1]; + } else { + alpha[0] += previous_alpha_[numStates - 1] * + transition[numStates * 2 - 1]; + } + } + alpha[j] *= observation_likelihoods[j]; + norm_const += alpha[j]; + } + if (norm_const > 1e-300) { + for (int j = 0; j < numStates; j++) { + alpha[j] /= norm_const; + } + return 1. / norm_const; + } else { + return 0.; + } +} + +void xmm::SingleClassHMM::baumWelch_backward_update( + double ct, std::vector<double>::iterator observation_likelihoods) { + unsigned int numStates = parameters.states.get(); + + previous_beta_ = beta_; + for (int i = 0; i < numStates; i++) { + beta_[i] = 0.; + if (parameters.transition_mode.get() == HMM::TransitionMode::Ergodic) { + for (int j = 0; j < numStates; j++) { + beta_[i] += transition[i * numStates + j] * previous_beta_[j] * + observation_likelihoods[j]; + } + } else { + beta_[i] += transition[i * 2] * previous_beta_[i] * + observation_likelihoods[i]; + if (i < numStates - 1) { + beta_[i] += transition[i * 2 + 1] * previous_beta_[i + 1] * + observation_likelihoods[i + 1]; + } + } + beta_[i] *= ct; + if (std::isnan(beta_[i]) || std::isinf(fabs(beta_[i]))) { + beta_[i] = 1e100; + } + } +} + +double xmm::SingleClassHMM::baumWelch_forwardBackward( + std::shared_ptr<Phrase> currentPhrase, int phraseIndex) { + unsigned int T = currentPhrase->size(); + unsigned int numStates = parameters.states.get(); + + std::vector<double> ct(T); + std::vector<double>::iterator alpha_seq_it = alpha_seq_.begin(); + + double log_prob; + + std::vector<double> observation_probabilities(numStates * T); + for (unsigned int t = 0; t < T; ++t) { + for (unsigned int i = 0; i < numStates; i++) { + if (shared_parameters->bimodal.get()) { + observation_probabilities[t * numStates + i] = + states[i].obsProb_bimodal( + currentPhrase->getPointer_input(t), + currentPhrase->getPointer_output(t)); + } else { + observation_probabilities[t * numStates + i] = + states[i].obsProb(currentPhrase->getPointer(t)); + } + } + } + + // Forward algorithm + if (shared_parameters->bimodal.get()) { + ct[0] = forward_init(currentPhrase->getPointer_input(0), + currentPhrase->getPointer_output(0)); + } else { + ct[0] = forward_init(currentPhrase->getPointer(0)); + } + log_prob = -log(ct[0]); + copy(alpha.begin(), alpha.end(), alpha_seq_it); + alpha_seq_it += numStates; + + for (int t = 1; t < T; t++) { + ct[t] = baumWelch_forward_update(observation_probabilities.begin() + + t * numStates); + log_prob -= log(ct[t]); + copy(alpha.begin(), alpha.end(), alpha_seq_it); + alpha_seq_it += numStates; + } + + // Backward algorithm + backward_init(ct[T - 1]); + copy(beta_.begin(), beta_.end(), beta_seq_.begin() + (T - 1) * numStates); + + for (int t = int(T - 2); t >= 0; t--) { + baumWelch_backward_update( + ct[t], observation_probabilities.begin() + (t + 1) * numStates); + copy(beta_.begin(), beta_.end(), beta_seq_.begin() + t * numStates); + } + + // Compute Gamma Variable + for (int t = 0; t < T; t++) { + for (int i = 0; i < numStates; i++) { + gamma_sequence_[phraseIndex][t * numStates + i] = + alpha_seq_[t * numStates + i] * beta_seq_[t * numStates + i] / + ct[t]; + } + } + + // Compute Gamma variable for each mixture component + double oo; + double norm_const; + + for (int t = 0; t < T; t++) { + for (int i = 0; i < numStates; i++) { + norm_const = 0.; + if (parameters.gaussians.get() == 1) { + oo = observation_probabilities[t * numStates + i]; + gamma_sequence_per_mixture_[phraseIndex][0][t * numStates + i] = + gamma_sequence_[phraseIndex][t * numStates + i] * oo; + norm_const += oo; + } else { + for (int c = 0; c < parameters.gaussians.get(); c++) { + if (shared_parameters->bimodal.get()) { + oo = states[i].obsProb_bimodal( + currentPhrase->getPointer_input(t), + currentPhrase->getPointer_output(t), c); + } else { + oo = states[i].obsProb(currentPhrase->getPointer(t), c); + } + gamma_sequence_per_mixture_[phraseIndex][c][t * numStates + + i] = + gamma_sequence_[phraseIndex][t * numStates + i] * oo; + norm_const += oo; + } + } + if (norm_const > 0) + for (int c = 0; c < parameters.gaussians.get(); c++) + gamma_sequence_per_mixture_[phraseIndex][c][t * numStates + + i] /= + norm_const; + } + } + + // Compute Epsilon Variable + if (parameters.transition_mode.get() == HMM::TransitionMode::Ergodic) { + for (int t = 0; t < T - 1; t++) { + for (int i = 0; i < numStates; i++) { + for (int j = 0; j < numStates; j++) { + epsilon_sequence_[phraseIndex][t * numStates * numStates + + i * numStates + j] = + alpha_seq_[t * numStates + i] * + transition[i * numStates + j] * + beta_seq_[(t + 1) * numStates + j]; + epsilon_sequence_[phraseIndex][t * numStates * numStates + + i * numStates + j] *= + observation_probabilities[(t + 1) * numStates + j]; + } + } + } + } else { + for (int t = 0; t < T - 1; t++) { + for (int i = 0; i < numStates; i++) { + epsilon_sequence_[phraseIndex][t * 2 * numStates + i * 2] = + alpha_seq_[t * numStates + i] * transition[i * 2] * + beta_seq_[(t + 1) * numStates + i]; + epsilon_sequence_[phraseIndex][t * 2 * numStates + i * 2] *= + observation_probabilities[(t + 1) * numStates + i]; + if (i < numStates - 1) { + epsilon_sequence_[phraseIndex][t * 2 * numStates + i * 2 + + 1] = + alpha_seq_[t * numStates + i] * transition[i * 2 + 1] * + beta_seq_[(t + 1) * numStates + i + 1]; + epsilon_sequence_[phraseIndex][t * 2 * numStates + i * 2 + + 1] *= + observation_probabilities[(t + 1) * numStates + i + 1]; + } + } + } + } + + return log_prob; +} + +void xmm::SingleClassHMM::baumWelch_gammaSum(TrainingSet* trainingSet) { + unsigned int numStates = parameters.states.get(); + unsigned int numGaussians = parameters.gaussians.get(); + + for (int i = 0; i < numStates; i++) { + gamma_sum_[i] = 0.; + for (int c = 0; c < numGaussians; c++) { + gamma_sum_per_mixture_[i * numGaussians + c] = 0.; + } + } + + unsigned int phraseLength; + unsigned int phraseIndex(0); + for (auto it = trainingSet->cbegin(); it != trainingSet->cend(); ++it) { + phraseLength = it->second->size(); + for (int i = 0; i < numStates; i++) { + for (int t = 0; t < phraseLength; t++) { + gamma_sum_[i] += + gamma_sequence_[phraseIndex][t * numStates + i]; + for (int c = 0; c < numGaussians; c++) { + gamma_sum_per_mixture_[i * numGaussians + c] += + gamma_sequence_per_mixture_[phraseIndex][c] + [t * numStates + i]; + } + } + } + phraseIndex++; + } +} + +void xmm::SingleClassHMM::baumWelch_estimateMixtureCoefficients( + TrainingSet* trainingSet) { + unsigned int numStates = parameters.states.get(); + + unsigned int phraseLength; + unsigned int phraseIndex(0); + for (auto it = trainingSet->cbegin(); it != trainingSet->cend(); ++it) { + phraseLength = it->second->size(); + for (int i = 0; i < numStates; i++) { + for (int t = 0; t < phraseLength; t++) { + for (int c = 0; c < parameters.gaussians.get(); c++) { + states[i].mixture_coeffs[c] += gamma_sequence_per_mixture_ + [phraseIndex][c][t * numStates + i]; + } + } + } + phraseIndex++; + } + + // Scale mixture coefficients + for (int i = 0; i < numStates; i++) { + states[i].normalizeMixtureCoeffs(); + } +} + +void xmm::SingleClassHMM::baumWelch_estimateMeans(TrainingSet* trainingSet) { + int dimension = static_cast<int>(shared_parameters->dimension.get()); + unsigned int numStates = parameters.states.get(); + unsigned int numGaussians = parameters.gaussians.get(); + + unsigned int phraseLength; + + for (int i = 0; i < numStates; i++) { + for (int c = 0; c < numGaussians; c++) { + states[i].components[c].mean.assign(dimension, 0.0); + } + } + + // Re-estimate Mean + int phraseIndex(0); + for (auto it = trainingSet->cbegin(); it != trainingSet->cend(); it++) { + phraseLength = it->second->size(); + for (int i = 0; i < numStates; i++) { + for (int t = 0; t < phraseLength; t++) { + for (int c = 0; c < numGaussians; c++) { + for (int d = 0; d < dimension; d++) { + states[i].components[c].mean[d] += + gamma_sequence_per_mixture_[phraseIndex][c] + [t * numStates + i] * + it->second->getValue(t, d); + } + } + } + } + phraseIndex++; + } + + // Normalize mean + for (int i = 0; i < numStates; i++) { + for (int c = 0; c < numGaussians; c++) { + for (int d = 0; d < dimension; d++) { + if (gamma_sum_per_mixture_[i * numGaussians + c] > 0) { + states[i].components[c].mean[d] /= + gamma_sum_per_mixture_[i * numGaussians + c]; + } + if (std::isnan(states[i].components[c].mean[d])) + throw std::runtime_error("Convergence Error"); + } + } + } +} + +void xmm::SingleClassHMM::baumWelch_estimateCovariances( + TrainingSet* trainingSet) { + int dimension = static_cast<int>(shared_parameters->dimension.get()); + unsigned int numStates = parameters.states.get(); + unsigned int numGaussians = parameters.gaussians.get(); + + unsigned int phraseLength; + + int phraseIndex(0); + for (auto it = trainingSet->cbegin(); it != trainingSet->cend(); it++) { + phraseLength = it->second->size(); + for (int i = 0; i < numStates; i++) { + for (int t = 0; t < phraseLength; t++) { + for (int c = 0; c < numGaussians; c++) { + for (int d1 = 0; d1 < dimension; d1++) { + if (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) { + for (int d2 = d1; d2 < dimension; d2++) { + states[i] + .components[c] + .covariance[d1 * dimension + d2] += + gamma_sequence_per_mixture_ + [phraseIndex][c][t * numStates + i] * + (it->second->getValue(t, d1) - + states[i].components[c].mean[d1]) * + (it->second->getValue(t, d2) - + states[i].components[c].mean[d2]); + } + } else { + float value = it->second->getValue(t, d1) - + states[i].components[c].mean[d1]; + states[i].components[c].covariance[d1] += + gamma_sequence_per_mixture_[phraseIndex][c] + [t * numStates + i] * + value * value; + } + } + } + } + } + phraseIndex++; + } + + // Scale covariance + for (int i = 0; i < numStates; i++) { + for (int c = 0; c < numGaussians; c++) { + if (gamma_sum_per_mixture_[i * numGaussians + c] > 0) { + for (int d1 = 0; d1 < dimension; d1++) { + if (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) { + for (int d2 = d1; d2 < dimension; d2++) { + states[i].components[c].covariance[d1 * dimension + + d2] /= + gamma_sum_per_mixture_[i * numGaussians + c]; + if (d1 != d2) + states[i] + .components[c] + .covariance[d2 * dimension + d1] = + states[i] + .components[c] + .covariance[d1 * dimension + d2]; + } + } else { + states[i].components[c].covariance[d1] /= + gamma_sum_per_mixture_[i * numGaussians + c]; + } + } + } + } + states[i].addCovarianceOffset(); + states[i].updateInverseCovariances(); + } +} + +void xmm::SingleClassHMM::baumWelch_estimatePrior(TrainingSet* trainingSet) { + unsigned int numStates = parameters.states.get(); + + // Set prior vector to 0 + for (int i = 0; i < numStates; i++) prior[i] = 0.; + + // Re-estimate Prior probabilities + double sumprior = 0.; + int phraseIndex(0); + for (auto it = trainingSet->cbegin(); it != trainingSet->cend(); it++) { + for (int i = 0; i < numStates; i++) { + prior[i] += gamma_sequence_[phraseIndex][i]; + sumprior += gamma_sequence_[phraseIndex][i]; + } + phraseIndex++; + } + + // Scale Prior vector + if (sumprior > 0.) { + for (int i = 0; i < numStates; i++) { + prior[i] /= sumprior; + } + } +} + +void xmm::SingleClassHMM::baumWelch_estimateTransitions( + TrainingSet* trainingSet) { + unsigned int numStates = parameters.states.get(); + + // Set prior vector and transition matrix to 0 + if (parameters.transition_mode.get() == HMM::TransitionMode::Ergodic) { + transition.assign(numStates * numStates, 0.0); + } else { + transition.assign(numStates * 2, 0.0); + } + + unsigned int phraseLength; + // Re-estimate Prior and Transition probabilities + unsigned int phraseIndex(0); + for (auto it = trainingSet->cbegin(); it != trainingSet->cend(); it++) { + phraseLength = it->second->size(); + if (phraseLength > 0) { + for (int i = 0; i < numStates; i++) { + // Experimental: A bit of regularization (sometimes avoids + // numerical + // errors) + if (parameters.transition_mode.get() == + HMM::TransitionMode::LeftRight) { + transition[i * 2] += TRANSITION_REGULARIZATION(); + if (i < numStates - 1) + transition[i * 2 + 1] += TRANSITION_REGULARIZATION(); + else + transition[i * 2] += TRANSITION_REGULARIZATION(); + } + // End Regularization + if (parameters.transition_mode.get() == + HMM::TransitionMode::Ergodic) { + for (int j = 0; j < numStates; j++) { + for (int t = 0; t < phraseLength - 1; t++) { + transition[i * numStates + j] += + epsilon_sequence_[phraseIndex][t * numStates * + numStates + + i * numStates + + j]; + } + } + } else { + for (int t = 0; t < phraseLength - 1; t++) { + transition[i * 2] += + epsilon_sequence_[phraseIndex][t * 2 * numStates + + i * 2]; + } + if (i < numStates - 1) { + for (int t = 0; t < phraseLength - 1; t++) { + transition[i * 2 + 1] += + epsilon_sequence_[phraseIndex][t * 2 * + numStates + + i * 2 + 1]; + } + } + } + } + } + phraseIndex++; + } + + // Scale transition matrix + if (parameters.transition_mode.get() == HMM::TransitionMode::Ergodic) { + for (int i = 0; i < numStates; i++) { + for (int j = 0; j < numStates; j++) { + transition[i * numStates + j] /= + (gamma_sum_[i] + 2. * TRANSITION_REGULARIZATION()); + if (std::isnan(transition[i * numStates + j])) + throw std::runtime_error( + "Convergence Error. Check your training data or " + "increase the variance offset"); + } + } + } else { + for (int i = 0; i < numStates; i++) { + transition[i * 2] /= + (gamma_sum_[i] + 2. * TRANSITION_REGULARIZATION()); + if (std::isnan(transition[i * 2])) + throw std::runtime_error( + "Convergence Error. Check your training data or increase " + "the variance offset"); + if (i < numStates - 1) { + transition[i * 2 + 1] /= + (gamma_sum_[i] + 2. * TRANSITION_REGULARIZATION()); + if (std::isnan(transition[i * 2 + 1])) + throw std::runtime_error( + "Convergence Error. Check your training data or " + "increase the variance offset"); + } + } + } +} + +#pragma mark - +#pragma mark Performance + +void xmm::SingleClassHMM::reset() { + check_training(); + SingleClassProbabilisticModel::reset(); + forward_initialized_ = false; + if (is_hierarchical_) { + for (int i = 0; i < 3; i++) + alpha_h[i].resize(parameters.states.get(), 0.0); + alpha.clear(); + previous_alpha_.clear(); + beta_.clear(); + previous_beta_.clear(); + } else { + addCyclicTransition(0.05); + } +} + +void xmm::SingleClassHMM::addCyclicTransition(double proba) { + unsigned int numStates = parameters.states.get(); + + check_training(); + if (parameters.transition_mode.get() == HMM::TransitionMode::Ergodic) { + if (numStates > 1) transition[(numStates - 1) * numStates] = proba; + } else { + if (numStates > 1) transition[(numStates - 1) * 2 + 1] = proba; + } +} + +double xmm::SingleClassHMM::filter(std::vector<float> const& observation) { + check_training(); + double ct; + + if (forward_initialized_) { + ct = forward_update(&observation[0]); + } else { + this->likelihood_buffer_.clear(); + ct = forward_init(&observation[0]); + } + + forward_initialized_ = true; + + results.instant_likelihood = 1. / ct; + updateAlphaWindow(); + updateResults(); + + if (shared_parameters->bimodal.get()) { + regression(observation); + } + + return results.instant_likelihood; +} + +unsigned int argmax(std::vector<double> const& v) { + unsigned int amax(-1); + if (v.size() == 0) return amax; + double current_max(v[0]); + for (unsigned int i = 1; i < v.size(); ++i) { + if (v[i] > current_max) { + current_max = v[i]; + amax = i; + } + } + return amax; +} + +void xmm::SingleClassHMM::updateAlphaWindow() { + unsigned int numStates = parameters.states.get(); + + check_training(); + results.likeliest_state = 0; + // Get likeliest State + double best_alpha(is_hierarchical_ ? (alpha_h[0][0] + alpha_h[1][0]) + : alpha[0]); + for (unsigned int i = 1; i < numStates; ++i) { + if (is_hierarchical_) { + if ((alpha_h[0][i] + alpha_h[1][i]) > best_alpha) { + best_alpha = alpha_h[0][i] + alpha_h[1][i]; + results.likeliest_state = i; + } + } else { + if (alpha[i] > best_alpha) { + best_alpha = alpha[i]; + results.likeliest_state = i; + } + } + } + + // Compute Window + window_minindex_ = (static_cast<int>(results.likeliest_state) - + static_cast<int>(numStates) / 2); + window_maxindex_ = (static_cast<int>(results.likeliest_state) + + static_cast<int>(numStates) / 2); + window_minindex_ = (window_minindex_ >= 0) ? window_minindex_ : 0; + window_maxindex_ = (window_maxindex_ <= static_cast<int>(numStates)) + ? window_maxindex_ + : static_cast<int>(numStates); + window_normalization_constant_ = 0.0; + for (int i = window_minindex_; i < window_maxindex_; ++i) { + window_normalization_constant_ += + is_hierarchical_ ? (alpha_h[0][i] + alpha_h[1][i]) : alpha[i]; + } +} + +void xmm::SingleClassHMM::regression( + std::vector<float> const& observation_input) { + check_training(); + unsigned int dimension_output = shared_parameters->dimension.get() - + shared_parameters->dimension_input.get(); + results.output_values.assign(dimension_output, 0.0); + results.output_covariance.assign( + (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) + ? dimension_output * dimension_output + : dimension_output, + 0.0); + std::vector<float> tmp_predicted_output(dimension_output); + + if (parameters.regression_estimator.get() == + HMM::RegressionEstimator::Likeliest) { + states[results.likeliest_state].likelihood(observation_input); + states[results.likeliest_state].regression(observation_input); + results.output_values = + states[results.likeliest_state].results.output_values; + return; + } + + unsigned int clip_min_state = (parameters.regression_estimator.get() == + HMM::RegressionEstimator::Full) + ? 0 + : window_minindex_; + unsigned int clip_max_state = (parameters.regression_estimator.get() == + HMM::RegressionEstimator::Full) + ? parameters.states.get() + : window_maxindex_; + double normalization_constant = (parameters.regression_estimator.get() == + HMM::RegressionEstimator::Full) + ? 1.0 + : window_normalization_constant_; + + if (normalization_constant <= 0.0) normalization_constant = 1.; + + // Compute Regression + for (unsigned int i = clip_min_state; i < clip_max_state; ++i) { + states[i].likelihood(observation_input); + states[i].regression(observation_input); + tmp_predicted_output = states[i].results.output_values; + for (unsigned int d = 0; d < dimension_output; ++d) { + if (is_hierarchical_) { + results.output_values[d] += (alpha_h[0][i] + alpha_h[1][i]) * + tmp_predicted_output[d] / + normalization_constant; + if (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) { + for (int d2 = 0; d2 < dimension_output; ++d2) + results.output_covariance[d * dimension_output + d2] += + (alpha_h[0][i] + alpha_h[1][i]) * + (alpha_h[0][i] + alpha_h[1][i]) * + states[i] + .results + .output_covariance[d * dimension_output + d2] / + normalization_constant; + } else { + results.output_covariance[d] += + (alpha_h[0][i] + alpha_h[1][i]) * + (alpha_h[0][i] + alpha_h[1][i]) * + states[i].results.output_covariance[d] / + normalization_constant; + } + } else { + results.output_values[d] += + alpha[i] * tmp_predicted_output[d] / normalization_constant; + if (parameters.covariance_mode.get() == + GaussianDistribution::CovarianceMode::Full) { + for (int d2 = 0; d2 < dimension_output; ++d2) + results.output_covariance[d * dimension_output + d2] += + alpha[i] * alpha[i] * + states[i] + .results + .output_covariance[d * dimension_output + d2] / + normalization_constant; + + } else { + results.output_covariance[d] += + alpha[i] * alpha[i] * + states[i].results.output_covariance[d] / + normalization_constant; + } + } + } + } +} + +void xmm::SingleClassHMM::updateResults() { + likelihood_buffer_.push(log(results.instant_likelihood)); + results.log_likelihood = 0.0; + unsigned int bufSize = likelihood_buffer_.size_t(); + for (unsigned int i = 0; i < bufSize; i++) { + results.log_likelihood += likelihood_buffer_(0, i); + } + results.log_likelihood /= double(bufSize); + + results.progress = 0.0; + for (int i = window_minindex_; i < window_maxindex_; ++i) { + if (is_hierarchical_) + results.progress += + (alpha_h[0][i] + alpha_h[1][i] + alpha_h[2][i]) * i / + window_normalization_constant_; + else + results.progress += alpha[i] * i / window_normalization_constant_; + } + results.progress /= double(parameters.states.get() - 1); + + // ///////////////////////// + // results_progress = 0.0; + // for (unsigned int i=0 ; i<numStates; i++) { + // if (is_hierarchical_) + // results_progress += (alpha_h[0][i] + alpha_h[1][i] + + // alpha_h[2][i]) * i; + // else + // results_progress += alpha[i] * i; + // } + // results_progress /= double(numStates-1); + // ///////////////////////// +} + +#pragma mark - +#pragma mark File IO +Json::Value xmm::SingleClassHMM::toJson() const { + check_training(); + Json::Value root = SingleClassProbabilisticModel::toJson(); + root["parameters"] = parameters.toJson(); + if (parameters.transition_mode.get() == HMM::TransitionMode::Ergodic) + root["prior"] = vector2json(prior); + root["transition"] = vector2json(transition); + root["exitProbabilities"] = vector2json(exit_probabilities_); + + root["states"].resize( + static_cast<Json::ArrayIndex>(parameters.states.get())); + for (int s = 0; s < parameters.states.get(); s++) { + root["states"][s] = states[s].toJson(); + } + return root; +} + +void xmm::SingleClassHMM::fromJson(Json::Value const& root) { + check_training(); + try { + SingleClassHMM tmp(shared_parameters, root); + *this = tmp; + } catch (JsonException& e) { + throw e; + } +} + +#pragma mark - +#pragma mark Exit Probabilities + +void xmm::SingleClassHMM::updateExitProbabilities(float* exitProbabilities) { + unsigned int numStates = parameters.states.get(); + + if (!is_hierarchical_) + throw std::runtime_error( + "Model is Not hierarchical: method cannot be used"); + if (exitProbabilities == NULL) { + exit_probabilities_.resize(numStates, 0.0); + exit_probabilities_[numStates - 1] = + DEFAULT_EXITPROBABILITY_LAST_STATE(); + } else { + exit_probabilities_.resize(numStates, 0.0); + for (int i = 0; i < numStates; i++) try { + exit_probabilities_[i] = exitProbabilities[i]; + } catch (std::exception& e) { + throw std::invalid_argument( + "Wrong format for exit probabilities"); + } + } +} + +void xmm::SingleClassHMM::addExitPoint(int stateIndex, float proba) { + if (!is_hierarchical_) + throw std::runtime_error( + "Model is Not hierarchical: method cannot be used"); + if (stateIndex >= parameters.states.get()) + throw std::out_of_range("State index out of bounds"); + exit_probabilities_[stateIndex] = proba; +} + +//#pragma mark > Conversion & Extraction +// void xmm::SingleClassHMM::makeBimodal(unsigned int dimension_input) +//{ +// check_training(); +// if (bimodal_) +// throw std::runtime_error("The model is already bimodal"); +// if (dimension_input >= dimension_) +// throw std::out_of_range("Request input dimension exceeds the current +// dimension"); +// flags_ = flags_ | BIMODAL; +// bimodal_ = true; +// dimension_input_ = dimension_input; +// for (unsigned int i=0; i<numStates; i++) { +// states[i].makeBimodal(dimension_input); +// } +// results_predicted_output.resize(dimension_ - dimension_input_); +// results_output_variance.resize(dimension_ - dimension_input_); +//} +// +// void xmm::SingleClassHMM::makeUnimodal() +//{ +// check_training(); +// if (!bimodal_) +// throw std::runtime_error("The model is already unimodal"); +// flags_ = NONE; +// bimodal_ = false; +// dimension_input_ = 0; +// for (unsigned int i=0; i<numStates; i++) { +// states[i].makeUnimodal(); +// } +// results_predicted_output.clear(); +// results_output_variance.clear(); +//} +// +// xmm::HMM xmm::SingleClassHMM::extractSubmodel(std::vector<unsigned int>& +// columns) const +//{ +// check_training(); +// if (columns.size() > dimension_) +// throw std::out_of_range("requested number of columns exceeds the +// dimension of the current model"); +// for (unsigned int column=0; column<columns.size(); ++column) { +// if (columns[column] >= dimension_) +// throw std::out_of_range("Some column indices exceeds the dimension +// of the current model"); +// } +// HMM target_model(*this); +// size_t new_dim = columns.size(); +// target_model.setTrainingCallback(NULL, NULL); +// target_model.bimodal_ = false; +// target_model.dimension_ = static_cast<unsigned int>(new_dim); +// target_model.dimension_input_ = 0; +// target_model.flags_ = (this->flags_ & HIERARCHICAL); +// target_model.allocate(); +// for (unsigned int i=0; i<numStates; ++i) { +// target_model.states[i] = states[i].extractSubmodel(columns); +// } +// return target_model; +//} +// +// xmm::HMM xmm::SingleClassHMM::extractSubmodel_input() const +//{ +// check_training(); +// if (!bimodal_) +// throw std::runtime_error("The model needs to be bimodal"); +// std::vector<unsigned int> columns_input(dimension_input_); +// for (unsigned int i=0; i<dimension_input_; ++i) { +// columns_input[i] = i; +// } +// return extractSubmodel(columns_input); +//} +// +// xmm::HMM xmm::SingleClassHMM::extractSubmodel_output() const +//{ +// check_training(); +// if (!bimodal_) +// throw std::runtime_error("The model needs to be bimodal"); +// std::vector<unsigned int> columns_output(dimension_ - dimension_input_); +// for (unsigned int i=dimension_input_; i<dimension_; ++i) { +// columns_output[i-dimension_input_] = i; +// } +// return extractSubmodel(columns_output); +//} +// +// xmm::HMM xmm::SingleClassHMM::extract_inverse_model() const +//{ +// check_training(); +// if (!bimodal_) +// throw std::runtime_error("The model needs to be bimodal"); +// std::vector<unsigned int> columns(dimension_); +// for (unsigned int i=0; i<dimension_-dimension_input_; ++i) { +// columns[i] = i+dimension_input_; +// } +// for (unsigned int i=dimension_-dimension_input_, j=0; i<dimension_; ++i, +// ++j) { +// columns[i] = j; +// } +// HMM target_model = extractSubmodel(columns); +// target_model.makeBimodal(dimension_-dimension_input_); +// return target_model; +//} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmSingleClass.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmSingleClass.hpp new file mode 100644 index 0000000..7dd78f3 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/hmm/xmmHmmSingleClass.hpp @@ -0,0 +1,527 @@ +/* + * xmmHmmSingleClass.hpp + * + * Hidden Markov Model Definition for a Single Class + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmHmmSingleClass_hpp +#define xmmHmmSingleClass_hpp + +#include "../gmm/xmmGmmSingleClass.hpp" +#include "xmmHmmParameters.hpp" +#include "xmmHmmResults.hpp" + +namespace xmm { +/** @ingroup HMM + @brief Single-Class Hidden Markov Model + @details Hidden Markov Model with Multivariate Gaussian Mixture Model + Observation Distributions. + Supports Bimodal data and Hidden Markov Regression. Built for Hierarchical HMMs + */ +class SingleClassHMM : public SingleClassProbabilisticModel { + template <typename SingleClassModel, typename ModelType> + friend class Model; + friend class HierarchicalHMM; + + public: + static const float DEFAULT_EXITPROBABILITY_LAST_STATE() { return 0.1; } + static const float TRANSITION_REGULARIZATION() { return 1.0e-5; } + + /** + @brief Constructor + @param p Shared Parameters (owned by a multiclass object) + */ + SingleClassHMM(std::shared_ptr<SharedParameters> p = NULL); + + /** + @brief Copy constructor + @param src Source Model + */ + SingleClassHMM(SingleClassHMM const& src); + + /** + @brief Copy constructor + @param p pointer to a shared parameters object (owned by a Model) + @param root Json structure + */ + explicit SingleClassHMM(std::shared_ptr<SharedParameters> p, + Json::Value const& root); + + /** + @brief Assignment + @param src Source Model + */ + SingleClassHMM& operator=(SingleClassHMM const& src); + + /** @name Accessors */ + ///@{ + + /** + @brief Set the exit probability of a specific state + @details this method is only active in 'HIERARCHICAL' mode. The probability + @param stateIndex index of the state to add the exit point + @param proba probability to exit the gesture from this state + @throws runtime_error if the model is not hierarchical + @throws out_of_range if the state index is out of bounds + */ + void addExitPoint(int stateIndex, float proba); + + ///@} + + /** @name Performance */ + ///@{ + + /** + @brief Resets the fitering process (recognition or regression) + */ + void reset(); + + /** + @brief filters a incoming observation (performs recognition or regression) + @details the results of the inference process are stored in the results + attribute + @param observation observation vector + @return likelihood of the observation + */ + double filter(std::vector<float> const& observation); + + ///@} + + /** @name Json I/O */ + ///@{ + + /** + @brief Write the object to a JSON Structure + @return Json value containing the object's information + */ + virtual Json::Value toJson() const; + + /** + @brief Read the object from a JSON Structure + @param root JSON value containing the object's information + @throws JsonException if the JSON value has a wrong format + */ + virtual void fromJson(Json::Value const& root); + + ///@} + + // /** + // @brief Convert to bimodal HMM in place + // @param dimension_input dimension of the input modality + // @throws runtime_error if the model is already bimodal + // @throws out_of_range if the requested input dimension is too + // large + // */ + // void makeBimodal(unsigned int dimension_input); + // + // /** + // @brief Convert to unimodal HMM in place + // @throws runtime_error if the model is already unimodal + // */ + // void makeUnimodal(); + // + // /** + // @brief extract a submodel with the given columns + // @param columns columns indices in the target order + // @throws runtime_error if the model is training + // @throws out_of_range if the number or indices of the requested + // columns exceeds the current dimension + // @return a HMM from the current model considering only the target + // columns + // */ + // HMM extractSubmodel(std::vector<unsigned int>& columns) const; + // + // /** + // @brief extract the submodel of the input modality + // @throws runtime_error if the model is training or if it is not + // bimodal + // @return a unimodal HMM of the input modality from the current + // bimodal model + // */ + // HMM extractSubmodel_input() const; + // + // /** + // @brief extract the submodel of the output modality + // @throws runtime_error if the model is training or if it is not + // bimodal + // @return a unimodal HMM of the output modality from the current + // bimodal model + // */ + // HMM extractSubmodel_output() const; + // + // /** + // @brief extract the model with reversed input and output + // modalities + // @throws runtime_error if the model is training or if it is not + // bimodal + // @return a bimodal HMM that swaps the input and output modalities + // */ + // HMM extract_inverse_model() const; + + /** + @brief Model Parameters + */ + ClassParameters<HMM> parameters; + + /** + @brief Results of the filtering process (recognition & regression) + */ + ClassResults<HMM> results; + + /** + @brief State probabilities estimated by the forward algorithm. + */ + std::vector<double> alpha; + + /** + @brief State probabilities estimated by the hierarchical forward algorithm. + @details the variable is only allocated/used in hierarchical mode (see + 'HIERARCHICAL' flag) + */ + std::vector<double> alpha_h[3]; + + /** + @brief States of the model (Gaussian Mixture Models) + */ + std::vector<SingleClassGMM> states; + + /** + @brief Prior probabilities + */ + std::vector<float> prior; + + /** + @brief Transition Matrix + */ + std::vector<float> transition; + + protected: + /** + @brief Allocate model parameters + */ + void allocate(); + + /** + @brief initialize model parameters to their default values + */ + void initParametersToDefault(std::vector<float> const& dataStddev); + + /** + @brief initialize the means of each state with all training phrases (single + gaussian) + */ + void initMeansWithAllPhrases(TrainingSet* trainingSet); + + /** + @brief initialize the covariances of each state with all training phrases + (single gaussian) + */ + void initCovariances_fullyObserved(TrainingSet* trainingSet); + + /** + @brief initialize the means and covariances of each state using GMM-EM on + segments. + */ + void initMeansCovariancesWithGMMEM(TrainingSet* trainingSet); + + /** + @brief set the prior and transition matrix to ergodic + */ + void setErgodic(); + + /** + @brief set the prior and transition matrix to left-right (no state skip) + */ + void setLeftRight(); + + /** + @brief Normalize transition probabilities + */ + void normalizeTransitions(); + + /** + @brief Initialization of the forward algorithm + @param observation observation vector at time t. If the model is bimodal, + this vector + should be only the observation on the input modality. + @param observation_output observation on the output modality (only used if + the model is bimodal). + If unspecified, the update is performed on the input modality only. + @return instantaneous likelihood + */ + double forward_init(const float* observation, + const float* observation_output = NULL); + + /** + @brief Update of the forward algorithm + @param observation observation vector at time t. If the model is bimodal, + this vector + should be only the observation on the input modality. + @param observation_output observation on the output modality (only used if + the model is bimodal). + If unspecified, the update is performed on the input modality only. + @return instantaneous likelihood + */ + double forward_update(const float* observation, + const float* observation_output = NULL); + + /** + @brief Initialization Backward algorithm + @param ct inverse of the likelihood at time step t computed + with the forward algorithm (see Rabiner 1989) + */ + void backward_init(double ct); + + /** + @brief Update of the Backward algorithm + @param ct inverse of the likelihood at time step t computed + with the forward algorithm (see Rabiner 1989) + @param observation observation vector at time t. If the model is bimodal, + this vector + should be only the observation on the input modality. + @param observation_output observation on the output modality (only used if + the model is bimodal). + If unspecified, the update is performed on the input modality only. + */ + void backward_update(double ct, const float* observation, + const float* observation_output = NULL); + + /** + @brief Initialization of the parameters before training + */ + void emAlgorithmInit(TrainingSet* trainingSet); + + /** + @brief Termination of the training algorithm + */ + void emAlgorithmTerminate(); + + /** + @brief update method of the EM algorithm (calls Baum-Welch Algorithm) + */ + virtual double emAlgorithmUpdate(TrainingSet* trainingSet); + + /** + @brief Compute the forward-backward algorithm on a phrase of the training + set + @param currentPhrase pointer to the phrase of the training set + @param phraseIndex index of the phrase + @return lieklihood of the phrase given the model's current parameters + */ + double baumWelch_forwardBackward(std::shared_ptr<Phrase> currentPhrase, + int phraseIndex); + + /** + @brief Update of the forward algorithm for Training (observation + probabilities are pre-computed) + @param observation_likelihoods likelihoods of the observations for each + state + @return instantaneous likelihood + */ + double baumWelch_forward_update( + std::vector<double>::iterator observation_likelihoods); + + /** + @brief Update of the Backward algorithm for Training (observation + probabilities are pre-computed) + @param ct inverse of the likelihood at time step t computed + with the forward algorithm (see Rabiner 1989) + @param observation_likelihoods likelihoods of the observations for each + state + */ + void baumWelch_backward_update( + double ct, std::vector<double>::iterator observation_likelihoods); + + /** + @brief Compute the sum of the gamma variable (for use in EM) + */ + void baumWelch_gammaSum(TrainingSet* trainingSet); + + /** + @brief Estimate the Coefficients of the Gaussian Mixture for each state + */ + void baumWelch_estimateMixtureCoefficients(TrainingSet* trainingSet); + + /** + @brief Estimate the Means of the Gaussian Distribution for each state + */ + void baumWelch_estimateMeans(TrainingSet* trainingSet); + + /** + @brief Estimate the Covariances of the Gaussian Distribution for each state + */ + void baumWelch_estimateCovariances(TrainingSet* trainingSet); + + /** + @brief Estimate the Prior Probabilities + */ + void baumWelch_estimatePrior(TrainingSet* trainingSet); + + /** + @brief Estimate the Transition Probabilities + */ + void baumWelch_estimateTransitions(TrainingSet* trainingSet); + + /** + @brief Adds a cyclic Transition probability (from last state to first + state) + @details avoids getting stuck at the end of the model. this method is idle + for a hierarchical model. + @param proba probability of the transition form last to first state + */ + void addCyclicTransition(double proba); + + /** + @brief Estimates the likeliest state and compute the bounds of the windows + over the states. + @details The window is centered around the likeliest state, and its size is + the number of states. + The window is clipped to the first and last states. + */ + void updateAlphaWindow(); + + /** + @brief Compute the regression for the case of a bimodal model, given the + estimated state probabilities estimated by forward algorithm. + @details predicted output parameters are stored in the result structure. + @param observation_input observation on the input modality + */ + void regression(std::vector<float> const& observation_input); + + /** + @brief update the content of the likelihood buffer and return average + likelihood. + @details The method also updates the cumulative log-likelihood computed + over a window (cumulativeloglikelihood) + */ + void updateResults(); + + /** + @brief Update the exit probability vector given the probabilities + @details this method is only active in 'HIERARCHICAL' mode. The probability + vector defines the probability of exiting the gesture from each state. If + unspecified, + only the last state of the gesture has a non-zero probability. + @param _exitProbabilities vector of exit probabilities (size must be + nbStates) + @throws runtime_error if the model is not hierarchical + */ + void updateExitProbabilities(float* _exitProbabilities = NULL); + + protected: + /** + @brief Defines if the forward algorithm has been initialized + */ + bool forward_initialized_; + + /** + @brief used to store the alpha estimated at the previous time step + */ + std::vector<double> previous_alpha_; + + /** + @brief backward state probabilities + */ + std::vector<double> beta_; + + /** + @brief used to store the beta estimated at the previous time step + */ + std::vector<double> previous_beta_; + + /** + @brief Sequence of Gamma probabilities + */ + std::vector<std::vector<double> > gamma_sequence_; + + /** + @brief Sequence of Epsilon probabilities + */ + std::vector<std::vector<double> > epsilon_sequence_; + + /** + @brief Sequence of Gamma probabilities for each mixture component + */ + std::vector<std::vector<std::vector<double> > > gamma_sequence_per_mixture_; + + /** + @brief Sequence of alpha (forward) probabilities + */ + std::vector<double> alpha_seq_; + + /** + @brief Sequence of beta (backward) probabilities + */ + std::vector<double> beta_seq_; + + /** + @brief Used to store the sums of the gamma variable + */ + std::vector<double> gamma_sum_; + + /** + @brief Used to store the sums of the gamma variable for each mixture + component + */ + std::vector<double> gamma_sum_per_mixture_; + + /** + @brief Defines if the model is a submodel of a hierarchical HMM. + @details in practice this adds exit probabilities to each state. These + probabilities are set + to the last state by default. + */ + bool is_hierarchical_; + + /** + @brief Exit probabilities for a hierarchical model. + */ + std::vector<float> exit_probabilities_; + + /** + @brief minimum index of the alpha window (used for regression & time + progression) + */ + int window_minindex_; + + /** + @brief minimum index of the alpha window (used for regression & time + progression) + */ + int window_maxindex_; + + /** + @brief normalization constant of the alpha window (used for regression & + time progression) + */ + double window_normalization_constant_; +}; +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeans.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeans.cpp new file mode 100644 index 0000000..cd04cd6 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeans.cpp @@ -0,0 +1,284 @@ +/* + * xmmKMeans.hpp + * + * K-Means clustering + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "xmmKMeans.hpp" +#include <limits> + +#ifdef WIN32 +static long random() { return rand(); } +#endif +#define kmax(a, b) (((a) > (b)) ? (a) : (b)) + +#pragma mark - +#pragma mark === Public Interface === +#pragma mark > Constructors +xmm::KMeans::KMeans(unsigned int clusters_) + : shared_parameters(std::make_shared<SharedParameters>()), + initialization_mode(InitializationMode::Random) { + configuration.clusters.set(clusters_); +} + +xmm::KMeans::KMeans(KMeans const& src) + : configuration(src.configuration), + centers(src.centers), + initialization_mode(src.initialization_mode) {} + +xmm::KMeans& xmm::KMeans::operator=(KMeans const& src) { + if (this != &src) { + initialization_mode = src.initialization_mode; + configuration = src.configuration; + centers = src.centers; + } + return *this; +} + +#pragma mark > Training +void xmm::KMeans::train(TrainingSet* trainingSet) { + if (!trainingSet || trainingSet->empty()) return; + + shared_parameters->dimension.set(trainingSet->dimension.get()); + centers.resize( + configuration.clusters.get() * shared_parameters->dimension.get(), 0.0); + if (initialization_mode == InitializationMode::Random) + randomizeClusters(trainingSet->standardDeviation()); + else + initClustersWithFirstPhrase(trainingSet->begin()->second); + + int dimension = static_cast<int>(shared_parameters->dimension.get()); + int clusters = static_cast<int>(configuration.clusters.get()); + + for (int trainingNbIterations = 0; + trainingNbIterations < configuration.max_iterations.get(); + ++trainingNbIterations) { + std::vector<float> previous_centers = centers; + + updateCenters(previous_centers, trainingSet); + + float meanClusterDistance(0.0); + float maxRelativeCenterVariation(0.0); + for (unsigned int k = 0; k < clusters; ++k) { + for (unsigned int l = 0; l < clusters; ++l) { + if (k != l) { + meanClusterDistance += + euclidean_distance(¢ers[k * dimension], + ¢ers[l * dimension], dimension); + } + } + maxRelativeCenterVariation = + kmax(euclidean_distance(&previous_centers[k * dimension], + ¢ers[k * dimension], dimension), + maxRelativeCenterVariation); + } + meanClusterDistance /= float(clusters * (clusters - 1)); + maxRelativeCenterVariation /= float(clusters); + maxRelativeCenterVariation /= meanClusterDistance; + if (maxRelativeCenterVariation < + configuration.relative_distance_threshold.get()) + break; + } +} + +void xmm::KMeans::initClustersWithFirstPhrase(std::shared_ptr<Phrase> phrase) { + int dimension = static_cast<int>(shared_parameters->dimension.get()); + unsigned int step = phrase->size() / configuration.clusters.get(); + + unsigned int offset(0); + for (unsigned int c = 0; c < configuration.clusters.get(); c++) { + for (unsigned int d = 0; d < dimension; d++) { + centers[c * dimension + d] = 0.0; + } + for (unsigned int t = 0; t < step; t++) { + for (unsigned int d = 0; d < dimension; d++) { + centers[c * dimension + d] += + phrase->getValue(offset + t, d) / float(step); + } + } + offset += step; + } +} + +void xmm::KMeans::randomizeClusters( + std::vector<float> const& trainingSetVariance) { + int dimension = static_cast<int>(shared_parameters->dimension.get()); + for (unsigned int k = 0; k < configuration.clusters.get(); ++k) { + for (unsigned int d = 0; d < dimension; ++d) { + centers[k * dimension + d] = + trainingSetVariance[d] * (2. * random() / float(RAND_MAX) - 1.); + } + } +} + +void xmm::KMeans::updateCenters(std::vector<float>& previous_centers, + TrainingSet* trainingSet) { + int dimension = static_cast<int>(shared_parameters->dimension.get()); + int clusters = static_cast<int>(configuration.clusters.get()); + + unsigned int phraseIndex(0); + centers.assign(clusters * dimension, 0.0); + std::vector<unsigned int> numFramesPerCluster(clusters, 0); + for (auto it = trainingSet->begin(); it != trainingSet->end(); + ++it, ++phraseIndex) { + for (unsigned int t = 0; t < it->second->size(); ++t) { + float min_distance; + if (trainingSet->bimodal()) { + std::vector<float> frame(dimension); + for (unsigned int d = 0; d < dimension; ++d) { + frame[d] = it->second->getValue(t, d); + } + min_distance = euclidean_distance( + &frame[0], &previous_centers[0], dimension); + } else { + min_distance = euclidean_distance( + it->second->getPointer(t), &previous_centers[0], dimension); + } + unsigned int cluster_membership(0); + for (unsigned int k = 1; k < clusters; ++k) { + float distance; + if (trainingSet->bimodal()) { + std::vector<float> frame(dimension); + for (unsigned int d = 0; d < dimension; ++d) { + frame[d] = it->second->getValue(t, d); + } + distance = euclidean_distance( + &frame[0], &previous_centers[k * dimension], dimension); + } else { + distance = euclidean_distance( + it->second->getPointer(t), + &previous_centers[k * dimension], dimension); + } + if (distance < min_distance) { + cluster_membership = k; + min_distance = distance; + } + } + numFramesPerCluster[cluster_membership]++; + for (unsigned int d = 0; d < dimension; ++d) { + centers[cluster_membership * dimension + d] += + it->second->getValue(t, d); + } + } + } + for (unsigned int k = 0; k < clusters; ++k) { + if (numFramesPerCluster[k] > 0) + for (unsigned int d = 0; d < dimension; ++d) { + centers[k * dimension + d] /= float(numFramesPerCluster[k]); + } + } +} + +#pragma mark > Performance +void xmm::KMeans::reset() { + results.distances.resize(configuration.clusters.get(), 0.0); +} + +void xmm::KMeans::filter(std::vector<float> const& observation) { + if (observation.size() != shared_parameters->dimension.get()) + throw std::runtime_error("Observation has wrong dimension"); + int dimension = static_cast<int>(shared_parameters->dimension.get()); + results.likeliest = 0; + float minDistance(std::numeric_limits<float>::max()); + for (unsigned int k = 0; k < configuration.clusters.get(); ++k) { + results.distances[k] = euclidean_distance( + &observation[0], ¢ers[k * dimension], dimension); + if (results.distances[k] < minDistance) { + minDistance = results.distances[k]; + results.likeliest = k; + } + } +} + +#pragma mark - +#pragma mark File IO +Json::Value xmm::KMeans::toJson() const { + // JSONNode json_model(JSON_NODE); + // json_model.set_name("KMeans"); + // + // json_model.push_back(JSONNode("dimension", dimension_)); + // json_model.push_back(JSONNode("nbclusters", nbClusters_)); + // json_model.push_back(vector2json(centers, "centers")); + + return Json::Value(); +} + +void xmm::KMeans::fromJson(Json::Value const& root) { + // try { + // if (root.type() != JSON_NODE) + // throw JSONException("Wrong type: was expecting 'JSON_NODE'", + // root.name()); + // JSONNode::const_iterator root_it = root.begin(); + // + // // Get Dimension + // root_it = root.find("dimension"); + // if (root_it == root.end()) + // throw JSONException("JSON Node is incomplete", + // root_it->name()); + // if (root_it->type() != JSON_NUMBER) + // throw JSONException("Wrong type for node 'dimension': was + // expecting 'JSON_NUMBER'", root_it->name()); + // dimension_ = static_cast<unsigned int>(root_it->as_int()); + // + // // Get Number of Clusters + // root_it = root.find("nbclusters"); + // if (root_it == root.end()) + // throw JSONException("JSON Node is incomplete", + // root_it->name()); + // if (root_it->type() != JSON_NUMBER) + // throw JSONException("Wrong type for node 'nbclusters': was + // expecting 'JSON_NUMBER'", root_it->name()); + // nbClusters_ = static_cast<unsigned int>(root_it->as_int()); + // + // // Get Cluster Centers + // root_it = root.find("centers"); + // if (root_it == root.end()) + // throw JSONException("JSON Node is incomplete", + // root_it->name()); + // if (root_it->type() != JSON_ARRAY) + // throw JSONException("Wrong type for node 'centers': was + // expecting 'JSON_ARRAY'", root_it->name()); + // json2vector(*root_it, centers, nbClusters_); + // } catch (JSONException &e) { + // throw JSONException(e, root.name()); + // } catch (std::exception &e) { + // throw JSONException(e, root.name()); + // } +} + +#pragma mark > Utility +template <typename T> +T xmm::euclidean_distance(const T* vector1, const T* vector2, + unsigned int dimension) { + T distance(0.0); + for (unsigned int d = 0; d < dimension; d++) { + distance += (vector1[d] - vector2[d]) * (vector1[d] - vector2[d]); + } + return sqrt(distance); +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeans.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeans.hpp new file mode 100644 index 0000000..a926f44 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeans.hpp @@ -0,0 +1,179 @@ +/* + * xmmKMeans.hpp + * + * K-Means clustering + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmKMeans_h +#define xmmKMeans_h + +#include "../../core/model/xmmModelConfiguration.hpp" +#include "../../core/model/xmmModelSingleClass.hpp" +#include "xmmKMeansParameters.hpp" +#include "xmmKMeansResults.hpp" + +namespace xmm { +/** + @ingroup KMeans + @brief K-Means Clustering algorithm + */ +class KMeans : public Writable { + public: + static const unsigned int DEFAULT_MAX_ITERATIONS = 50; + static const float DEFAULT_RELATIVE_VARIATION_THRESHOLD() { return 1e-20; } + + /** + @brief Type of initizalization of the K-Means algorithm + */ + enum class InitializationMode { + /** + @brief random initialization (scaled using training set variance) + */ + Random, + + /** + @brief biased initialization: initialiazed with the first phrase + */ + Biased + }; + + /** + @brief Default Constructor + @param clusters number of clusters + */ + KMeans(unsigned int clusters = 1); + + /** + @brief Copy Constructor + @param src Source Model + */ + KMeans(KMeans const& src); + + /** + @brief Assignment + @param src Source Model + */ + KMeans& operator=(KMeans const& src); + + /** + @brief Train the K-Means clutering from the given training set + @param trainingSet Training Set + */ + void train(TrainingSet* trainingSet); + + /** + @brief Resets the fitering process (cluster association) + */ + void reset(); + + /** + @brief filters a incoming observation (performs cluster association) + @details the results of the inference process are stored in the results + attribute + @param observation observation vector + */ + void filter(std::vector<float> const& observation); + + /** @name Json I/O */ + ///@{ + + /** + @brief Write the object to a JSON Structure + @return Json value containing the object's information + */ + Json::Value toJson() const; + + /** + @brief Read the object from a JSON Structure + @param root JSON value containing the object's information + @throws JsonException if the JSON value has a wrong format + */ + void fromJson(Json::Value const& root); + + ///@} + + /** + @brief Set of Parameters shared among classes + */ + std::shared_ptr<SharedParameters> shared_parameters; + + /** + @brief Configuration (default and class-specific parameters) + */ + Configuration<KMeans> configuration; + + /** + @brief Results of the cluster association after update with an observation + */ + Results<KMeans> results; + + /** + @brief Clusters centers + */ + std::vector<float> centers; + + /** + @brief Type of initialization for the K-Means Algorithm + */ + KMeans::InitializationMode initialization_mode; + + protected: + /** + @brief randomzie Cluster Centers (normalized width data variance) + of the first phrase of the training set + */ + void randomizeClusters(std::vector<float> const& trainingSetVariance); + + /** + @brief Initialize the clusters using a regular segmentation + of the first phrase of the training set + */ + void initClustersWithFirstPhrase(std::shared_ptr<Phrase> phrase); + + /** + @brief Update method for training + @details computes the cluster associated with each data points, and update + Cluster centers + */ + void updateCenters(std::vector<float>& previous_centers, + TrainingSet* trainingSet); +}; + +/** + @brief Simple Euclidian distance measure + @param vector1 first data point + @param vector2 first data point + @param dimension dimension of the data space + @return euclidian distance between the 2 points + */ +template <typename T> +T euclidean_distance(const T* vector1, const T* vector2, unsigned int dimension); +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeansParameters.cpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeansParameters.cpp new file mode 100644 index 0000000..9620d03 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeansParameters.cpp @@ -0,0 +1,108 @@ +/* + * xmmKMeansParameters.hpp + * + * Parameters of the K-Means clustering Algorithm + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#include "xmmKMeansParameters.hpp" + +xmm::ClassParameters<xmm::KMeans>::ClassParameters() + : changed(true), + clusters(1, 1), + max_iterations(50, 1), + relative_distance_threshold(1e-20, 0) { + clusters.onAttributeChange( + this, &xmm::ClassParameters<xmm::KMeans>::onAttributeChange); + max_iterations.onAttributeChange( + this, &xmm::ClassParameters<xmm::KMeans>::onAttributeChange); + relative_distance_threshold.onAttributeChange( + this, &xmm::ClassParameters<xmm::KMeans>::onAttributeChange); +} + +xmm::ClassParameters<xmm::KMeans>::ClassParameters( + ClassParameters<KMeans> const& src) + : changed(true), + clusters(src.clusters), + max_iterations(src.max_iterations), + relative_distance_threshold(src.relative_distance_threshold) { + clusters.onAttributeChange( + this, &xmm::ClassParameters<xmm::KMeans>::onAttributeChange); + max_iterations.onAttributeChange( + this, &xmm::ClassParameters<xmm::KMeans>::onAttributeChange); + relative_distance_threshold.onAttributeChange( + this, &xmm::ClassParameters<xmm::KMeans>::onAttributeChange); +} + +xmm::ClassParameters<xmm::KMeans>::ClassParameters(Json::Value const& root) + : ClassParameters() { + clusters.set(root["clusters"].asInt()); + max_iterations.set(root["max_iterations"].asInt()); + relative_distance_threshold.set( + root["relative_distance_threshold"].asFloat()); +} + +xmm::ClassParameters<xmm::KMeans>& xmm::ClassParameters<xmm::KMeans>::operator=( + ClassParameters<KMeans> const& src) { + if (this != &src) { + changed = true; + clusters = src.clusters; + max_iterations = src.max_iterations; + relative_distance_threshold = src.relative_distance_threshold; + clusters.onAttributeChange( + this, &xmm::ClassParameters<xmm::KMeans>::onAttributeChange); + max_iterations.onAttributeChange( + this, &xmm::ClassParameters<xmm::KMeans>::onAttributeChange); + relative_distance_threshold.onAttributeChange( + this, &xmm::ClassParameters<xmm::KMeans>::onAttributeChange); + } + return *this; +} + +Json::Value xmm::ClassParameters<xmm::KMeans>::toJson() const { + Json::Value root; + root["clusters"] = static_cast<int>(clusters.get()); + root["max_iterations"] = static_cast<int>(max_iterations.get()); + root["relative_distance_threshold"] = relative_distance_threshold.get(); + return root; +} + +void xmm::ClassParameters<xmm::KMeans>::fromJson(Json::Value const& root) { + try { + ClassParameters<KMeans> tmp(root); + *this = tmp; + } catch (JsonException& e) { + throw e; + } +} + +void xmm::ClassParameters<xmm::KMeans>::onAttributeChange( + AttributeBase* attr_pointer) { + changed = true; + attr_pointer->changed = false; +} diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeansParameters.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeansParameters.hpp new file mode 100644 index 0000000..c6f0e1d --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeansParameters.hpp @@ -0,0 +1,127 @@ +/* + * xmmKMeansParameters.hpp + * + * Parameters of the K-Means clustering Algorithm + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmKMeansParameters_hpp +#define xmmKMeansParameters_hpp + +#include "../../core/model/xmmModelParameters.hpp" + +namespace xmm { +/** + @defgroup KMeans [Models] K-Means Algorithm + */ + +/** + Dummy structure for template specialization + */ +class KMeans; + +/** + @ingroup KMeans + @brief Parameters specific to each class of a K-Means Algorithm + */ +template <> +class ClassParameters<KMeans> : public Writable { + public: + /** + @brief Default Constructor + */ + ClassParameters(); + + /** + @brief Copy Constructor + @param src Source Object + */ + ClassParameters(ClassParameters<KMeans> const& src); + + /** + @brief Constructor from Json Structure + @param root Json Value + */ + explicit ClassParameters(Json::Value const& root); + + /** + @brief Assignment + @param src Source Object + */ + ClassParameters& operator=(ClassParameters<KMeans> const& src); + + virtual ~ClassParameters() {} + + /** @name Json I/O */ + ///@{ + + /** + @brief Write the object to a JSON Structure + @return Json value containing the object's information + */ + Json::Value toJson() const; + + /** + @brief Read the object from a JSON Structure + @param root JSON value containing the object's information + @throws JsonException if the JSON value has a wrong format + */ + virtual void fromJson(Json::Value const& root); + + ///@} + + /** + @brief specifies if parameters have changed (model is invalid) + */ + bool changed = false; + + /** + @brief Number of Gaussian Mixture Components + */ + Attribute<unsigned int> clusters; + + /** + @brief Maximum number of iterations of the training update + */ + Attribute<unsigned int> max_iterations; + + /** + @brief threshold (as relative distance between cluster) required to define + convergence + */ + Attribute<float> relative_distance_threshold; + + protected: + /** + @brief notification function called when a member attribute is changed + */ + virtual void onAttributeChange(AttributeBase* attr_pointer); +}; +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeansResults.hpp b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeansResults.hpp new file mode 100644 index 0000000..f327286 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/models/kmeans/xmmKMeansResults.hpp @@ -0,0 +1,57 @@ +/* + * xmmKMeansResults.hpp + * + * Results of the K-Means clustering Algorithm + * + * Contact: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef xmmKMeansResults_h +#define xmmKMeansResults_h + +#include "../../core/model/xmmModelResults.hpp" + +namespace xmm { +/** + @ingroup KMeans + @brief Results of the clustering process + */ +template <> +struct Results<KMeans> { + /** + @brief Distance of the observation to each cluster + */ + std::vector<float> distances; + + /** + @brief Likeliest Cluster + */ + unsigned int likeliest; +}; +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/xmm.h b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/xmm.h new file mode 100644 index 0000000..bb2112d --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/dependencies/xmm/src/xmm.h @@ -0,0 +1,450 @@ +/* + * xmm.h + * + * XMM - Probabilistic Models for Continuous Motion Recognition and Mapping + * ============================================================================ + * + * XMM is a portable, cross-platform C++ library that implements Gaussian + * Mixture Models and Hidden Markov Models for recognition and regression. + * The XMM library was developed for movement interaction in creative + * applications and implements an interactive machine learning workflow with + * fast training and continuous, real-time inference. + * + * Contact: + * - Jules Francoise: <jules.francoise@ircam.fr> + * + * + * Authors: + * - Jules Francoise <jules.francoise@ircam.fr> + * + * This code has been initially authored by Jules Francoise + * <http://julesfrancoise.com> during his PhD thesis, supervised by Frederic + * Bevilacqua <href="http://frederic-bevilacqua.net>, in the Sound Music + * Movement Interaction team <http://ismm.ircam.fr> of the + * STMS Lab - IRCAM, CNRS, UPMC (2011-2015). + * + * Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + * + * This project is released under the GPLv3 license. + * For commercial applications, a proprietary license is available upon + * request to Frederick Rousseau <frederick.rousseau@ircam.fr>. + * + * This File is part of XMM. + * + * XMM is free software: you can 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. + * + * XMM is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with XMM. If not, see <http://www.gnu.org/licenses/>. + * + * Citing this work: + * If you use this code for research purposes, please cite one of the following + * publications: + * + * - J. Francoise, N. Schnell, R. Borghesi, and F. Bevilacqua, + * Probabilistic Models for Designing Motion and Sound Relationships. + * In Proceedings of the 2014 International Conference on New Interfaces + * for Musical Expression, NIME’14, London, UK, 2014. + * - J. Francoise, N. Schnell, and F. Bevilacqua, A Multimodal Probabilistic + * Model for Gesture-based Control of Sound Synthesis. In Proceedings of the + * 21st ACM international conference on Multimedia (MM’13), Barcelona, + * Spain, 2013. + */ + +#ifndef xmm_lib_xmm_h +#define xmm_lib_xmm_h + +#include "models/gmm/xmmGmm.hpp" +#include "models/hmm/xmmHierarchicalHmm.hpp" + +/** + @mainpage About + @anchor mainpage + @brief XMM is a portable, cross-platform C++ library that implements Gaussian + Mixture Models and Hidden Markov Models for + recognition and regression. The XMM library was developed for movement + interaction in creative applications and implements an + interactive machine learning workflow with fast training and continuous, + real-time inference. + + @par Contact + Jules Francoise: <jules.francoise@ircam.fr> + + @author + This code has been initially authored by <a + href="http://julesfrancoise.com">Jules Francoise</a> + during his PhD thesis, supervised by <a href="frederic-bevilacqua.net">Frederic + Bevilacqua</a>, in the + <a href="http://ismm.ircam.fr">Sound Music Movement Interaction</a> team of the + <a href="http://www.ircam.fr/stms.html?&L=1">STMS Lab</a> - IRCAM - CNRS - UPMC + (2011-2015). + + @copyright Copyright (C) 2015 UPMC, Ircam-Centre Pompidou. + + @par Licence + This project is released under the <a + href="http://www.gnu.org/licenses/gpl-3.0.en.html">GPLv3</a> license. + For commercial applications, a proprietary license is available upon request to + Frederick Rousseau <frederick.rousseau@ircam.fr>. @n@n + XMM is free software: you can 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. @n@n + XMM is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. @n@n + You should have received a copy of the GNU General Public License + along with XMM. If not, see <http://www.gnu.org/licenses/>. + + @par Citing this work + If you use this code for research purposes, please cite one of the following + publications: + - J. Francoise, N. Schnell, R. Borghesi, and F. Bevilacqua, Probabilistic + Models for Designing Motion and Sound Relationships. In Proceedings of the 2014 + International Conference on New Interfaces for Musical Expression, NIME’14, + London, UK, 2014. + - J. Francoise, N. Schnell, and F. Bevilacqua, A Multimodal Probabilistic Model + for Gesture-based Control of Sound Synthesis. In Proceedings of the 21st ACM + international conference on Multimedia (MM’13), Barcelona, Spain, 2013. + */ + +/** + @page GettingStarted Getting Started + + @section toc Table of Contents + + 1. @subpage Introduction @n + 2. @subpage Compilation @n + 3. @subpage examples_cpp @n + 4. @subpage examples_py @n +*/ + +#pragma mark - +#pragma mark Introduction + +/** + @page Introduction Introduction + @tableofcontents + + XMM is a portable, cross-platform C++ library that implements Gaussian Mixture + Models and Hidden Markov Models for + both recognition and regression. The XMM library was developed with interaction + as a central constraint and allows + for continuous, real-time use of the proposed methods. + @section why Why another HMM Library? + Several general machine learning toolkits have become popular over the years, + such as Weka in Java, Sckits-Learn in Python, + or more recently MLPack in C++. However, none of the above libraries were + adapted for the purpose of this thesis. As a matter + of fact, most HMM implementations are oriented towards classification and they + often only implement offline inference using + the Viterbi algorithm. + + In speech processing, the <a href="http://htk.eng.cam.ac.uk/">Hidden Markov + Model Toolkit (HTK)</a> has now become a standard + in Automatic Speech Recognition, and gave birth to a branch oriented towards + synthesis, called <a href="http://hts.sp.nitech.ac.jp/">HTS</a>. + Both libraries present many features specific to speech synthesis that do not + yet match our use-cases in movement and sound processing, + and have a really complex structure that does not facilitate embedding. + + Above all, we did not find any library explicitly implementing the Hierarchical + HMM, nor the regression methods based on + GMMs and HMMs. For these reasons, we decided to start of novel implementation + of these methods with the following + constraints: + - __Real-Time:__ Inference must be performed in continuously, meaning that the + models must update their internal state and prediction + at each new observation to allow continuous recognition and generation. + + - __Interactive:__ The library must be compatible with an interactive learning + workflow, that allows users to easily define and edit + training sets, train models, and evaluate the results through direct + interaction. + All models must be able to learn from few examples (possibly a single + demonstration). + + - __Portable:__ In order to be integrated within various software, platforms, + the library must be portable, cross-platform, and lightweight. + + We chose C++ that is both efficient and easy to integrate within other software + and languages such as Max and Python. + We now detail the four models that are implemented to date, the architecture of + the library as well as the proposed + Max/MuBu implementation with several examples. + @section fourmodels Four Models + The implemented models are summarized in Table the following table. + Each of the four model addresses a different combination of the multimodal and + temporal aspects. + We implemented two instantaneous models based on Gaussian Mixture Models and + two temporal models with a hierarchical + structure, based on an extension of the basic Hidden Markov Model (HMM) + formalism. + \ | Movement | Multimodal + ------------- | ------------- | ------------- + Instantaneous | Gaussian Mixture Model (GMM) | Gaussian Mixture Regression + (GMR) + Temporal | Hierarchical Hidden Markov Model(HHMM) | Multimodal Hierarchical + Hidden Markov Model(MHMM) + + - __Gaussian Mixture Models (GMMs)__ are instantaneous movement models. + The input data associated to a class defined by the training sets is abstracted + by a mixture (i.e.\ a weighted sum) of Gaussian distributions. + This representation allows recognition in the _performance_ phase: for each + input frame the model calculates the likelihood of each + class (Figure 1 (__a__)). + + - __Gaussian Mixture Regression (GMR)__ are a straightforward extension of + Gaussian Mixture Models used for regression. + Trained with multimodal data, GMR allows for predicting the features of one + modality (e.g. sound) from the features + of another (e.g. movement) through non-linear regression between both feature + sets (Figure 1 (__b__)). + + - __Hierarchical HMM (HHMM)__ integrates a high-level structure that governs + the transitions between classical HMM structures representing the + temporal evolution of --- low-level --- movement segments. In the _performance_ + phase of the system, the hierarchical model estimates the likeliest + gesture according to the transitions defined by the user. The system + continuously estimates the likelihood for each model, as well as the time + progression within the original training phrases (Figure 1 (__c__)). + + - __Multimodal Hierarchical HMM (MHMM)__ allows for predicting a stream of + sound parameters from a stream of movement features. + It simultaneously takes into account the temporal evolution of movement and + sound as well as their dynamic relationship according + to the given example phrases. In this way, it guarantees the temporal + consistency of the generated sound, while realizing the trained + temporal movement-sound mappings (Figure 1 (__d__)). + + @image html xmm_models.jpg "Figure 1: Schematic Representation of the 4 + implemented models" + + @section architecture Architecture + Our implementation has a particular attention to the interactive training + procedure, and to the respect of the + real-time constraints of the _performance_ mode. + The library is built upon four components representing phrases, training sets, + models and model groups, as represented + on Figure 2. + A phrase is a multimodal data container used to store training examples. + A training set is used to aggregate phrases associated with labels. It provides + a set of function for interactive + recording, editing and annotation of the phrases. + Each instance of a model is connected to a training set that provides access to + the training phrases. + Performance functions are designed for real-time usage, updating the internal + state of the model and the results for + each new observation of a new movement. + The library is portable and cross-platform. It defines a specific format for + exchanging trained models, and provides + Python bindings for scripting purpose or offline processing. + @image html xmm_architecture.jpg "Figure 2: Architecture of the XMM library" + + @section relatedpubs Related Publications + * J. Francoise, N. Schnell, R. Borghesi, and F. Bevilacqua, Probabilistic + Models for Designing Motion and Sound Relationships. In Proceedings of the 2014 + International Conference on New Interfaces for Musical Expression, NIME’14, + London, UK, 2014. <a + href="http://julesfrancoise.com/blog/wp-content/uploads/2014/06/Fran%C3%A7oise-et-al.-2014-Probabilistic-Models-for-Designing-Motion-and-Sound-Relationships.pdf?1ce945">Download</a> + + * J. Francoise, N. Schnell, and F. Bevilacqua, A Multimodal Probabilistic Model + for Gesture-based Control of Sound Synthesis. In Proceedings of the 21st ACM + international conference on Multimedia (MM’13), Barcelona, Spain, 2013. <a + href="http://architexte.ircam.fr/textes/Francoise13b/index.pdf">Download</a> + + <center>Prev: \ref mainpage "Home" | Next: \ref Compilation.</center> + */ + +#pragma mark - +#pragma mark Compilation and Usage + +/** + @page Compilation Compilation and Usage + @tableofcontents + + @section Dependencies + The library depends on <a + href="https://github.com/open-source-parsers/jsoncpp">jsoncpp</a> for JSON file + I/O. The library is distributed with this softare. The units tests rely on the + <a href="https://github.com/philsquared/Catch">Catch</a> testing framework@n + + @section lib Compiling as a static/dynamic library + @subsection xcodelib XCode + See the xcode project in "ide/xcode/" + + @subsection cmakelib CMake + The library can be built using <a href="http://www.cmake.org/">CMake</a>.@n + In the root directory, type the following command to generate the Makefiles: + @code + cmake . -G"Unix Makefiles" + @endcode + The following commands can be used to build the static library, run the unit + tests, and generate the documentation: + @code + make + make test + make doc + @endcode + + @subsection cppusage Usage + + The header file "xmm.h" includes all useful headers of the library. + + @section python Building the Python Library + @subsection dependencies Dependencies + - <a href="http://www.doxygen.org/">doxygen</a> + - <a href="http://www.swig.org/">swig</a> + - <a href="http://www.numpy.org/">Numpy</a> + - <a href="http://matplotlib.org/">Matplotlib</a> (for plotting utilities) + + @subsection pythonbuild Building + The python module can be built using <a + href="http://www.cmake.org/">CMake</a>.@n + In the python directory, type the following command to generate the Makefiles + and build the python module: + @code + cmake . -G"Unix Makefiles" + make + @endcode + The module should be installed in "${xmm_root}/python/bin/" + + @subsection usage Usage + Place the built python library somewhere in your python path. To add personal + libraries located in '/Path/To/Libs' to the python path, add the following + lines to your ".bash_profile": + + @code + PYTHONPATH=$PYTHONPATH:/Path/To/Libs + export PYTHONPATH + @endcode + + To import the library in python: + @code + >>> import xmm + @endcode + + Additional utilities can be found in `xmm.util`. + <center>Prev: \ref Introduction | Next: \ref examples_cpp.</center> + */ + +#pragma mark - +#pragma mark Getting Started in C++ + +/** + @page examples_cpp Getting Started in C++ + @tableofcontents + + TODO. + + <center>Prev: \ref Compilation | Next: \ref examples_py.</center> + + */ + +#pragma mark - +#pragma mark Getting Started in Python + +/** + @page examples_py Getting Started in Python + @tableofcontents + + TODO. + + @section pyexamples Python Examples + + Several examples are included in the ipython notebook IPython Notebook: + `python/examples/QuickStart_Python.ipynb` @n + We report here the static html version of the notebook: + + @htmlinclude QuickStart_Python.html + */ + +#pragma mark - +#pragma mark Documentation + +/** + @page Documentation Documentation + + This page contains the detailed documentation of the library (generated by + Doxygen). + + <ul> + <li><a href="modules.html">Modules</a></li> + <li><a href="annotated.html">Class List</a></li> + <li><a href="inherits.html">Class Hierarchy</a></li> + </ul> + + */ + +#pragma mark - +#pragma mark Download + +/** + @page Download Download + @tableofcontents + + @section cpplib C++ Library + + The source code is available on __Github__: https://github.com/Ircam-RnD/xmm + + @section maxmubu Max/MuBu Implementation + The models are integrated with the <a + href="http://ismm.ircam.fr/mubu/">MuBu</A> environment within + <a href="http://cycling74.com/">Cycling 74 Max</a> that provides a consistent + framework for motion/sound feature extraction + and pre-processing; interactive recording, editing, and annotation of the + training sets; and interactive sound synthesis. + MuBu is freely available on <a + href="http://forumnet.ircam.fr/product/mubu/">Ircam's Forumnet</a>. + + Max is a visual programming environment dedicated to music and interactive + media. + We provide an implementation of our library as a set of Max externals and + abstractions articulated around the _MuBu_ collection of objects developed at + Ircam. + Training sets are built using _MuBu_, a generic container designed to store and + process multimodal data such as audio, motion tracking data, sound descriptors, + markers, etc. + Each training phrase is stored in a buffer of the container, and movement and + sound parameters are recorded into separate tracks of each buffer. + Markers can be used to specify regions of interest within the recorded + examples. + Phrases are labeled using the markers or as an attribute of the buffer. + This structure allows users to quickly record, modify, and annotate the + training examples. + Training sets are thus autonomous and can be used to train several models. + + Each model can be instantiated as a max object referring to a MuBu container + that defines its training set. + For training, the model connects to the container and transfers the training + examples to its internal representation of phrases. + The parameters of the model can be set manually as attributes of the object, + such as the number of Gaussian components in the case of a GMM, or the number + of states in the case of a HMM. + The training is performed in background. + + For performance, each object processes an input stream of movement features and + updates the results with the same rate. + For movement models, the object output the list of likelihoods, complemented + with the parameters estimated for each class, such as the time progression in + the case of a temporal model, or the weight of each Gaussian component in the + case of a GMM. + For multimodal models, the object also outputs the most probable sound + parameters estimated by the model, that can be directly used to drive the sound + synthesis. + + @section ofx_addon OpenFrameworks Addon + + Coming Soon... + + */ + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/libRAPID-MIX_API.a b/examples/ofx/Bitalino_rapidmix/libRAPID-MIX_API.a new file mode 100644 index 0000000000000000000000000000000000000000..a2313c41e6ce03bf4053303a8516fcbcc0580e62 GIT binary patch literal 2254136 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	!6TYU2R+%7sK)b@L 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¼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	g~T;B(~0R%?)`o7tnB3$2x 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%0D)C#D zl~kmss=Y_~x0!m>>>l%{N{15qebF4YftqE4VQLNJeOUf6ODwgW>00)m#Dp4lD%l?2 ztXYP|f&Smt5WqO7H(u&wreuNaA*8uhtOFrf{joiLyv&w^vuq)=w$pdv*6=)EY$812 z4PV12a(j;OgdM#k#mUrV54q1uO(FaXa8zHfqp7nV{EbVe&K&&t($)BHd6<a)#>!eU zlpmi$ocs(it+^aRi9RiBaY(L}*(ZTNpd;s+*R*$lycd$TOLl?tTFVdkm2Mu3j6HVA zQ7z4uG;H0x;uiO=CZn9)%(5&vS5tHzZ&>YG`2#pyAo@^~@=%5f(cmNOjY{PNLT?3Q zg=uP6V^-~Tq1-=n_OoK)^`ZPHt4{Q~>l%I1vn`Ch)Vz(p*e&cdvg3SE?$&ufx$Gtm ztq#u#jFiKx!*eE$ge9J6P}k_R7K(n6DXu-3bTBT@dR+gVc23e(<QNelJ}W=i@*EU* z%x5|6Ex#8JxW3%ea&QNx^$gs%!&A7+!<W4$kn~j`31(c1Mp*ib+_@6s4C(NkI~e3A zHu3j5e=y_|Shy1g^BA6UY1bfHUgWkzkrxPI9-QBdQu#zPxIO5I73iH$uuM~`X1S_m zc#nE~vHX3*RXvnS@1S>-mA{5=EG@z3le|6>%zM|h;%O?DIqrET45`?9GkXQ#)gEj5 zTwiFnZTR7{;@x)ae70YtiB&faTIhc()md9~WuzzO7S%<3R1~P~`VXak5%<CuGH8NW z6-0~XW7@qnI;?$jVeAK78oNqjV~-ux!%22coj&w>TS!PZJvQO_kAb9@WvC<@krrfl z9_wLb`0}tpj?GVo!DpWERsB6VJV2&4$v-)5xfQ4)RqkZk9QhR3+AHTJy?rfKC|7pr z-^qdH$E>s}6AhP>=&8U|V44t!`FlB54UdWn1L{5y=~7h))N!;74s!D%p--MADbEka z!kK7Q^pSiC<^n&tEwub1^-M}_FnZ6T#9%h(_oy-TdHH_YO=>}`9ZsN|rJVKBY}hZ5 zB`z5*?D^MQvOy=zox^7^qt#MaOKt3<0y35j*d;WBUdt;rNtD19dqz^kY}$-6;?;A7 z>T0G;3>IX@z|7$gF|Z$CaFUypcU085+A6H`h1#qp%V_NsHP|w&<_cAhwS~J5_9l^i zx=Mn<SUrqXVq=pmr70jGnQkyG;s%8L{;Z*}{D{fIjC~#KOM})vKkKSMvgW*1O2;VK zOPR-qaw~<<QPJGW2*x3;`L(LNs6s09Qyt+fe>BM##UkmtMdP9YY!0GI-yoa+s>Qw0 zM@8?@dYW-ftE*Zk3)H0WwD|l{S>CJN5kB7^Jx#U){h`-9oVpVcCc2bF%Nr?C+M8JT z^>TzSP)LD>)Kg&5Ta-b=AB5XYYpw`()M8~InJW{bs^FdYtEciBN0>8@=VCN<I`!OM z?~hI-<BSh6IrvhfW`?j_#PJ48BR?CzBUH<~sy9-OmftWoRELhQzXDu~N*$vP^jmVi zM^~S-hLwO=KS-mFi4L%W)&_sWdsMq#&SDlp0R6%8B?qzVL9{mZw3T^|@IZeQ3xxcu z>|)cYqc=n203I#M=b$>eN-QASn<6_P(BIw=7@^cKQU|W;dq~)HY-SnhVX^QTw3_a7 z?Hk%(VrG!8%J^9u%=^H#!q0lT^>pga?(d9zS(@oV#}s8g*2$D*d+MncOkqeif(#$~ zTP7d-dsoNzlGVzS=|`I~VP#l;S=^q9)gu?Xu*PpAhLHzGs0ebc7d)H0M9M!RR|&UM z7v5`sOMRPfmaX@067$D|Gmkk;C#=!qlP~=;-T5YKr#ICMzf)%To$2_!f!`bHET<5X z0?qh%-*gMwFtzY=E4*P$|K2y;{13drcVBNa-(U|z=;XPx*CM~+8b4R{B`~m-k^EET ziQA*A^B?zqw3@+>^c}2~RSnEbEH#6np_nBZ(McCaEC?CW(PVwe=Q-&j2rXG#$Ti8a zK3*(O;&**wy|migbalXYWFHSc`5QM=EA4()0hV8lx_0E^tg7QYvPB<oUH?ynDqfvZ zLCORMuJmqCIf!x-+w|>D*L{amM1Tl#2xK1@@w5eGgZMr1<4!Tsh6@RQL||Ht)$*4t z$?6gQPFx?GI+ELx^1lq^eb%1|VtZl#dXF1pinsgMV*}TJcg?gK_RITozx|f}FV%3N zSKhn*cLekPDGrP!P89a%Cb-YU#nnp33;Q1q=DjWVDINA4uE&;hi;MTH3u`j@d_g{^ zRaU;w_fzscd3)u1eE*Jb??u5^JY1H@)d#pd?h_s^U!uIO>I*4?;&5EQBqLXDq|$dX z1$)SyD6B39UR^9wM%JJn8ush0VCfZS0_mx$+}z1%#;;dyXW}25Qhlc%;@<@#B=V7d zH8KqeZfHmn;f4=6yOG6?(C~i9C|ROL6iK7sNBnbeSmWw`cb_2R;f_z_JKMpack9h@ zvB{K|*w_MwKUYfwR5K%Sm%<HB?o!Cqg<8XExL|_nR?^hw%57=!fNOlKJtx}DeP$Z6 zDwp1?=B|35Byw1>r!Q%4$z#cf#NEukPtf{6buC#-AK7Q_L!)2OH{<=P)>rk_iGb_+ z_w8k?TySH(qZI(yO%y^`u@AZizr}JjGd3DIDdWXd7^^RK#Wh8e*FhN&YgKQAgy33l z-d9WdQF&+(Hp+&9FSL<mZQsC)j@alVZ(iGy^L(o~TK=NL6B~OXn`hB-ReCCc!s_;l z?11$?_LQ+)xj2Y6vpHJ(#`TOoGDN%Zw!-$=mjG86z+il_b;8k<f<dmGFi1h`BgmSV z6&-!6JX+_AX?a1c{$lHNyoV$nNGXp^k^_854by6U)?0Fkn6;0FZZf&4^woFEY?@BS z?)9;mLmXxR@1>Td>ZwB6b!&W)mgfGs0vWG51@1hO1raI`+g)3|n`A13F8@c=q~H3R z9Z*kIh|1r!ax$$Oq^(6a;LR)&!x-2U`C}7(yCOqcyM*~u8Y{hEm~^6A={ej~Iz*(J zdfg4^12nFEEnWczx@K?L!g9!_aHHhw@|V=pAtZlA56MoeB{E^Il}l&@Xu0GSO%Q#f zn08hQ^^~a-)d*z<EJzh)N>-omO%|WYYi;>o%;TrMCLLnZ>yk|0NiV}ur?PjEp26Z? z4n3chvDLHLDYGDEI#%v$IL_t<O;Ka|^InPk^_0zS-#;&eP0GyjM7^1}`eJJGMygs% zBdZ=@rFCg~VSsjfw?If?ZM@N`g4L#D*)^dgHYiP5N^fD+Fz1%IW=z#jA(NP9!%2Lh z7Fx@7_a1d68l1S^wd_N>u|GB$))i)bid{M=ar?Qr)+K$?7U4q!wy;UXl4mLl9DS1< zm){FZQS9Yd<Yf*ez$r<xMIPtLIqbELicQ|wb__z%IfO@${A%ut`;=yL_@0&jVl_&e zQ0BDHq^_KwX&yJU;mM?hJ)Ug$)C8`eWEEIP9da$J0$)})*=<242;OLr`ymwf4a?<Z z2-tE@L{7awo;In$I+cE)(c9Q283wGtX4$9@Y+&6twCSm&cuvU}@;e(fPTFQr<V4xf zriDG8f{p>qpdvNaN1pDs)se**tTNUER*T(0-#pf7@U>J6YKa5Vz>IQfb$Vuc(1=f( zm#7q_G&C%Mlerr9I#yg#yBx{T2J)ZL$bupZEa}ii&TZ0H^R`4jYk7w-wqIyp-eN%O z^Rfdg4}UColj47Zj~bKSpTv;mf<Sb@A}UrjBGtYUfhFs85=+dMjp!)~tv20_js~(( zWW()U%jzLV4hsA8UUyYJhvT}~q>)_th^qZ@TqvxwU=g%Zjk&~6dNx!}rR9_qgIqtk zo~;M06m<R3A5zhR%SLD4v=%Nzx<s3UtHU45np9^v>d$@^o2^Tv4g;}CNeoq%PBACr zo*nqu)MQe}MlM#~6Mh@u%AA<@HSF4^vTYNa^hT;2CRipd&cO}uXR3cFvRqRGpNl0$ z;85FUZ%%s>p+{6Gg;gO?B{RwAZJy0uHvH*0pGhhvavFQoebWwYcIFV%c|<~pD84#g z+UIbR%Q^J4nI83Nq^hGwsd+=s2K1;dY(z$gH*=WcCMVAzI_g7eA`y#cYLz`0+I(7# z-$K`ECJ)0$1TC>sRV-F^j;Xo>wQ`XHmKEHM=4_RM>TQs$3EZ(KGapPPDeULf%~tTU z`lRCzeg<bxr%q~WlL#52*^cjjY^5Eia*}}n?>3^?yB`e{|CPulnd60x({^iQk{>2} zAn>yqBqgKix0M?mlQ3GlmQliIVD9YbRkigh<BGi#?0(U`w+*MNJ?xznc^FGYo?Y^9 zulze8{|?DN+P6sd;R<Mmwg|>JLnqfpE?VsNM0;wXgXnCvYf_FQU>H&qYki(tFoTZ` z1GyUJvd-%}&X0%t7%QpGl&;vhO^P2Ml6#;yxoi>7G;w+NHqP1v`XrM=e0}Izf5UOg zh3LYBR9pbreG3lYc_P7+V#u?j>u+dJ@RV*_(B@j-x5JOdVP8bunc2XTE!;c#E9z0N z#O$Hna!e1>Dhei-iuz+qP*Z00^Nv@&dSF1o(m|7e+{4Pels;Z&g`raWiPGuIBAvF1 zKq`{y=OTzAnO@zmRD@D3slw!kJJ7vd-R~;MQqu=g=?3m+lPP4`(~yAdBMmu4OeB@! z=u+Pixgw$79<MT<nluB~40>uGF+)VZ9NDjqF_j5l#J(~X?vu=@Z|biIjn^;neFr4| zlSxl8)jZW+bIWn@qf9a>Xdmt>N%xs)Li-5wr31^X@ML?9y#6Bcv|CaCxYRiPn2jbe z1uGu8YaByGE^s|d9TDC``5TQm-FmI3a)|@(px(0~(LPUsj6gy^%xaWPXR#ogD)uj5 zwmSJj#LwCzJt!?xX^w=?DSI^8FlJ@t%WkF*?S!{Y>IV}~?-L@ug#N^SZ&Ktu5@Apx z^>7CuuM8xFn-E5eNI-pWXsf*X-@)(8KteI9HjPh2{zHUME$Rt7=9XXmV2@%rT6(L< zK<GwN)*^RY>iY&cy6fEP`xj&?DkJ44zv@z41<OQxDp49lv$LKp6H<DLn^<Q2_e6MH zBa>sHmP5@nyoPF<R$H-DwXze%*M*GxLNn|cytl}LquAa`HV0hbo#WN)8^CHT7EVbL zeW+{w7&D4>G*_`OsJ<RXGVBOHbz6jpw?c)nA7J|6{BlJ07$t;pn5AS)3_S3=h4GPX z?DP6QbSp~$Vyf${?Llu>yQ~8!uv(8uEfj$Z|J{QOy{3n5v`|lu4_4QU(%n&Un;`21 z(_^AWQ4)5)ROxcqlc2jlOu5rDnFNNu6CMo1f3Ka}N-I){H&{4r>s>DX?_J<(b;ae) zq5I0@te;3M4dwM@A13>bD_*LFC^?C6?<UcGBq(QCk+;<T6J6BY*6+6tY@O9QQ%q#_ zB&vwFCy&<abb!p1odYg!9d@dqb50Q;-bUm8;wSCxTMzNB#i#A<_kPB;=AY~Lm^#kW zR(({&z2j?w){A~?8wV)rxEy1(Xz&A}t6nIeN)0(16CLudb;6M&cCaz3E#%>Ct{7)g z#los&m22g0VzX7CY=JRihc6)e$juu|Y7)n{JYe_P7}wyzpTc8xEAn_+Q_c=k|K1UU ze-!SmHdnTkf7Y7Z?yMbcWjw>v6_LrFytc@-N$u8>ZGq4~cx6kr8hD)>g5-WJn{>8$ z*`{Dwsr5n8CEFAothmG!guJ}g;Ao?>MhOt2e`LplZIKYo>QQHg3!5VuRU^1qa04hF zeV{FwA_YT-?24cQRdz~BM+`ZEHov4fKpy2~UaQ3uizIV!RBtt0#8V8iIjH43Pjbfd z)}*ygbq~vl$RQvb4m;H4b8L$ymtC%IoC~i_<CTr)XVoT8IcDATMe;e;O>N0joYqap zlBc9vXT$Gh`-eZywZ2nWy@R5yL4R6XajQC_=fr5|Jb%dL3uV-J8l7r0FLq;+l~H5l zrZ1DiSE}`hKa}yHFO<u<oU}EZW3+OyxSsT&Q@mn#CwbT%(!S)x@rzd@uh>OC-lKeB z*P?z$6;%X~`26<&MR^e^S9`5&0R0z5cyJXa1wrd#TAuU!MIA%3g+A%1y2qImS?W_v zk2Xfv$HAV-&CwpwaZanZHOfi#RZQoikkqo7UT%8d*NfLXu&NH<#Jry_<_|uxcs1?E z({gg`s`O0WNr12M<^~_leC)V@t#5rI%PdFRB0D(Xac0XV^wYW<wLHrw>%v&t@_@C& zC+9nI>Z`c_`^WXXlP5YcPIP?S@*}Y9{JQE}*HR+C^@_)Oo&6V4!ZUhnqZb51@1wAM zOv-CBQ`8)2K^_|pPGKIGnjBbikuUL{#Y1q(^)rc}=5f`XtzCLsC=gQnYOIrNhETZ1 zllM-*TBntz(-`-UEh1r8Os>K(yDwEd(oyvcZkR%)ud#5IP{Tp=VIZ1M;nC_drYw4W zF|E~)1y==P)e<OjwQMrlr_Z}=?<r<)7mx`Y4cysU16M7?5`yTh89_*EbVadPSi=?n zyh<bc?iF**QAP&rs+^Z<JyrP+Ix5Dq<(%`e%ztczsQ66L%trNvQRjoBV!6pbJHjhE z&J{@;yh$H&DW5m#fNzy2n)?$^H2;1E$xl31?){$j7u&ZM=Dk?{SD8FU1Z&EF%_)KT zluC)}q6~m5va{k^dAZaQCs8FVhYgKCN@ZeQD03NvHFb=i(T&cPQe(l`4Rmo<z>RDx zCycMC3snklwfxL;q}|%g*GpEDd}nW#GeV6VgV-9`J=z+uGMM*a(0aA}32JyvBWq`o zBZRI8_wm^xYeO+NdP*s1maLV-qu&uOKCQW>So_6e#mOycYLR2a)=|ccPei{a!FMhD zwnT_cWbBltY#SwWacQ5O8uoh!m^hvY+r?(JypJ$Sj7Ja+<$VOD&yn{LUUF5xMP;?@ z;h)HwjP}aBCN5rYe+i*2rdr+9o2{{n7chZPz1{1DpC_l?Z?S939%vx%K=~oIwyV9W zi8!V46{S&aC5vcsgRfM(38aIo&S_O=;X=shXdi+E!z(AWqbeB1nurMAXj+Z*s{LLb z`sl#7cBz(Xpi?Eu-fxmOX{+}0SdF7&&R%(&mrUST`0tpVQ50|Xw7=rPNJfk!V);J= zB9Y|Yi-KdF6y2VOywnO3rL-+%H;syUhbNiRkFuP<3+8>oK8op#t`*YR*kThZO;2^L z$i<<%MO4+tGTQ!8>5dV#RX)q+N6Beb3Dw8#!b?`^@fKYt<J|t1>N4MEfoBUTn#Rc5 zmd(&l?K`W~-g{%@pVe&f?y11Kgn@_pZyDi+|4?NoPIW5P&tB)-9pg+ZvX-oI)!a-4 zDS5b$E|;1B<ccm@I2`b?@8hu=F#6f<jXAIM#wH~3{e~J`iQ~%?bDpbO%=@5|@AJ$z zI;n;p-Xv^W_LVdLq6Gekb*oqIS<v>-?I>#H)DluqtiVY>lG=vHjEZ`na0)L9?Zw!L z)2m5`Ec#j3ldI^<MKIf=>yRyVmB&&lM3yTE8VEAI+0d%>M{h{SCT@%0;u_K$QrVNn zI6~yQ-l81ANYzKaa2A;=5E9n9maUgWWHopry=k>SbR*Yh|9~`dIiC3gUXb-mBAj!V zM8>5)%UE`_B08J)kOSqN(^TpmWUI-|t#fRxOpox*Uh7NYr?dxo<nwr0F?n$3tTg~b zj~|dnF1rd#$Rn5DEjZ;5K!}Yrbvu+KVufE(RW4e@$LTPIT(}o&hBT|*ODksYlf(XJ zp{HuSTEvfz@pfG(?bmi4Nj?}2vI0n~s5E4KrsPSP*gcfgge&07!>KHPcC$T3Vi`Z= z8M$Op(y>oj{%0P9Gjxg~If-iu27GGjjWbJ>DX9@f@)2Js?a%(`-4r{YB2EJnNxl4Y z3U;?tF@6R$a75Ic=%5Zo>H^ko?$}T>Xl%(UIU+|P;g}mda!Y_~*$P~qDqi%ex=;C| zvkonuop8;}i{24SnkXszHG7tf^@rZnyko!*3$u?we;|bVdwlx1Xzo$gD}IZ!yGZ}m zhbkL(IN%c!S#+IFq^XTgPy4pW7JH#auc&X4i7eh93iJNqiv12BUdA&y-Rq6s*;JT) zTn=d0214Iu5Y)2$kv=|}e<<36gJVe93wtR8*w%BSqh>P_T~9PwO<3L~HNDF1Eo}+K z!Mt1OW2g5$MIuW_wcTLv&Iv_~IqBuH7?jyo(SAtN&N-;Xc*)gdnxAk<VfZW_=jj+* zW{hz^zOHIoMOQ}j&dR_DH8aCf;m*_x(+{j=#Z|{TxSLsb+`CC6vkuXdyAmt$(C>qe zo!#lZ(8TrFBER*z+#zDMd*szcZW9VH;`~)F)JSaCvTL+UN$|YDC$7-+*~mPuCpN~- z4t$}b@hX$$k39EbW~>dmQ0A5%gvA==A^Y)iHORCzmTb2n8Yw}=wQ?vq;LVoZyX-n5 zi^%FNVLZj_9VuE)oWXsuXPDN^t{rlVzVb9S`UE;4b{3iWe6i~gQO!FjhZTRodsSoM zCMh51J7eS7lwmtyL~xBO_AO?4tGb*P6B>M>X`9#~wF>D3x;QcCF4$_FobvZamrE7- zlEkOhpZrUyA~k2noG(h+*Cji@AZRt_A~KJe_vFB+ql2V7hfBBQtJo<Q78W^2pa@8L z_bLv$3{W*hZ|e61PIMV4V2jvv%HndZTJ#DjSy!8RNpPYGIHIKCwz`z1_@UlXkZe|~ z9yy#8P~)=w%T+1t6$~F2<=BYqDI7w3A}5D}d0)7yZ-&;Ws)D4#O~|U!qor!4l4WA_ zwHK~xZ}MZLr>woIzUmQK;*YX-%LXGaX|V||d%74o@wQ9LYZyUv9&qP*qGP{q#Gy{G zdyw8zX26MEhaM#q7)RBnMF}0f>Z_S+XHws;;6}{FAW?R7O($bvZhvmp+9UKs>3vGC zR0=KX6~htL4cSNf3%j}!cy&TxosagHMg*P!R>}!S(KqPR7A(pG*4CgUXS--t9zXGZ zKp!xD{5s3|4>oc3N@w61BDfR%^Bo+%=xNk@x^tiCs%YDke_TP<!twU{qb@Fe-RHA7 zM|q4(Z~h3n=kTVaNRCAJF*zp0ly0-vj(2^kj_5N}W{T?Tq=F%0q$zy6;Rnps+f@?p zsmwbik?{(4T<<YMk<p~>I;U>XCcQ#df;Xv2&58cJZIRVBe+$OEOk^Y2z~K7OexKyR zFVv<>p9S<uS4`Rkmbp5R{hky^Naji(DlwdoH|~rr-BV|LWxU8nM@pu2d(LWcB~+|f zX3k3elnSY^cz)X#3-4lUtNbmxBFpnw+FSARqmx!A2D_F&?mHGu_Z0NZXN_s|MbC|U z*Yg#x@3=39_6nEH!njHVwaA7Ok%zD>lR@Lp<H6C_SyERmS<8hHw<D*?N~aJQR0qmq zp?2$SwoVwAYp_kEzUXOd{Mik`7_SS&#`KpCNLN$$gyhpZ<s;?0d@!Gq{SJcS`VQt7 zf1^`mTSj79Bik{eh{O`u%s=$hOm&g(Oiru2ir&GNQ||0P(3%E{7l~L7hV7=?B$pM@ zlc~!+Y>#4X%O(CIPZ56xn=t8f4pD!z_~KGiSMfYtMPk)4LlpkA_*e7+u5)pmuX0hl z8x8Cau<7!=sP6};&7i5gNy>eFB7sv=KB=h@!hD$|uY`{M*wCOq9l)v4sc*}<gk5kq zNS4i9xY_%WeXae}^w3d$Ra^}Gp&tYPU208;)D_F$uFD5iw+sEHP|WKpq{%4cI#w4K zyyL*wV7ip!c8bsuEM>XCrh!vP(4cPFz<}rpg2XyO4p9D_*#k{r9s2LtoG0Zn+%t~{ zEKc8i!m^o@%Tj-A6`jr>-KH3&P7&Sg77kkUO~wzCC-qHN+DI2t4}t+3PKdp+9HwQM zxR$+3%eGYUPnQS&tEz~^<Zkn+?+2q!dG7U=Oxc4;pQ|ePBR>1eCq9GWIK>pPh%23o z<V^89#1w?04;P%7v%B@u&hu@M$866=VYDld*W$YW+cZv4wz3EEA!hh23wf|N7Us@_ zSpKeHjQc@5$ESMOPcN3Y8+csJb&FhX-dB22Pvua%>}H2u?mlaODI#~SvN3ZDXP<9* zJ+Wu>RWnf`&$-llN3fDu;b2g;o~IA&u%l0+L1~Gmg&FPjc}?YCpgVsrKdw7RSA&L5 zPVF`)$P>P(wvW`p#J0#mW*;?q*fWQ8Oe#5HCM>@;wt%g)iCVpS6&rHKU|Wq3s+c>> zI3h%M8tQ%7;Tqc{+wMtH5>`aq2PH=ZTFVoSyytfGUumMQ@wHznX|hU;Co89)K}}cQ zJ-T}LSKi4T-fYh~8DNoLU?W=1l}LZ9=!bxXV4PU~m$_d>U%+MRK%b;S)~Tb%$qYKm zb%}FL%iV2q2uS#atsk5?p+k!7Bw_!LCj7mL6aHQ%{M4KEE7P@--^2+%>np^^@BpZn zCpt0|weg~88+;YZJXhaQzY;&%tMh%IK3zPvb;1`_EuHPC7$Bx2%P27~SZ35%87qb5 zgr>~qk%jV4RFZLiE9ntmbd4td+*8J%dy4qcv2)|{IYM~-apdrYeMz;(q?$t4c5KvH zA*IL^%H%fkET(|<1voo2s5H^Z^mWMl`aM_{MwmkIM#*tcH0WTTfCZ6j`9?|C3f8gq ztM`Y3bFs9Cnbuc)UoUY+Eeb@lxT$i!c+!K-e5%AVIfBd;IP$%QmEGr}2xnas<mqzj z71NVg?)?Kspe*8o&5ZFTk-qpqqGJ!lpSQjIDP}+>g33xLft8`15t(?$V0zw9nMx<u z5Cdsua$VJzJjWbDwya@n^~t+T(9@j_EfetKt)AIvX8jGHxS2Osi8WV4yF0!-!Edcx zQFm1^S~8!py|xR#@<($sl>n+&q~w?^GM~NH*o$&_l`J*2qS_Z5Pz|xvo0d=Q&58CN zLF*GtL(9Yd=ucLIfUd<8TgawNf#w<m*{Lw+Kc4egfpyN#`!O$d+K*|2!LCcg%=0<+ zW5yk`#($CA+Zx}N%>KdnW69%EE!lq;p@ToBq<3s;(AiL2MB6b=NPLz>V>?0z)=9a~ z`Yz;XAA9z;-6>L&CwBb_$Rx%Z+5zLC0uelFb9O5uPu=Q>yAe)fCh$*8Q!yjTO!AF* zR8|VE*jABiqQ8(rkBz4N1{3H-{^<HjoGkw6T<XS?>!SJZab=<ve4K+Si-^ZQV5Mv2 zwJiS7?2E4G`cU~}j$o)+n7viF&5yM^buP<n&QoDEt<+iCichHJ>?f43lZBQqHWtFG zMFWU@6qK7_TY{nRLyp4e;2*J&D-fJ$xVbI-T~<LD3d?&<Ff%>g=|~x3xl^2Rj6TYl zPTp2%i?qlBUdkZy7U;ezwG)wCHq+M8WFHMAkt~{q*nl>q&lCMMe<Zz|4)E_5<c;Eq ze92A3#W&+B;swI=n~*b#<pC#|@_2#LRm_zhWUC(Y7K;$}*Pbt|{@Ath88Y|Bf-J5N za1J*)e5I%Z*q#t`d@1(0*nq=1higeC1N*Atj3X)?xzP4d<ipn9cKPJ;+oQ>4bN$)> z^d}Lwuoi>!LuP$T&p6a&JP3_(`fsr5FYZMD4T<!hrs;2h_RVg8)r-(iE_F;CQ`4IH zs^P0|TC>d4cb$nFKeadC?yPA&P2C66%${q|df6|V;2V4+Ci4W^mF!eUgO7Woh1)zy zJdnk{F5?hZKy2NAu=Hw~fc(WKsV6puHTyPH8UeaOm-2X`1D=vL6cKzART>OUdYY?l zMM<znT?@?By@k|kS~IT{bK@edEge42@1=e>Nd2<VmhOR7ek1jJhF!lp21oGKCLjGH zd!s*T18Gvv`J_q7<(HVA)M~oaXz>)gey7{@D^*)8?|P~JLERR+bp6UDZ&Jq_6YH0D zH1&H(*YBuy=dW8`iTSlV|Evz^Z1#<ix8>yhf{uz!sLXgBw{K>rW5hIY`@%qScB9tq zq0fT~PpfJ~5}I(rFBd8g^B>uhvs<fJSUKqaAI)WZclU_gU%IXrInjk2#PORGNs+&| z>J_RoQkoYZf6}JWj0b$7&t>&7BI6m?^(guAoAdyi!iU)t7J+O;##21nYWxw5@MmJ^ z;-BUVy&L-h?I7up|GU%}B2Yu*VL3j?Td-zkGB%x{DGz`2{yI8_2s_9+tFW_>$vr{g z(5d}oQtp^vt3Dd;xBiJC{<A}kibh#0u$Q0Bye%ggIeVdU5n<tUoBc9h5obAZa<uU2 z4;8Y5)rWkU>NBtbykf2d!hYl7&d%Y*ox(lQLMK8*<Xm|am)O^x6pGTb>S&LJ-x48` zcj;qSd>528ti*K&k^sEEuBxdAMgfs?6k31K&hCW9)9ABV*!UV+-Gn*qT)ft2x{$Fe zjt?<(W6q6qu_k^{VB{e}*2{dPq!+H+Qc)PZ?N;IA+?!!VWMgrATrZ2&JbF5aE+2_v z4iRKOH&j1CBAwd9AFZw=O|?GXtIA{Ru;n~j-aF;*zR;U+dz%(vr`cb%t`09pxD=V{ zHla#ntWH!huA1Zl<vW`zM#?wO!H{{rludR+6UH<7*AY9Ku}Za;ojJ>FGLP)*lsPFi z`>NK~fbR&;B=duaIwxn2-arm(HkaoHLM8QVPsOfS3!)xh<R|grAkJN#imMK3zF)ql zyBw7^m)nJ7BdfkX$IIh6ju9zL_NTdD^k2_U$fkN%s}kNye&=?ZpRV4D%R8!e-=$Ku z%-`fEvH!LDjE#JOcqex%(&dsd*UI~tAXKGCee;#l7ZnuuEW1|jCkqsqix7C4qJ;=0 zg;-G!xr@ZijoWd4EqoD9(`55|UsTM4)17u-`{aO>)fN}`k=xqw(cHa~Yt<sBGjahV zY4A-L=ZlOSyW%{uP%&Byb$fcEXY*u?FE+3zA+S^gyH5Q}2I81D)zbEr9z+o|qIKzC z^!UIC4y;s<MLuW|L6t(SzC^&F-vQu9wL%~#BW32$1fs7QJW<n!;zHAQRmXf4J&Sz8 zyhgh*U9JD<c%wBraf7F`Bv7b%zf<31+6ge{L}GG4aax^Cy)CTToCm(xYc2HhSeos1 zWY@X%tmcL%@?g9EJM&-81FDvk0ZfA;auzl>jv208jbnTYT1s5<HI6Az&e#=?WlL3j z?2D<JxG_4g)`{?_iY_}M)mLDyfP|!lOCQ?`vEhWXgPYE$5+`FmL{3<$@}146h_Fb| za}h*EQVql&Q_?Z}U)*{hyW%RcROySI@9&k`NWAkCy+<iwSiG-G^xhr!z9!LoZ`?a4 z(Od3G)mgd|y+4e5pPA@=Fz!7uD}lhv;L<t~Z=(0kxc60w-qV~m_O}zgd(tL4k$wr@ z)hF;aJN<#sg4wo#+X3BF4Osg5tmtZ7u9Zunj&>5O5Y<4`%y5#z3R_{Trh0(nJTE|j zLmgk|KJmQIT`@TTWH(^6R#M{`x-Ln5{2fzbVbvI}kX(2}%hjaUY5aAGHHTRC)}SKb zG$~JP<byKGj0GS)dJbOqC3tz((dN8rAD%$K{7wOoDgjp!Fr!m|OqB$jPr#&30a9A} zQT0SV7|*JodabM$d1$k?3%$>Ny9>R=L?Xr05>hnu9;av6Md(ED!A=1Q^uFCGAc5YO zItAGD{uPW4dS^RZ<k_z-^iF|Zb74qpxJ#H<hsgkJE$R}MrNd-Iw&r&UOV(jBL|ffm z!u~Nx<tJlS^W%=LC8MAV_8nj+w*Ip75s_PZf@o~1c&KqUOI6nsyR2QZy}V2Ab!nrM zAE&6A190_^-&$FTQ?!iMSLF|P$z+<4l-S3AOO<=n_O(YZ%{$2-Y|O<bLw-kpm$Xmr z?>$LY6;6~d?EmThK2D7kWq5Py;aEq4u9b2$z6+_p&+J0#S9HOI;VAq6G9K0K9)_Vt zYbCjp>6=DcioQ<c@xO#u>ILt=T(>o(&+VgBuWQAKlZiflaTlV;D56t|rFlrF@vrFr zCyM8e`jzxgrvJAjn?S#*-wy@%-=tsUEt~#($hk|UkL*hS{ow2Vq3Bl>kM2aVq<AvL zUtH7;#jTiYq=3#S6qVz0aMquRv-Rvw{wu}*T>Lv!k&qcjarj1H)qDp=pklTTTEbKg z8~+KheKEDwtf~wS#D22Lb~p%&K#=t8DOzE*)+OqyJx?c9wY7&=RJHYv{G+v6VbI?? z%Li2-`A985YAW1sy~w3TJgGyAf5YPJL$?T|W_gzQ6x1ev<Fd@v6iI&aU8lbEx2zoH zC;m$4Hs3YMSNm6*Z){v_cDoFz;7sZ1Rs<6qy*_1)*q9<JJO}*q1^K6n;ImXU*;uly z94AYJkt;70ft_X>De2qmo%XHLn-kV6IVhC0#VQ+t)%CLfVb;SqHgLOsCNfN6ea;S6 zN_C1vy?#ZT8;su0;!mDLaD%cs82ZS=<}a(aCK%kuZIEgz8DlcBs9m^-mlNFB%_k!V zs31--GA8BZj^FBOdm5R%x>CqyQQq<^KCqr>`6YZc-YZmRbkphR{hc~pyOhX&VaRO$ zN1xBE1Wl8Jqb||0+IH9kv|LF>l5^`N9&5Xv`oyW^T^?#&G|qCiC?hFd3alF=2mBVd z4`FH{%Zy+3fY8uJR1EcEie<kpgv|>}NBArT1Ypfi!q$W{s9rHt5k0GPa4Xo<xqV2a zPSG6<9ru&cbuni?I#-q<%{(2*eML^z7^;bVv6M$HAY*H@!WYGN3^lHCayP*u1Y%LX zIrnP5rpkjb9=l>D@j4<!v|>cZaPHDk;KIJVX-$z=AbyRCG{lZXxs=EG9UhzI+Vfd~ z<Rz#>m5M#SetNDq)h%+MxzWjEjcsGA&33Z9>Dx=Cw*7p&!A$Zmba=>wm5#YHxkUct z5534I269fe_UbupU~YZq5Hd86n6}zg{R~{c<#g)XuI)8a+o*>N=uq+cJ>qZpyVP&4 zTD3-lED@b=+2bcR=vwl(2dJvtcs&(L&0;Xr#BPCem!dx1CKh`Z>5zX{)vNhUcp8`M zaJx_mMy3u`AFP3F6kai=KH{7}>Z7Mhas9w}8<8T7_Jr+0s<Qs`v~w=zW2uiuKD()p zrg(kyQu2Z7HHt3kf+VBUR@u!EUzA0~B2bSa_<_6QJDftKR+o$m^Yk6nOZ{*=`zBuk zcUS!Prit9jVrnvqt&1QU4H5imK_Wl$MJX1;TDpl%h47^bzL1LOOFC@nkGOFvR*fo7 z9DNnr{mD9?Y<N#Rr^v5O>R91od$x-`#cuZpJ&ImW)%rC;O1M9!k8JAoWkAdq{)$P- zaNV3TrtlaG!t5U91-8FPChZLL9_2%92_oMA^{C3<rH30!jnJ6cTt&nMiskz`88%-h z+&E^wWR1rn+hdXTP&+Bc@BT{h<HrU|9l-XMZ~5U}1F*g2TYh-UTx5I4=cVX+nXYW_ z_|z3$zdFHNzU8Ot&djfRKQ?+#fr{&k-s97IuPuV8*jb1EpzC~`rLXMqMNj8O!MoVx zN_qP{3>;Pn3+3K0=9a29?f;tihw(?nE*pcR(-nHNcu&K->Yh}GtL6d8(jd59Rm+ug z=;$n0RSloyv9RA-kyBj1X<C3GhE8eNg2n7F(O_l0QQU_w2Q3m7&Bg>#=Zh*Gx}GE> zSCu?tg-41v9oO;?a1kRi)=sJDu6$5e2~95%#`o3oEz3Q=$IJJV`uj%teoTK~FW*0t z@95}TWf{4=TpX(KI2PeR?^)pb@n#A9@dgC3Dx&1n7q~z3xe6OahgDq+7PeHbYS{)U zj9&9X0mW1;0)y^waB+m3E?y~5WH5xyc{z+Q3!9iw^x3$hh1I*CBetWWzdy7!XGh_P z!9VVDD9($~&<&ovuOcJlK-^AW=!mc3?;MEZl4@b@Jg0#HrJcK)3E8ev?&y-87=kx> zQP-1rp*46#{4m@`ZmA09HM*+hZ9izJm=O$Z)TVZvq~s*(8)v{eVmBoP^ENCgjOMPv z@45*A>y>E6+F07<@(`%&64_sqzh+L=jei4UCj8!}$zEINXE)EAx2OD7EVD=<V7*cP zXJv1w=W&~VV7`MwJmszaNV&cE_>2!abXEdaQ)S$!ietwD@gh1_>+7B8Z|U#Kuy!Gb z=3c0gN)4wy$ziJ()VPbBW48PI*rBe68emT^x&FIBYyy=0iircMOH^rWBk@V7SKD7O z{xsM0MZc?Q!Yo2;CZ@$lV4VL5Jsj)c{#q<VwgjT`JQCN~VwE1SoN}G5Ta2&LF^^}{ zDu0W54bRHm61Pu~_%O{*>6vWe^n7EuCM%8~-#@{IWE-~8%8~@zge%pByVhH#Ou7cR zj9bi1xt+i&+{t3vU)9dtOpSCHZs@w+7C8$Gn4+0eIsC3-zc8HIQ(p`Q8QE@nNXmn0 zXwH4E!Mh5r{LJ-kP;8Z>pL-?J+1BX67V&ZX**+J6mfy9$3mbgdTagp4g=za-fn7Wu znu$^9UN+zROFZ?@9kfb(>gc!3iJbh_Bys?}&5%(zp=!xaN5!>j2O(acm@i<Uza%}7 zbZ~W&Of@cF)XNZi*Lu4hiLY>ik}+gW%-gI?8oc);#xYYp)3kw1D{PZPzbUXMF~Nn| zFX=BPGATOO=n~r3cG+DwasKVfpZi;{dBi;YI0><Kn%rcX!<x1;Z`YDL3c2_!#O;CD z2Zwg){Q;prSTM@9J|oAqKJ8rB6I=9FT0^{86roT}qq=O|aUg}GRf24}6?4}$;Cl_c zrPtT_2qn#%wllK2RiwKnRm+?DCzMz9=jhl8^tsOcY0^ZG^@c~RTsSUKp6S!&4>kIu zlW3t3UA=P;7ys`2zJwGMJdoStfdRd12J|SX$?Yv(47$!K2vxUurYn&m-kw6AnjcmE z)Of<cl=_O-_atN_WUz!z-pe0dTF}v2!RSJth}FY_u~}Tec#FFg4Lmc(J?T2>=*_8t zy!RuYAT($nTUaBR2_4DA`-UXnscS4%U89d(3^hn?2h3)f3<E`P*YTb>es|htU~2H% z4+(cJSI1zauQHHjPs5w3Mr6uqjL3j%@Bu4X4ez~XRN5SRbh^LcV;Phm2r-=or9b;+ z24$u{@5O*Ca3Ema!Lo`g%j?n1kCs2T-<n=vMx<N}cJhcE>r*3gBqK83e*WlK`twr8 zV|#bwajfs(8jq)_b3Hf{hGR$m@&2LiJFNPszsGtrJ|GJikj-2#r8<DMQSN#3DVt0d zpR6R+BUat>6R&kxkGb#Ft8tboO7BfhPu`vg?<*EIwL1CF=47X_X7^W~&-Qg4Zxbiz z;U<=Owj`*I<V@^tu=%1ByB})=P=e0mN^>|pvO4Vl{s-fU5mX=}XlQ%{ol*O*jUV6t zrt#zB<hQ!QGRmo?iEJ;?23CU^-wCXtCvS`wTJs7zMv~YWgs?<ZcV;0LGP^Yp!OU)# zbs9$KD(t!K<YC0z7EIa?C-J)i?=WPT*;v!b%r;j3nAa-oc}<TZb#sf)RX~?(RFwLy zF^e!+^1J+TOEjU*s+jOBS}Ug5?nmF4A|h4XjR`UaEAjCcj8;tGlBf%kSX32o)@Bt# z>V(bCBwo-RQ)CU`5cK$hq_;43wFcDS#aOLitRCrZtd3cv#%eG$uV7Rx?NZ{1TUNz# zL-<b$lRie3ph#5Q!IaCh%O01Mi><vqb{Xe;8pqtKxX{<lz&#<T6PK+}T(;|okC*qP z@or6qr5+1};OpEqI3}9ET1{u3XdqLDKetI}^_}v_Yg&R?U4;krP?Kz*7cl>OGpUsF zOlsvHiM0}+bqxpjg_0?}B#KnQ%b$VFTZy}Ewo>S3Z}C`@GH*q6m!qanQEGoQoH-!~ z5k<`OX+xQ_KX+XskDWAGU&<rRPTFyxYyJ87ZvC7|-5)v^MpK-&>T_4$RJAIWyR+u% zqZ;RPhh6#4uxOdO%GqVT=vqIX`(R!o8UBiqGOj<S(y1Yx>yEkBpV2AM6%RWd^D|y< z;nibKiK+7#Pj}&F9r6PFY*8XV)ABJIhaKJroIM{%JG&;Wr?<w5#{2prZ`65jH1~&A z?!8{i`9plr{m3)R`L7}>H*lKt)&F(#zdhss`}`_lzGw0(>fm0uW_NO-(Xhoq!WMP7 z{)cjc3<!C+QA0<)hKH{0`{9s#fA-TKjMVPECj3yl318YdJRZ-4XBOCa1{(iwO2<zB z8{->#9Cki0d^-F6ny1_LUo&L%fY$e}JkNyhz4ou`-h69M`EFB=41*u1!{G67<rB~U z{IfR~U$gbR30vCR4_<pu#-GOSTO79Y(Zz`Wx9iJJXP8F^b%pT=mFDXth$6(1_$PR* z^pziKZP_>I^p}b|@eil`D%Jo0P4M5Lj}@CE@lVz{iGLZm6aQGdI}-l};7<H=<4*h& zTI6R#?dqrxyPw)nFACe2+OR9W?QcUnT^qKW2sTuWVf;G4p%?VGh7woW_<z!#HXSxh zOt)j)+Wk?%`u2xEzPGZ{ku2AwIvkHnw(^sYbAUhO`fSH`9M=FBizAI*_EWorzd;N+ z3(rLo(u^YqI71v4_H;N<=s2c}<7XJzh+=M<IG)2Hsf`gwD{BJTa+GVj9qA~B^MFId z@hJ{T;8JmvpROGji{k+t-?s_<0vyz3j%*3Z<O=KW0>7i;;1JpdiQ_>WeWYIH*Zy#` zBYC`hO^|=`lMl#uh<?p6nLi;){ch*~5BXCe-yxWSIc^lRA^e*HRKNCz|68h&Gm#F5 z`e%Rqgb%l%AK_2pUL=m={N2Q#`n5m2k*FT|mWok7`PjnW4#5ubPonM=$8Y#2qd<ko zl{l&-csNE$aKcZ<&i~5a|841Yt-Em>wa)|trx-ZHz&j1J<Asg;9s}<;@Bst=!$2GV z|J3^JJ;ih5c>nmZSGyw%=FGd@J!H0fnETEdce`&ZanG8uAY4+`+cDH}iK7FrtYk)L zwxHfQW08Aa<j&hl%G{;1+;c#k5uQ^zZ$WQI@6!3<Id{%ktlaKdbLP!iFuP>tVE4s> z<R0lBG_$uOo^QBp1_-1#b4GZEd(J#}>Abmj^RL7mnmc2`f}!q-B_-|~3q9Uop?g+o znR{kQc*dN$3x*~np%C43XWUjYm$cmr=9h%#%$id&Q&L-4GUxW$VfUN`?s=tQ5{S$r z^GT)Q8FSt9Cf?MQn2W)fJ9B~i8u!JDo}un3bLP&aZc6abK_g8NiBml@X1cTH3@sTt z*gdyo#$6>tpnFJZB<v2Al`dG|zH7$ZITVXp$?ok4md=E}nWZHQ=6wf*(s`6)9;r~M zJ55bdyoop6=$>CzdfSZK=FFWFzFWde%1Y*iN_smMIz~Gd+;!*l@ZIxE+=Hm+J4(vt zmCWsM&n&sUjLMSgy?w@=cg}DRy1lm}R9Z4?nEIMmHeJ`0AcUm~rZ2clVVBJ=b%5ef zRmj&&hmhb=|3^89x8N?v#G86M1`W-*@^-gl*wxgsW6;d22MryLbI|Z%3*v-1BJ=K; zSGsVX8%o_mDGilCXFOQ@xo1V@g`|GK($tfzCf+e<?kr8b5TFQ;6Adx(gu*3@Xx@45 zJ5}}0nlrcLYWK~97EJ5yD7(#3c;k)N-*~lq)`HNCd9&!ygwAw_OWkzhnL0*q$JGw^ zY4Ox-s^cDpPAQ40)O`0aL#y=r`K5F3o>zM39Qu<%mGBT_q-6SnIg3l&`6F?c%wM2C zMr$xHqM(}w=kpqOj$^)C;w_k6HfP=)G8!%<ntR4PdUK)|cnN(Yj?=|6$06NNxAnxE zf}Q#kopV0@QwGC=$o%=GWnpUM?vk*hW7I$q!$msYj0JOUn_J?TK%PVG3Wnrx$%3#N z9#^}=Gs<o+2}?(hlrWg)mzB(%6Otsg&!z6ggL^N&+8vlNf9{M>iF@Xp1>v$ew?(AM z-6gkV4Jlt-e%XRKx8FG<`?9Rd^~YcZ;1YD+(%Zf-Lv+?)H(gYH^>*09cCdTisQ3tm zX2I+27;PXmK4&hOXy3pb_{oBj8D*i_suxJ{+~I|#rjiotkFw2SJeDxNZcJcx_{~jV za{p5N!bPEy61WMRa=K!D(oG|C!*f*AOqX04pA4>$V_rl7+Rb!zLqEP{I<U+!mqN@a zb9D4LdiX4d)K=*n8L=gy(mQF}l9^0O<F5?(sh!}J*C`%RXwOqNw8O8uAvl8;S=1H5 z4!?3@>D;?Y%DM)})6di4)5lLPjQd?N@utz!Z|EGwPA@0t`tgO+M+ZC;Ckl$~O_Uou zMVSquGm>O8wDWJiah@uCuL+mjyNf@}q<E_EN)s+?6MiS<UuS&WD){8^dJ}#&@YSM} zlj4g#xcq*8ittKA^sfsaCbA^I`!qNy{dyC=?G)j)NbvGoufa+2C&;3c-!C;dDg2NL z&pt&stW^EVP7z*b!e!qt$&qwY`g^}2+|ANLezMT-F8-}1{4QP3C#8Q#7ODK6<*)DQ z&XdB|^ijb)7219K6_~}vhoE(r|1ep$@cTY1m+soXE>nkZhQ98?=YL0se@}yx=xa9N zbCbKLzkuT@@_Si>lj5fj)&XChBLDQubhz*kekaARG~wl^$X~7Dh&WrvJSqNsv%q?o z4%A)w({EAvIv&yW=g}^QW0^D<zxq-Q*OGsC@hcbT@Mq~q-Gvt{(cz|>okZUR6F!c9 z)Ls0#<vPBQ(H(zDuhHQ-fbROo1QTwC(MkE=YQjx5ofKa84dHuD_^HZw$b@?}nJ1-R zVCjH~@QH5AU#r6xrgR_fmNhfKfvMex7yLqpSDqq%{cm*muK*W1dYnYx{QuP9vViX{ zyzVg_ej%W{`foPj@13Im*RR&`g}?ASDSyZBb-=eYI4Rt1!Y@{lPv&nEOt|Pu6pDuN z|FtIEu<?`9uQTC>&7Bm!<{RSIe?$D{ZwTLO!k3XV{ljAuzDU_6IUMu<pncW=y6Zpg z$94Fr=pSanmx0zDf37#-qATpKefOGhX~yp2*Z%SA^RF}E6T6gen<<~;2_1h0pu6(b zn($MVug-+eBYwC1Ln@BnsmeFZgs%dpyYe-g@Kfc#*Mz6&{vU6@)W5219f$s`;rDg< z`QQ0>>tD3{RO!z*;iuv+^(OpO<=bn*o5`lT@?{uuk`~|SNLrMhl%CcrwH7Kf@s~7b z=V%S;Y=h_UoRNNikI{X4j;Tsn>3lF*@PsyOrPc52@aBToX7CEXCcPgM=H`_h`F$PU z^Wgamo{=v(5n|{w=?i`P`71DZZsXq-Z!rF8lzX_r6M0kp?DT?Fy;k&$sWOYd;OB#r z^<7P;$e-%>HTZMEStS<$^ZO=zq5Bc=`(LT??=#7FrCabefmdnpwtWrWN8n{$rPDL= zYPa>3L0_&nct&pR7B3&X;lp)$*<X|IOz;W}o{?j_O;3zrR~bB!XVuTH&rwxKD7s(% z1-v!?0-ijA)nxF@{L_(dLV8Y8-fQrToZEq?sZi}b7(Acc+s4m`PaSw;t9q`8_YU1Z zrh>oA;EVjLes+1f^e1V@72pq-V}ATTH0bg6_UZCVzxxY#4v)qYxmf+|bSIqLPxpgg zaHGZ-Ik^*lH*{n`>)uHk-^k4!<uuV%{|B$XoWbKK@^hzjuj^bNQogz17ZquIBTsjm z?vKH96l*+@tJTjgUpMq_0>AlYjX%?%$Lr0wh2D?A>pxZFiM*|TcDmirJ0J!AH(lc! z`MX<sz2L2pQ`7uJ4)2t1m-Y~zD!-(~69S6k_Ig-Kn{M;nTpXE#@PJNF<aYU`hCa|9 zHoaZamGW(ajzte^G?C}k&&KakZ-Rde{M27+e39=v;de=2Xc~+VwQ9A-x6!++=SkpI z8a$EvJEhx&4oP<z_;r8Q>B>4l{cO4u=9$OAJ7Dl+J<tg+VLa~y&+(K_FV&!RrBm`f zmXMy*yZYJr8mHi8BD>q^eH~r^y#6NNQ`L{87fwjeYw~eS?L2Qu`#b_(mPt?659(*r z*QI?_`-4;ToG!PlCpzJGsdv@>;IDo`<IDP@6Mi@84+dwIvOsQcm-R*`{4VKBIj4eu zV4F_=R|Y-a4x_7_E9s+xw+y`bFKawmhp3-j&IG*2!CSOl<6UUb;^~?8mvZd{uhQVj zx<vi#^tz$bNn;hfs?$Abo-omc&cWan89cLIIf)+#-X!oQ7`%&3{H}BgUU@=#X8qD_ zdjARDe3PDZZS}LuW1N!SwuJQTVHeLg0q+a&?DBqHdILx#%jElY>3IoE{{}o6H^-dF zf6cm{WxXT6)TR5hhh3g=C(mF1N%|9ZXfz{kchpli?YR^DW`ln!x>f%taIL{xrpf6@ zx66Dk^*fl&_WrMFI&3~3uiu3JHwnCSgSYx$NOu|dwFduG^h*8Z(^!iPo~)<jm-?f< z-&lY9NxyEVMq8nyb(FK4`pZZI>2-~NDte?o^1(Y`(v|g>`q}N6z_(|DH_W8>b@jFa zyexw!>#<Jhb<-ZtgTLw<=#+XBep_kqWSu6z)SvG8#(Epjhw=WVMw9iM`q|~{rrrYJ zuiEv^^~OVyj!J{)HOa>Nk#S4?J_6oqgZFjywh6pCgD2}e^|R^hQg6R`+TlP39}+XL z99V>UDPr8W8(3`Mbq0<!@G>AO!6DxPE(i8A@YBC21CWusfD*n1coA^WQx3=3z<sQP zncIiF1(f`^8u%Pg^8XPqjQ?^2_dluK8w`BHzzIN9ibF;KY07??zzFU%AO<KSQ-FhT zzX79={Qn9p13qTpkAae3%(#~Vh2DigDNl)k9^hos%QE5T0s9iZ7JWlM;J1NNu7iKl z<@yIu@_Ea^CZOaq3n=9}4JdRU{G+D(ZJ^No5>WEl02I1^0+f920ZMu$22KJ>dO_p9 z7ASOI1r)jm8Q9Z=fBLvGsu{TpsM-T~K6vARLjRBdpy|IADD6@Nl>EjSI2<VX?ffrI z{{o=UKMg4L9s~;gqk#_sbAVFLG$6)2BU6B?9e%I#-3$~uerw>hz<VVg@P1%6u$*}P zfDE;Py@9=fkHbKj&ig$ElyW|5V3qM-Y+$MJzumwyfI{c?-#HvVBHnrfgTR%z3k>WJ zOa<?Q-)i`lfiD}_VBpgRt^!KB4;c4_2KF}av&VEg>wwG2=T8P&29_Ckvw>a%hZuOa zfjtcT^gnevZyC78z*Pp`0EGU5g~0pBZv?Ox?#qBb#r+)<J`gDN(9eXY8R!76!vFK% z=yY}iC7suRlFrM<|383B@xLEf30w@6@|6L944h%yQ-MOy1;C%<f1Y;tJHxn7Gw!c` zjVT=A9|0c*z62Ef=M8)YDDCnKpy2(7@qfVhS7|t~1b7<ZE)(9{grE48PVXpC(rE=s zI`04_zcnWO4<`JV#{F~Sz6&V$-#7jx#@}oFuQ2{YjQ_Va9GC(WdK&9=Kl`PDr9i2# z+YS7lfk6Wc3>*%W`n(hv1r7iT{bvI2VSIdoLPq-UTL!K-@W((4{|Hd>p9Pfqyw1SU zK++kQr(wTKfr59j@gD$`bk6|N?y(f$1GqnBf8k8v!$1lDAyDY60Sa9eK(;7`{J{7Z z1FLXPGU0i^yKxT!t^l3`Tn6lE!jC<w%k?SnA^bl8O1kyH#gzBIfl?2@GyabPr5+wM z?rP(n53B+24`abINIM<3DjuLla=vp~t``^J5napwW0oG0icf_D@scuyPmAB}rC zQ1EUs{>8?>w{iC{?!VCpg7+9u(t8vr>D_DGrN%wcz^e@WmVxbbLcxC-DE0HAasS1* zA2;rYjr&K&eV=hJHttg6zTLQ|0EM3GjeDR8?`Paj<30v+ko;SLlK=b0y~DV-821at z{fu${4k+pW(zxdt_Z;K?wsD_t+-)!`si$2)$>%ko<lA7}&l~rD8TVtx{UhUEY24+; zz0kNzjQdvO9&g-!<G#wcFE?(taevFWPcv?(aeqc<7y3R13Vpkc`wip12PowZ8TVDd z#q?JhBugb8kt=~80EHj?4JhMjGq4)?C!mavN&}04lFtnW4hIU}1t$C`ktKXTP~z<| z?mruMxp8}dGL9}Y?ku3Ba~4qI9bs~iboK!S?-k>I4k&n!0R^wd`2PSXc+-u098mDC z01DpO#=rePG~UNRNq-km@HPSk?-ApFA5hYpZ`?Nn1#b*c@Gda^AN^3{y$zJ~UIR*a zy>UNl+>aag&yBm*xEC1r9OIr~++&RUa^uc2?t#Fb@Xa%gf2#36UaO3x2Yv>m3Wu}; zRs8{J>LELg|MNiMhtHVsc|d9R5(B3hcpHVk3;*Fj83+Fb^A&gx@M2)VxGx4KQ|=zX z9>9$-eF?u5DD^i0D0G|&yoY{wS&h!`JHQ!)e?{h!|0n#r1Nb+f<a4j_zuUl>1}?c@ z<3|jfY2X+jzaiHGCBJhiq|lXaVE_BH`=xs|Tn`j_KcMpqd<H1_mKpbC14kSG;Rf~w zLduZi3?8BPBcQ|^36ylMFz`YH&jnTxo&gkkj^hx#e*(q-6XVVRN;<DC(QpG$(*L7z zUksFd&ol6FxpseS;C=(&0ZP3-V%#f$lFnkFq~F{4x6l~h$NdMO_}>Sd_y4f>F7Q!R zSKIi61c-`EsAyA7b<k9aip@X*8S#>V88}B~XcVYu!2}@)H9(q75L?k`h~{)UHLW+k zx7wx`TdZxRwY0Q~CV(WM)qs{FSU_!+7_A5jQIveov-dhPXC?`P+W*)8@9p^|^PIIW zYp=cb+SjwsKET==HT@02TbH<8F!d2(Akz;DUL=?=m@D{`8}#`5H!vRBPYHgQZ$q$H z@ZE^!`+FeA>-PaEM}y$EfY8&3G@(1HrJey<zU@HT(;tA0_e7QG=Np<{Q>n+74+{<k zGTcX)ToCsPt^ne1!~=r&0Ed8HCiG3fGeOT6dKU0>&?Q0};(t64*NAi=<@^0Yo$n}+ z?#qC5pAUqnBW4NyV1f3(6G;DMK-$M5Ak&!*yZ|^^+)o9b2KxO9m+NY@1N(r~^Hv~K zHNp>M{C803#Px#9QP?bpM!^Qb3Lxc~BY5w8kq1b5a)9(dN$>>m&k+A#&C`7E7Ayx+ zU(<k;`#9hkz`fVu5enq}-dxQu3&{Ls02%Iya-FXq0vT@X94$uyFcWf&08;)h0?GeG zAmgo_t@*D2QXf|U8Lk+}{GSA*UOv25<2!<Nf?pTBS}+&L^3Mj6e>W;qKk#`DI2iPA zft2r;Ks1#j?gLW)Hwlgfeh>5oK+18rOsD&X;QfNzOSS(N!A*i|1%G{wj`w}R@xbqb zZ)B#n^Lc_Z1OtL62_7$ac!mzYPw+Lt?Sh*HpAvjrumPE5dh-P*3O+PlyN?z;Tkv=w zt`Uc?)a6zFRUPiDf{UhUdWK-8;0IS|JzN81dJ_f52>#`A@dwgBr0EfPK(<H2fK2yP zAnoLjB|3bg;1D3o??+$J?lHlBK=S*+WX<RMf(2m}Zp7h`=uPl7!JR;+_acz#Z4&w^ zp}!Agdi@1=Ow#n@f-3~SC0H#uRq%7b82FzkbbsK@pj|-P(+ihrewPUzG`0J~K&Jas zp%)9iQ0SS0uNyktpMd21dm#D#Slkzh`xnIhmWf)PZvx4`3dnd1fQ%Oq_o0G6o}k0k z0GW?@LQeov-(I1g3hHn-3JwL{0sl<Fj)12BF1T56BM?<<#67_4f#(9r_Y}cBmuR^* z0_pxo!Iv-A{f!4mxw8ec1k(i%T%`Rw1YZ_>QE;>1J%Ta8dch@v*9%@F_*KElf)fOP zIacgY@G+mJe<irQNYgRF`GNr;+nuw8-a1B)JC_18k-x=2_K$xZt>fnjW&>%zLx2qT zQK2e_5nF-O*NwnyfB~Tk1qTW?7U*zcAnm~?c&cDO!4F1h|8oS-uyLf;@ALT@e+C?Z zzwZIb&k+3Wm$m;dfOIbs`k@On-GE4RzXg~9tQ2~l;H5y8bLaUw+)^NEo~O@v0|gJA zr|JEI*9*=TEIn7pGx9W^1El_VtT**H1c;<Y93HOuJTKTE$n*}KqurMSNw5Br#)pBF z<0pc53Dye^0y6xrTpey1unOrc7Mv$|wO~l_62W}IGl7)%G$7@jd6wpP>zR5yRRyH` zJRt357Lehu7I&W6%KQz_(elhWP2*+2eu%gFRE?cq(D7aalHXP!<NZe59}@TfIa&8> zQNaQr^Lf5tuHd^vb+{`9KM%Z<EQNmeBu(!GM&Q0q=oLbr4ZIQVgMpmy4g{v5-#+{~ zm+Jwz{}xF1Uk}mg|HG~2|2vTKF9%Yt_CY#-tAO_-UJ!UQ@KPZCt4`4VR~@g{lP3XL zP8SQF51fv4hY0=AaoYb)Al)|$y+-g?;@$}%nBHYTrWXJ*y#gThe)~X;a|EaM*LoNS zq@IQgeK-Se^Wq%icY#6R8$dsBH*h>~D=+}$t`EvH5qJmU--<-;0!{*w{sxpsoF+I- zkZ(ZH9cild_%j5v;C>l~OqswE4xNDC0CvIO1KbN72HXQg6Fqo0uo$=vcqy<QXabvo z<g*$$8MqQiJ}ZDIqQOnTEZ}lr5wH<>A+Q1H1J(j30xN;!GY|L`U>T5nN`Nr!!3OY) zz+&K7Ab4Ss#5Fh{coA?o5Mc&q1E&D9fZ#be6L>tZ1o@i;G=Niq#X$1U2aW^|2aW=I zfCa#8Ae!L8)DxO&rKd2k3;eDC?iK!ffaikV4MdZq^m9J29dtgh4d?|n1DXCxU<kMZ zcsZ~MNI4pTnOHh#5UdqkB3LO{COBQNM9>f{7R(2p4Zg#H=KwvxaX{+l24I#T(o}k< zl91H_yJ6qNX2B-GTEQhinC^f|AY>a{Cho<89zmDjZX}@i2{s8X2a-=CkbG*zy-cuJ z&?D#)+&xhE39bf`&q^TqG>LnyV3}aCphwUpxO;%`6KoQ!6)Y1h7W4?Z1a~8Gl|R8I z!CJvG!D2y=pi7YTT*Vh`608+06D$_=2xbGpVn7y<`F4r>ZZtxQpJ0<<tzem8v7krL zCAb^yiHa}SBv>n0CRi-!5p)UeMr0LVut~61uuQO6&?D#)+zorg?SN*%Cc#?4GQna& zk03zBtAkRYk8lpkXDF1i4gCP|SBo@)w`(wd?DvRXh5ulLo&Fd(;0#mPE&ZDjp4VNl zJJR-hF`EX1MjH0}FsGad8n(3ZaUH%u=-onx$sauDy`=rq=?}V6=qmDKdOy|vtT&|X z_Za>z>Dl}Hzb~}CAO4R*+xy2aJpt`*TC>aEN52>4LON@u=3gqby$^pi(xSh;ul-@j z>t_1*>hRx2yFj`Y|Gcgdx=Cp6A*BCq@a0tkU65`T|903V=}PVG;yF^J?d!`*9<-I> z_7kAuCjrieJ}964-osh2Q_}W(2;Z0d*zZkrs`v>1E6t!z^kMJ2Khci=d+mRd9bfeG zS3AD=cS(NBfV>`3@<2a8Ud@U>^n-lydQ$S^k?`3<@0RdU$zPMucZmM%_u^g$59Z%~ z&+LAo?f1%_m-OxT*wA;V@b-Ii-w^%V@4<y&ze@k-ARw+4lHaC>G@T}NqtM5TeD-^0 z%?PH-3!S67L?8BhYzu_H{odME;nytu_=y>o*Gi$^Qu&2_KBC#Zhq_09`@Ig@0cra^ zjw125-%BYNsQvBtToy@qkCgW*65f6fB3r`S?^SRg6#3ilQPisNwJ!U;%!fq25|MYd zqHA5v2*>Mc32(m#`ct9p_ck{PZNI0v4fWkUpw{J*_FyLJE9sTe-kdIUiTK~c`Ujb_ z)~MuMuTbBh%Y>dt8u7~{{vG5G|CQqZIO*eSUHR*Ee1rT!4;A`2p(hG`3)2J7rgb{} zGvtr|-9qOp8u=G`q2iCQ62D31ui4cm@{A(?0nM&Tq2Cq%Y{}nz$zP?=e;|LzKV0OW z#_*skg$`$sAKDe+_nfM~s2>k%d0(eL%G7>uY>d#g)!P4Nq3!q5GE{j&zYW^oC;aU9 z+HM!RO#CB47cbS}G4@mG?H2!Eihq;PU67sfln9NnpQ85)oiFLz@8Ml#$G=1K&zA7^ zdyx0q>08?0Bk`LWCA{R%CHBg%Ofh}?J<sDaRlleM<M(XnAKvlnL$qH`dOm!d^sE&6 zd*JW%zafQor_jZa*BO2<?88a_A|?EJDe``Z{5!+HlR|f;gy*{p&hUFt9!{Dc!E@3) zQOQX!Nb#SSBH!Oq!f#JWe{M?rFQxeJPKiGwML$g`>Fr4g|8feywiN%@Q~WPWDZk58 z<a;osJSL>Xe>;UfHH99SB5y|u|3xYO8&do)N#VzNva>vvr^H{IlHb3i(5}+btL;M# zLIphBC0H_P_BUNP$6)~ud{C!jsDmHmd>8G3BQ$u>L$b$$@&&UiZ%hQx$FP9^oC-WO zBhJ!jrzdAMjLhdr5ICHss%Cbi^t!59bLN*Xj09Dbl%U>Gvu9PzuBpIr7o|90BRNds zXon*PlT^JU=PW9XpH<Q)r`|$MlCvt3&W0FGom?IeMs^T=PDG!6ICdi0FZmRVz{q5| z3di%9mQ>dyF;YFX0KK>(=~P$IOu(C*svOCY>MX*f1Wpt}YWQR^Q=*BOJzXhgimNSV ze(z$YI6DMN@ktga#Zv_8=}Li=D=Wxc9A8wb4)Q7G`A9HZS1GDNHIAooRv=gDT%2=K z4S<mV7?tJ{KPM>eq7F2Y5O(cTC(}4$RWB}`zYwR^l#^k3Rn?*@aEw&ps2JXWHEd+| z^`(`ws%9-H#{pKZ(()yhD#)A~U?~F6;i)=u3l7?M_5$T}?KjJ-7HLMv2den|g{bT} zb7kRmrS|DZk`B*|Dovaj<tnY1e=P;T0W8%xFh_?{=Vd|CMU~}riBwe(ORrvd!vY;( z4o<MCT6CipSozGNPoyfcr~>gK<rM%*Jqx*-J@5Kb9*e|qcH^Keas0?&ug+fO?9fZ% zKq6gqS_)N^IKQaW7DpAU_N&H8S<bK(i)PKS>C)2KOJ<c;)>M_3E}mZ%shI`Ql<e0- z_UiI-03@~B1F1`1uReRJlxO1v=g)WM#%`bTt8bW9$&xN#VuwiO(n}C&K(tD{y#%m% zBw7EF0_vLZF(FVZjugVq_9)4=J{hRbY)L4b7Svae0tq6A3H24M$X0XWtfADPNqQ($ zjd*Ght${xMkoRQ2q%tTXOCA*$oL^Ehx3`imR7Vm8=U*{t@|4o}`9>v^=9EmDRWb)x z$>b^drQVSUrp}=<*-3-Z+_@Ds)$?4Xky#7zTe0XmSLxzvRbA)8Gk&9v5`)7HRXEZK zIJ;s|HPCK@i0ZJg($Z-QZ-BX#UQu3Mvw$JWBNdC#-!c-~x#T){UCpejIb!L+D%6}_ zjM#TA4i%eMg(KF2^XDW5NHojIVUk0IyrYzSJaVrTXH8*j0v&n1bmVDN73B-WNrj6y zc|o#an>*XZh8Dj#4GWoppyhIdj46jiGZOOpk{UbROmaBn%o&UU1&+o>6<4w-+9^d8 zl%g|!$U8=<zG_iTr9L{Vyt>zH%`cfUs&q<$`Wsd1WFfU_)SN{T9kYlW7vem*AfhCN z)Tdo}i>k{j$}zaQVNn$iYh%#{ub4l@n-n-vBu5TEb&B2a#*LL}PBnXVwjJ#jsiLX| zjaqei6=bJfkDiC4?Mfp-r`XQ0ID-(KSkJIiziM-q22*iJ$d=?97tQG!k3UHrIp)nr z&myP$^`h2Z%hoA$QbTeK_Tl8ATbfT8S<Hg{V96xtwlrZDeF_gPdh^+ZEy4JHv3Dfy ztLJO8RILJv3XP2_-sF(pF^I+UE>nWpN)35O@)S8X^rh(VZ5GMn+teb{1)*INMdom| zxqHX(KtvgN(SUH`TL~npo?wP(Dy2Tw2-SltZg#woceHLg5@VWV{{jk}?Bp$A6gH7) zY0=`O_>Pe-CM7_^JQLMQ#Y|Xesz*G>sUC4lPcpF-ZoT-$8TR5A=c!FDg_+Ya&c*5I zjE?58XY{zEGrH{<FODJ>qf&Xi^js6ikH>&@c6nt)>w9#OJ*LJ8F@o{zLhtAvfyNZ} za2hqThtp^;EV=Z$B}+;xF+yFm5T~6+ZY*7#k2(KY-Y<_V@+2;Aq1QXoJG!U{j)nPN zc#O=auQxw`bU}f~<15Tpw8v9+{E`I={1JUjWcdZND=ROMXCYwgdhUa_4s*(lX}p@J zV|wl?!5Xj2gMVDyPO!~6fmg1HpDyel;8n>uxNI6cUHr%NUtOi8JXcf*KxygJ;Pj~p z+P<6X)_3GbS>|B@?Z<S=aMcp*3u>A@+ffdw{N@RtIm{TYZ9~-adrkE6i`D|8V)Q-Y zm&)&%&uNbl;(w9k+h!%%w@KuWheysrpH`zsEv2DA+><vaY04wIt<?K4T$NwchmFHG ziDhYN`8*7BFk{m3Qswgu)$Vp#HJ+mOFSv%EuFDn6g7b6;{hJHO;_V<T*y3VhT&v7S z_%nee9vpm*0zka@$>4UG9tStZ6_w!b=r4Zv17D8l@g0yU#;tEI2OHDciZ8=_d*FrX zRVVo`9B{*6d`Ow@_zojKIi)`1w};8$Q!DO2j51<trsIWM<zmE6{yIbwC$IiCt`Rlx zd6{q<KkFPV!Kad@HG^Djv=*z}1F>L*NUi)u+``F<#ZvtZKZ(6E5qkw<H}w(Q@BYJR zBeqn34$%FFY3){fZkiFR*^JNG)$BGlzp<<tchj~ZOp}&a3%5MMz7gyj`d|;?R>6u9 zyTKW|HXi$)B~XQ7#VQHCXYf(Tvx@%q2jG&wScT7p>hFmf+%JTk4VG3dKFa)PTIWa& z1sX<cDAI7DhD!k`0Hz>iVhd~QC6W1<tz<_TF53~ohj?^c`@3HJQp!=-%T2VGTaIWi zPo&z*g)o9oX)mWM7Is#2fgZKJJn?U~mwL2<|Fsu>w=KDSi4Gjg_GRpm+ZTMC%3+#l zUQWQ``lmFPxA8m-CGv@ym*~IQTCUWx{qJjCKDK?Ky`X&=d*t?|hrR4T@A)b1<w?cj zKhs{$(X##5UV5}IMs%P-i!ndOV(=l`lqO~c23McbWWJ+Vd?J%E|J_Z@yBKZ#Z|smh zX8f|>oiz~uC*TX*Hw^W=FF10)gplbeX2WelpVDlmDHfl|Z16R@tN|$2f8)saG3*)n zUuQV@?ydcu#N_b{z9Bpi|M;*w4CdsyA8RoPn`$waVrKp+E#@r6;uBd6KZW~mwiuqc z`M=I$)OTZNuH$#T4%WKTYdDF+_I`cw2HS;P8@c8%3ICkqttIhY{Bu66K3Lg~8&2_m zPoH;%_%(_1@WWs~C&4!q3W4n;=ps9+{$tX{YYzJ24fEYfNx6ZB`EDi=!#^|hClb%% zpZWeBiG4ymOd=0I4E8e;+@Z*PKTCoxz2*D=W!iqor7qqu-<v3D82`-oIueceXNDdp zu^Io&_bL+a3Go{e=i`ULenFxNKg{=L5_IV;-v<2D#T%ymJVSGxk7++c;y(P7=~E=O z<DY3iLE^9w{E(Zg5I+pIlEk<0!?d@Ppi6IQvt-r98>Y>@zv|0!Oj{M#|G^EJDoc0? zH%wbuf(v0uC`%Xvg29v}ECs=|Um`cU#M6#1s>;WC_?;?z!3fV9uPeX6a|HpPPI7t1 zdR#LRH|aum#)~|YE+)(CEG)?3JafOMuy`lynZ>dynCdU@Q@JY9>hT(u62D9sH%Y>& z{x6AtI|gXHa#P|@$I6qsFy`kqBE|m&@z2K`k{9=ZJLNBt#lkYlM_>7uWlWrp+xvOs z&7D|U!X@z&=NRf_)tTkI?dyEq^Wn#}&j#T`J@U$Y?gP!(J~uC<&o^gyns38f+B+Wp zv_pM{U&ionYj5hASLStnhyOkN8{SC?|7hRg|H1J4b$FH&ugvbg!w-d(HN2<8v)okp zNgry5Uh*4Y_=DP;<*35n*L!&Ck{w0E`#OAI<?=O@J4|fE6d>MN8!-`xCF&7l1xE_z z33>!SFSrv+FCK*73WO<L{2VX`_$2U)z|}yQ;D~A<mexmn9f+m>lM8{csS!hfp9lUG z_DTO|fb_o)h~{C0CG>4ThFb(Y9he8C+{1vB`(z;HK2Fdjcn}Q^-Tx){Pr+XSDfiES zl=}f7<&FU<_w7K+?FUk>A|T~T2U6}`sBc)8AMsNl{r?9@|8gMZzEbECAj4e@q}+S4 ztWUZ304euNK+4xH*edvh;3~mi3F2#AO781{lp9~TQ*uuQQtmL2a%Tc5S2r3@%C!kd zxql8k4OjuB|7`KU07$t#LVp3sa07vqdkxwj%DoCmxgP>j?gs?#7K{qsCU~PDm-DIb zA|U1V0;%s|K+4Viu9W+)nC(!mXMoBMfRwu$h-Y3SeBz%k{)b@Ll>03p!@mY(xW57^ zcMM3m>w%Q}Mj+*0AUH?xYl2q@nu1wC%AE<M+-X3{{SL<1l=}@J<$e%Ix$g&3j_ZJw zdpz(|;Bn&52XFL$Iz!9721xo3K!$q|NV!Xal>15`<(>qj+?NWD791g%D|njVD_}~w zw*x8n^FYeI4oJBl2U6}EfRuY75Pv6gpFZV28Av^DM>|9R%|QC!52U`oEA$;ehN}Tm zZnjI5`y3$UJ`G5@-GT!IKT6Z??+WsLB8Fo}PPu;xq})FRQtrEel>0kC$~_TCxh?@x zuH%4|`=2f?&o6=W|1psM6+p^;jnG#DDR&S^xm}2lzX4sKA>x3&z+rerY&VeZ+r+(H z+?&OHwYaYo_a<>)F7A!uUMucP#Jy77%fx-UxR;1~vA7qBd%n1P#2ujIngWEJ;oDH| zgCV#*9^rU{v_1Z~M(DCE#>5jOq3!X-g+kloiQz)q<A+m(w#N%z@aFpu_PAj=luX*b zs)e@4MU#cL$02!kc(jYWGK3cKT)Tw7JudpQ(Dpd$9--}V5obM)<XvmP&q<@3NuvLm z622|Pe|d`kIVt|Prubi-LXS_OIb_FQ{5m;>zAc46?bR8c_T;30mqOFe>3=uM%Sm$s z12>#T=2b1a0mRjlr$o4weF1mKsm;Lg?b1^sqe`(?ZsfK2DkeVKsGh!?v(^5&+4E*q zm2zWlq}rSv406Ma+734>vZ#s<L7U0cucoqRnp4eQT$NbDrCfFns7=6HV70$i@9WU6 zl>CzmIC@qk_7l(H?mTQ3R%#$KUj&=_RZfF?i?B|^;r#X9L+g#1JwjtAW$L!b-qO-r z8$VTkWKY}zd%NMMVwO;j%IzrZQ1N=zw(t<XbBsdoQ}<q2Ob_eurkV#VWbqY~rj}0e z^RJIID(pbm#wgnodkXUPqX{(sXadbUnm}`pCeWOt34~grRdA%-UE4DdYK|9sbx|W# zZI!)#ebfYO`|Vj8`8`Ub$3~|yJzRQjnd-S?s-Q=#Q9WFGZmQ~gPu20bxUWh!N_lw2 z_f`3N-&f@wGuk&&g;e{hF2gRZq%Bpw?WZb6AK~)g9~Z^~t~T^3eO+B=Yo9X4!DZ7J zhN}Hk7{03OX!lc%!k~s1`Jt(HO+OdsYO=vT#{E<UHXn>DdEJdc*AcRTDu=ym_=0%_ zHpB5s-LKR%OgZyR4Sjt{%V(49N1fNl?ayi#e&3Nu`QYcgQf1}-EWFYc50WZh*_ql4 zV?}i}r^qMHaVS-L=;I{v8}Lu{C+J$?S1eAug<mby!?I1iDBqFxk2MRwT9zd)5A22} zvl{$7bVw<lkJ~?1oU0?P7DY8-Afot<(fvDyPxEvL{mbBL43)BftQp}ihF{}YoR5P! z9fw^dItq^@QU8pGIS9`!J?6`P9^#+opUP(<4dCFn{$^SS4C~MyvRl^dUiK@XVeL|M zz}Mxj{}R+>I~Z25wqaU>gKTV=wj7TNYOz<VQFzo`?cEWAQz-UpZZHeQ${XEh1QI)< zLe|@cwLt~OtwL*C_c}ZY8<KIm?ULBZg#A{p3FpY;*wWSj0l(&-;h!nn+J=Kx{@6d| zzOvb!7sMvB;7YjS8AjpXJcOl9-YqIj(w?mW{?-YZG=i{o(5!3CGFvAgH1@}}PRJHi z<%GO7+47`r@;a#4cGM&MlRYJAh9vD|1xdmlB}sFilF)oUUXtb`OJZ2-klkjTSt&-i zg`?+$>;Dls*Nonr9rC>%`GQf`y2rF`&Q<}%wdM^33t6u#H+u_NoLlFt&Ka7!?7;hs zxNB~m>EIntGr>CPVXZj3&!~l}^z%LJPO=U;O4YE^L(%H2aQ%UZ*NA=#nLQZs%vJWs zEF0Fhbe6@h<_(5+q>IgxGdswAu6iEC{ZId)^##uXhh%K{tn14!FoXZks4rjClKi*6 z&>G_wYVUvjr1j-v?U}1GcKfc{|Fe#{{hxm9?f;A2>--HFgO6;@PaJdW|04Rz{|syX zik9TR*8Hih8IAceGKuf+u-oSqaKm`UuvX2(u){f~xzu68%BEW!4j9w4HB4)_ZQiiz zIcjORhhL?H?X+RncYL2b21xb0kxbD04<k0SEfiaouSPfvR${-2%>i}Q9^Ztmw_(yD zOK+$TSi6l_MzImShXRIT=dV4Gu{N#d^K<>JK``w+gWI(e`?ZZ|Xl>SpG;FXBtj&bK z%X`4CAO7z3Ml{%LTEQ$J_DqLYn^rgzv`Y_xR$}1M%s64|BRf)}4Vl?y%L+`%-?BpH z`_}c;<`IWk^?I*-u$IYSe6s-0e$ZRfwa+0A)c)~9oRm%Wg^Ituss700twv<KNrjIU z{vGoVlwV_?!W`XrtMO>YTYBi5Q0k`}Z)t9w*L7a2##@e80utk*PcxuPFg!vpLc>-A z!9=cF72Rk3Yk=Z=&L@5YSDS^Zd*>wAy`z{<%sBS`1oH_qI(R=uNVg`;-+nj3IivXV zG50C;c!u$x(We~3(-TPY-#&#kKGC|#8$w60?Ra}`8>X5c9Nql*|D`?egFUx=*7htf zMm6=>P99aG{aMVA&%;y0|JrlU`S&N8A!EIz4|_JOn&r;H(QBy<bZJrpUB3h!LBq6K zyQ*Ng)X*@k5j{OUur#9IVc^K<+u+2eTKR-x50)T+V?1Mbq*!6F$43~vEDuG8`_&#c z>qYbV*X-p7>qVobW5BZJ$Z_ElB7bpp9zVCyJh(M{7Vf*(g)M*`GQrj<P2_vW+_3)& z3#b1X4f~l|lK(dB$J(&d;*tg}&hd0=eOLkRz0Vhl9W_9WS-8{JQ2~x=zVI@V33?Cc z`NA3wt3t7q`2r>@dOg&L)~l&O)Pq(&WF1y{30emx#WEI$W9P5;9|*eAYEH2y45uf} z7tCmAJ?9H%YhZmQHRqf!Y&gpK0%c3>VJLbc_dO;I1#AaC!Gz%=EO7rPO&GX;3-$lM z6NVl=(5IU)B+b`9>-Ac@wkOtYd%Q2C*9Yp}EJClRXUFkn`RMq}x~_ha)9Sj?BE##O zYw(t6;m=WbI0{jmI}6~lEy?9fxICETk_DHoP8ZNSowQnGj$WS~_WjGf>^{^?JQHbZ zOnF#=SKtS5zPGt^MVjdjUXy9WCZ+$G50cnn#tM1-_8wO2aO~zZ|A7H%W^{3u=?)xJ z{poh)g*WG$EWSA(tyyWr!ap|Lfp_9B&##E*%I-Sx(Bt!A-`ip9u)BUCYjLcQoBrbA z4g{O=()-L7ym~*gJ??5)+l;#PMUKS*h}}836D=g4J?PPjBlIpM+T6wxg<4KN4@zo} zOE4^HH?3}S%`f$Jycr#6MoTk|ymdy)p>*@{hsDEmKk|~%y)NYITzrDv_p7j9$uja< zjF$J)5#kx+&(rkP-|%g&KHo^&X!u?<+~b~h@&qTg%=H^h>o5MtsoR<%ooA<nxGa|O z7QKwvMa4>Z(^?<4{)LsCubHu&^=KHO?RMqEX4;HptVhXZhofW6=#`lv-@Zslo<BsZ zx(utj%ZOI(F{0nxi)Rt|uij&{j_Xnhw2s>=sJI!iEA|+5>-Lzwtu<;vA$mh*XL{Ir z*R;+st*>CUXJS^^_gW-do`;xq8}`_<ps?@Vnz#AH=M-8;-TKT#X{o0h$xiD~atw^~ z1N6fmyS2x=FyFtm)|GxI`akuN4T8SO1pbaoC_ljemH1cJKKx=&pzBBU@gdeA;FTnT zAh06i8c*VDAcg_ebrT52@zaOzSTN4}K-Y8lVI1xRQ$POzs_Xxsa;;<zsjq1|7cLhI zoOyqMK74nAd7nmtyVIC=rIo8d3<IIAZ-QW)OBswSnT&G~==uwO80S?I{Bh{(!CPxl zkoVKa^;7=v;tj@{uIX%M-oZbgGcN*>b_h4$!@s(?qZ2zbT|oxh3IaRJT^}%cmW)b~ z#32yFfa=PD3#ELSKC|&dDgO_NMfhQydJ_EE2UHj0<2rKL{+_X@!>bsU*Sq*<N<XI0 zSnyy<SCQZjRHnp}*IhF~3<Ij`W)O^{tnn!jj6?a=J35T>Itl(bba<q?@E;=ADoCv^ z-ms3o#k{Y<e<l9aH3FGp-nnns6#>D#^Wy>P%LdH*%_Q!H&oH36_+Am?@EZZH!xE=} z#PRrH91jWpIP~STxnILuUA*De1|Ihvx4BB&=Dx4O;3tMeXmb-7>~A1wbBCD7Yap27 zKS+ECVi-_eUxW*#e1$%9@WY(_4+)-$#5lK;;Lkpwx)2{%_YZ>U{sP>575`s{TiSZu zd>Q|0*Xj_sU`K{}fh}z$h%7tUI1nKa>bgb!cK;wR9a}(Lt__Nm8;TM|VAmG>Z^r+p zzqo_SGew=Pj5A6-L7o?Tp(i}Qx*CTuc_!n~Kv(ZUrsBji9lVbKU!7G^lN18SJT6>x z!$ObR*yd4(N_vJ@Em{<Dc`os|@>E_Xt1W<|m}F2L@`cTye6C?%)Y)foZA9^Hp5EVY z^Ro9>wX<w-asT)*S3l}H>B^@i;YyAFjO@>H4bc9rDg5W)K{PLWA2avkJJbJA{7YEG zxSmdlzXF@rdGWm*Ua9`Y*bl~QFP6V}ai6u5|2FYg)dBuXQv54DjD^~(HmzXi0`7au z|6cL`E;QrhpEFEFcQtZj5w4%6_|Fr6TTOkvAI9pFi~r?2FqFhaJ@d+ZOkRkx-<K+> z8~B|8vHsu9xKot~*3;G1*L!Q(J2gL+tGaAH<LffM3l2>8e*Bk6xOlodj+`#zy@3Bc zyET87JFm>KUE0A;Cq-Vy8w4HIzN&-K9(ZN`;N#=*{jj#zbUfODiszOWz>bg}$4F%z zDe)G4d_2Bi)+O)j(XLc_&wYHnHxaM>UphV7n~L}4l=u8n^un@#2Jy1@>3Fn5b=moH zlvfCOFOzVzM_!rVO5q<)wiD`o8RE6c`+KxgUYU2M#Jemx-j`vxFzpfN01JVcf_qNG znQfr20ivZJ5de+`{tbbL1MdKi1l|TL0)7+d16BbUZ@yqa@B-j@aQ_l81D)4kaUTFY zAMU%bft9!(crNfsAj2&NGTs8A=K@FIZ>G>wg`OnzIH7$)=L>y~(66ALGoM?5Uf{Dr z{|QLBV?g{}9KjExRsbR5h&ezsWh15u9R^+qx){iK1wisUA4vY$;(ibhei{F5Aj7>R z_&ku|p9V7gAI1G%Aj5xG=-Yr}L4Om7Ct4R*1JPGsTmd{8?jwOn>f-Z&=xIiHfYjSS z;26+d2+a6<fsEe)Wc*j~!}t#Z8UKes#^?Edj2{6qehCmw><B*)CNQE9NIi@IGCv2w z<O1ODf#}yq{0ImW8gVy}?<Fk)GX51n4{$v2OyEf1FyNWMF9G)s)%o57B>xwM-VCIk z*8`c}V?gTdQD7nPN8)}nka}Az^jyK2K!%?NWO%>0dw>j|E%YED^^^gmo<714vUu?U zAVeJTIFNc;1*D#S38bFB2c({E1FCWY;_u>W{4jn6knu+XRXG7wIRRBU0U7^w49%#g z9YE^&c_8)h5b!MEoj~e!8IXFt3dr!|fYfU~ka|4>NWHp&)a&a*bUt?h$**1LHX!x- z7?67X9ncH>C6Ic$SKMoW)YAf?X9`XQdf^@dGJKJ^e;&y2ZlTkG)XSkPt(SL!)XQ5y z>g7=&_3|qq_3~pN_0j;OUTy?3{x^V7)x}>2GX88J<L3bx|4bm`e;&yAhcTXD{GCAR z>3Jaa`ZSPw_#^Oa;3Gil^=Clp^)?{GF9cGrr9kR+GLU+`1W3K|{b7|)Ao+0wPPz*- z#tVU+z<l5<Kre7Rkb2r6?);t#!#^N&OmG>H;co&m{5)}=2xRz6h35B@sF(AA)Jraq zdif%ddU^Fkt(TX8)XQcd^|BgBy*vbD{2v1u|9^mte;1JPuL4r9R{$A*B9QSf05bky zAoaxW)KRa8FutQ6UI*p^cLAx_7l733?|=;dLm>5fCy;u*8A!b@1X8c#foylj0-4`Y zK=REMItNJox`EU$-)E-24q?_reZ3B(`vxH6KOywPf<FN=Jl}U__}j&u?>#g8Orb9a zQa>h;`WXkLe#Qc+pEMx#^8pqGsGqli)X!ER^~3j|8UINj<F5uX{%?Vd9|1D{0wCj; z0vUfiknzs|QeRm>>Nf*OJ$!ha&R;9=0?<o=Y<Cv{sqZ;J>ibe4<DUtnzE1*D-~E8p z_dZO2sqb|_=KC=q`Tt7jp8=`o`+(HvcY)N~?Lg|SO5868GQKIaPcR?I@WX)&KUCcJ z57gm1f#kajNImg;Nz_w2kb2q(q@L~sQcn%QJkU#l)YBXw^~BSq7(WbT{0TtDzZA&$ z{eg^s81om#-w$N`?Lfx=Gmv_E1V}yq0!TgF2UP7YP_?^2>h)S6!%qfMua^R;*9(Bu z>*+x1^}YT&pZty;`Rx>XE0B8K2xR`7fz;D#AocV!ap(6bsn>4_eZAndK!(2>$nX=y z{YyZG|Dw=CfYgh;w|#Lx(A3KzW*+V>K<eesK<ecYAieIz5A|{fknwK;Qm;#ZjQ<TF z<MaDzjGqr={4W9NH3&b9|0c%8)YHpA>h(n+_0S4D8~7xUdi_0+di_3-;co^~uUu!N zUatXCuYCXZOTcr1%>U^?=KnY#_4xOGTArtX)WaGe)BBCkKL=9pTx4VTMj-h#0LdpJ z?o)t_KS}7Zf+K+pe=d;WPZ9U`(scN@faLo!ka~L&NWE<VQg2TKskiR|skd(fskd8z z)Z1Jj^>!tY@xKCOd;`e%ejwuy1Twx0$oTKMbo`fqjQ=>0di*VrdVdJ0>=~E~`c9y- zXP~lYpt5J62mY4=&jg}v(e@0a-iv@38maFnV`wpWIB3W>*aL)o>N~-sfT-p?=K{Tu z{yy>&$O%;qs03aF_c9><222<C5^*mUcaLDU_-BbfBjGRU{dV%(jdbX~4ajubfpl*c z_toOQQrw%weYv<dihHfNFA?`jaW511>Ed1@?#1Hn5zGcM{VX8U2PnCqBhumUad1Qc zdp+iJLdVxvgtpgH{sl!cyuE(%lF;^g$tIzTQFy#o3vI85@If8pS9+AUt5o>g>lwL1 z+v^u!ff4fkcY7V@Orh;{pZ8GD=x?tRwF#}c<Ag6eJdBjrYiMs6-d?x4OK5wYhu{07 zzr8M$4_V!5&GB`b$KXfWUbng(JW1Q@G-sh*CvC6G@Z1jffLd4WnJRf#CF%aPt}>yg zDgS2Ia-l<Lr_VtAT2yvkJVygb#;<X>bJ8avzLVyntCQxjQcn7H$mgW*O!5C(3jJD2 zdfh4X^(pi@DRgxTzb~ZFKTiq&YQJRpcpd?w#IL`l=!50%^pB?aFHQ0PVM_jaK87>? z&r@ht7^gqi(w%hb_a15XPXF(wgy$NH)8CgOZzP4Dn-ZRJo$<$@zBp;Th?#sI!IX#( z@1-u7zYyQ((_j6Qum4S+RKQi=LbYr>W`4E5s%qAa@(DNP;~k^COup8Na|p)GsxJ4< zUpTv}d_m%KfJr=NRZqZ|xa=<lPU>Z4x!{I*34i@YJwI`>7~jHKR8@+D5z6@*=z>KH z&Cs>pV32<5U<H1%<hsZ_{ff58=uEos+Vbn>FYLu*^sMS}ixyS%;!`xM8msVFb5HW? zCC`QUm`VBEq)=LC1=aJvS>B5~I0qKh@XI9nlZj42NAZjV?TmtnAHNX)@?S4HvyXn5 z>?p3d+ow5|AkL(>MD>UEj`<7;o<xzz7K~AURxW-<!zVlaVst6Kdo!OOSDL-RdAh`> z=SB(pJbR(Hm;F=U_3z`{i%%vQzM_K<F)c0+>P)I~$^SYk>Bw2EoTff4!D$G=lBuQo z1dSen^{EL*8CV~TaFl`jRM@c`R&j*1yeiAOQTS|5#z;!+ipluU)@WfrwRG~7!cuce zpcH3l1RbhO5~3HygNr&OBAJon*p?|{j>xi?;`y{Jdnv?YVW}#+YDi0G&x*{(H|)@r zRNz!ckQEj9o{jV(a8LO%o$hi}sG5cNxFwqN^3UK17JSWW{&fpk>p#nC>fmLU9nawT zM91>rq@Ds8&uEtPNN*`VJ6Sys-59=$SzWQ{27VuDo_WP2<-hnVQ}w|tpQgzk@5N{C zV6Q3<x?ky~$3kZw{02UJ$*}o4tfTMHJhb~UeQvCmZo>Y~RG(gE@6VT0zbRGJ<6M*f zPftu434QkV8LCt<^LvQt&Bu65&Q%#T+LO5Kb5(r#y`QU6IBL}B0u@}Ht1@v`4UB!( z!oYl<mUON9uH?s_v%)nFmk0m2ur}#hjj?WDm*+d$r-X5E*))d3>O2lC8>;JQ&sq8U zd>x+r$g;8#&)G0m1yQSg^zX-gx2i(;48k~;*W(NHK^{dvNg3B_ZxocAvr?oTQqM72 zQl;HjO8B<L`dkkom8|wXG0v}#b6fJOb?6d_RC|NYuaJ5|Z4<yazXI);DqpSe!?aCZ z?chhX*;i^2@?4bUb6b+nS!oo0TnFH_TjVQ-{zRqPLw><epT`xalfO&0NBEs7f)p)D zik>7ZeR|55%r6V_@On-%S@x}D{b}FC@5h}hv-?IJcC}1;@^9As8jxSE4W(X`??~s$ zEQdV2?DO#U+@kHJ>!;WNr@frTgZv)(yJSVT=}3D-`3<*gep$cJ_KbQqPlwRIxqvL* zrkpF2jqpE%^K>kjbzwn__0zV&&*Pr|m*bzzu#R)gSJFOSqwdY=L95lT4wbRb<%nWy zaIoE)w%iKeAF!6*ZN&OhP@L6)P0t&;n>UQlc7>u?gTvV?b?b2)$82n=uJ%~tJw|Lw zZtM75ZYVHX$1AC^vv~O)2F1HW*7zL8?QZjK3@$t14z_I=KM&ibXO|&*W$XA#1_O(T zH7R1W)-{pD1rGOztaAP0QZ#tKHNJxJ5TaT6BSdT6>cs6zx!q8=jd!8w2!dJn6eNAP z9k)j8(cOU7I{xx9Vt4%m&|1e|nim*ynU5Dzzgx*4upWB}v~WcTE`;*JZE@nZC~=#g zxE-Fj^~i0Y;ZZI%BJ26!(3l9&khrZ)+%8GnRwi!eC2q?Sx6|b|q)x)AX-+Dv@}||p zAoX0sy|CFmB)Gz`X0EpPAsf-9%{+qTM5DetG8o@>=`I=GIY6Puuyz`C|EdjH;AeeO zCZX74dy)7Nnb<GV97&i^>{05`-uUdW+_Ay-8aMV!Pfu*2UZ=_r`@oIpW7H@!muE!l zsA$9270EVYMwgNIzHxA~QTK9}k=9~ZQF^L)h(y)ek*M)LBhk~2L_@G66(1=QJ+*|< zOY8{4j}(EPDuQj#(Z{mj6!LY~<Y8+)cG-8Acslc#;aDBjjVv&L;cKnIw*gV8p3W1P zk}lcd2*o;MM2qa?S)2OIBt0dQ!3M(`U#8wL*n_Y0J=Ub+wbnqpnTFNceYuFiR}hi{ z^eRSFvBMDw-zvdI`h3H;tLDo_6ekVsg2eV-cU6pu0NP07zK&ek5!l|XM($lR*Tvr( zo`Uxm4n@c37}2Q8YV<Cp0P8s;?{7v+H<H|7<Q-l-#E3mc50zU4?>wt|m=PPg7Vjv~ zXubiX*=iizYSg_3qj}b_9#za@k9m+>ooX#ykr95Y1<BAU6s=>?g{-wk-X^2vgY=N~ zEI2GKj`P3DTI+sfODH9HODJz6Uz9NL#mKy8-M6oGh}5wSMD?)CVuLoCzP3oV87qNQ zn~Z~7jJj94LTPIa>n<irA?_-}4eWj%!D@}?6+#?dJQ#VUzmi2~bkHV)ER7_VhGIz; zwU3qH*X3SD+lo%AuxnKGu39*xCg8q<4}jdaQTUFXN@z1SX!8+;c0bY_mpZDYPAQ>Y zq|QL`v{35Hp@_Aj2qSG16ycCMat$PQKeF-2LN7kqxOJV*%`Wv0hCXbHR&WI6G%)*o ziGvoW-kUKjyheh333PACGAx+?l47H-*@G$>8APL{9nb788?M2F4~IJ6!}_%Gi`{=X z(EB-Ab#Kly`HIR%jwTeHzjXOLp~Sx-m<_9mOOKOFvi#9NZjRpy=9swg;KpOL>>=iw zt-%uJQ^mp$`e`d%i#TPBQ-L5Aj8lo5N{JIOTkD$`2bYRr#_Dx-3^u^4S$Xi7w|Z7D zUbtldUS{<ETsoWQ-JeT0)7oXC0!QW>tM#_V?lVkZ>*C|knaJ1M<WLSAKNq%EF)DyD z@ix$5(^AQq(cf!k!raK)Z`AL&`DApHhNWNKGShZSbpM8W)<LKU50F^E%_v}X+6uU} z!^Iz6mdlZY->N5=Aa`q$pp{V1kq5HHs>I7?3RQSiWePUJH(z{lJ3MjA0KBLQI#U&N zJAx|oktKHTsa3(K$P#0UDwrHqp_mEtK2@Poj@7GP&r)xpLrMc2lxVH>#fe*n;pPAK zvfL8f`y1*BRLpcDj`ShK>dOEaiY^DIO5F0o?YzV-11MKWM`vc8Zl<-<Y&o1_1sjwV z=)q_r>#bpH4Wj}W6Ink90hk=Ku9yk)MAq>Fux$mqBs%13L>whdYkfoFw${Fl)#T%t z#io$86pb1lfYVgg!Bl3ZjK@OO0*uGxy=XNa>+W?t7Q#zyYCHyhpO}dmTeTOGD4{+% z6BOJMDh%Zg2>bpS85@qRVa};Tjd$l#DR#!_UZni*&MgKSQFRJ|3@da+!ZgGl%+2d% zFxMHtP@v->NKZVT%&hfh^inm3F{7#sdLP4>R*bSpVnKYASPy&<iI&i3Bzj6DW#Eo@ zDi6I5C6O3C?Zg@#k%k{BF?!mGRiY`A#ssy31!hLqWU1JFjOaL&O5}>IT%Wn3r!8GA z8vL@5h4&cu)FO!{6|c`E7&^<0E-k^_DnI0VyXNBuW6~c=U*zubUMbEwRdwGwfR{_{ z7FEwj<6Y9g)*uB#8#$33Q@kpfR%uo^cAdxHI?+S_aBNX7?$vD6Y@Jv_H_YZx195D{ z8!F4uV3XgPn4>r)xU$ch*#LHBX6%Mau&88IGgcbGeT3bL*?LD4-EfhkVXZRYYPSlS zYX!K@L##ViGL)rG3P8MOM#6<#YMvKv8HQI}hCv^Ajn6drMAT6eU=!;JlLH^AR| z2Z5IvyN`VcT<l3K*wRLLiI6;R!LaU`4p7-gVD?D7{2O$Nkk>=Qk{&E}N13LUFzwhK zwTcSXg0~^OaZ3Z|g<Do?xy?`9(wN1S+~qdWVBXP?aAgt_fUSw#Rwi!eC2q?Sw=^4G z%&PrG^w`M<ucgbH+QWQXI*g*%N4trWRzkxaC5Y>EA`k87{=*;X*^N(q$KRAb`InmM zik?jAq#~lzLX71}rncNRHM|ObO9`8)lg-#f^Z-FL3ImO3aXwGw?Z((^O`K0WS**M$ zN#YLpNb~txj`p5%&`IQIL=5mxG0;ZHq6`$WJlRCGi8y8KZxiAySK`FkIZ`itViue8 zgDM#e_H}aWteGm~NKhGD)M0GakJKng8yeHiqS}!zCN0XSk#tic>89>>ySKoL?q!bD z{Lw3OIK7CflLNH?vBL2wAuy5Bf!KQ5f%5taMEjONOPl86U4J1?J{~bpB3(U|OeYlz z;?w$Y+>;$L&Pi?xca$ZR1@STS(8AT!#)CQ&eG0*ms0Tu&m@S=D6rLx02P=q#Q;vGU zN0$lOu6(YuI9kZw#tBQ0YVikaGWO!nr(ptVdKqObU2Wdlx)(+Wb2^&EAG=kQ0mA2S znhEvabBusmt901$GMHnOtLB{@uW3RGwc{!ATMO*iB*ZEbYlK)qf-N*yAQl^w4(?hc zM?PHXxLXsj1LnfEY+tLpzK#W?R$MxGix?qH1y%2=s~rQiCIaymf!ILcv<Gym-R^pB z+|)em>Zavjt?WEr-}h`VI{SAjd85JF#7IE3vwe*O?qnmZ%`uuXzPW>KZlCe!sp28$ zMGS~KjfE)HE%X_w*p7rlbXY?jLJmJtV)V3yOzIF*bYF8qVht*3u}h!X<4BI(aGzq* zQ<B4M)S6h<qx||#NJYQ^DPEQ}L*mPGc2QDSvJ7WC@suFPIb2-7>UF$?Q{n60EH<qD zCMu^)KGjfZo9Wx>UdFfRzg@@P%inN2;oIZ0{S6bcqvLb^)`VOG>sh8XAtxN0o3B>f z*Z~-^@mO|ijhv$Fja^f7XSRJdX(tw2YMOBH2bvVDA!h5@O#F04!#P(uNd*~>Wkw8! z*lS<~@7v?&A^myL@e!mSLHZR)zk&y3)V&EC)r*Jh4(#>B6hS^87vw}eiNZ?fVaj10 zgAD4K02IRERaC9_`>oqKV!}d@nw?v>6T-2dvntyQr%EbWOZ_)UWyYRh^I}9F)o@qb z>fqyHZHVgS?x<SJ({(NO1V=yc(V!N$#8T_n9Gcec1mtUprWC}UsMWDF+|>Ze=2xVB zG~88e`#5ZCY;ao*o}%o<>Q*tE+iU!#Gxh3v;vC%6=S#!!#R3y2#bBrt^6ibBfSWSh z)C}!B-XEQq)7^%lNW|{xWh4N9cm2o=m~K>!Q0wufg9o6Yx~?>LJ)h(Tqu1r&2$Yob zf!xbpK%mQF7yT39GA#Rp%{b`Bn%O)#cK)lFT(@KHk0W4Kt6b~J_JTIFRvzRx91G-j zdk=)Im(9AD)7{J702_a7YHpf$V|+ahYe3P9a5BtAPaEAWX<JR-#+o-f)*&D|+ttD7 zqMV@hX3+ges%$|V*kU?FTdB3q4xy%bQY_~+h=>6XnAd18)&dKM1zR)QI=^7Xo}_%< z9o{V+yO5R_9cgeSPQww8VEtR}W$&o+8yJoSRUSHY9=NYJ7@MZE5THQ}ZDX4;bSLBw z=nQmrj3M`p!p*GfO0T*>Wjqiw(*y2DHcg0S@I!j8K<x5<ptl5KSET{B`>nqMI=oxr z`tipiCnJ%9y@plrv_DpWrhxa6r!zr(&L*-z46%u9tcqp?($<E2FIP1i(P^vktVyZI zAN>lJ7*+3MM(-<Q{(7uiLuPuY@JC*^Hm&>ERrzb5WOImxYrgV;B(Nf>Iz}W>3zr^A z3_%j~P)T%5!=3xK3-H@<8GfKNYHNufDt0LA*S#z21t{xfD9h2l8_}FLC}XH;<s2}g zkv6C)=OoiA*hvCv%K4m4WP=!@2wPnpRXAT1v8HL03BjzXGOTO=+q4#$PL1gl*m(4% zw82iLeQddq6FU%ghi9SBXk&+r?x@Fexp12*1-rel%aUgy>2a}t!-Pz%tgRpJ7!G!# zOxGO?dwY4%eMWKexmQ@9SOL?)(<6Dl<6hQAnhiFty_Xu6YJ34~ZljZO>NmQV?MP?t z?(#5`G1Vn|51{G7x9U%P?Fu}KP3rIAI&>dCcfZzMw-NE?x`)5G&wb5ybVW3COfqr~ zsv!H^SKT#TyC{^$F_ABit*)p(7tuB&+R%N7N83fbp^12u4K8;PjqVM;XREA^i;)-~ ziD7{i!!hOtw;W-~EmsYAYt?gRXVp)|?*=taMBeID-t?jYhRAB}7n5VQI6{r$k%HC? zlE7n~`sT<fcnsF^N;-~3^GM!Q$>QTCnaT>x=!C4^t-!P<XNeW)sZRV!)WsO{M5`+} z;J{#kohdRAWQh@*h&WEws=0pyj!JVsasWBZw{sY~hqsz<w7dz=xX}#FYz#!NuL!es z<<T+7M`P5;vBJ+7(Ur`yiMAGNCB=vtwD$PxcBgxB45)Ww$g1ax5bY;i-;B1p*082E zSmCxvzSZKzF{_FG(s~*#z)lONso`|8?$++L-7TiCt7cDUCYn^V*WPZUZVeMici;8{ zWWb2dY={NM;%Q)g5nLfsZER{$dMq@yUmzAJ!q1?wf!IYwf!NfsXpv?VrJ<W}q&Gg6 zF~*4UQzV@eW9NG(Ss8Dd*5Bbeimu~hIU`Lg<0a4-7G`W17t8UI9v90PN!o}$z*ONp ziq4nC0%J08l37N`x2NjCXt=E#&l#sR1k&E1T<O7Q0=|w=RO_OCpPEB2#R5T!WkhE- z+7)IznwFl{K?_zT^GU1&6~D=DS61|HQFunRLh(1EYiQ>Tj%V1){Cl4o7*>pRLr2ne zy0*v_!Bg*D+O6jan^`D4?T5xFR@jYAJn_)cLfWRGkIlDTS#gA2=Qx?o>8#)}AvSLG z)kNy7bf&9{XXmE|Eu<{g9Bsbr2+8eJ^7!u7H#1o;tV8iS_&=Gd-9t6B+Vb}5W-_hD zuO5RxR)oNK3|>q?{m=VAKL&3z^4i_EFX|6YF%`x>VHFK17<DY65B8~8!DrCAxL87X zRt8X7Ypu^r+|rY-)+(;gSgSt7?}mC0T&2Pfx5LKn;jJo>Q1n5@3t10l1EAd1QKJF} z4Z4?onYklfl4DK#nbdkC=0~j$Hu$YJsq*-S0&Hky2y1z|zN5KYx&m9MP~X>Dhfw3= z=UiHwjp(3ft!<_?NY(ds-D`W)_oWT#sOBr(w|!q(MR-Ll;6sHEHbazl*7iWG!WXaZ zzCf&i)!k=T_oVg(HTe=<vj_Q5WuE~(R_F_bF4A=9VoVw`o<UW=P*?SE^SGFfgnE7{ z>UnF1;oDaA>*%!Q-D^>;R-|Dh9c)hz{>-;Mgr?D5->s^+td_0X21+cxelPCz_+&BK zXLYbH%COijj8@f{Npae3vbBmO6rK5u^}zYK*`RtJ6ytuxWHnX6V~Hh36eFXe7!80w zI-!E2WKJGT6l47k_cFg-oNUBVoQ-V6G0=_~D9|u=v()c_oPMiWl`BS8!If;US+4f; zcx&l$Rm3$Y;_wQT??E=Nj`C%DzTN85?fC|@=xERPI@<FCMjgu6eOn{M4@FloK{Jm@ zwZ}sFDCICpdFhH+Xbeg@kdIOhjls{*d~1K&A++cDX|c!{wCU(vYN-Ge7t3=k8uJU; zn1g0{uN@z|Xe^5JLzK5q=pxeaS2Pkq@m_Q(-B_|=-{G1^qf3`}w?g4OBQp&n(C~_M zswueA*QyHmw!@GX#a9OXq7W+WLg;nSU_GGPQcP&9RWlHBL$Fo~Z#TG5b|ZEVZ>0|Y znp{KHua^K=Scez_buSQIQW320*3&UMpbHK~m$T^nv5DQ-t`M|7^w<3(J!l<<_AtbL zCx{(}-Yu&C#Kh~*Oe=DMcT2!}Cty97+@4uDV>D+6%WK9{F7&=AFTd}Fnmu((+taJc z{jrON_+x`k@$Rt8KbG+YGn%n35X(4Yk`;K$6$^X;i`g0LVv#e_Oe^pn9r}qwKidJr z92Ej>vI=o(hP4yDCQhri_E-Jd-@P`N_I@C}rWvaD`?kC5Cqe~AOqoBrB-S0JBNMZq zm}=4Oby8L->qRvjzn6_`IC{HoT$8u=V8LW1>caBHU&o39!zp&1w{YiB#&f2x+1@#1 zZ<x_Lhser0U~Mw;_PLimg25F>Y(~p#=|;LNNa)u3*7fWK5+m*oDqQc9>3xHbY28cS zEM*#kKRP)li0W!a?`5f?jPVSj(ql%ItZE|MT(>(7IlwUK=|F5&8fxSU%(8a}z0D|S zXZ=I%YIoHf=iS(uugX6JBSsw<;&(r?E?{kTKk{@StqmjSjI|bEM#csVgfm+Igk)WH zhteW5k$AI_hmQr_m=?BP3tLYqb4k?i39&)med7>+69z%h%Z!Yj<gg1Pr!i!^9XDT2 zIOEx9KMauiVPDAMnsq4YP<pUAoc5Ak(qWc#^Z^zz_L!hJSB6jtBL!HK)8k+)l=U$V zHmpf{9Bhvg!Wgy`n9*D80W=;i^*TntakTaTTH6)BzlVs&KJtcfs-{53OY@kSULS*F zyhKmk8$@;UFOiCl6p5a8Bo_lpq|75lqNk3OYMASuOc{mUX~5j<G26$D!t4Q2XGUi~ z8IQ%Ye}NnZ|MA(k2WIT5m>rC>^+>)i#l>|HU(?q^pkq>nExZ0sBF^=$d(#7Ry>mJY zpO2m}<7}%L;Eooeme)P09t#JeH{`&y!+Yo-IX_r`z`g7Ts(R{Y+R;19K=}`Bz@i*a zfnYGKPYuJZ3cDx~HWd94!v?Lr=vdPb5Y01NXq9qudyLMt<^&9w+*fYtJO}#)0@fB( z-L2M^{qC$&_Pej%g1VK3r(ahMeSV*N`sOFW*5$7|oEG_-KQ`3okInF<k)dO}g@`#% zAm$Fl%;{p(oTm|WyY(V`raqA&Os95bDz@}{9$%mASGTrb-MW6*4_)=xepL9Jdlipy zVA77s_jUwZXR_sfC+yqjt`DF%J8pt7U^)OHn~@qO*;&USEE<}t+L%|wY58+p;>$Td zMDRi6yb<9CfpOMQOx&-M|LN`U4&0jog&_#rt5AC;!UQ(s_o^2CKYgtMQE_y2)uV9e z|ATSTywAnQRofABpXomLSw!k@C47cYV^ZNgh|s3wx*W`|p<Dm!5sK>%H{{@V%QsKK zQo@M`mD|)!a5-@b?yEB3+KzuDz23vq+<Vll)4A4otTjvahxoO9#uw^}`*FP@>&_)m zoiZ6Q)(LP=7;8nUvGS-wBihqgKR_vw4UBatf+%CXHW3!aT1)3%jg{m3|JvuLvCq?r z`?AmD5<W+;&(2GG+UIqMIoGZ2^Lh9mg?;|SpRmu)oYa0{jl<XIwO`O3fEc*ly4v;| z|86Jt*T$`Q$pB@=KXNp=+t}pZ4EI3vmK?OV6=KbJD6kUNJaf4;yJ>0#v8N@!hYFx9 zc}ItvL9C^ylvg&Z(Q*SO%>k<`khd2Gjsf5b%%0uL&c(ts#`W!?=>OsRSSV_-VYZqv zG_HFYBP>pWf=zm`)d*f2)uV>?03P~a{;AsK=A`x&!)>fkEp5PreravZ5PWM9v9@#$ zx5vv60d1IWx&7`LC#g0Tjm`AU{>PCrWL8`M*o2#EppGoLOtqj&Z}+l0D5mwQ(ekPX zW3%=NvGYCSVj)kO%zuLXKJ_-ErR#Jglf#yGho--XlxF0l?;DTy{(Yo}XBE%k0SsnX zT@rdILvO)`e-(7-SdP9Jd?<rIk9V8;h0>n)V*ppz(ho=USKS>AKEv7M>lC|gX``#= za~NihOzyv++}c3eI}qkn$^w2fa`vlE2QB>c=k-9dtB<_K$T>Q*$;f-!u-c54-N^FN zm8SJ!Fjg>#Gd8U3xr4EaL73{#ai^g;8VzjiZ+Ty3{&>t(E>Vdx=Xm%s=+bz?+wqD3 zhVLriPz1zepP8qQhBD+u3^`PZ$i6R>)^7L?)%=7i!61)QGIWI1BbD+XRU%P*whtO_ z=@NB!o~_j3=znQ}ESlR?z}c-#GG`q|xhv55un%90WlxrDAPtYzuuzNvxW2`^NZnZU z{0JTEW3UPg8ED)c--eRF@Q9r(PwP>`f}r(IWClcvj|UKQ&<`Ps>TkE9R~d@+_2l;K zhtB?Xo9b_0OzCeqF4$l7D7XiG@4M@Ge7+IAlQjw*4r^4vdNyDk3gkU)#%}38ur95p zziGYGc^;Q_{CO{OJTd6owiNGBioFgg)`nt}(+nRT1}<IcUdAELWwFr4%*$eUJalkZ z7~`DFVlz<u&1i2hL+!^r{aLt$TDrh)>IVEKas{(Tn2bLs#u0;11+zH$NsJ=Q*iC7i zryy(HRVz9SB#V_0mW&atRawJoO2CqtShH#zx`W=gSSSho)-8R8P0|+kvaQrc-O^^L zB#8EAwQg@3sGXYQ7zC9kuQ7n_rkJ9+A8E0gA>-$e4P}*|R|csX3SDQGK9lBNb{lw_ z)+V#%6;G_dO(poP{UNK}uK!TQ)jKe;qm8wys*lp0zC9581_JKT&uNf8p7iGSGh049 zodq%UOqC`oDjt!r`ZEeffGz!Wc-0`Kt;Hk`!$HhvYrX@SA*xt3R!1-&oRPz^lne@= zqICz-y2HMY+_!aNY6q|W<9&{PZ>5aOo<k}0_a=OXPeZ$(6<&@AspGPf5Gr+Cc8hY; z{obLXlzz{-YdW=mJ83M+#$H_R(feI{VZ!&AdOwW$lGlgv9Us$r!L+cc{v&_w8hP;g zHS|@%XiZM=yc*2;2j!Z0B?L?7@?KOwKGVc|QODb_aCHu=J_F6yZ}~dXDR>>}!}uFc zAL4Z+)0&!_sXGi+Qh!46x>&~kx;1JZ6UoyfJopBq(~#gjv_vy{QLdi5>_%Ykjt(B8 ztpf6Gb_NXBZ^4#uh7Ct^a^1^#BA6K+<Bx{1c=&=Djd>6QJ!Tu06?EUZ!n=c&0W>!Q zU~@t9+{R$+qEoqEFbEa$>W!h<ukIi39x~{sTwM05_%m0U(FbaAi=K4p3u-~b`Md@- zXoaih3#cxrYSyOCF{$nACQgrFj=GEG<Vfa5?MQHoe+@XJHQM5@`yee+IWZO*o;*Kd zY&@?~Go0VB_QZ`j=Xq5xP#4H3U~OWU8NcCtNd=m*hmB%#C@y#SRd@MUq*?Wo@v)&} z$OSD~8|C^N2zD}?s0^(MKNbel+Wo#~-D*jn%EO{oD7pYm&&-uQ@*54m0FkjmNrqWN zQGu?)Bq^1tccc2~(0+IQO{jjI^VNzCrjA#mjTtg9-aAA}41T)sWly60GGhg&T4;>1 zK*Zpx8|K(zNXEc!G?!T!`{;~iv*UD|19!a0fesVPygO@JFduS$Yl#+Cli@wk`8h<z z90uuQ<7T@0f})zWK4)0(C;{y8lEufg88jB8{Tv1-r!z*zSbRn*?tx(pQn!5!v`i}b z12t<qZbDC;TG?lf`MB!rc+`{_$}WT9B<k}NJo{b_TT*rTaD0n(;oW$2Wyir|_QXcz zHPh{7ORQw_-fnLUEMX?R3cr@Z0ILoN!CjVm4JWpW_m0R8ufpLyBJ=5jV>{$3-a8^Y zyb2HDs0OF#(Lb`iKzwekv=isOBfi6{@ag3E*p#n&NxfUxj^C9WpQLydHui|GS`@u$ z)sFAsGLb!xPVy@JT95c;Y*Aus48*bH^WG8P;Z=A+a(r}}S!yRUIB;d(=D>Rg2ZvW- zdNK!SfDM^pzw?hLy~`6Z<sbk&`~2sqB*m+QIk!i|W=WM>g?GulICA6Jt?OxnSa9IZ zGw$j@jLz%y&GOD`)Qu9p^9p^>{B};z_f%!)h5DZ5(0PHrXPI`MsqbkYou}w~8d~S^ z`aW*4y?&_JF}_Ug|FHiJou6G{Onep0Ja3HA@-MvoD;u?=6En@R10yCs##)YNhzDi& zlW9GL{i3Y&+w7iDeP{ADr54)>?VL#t=M6-Aly3OeRjtuG^pbYK3|6^Vs`m-?ngzT4 zQSxK`<<>V>vP7&yhI4P}9@s`P)MDEP?-K>(@Jd7)8{AVf2n9!WYNbfWwVr3A<KTva z29z6C;cFJem1AvqayTlb#KA5e%xWQ)dLt$skN7gJ@%Z%Kx3bLGVp$CDb+(SQI<c!N z{y^Q9S@E?K!_F^7vxkk(7pRXO`){G2gkrQT{AwWA(Y;u?&*mWt9=(49v#CA!c3ig3 zf%dC;Lw#e=ejsn{N_-Eo*YEDd*SJb^B6t*rrzU*D5{lx5tNYkw`0Ea(FU|{E+xXZr zWbF*)ZHSzTR~cV4eAq_xB*LP<+HU$<+;zVLk+dI#l`jJ`km>B$hGgu+exQ(VXVspL z+YwTwwG=l-A}vm4*rN@BWui-(-Vf3GNr#39C|CGn<1ss(!0my}erqjYD@Gls_2Uyu zj1Otg@A&bInMtCH9m1ciz&qIYmQj>&W2Y8Kdyb;~W#&3Fc4L+i8<&O7a;`gT;$Hl? z@n6E5?78mgSoN6x;#~I-It;;f!d4F~1ph4`);t%)l)e5GR{cNr+|O0_X14y6;fG<2 z2SX^-mQIf!Cl3rm{o+$lRcv_fhG#48`rDxEAjgf-8Mzrx=0h*yy}@jqkPQ;AKuyRJ z%q04)(}UK{8Q7IJJS`ksm<eqh!d9d<`WdllZH^DeV#8A=c0_yZiVbVUQ^Q;})$Z{4 z+AtbwuZD=P+ix+UeL!@3uO!}ngdO9Jqs}umifBE;IO4Y&JpCHu+fVxZ2Rozq;ApA+ z#3|V46Q{8K#OZA%7r$SKFD~AMVLu*Ye2EhP6&1t#ls$i@70R{azOLe`E%@uR6OS9& z5kLs_;=x(Ruy4$61bWnWzhnIl^B1&m-1L6B-&dO9uD<}&09r{>`TOzt%RWtDfZw_% zVFK<)w%MD}U;$0K2r*v}QxhvNqi#$sR&$#0Fx%m1xH)=xMm?t0{3u`un`F(FH$1V+ zy0IC}Z()_{)q#AZV*Qny&z7!Cv|nm#@O>!c5VkAeW0@XUH8OLv$8WX68e7!vFh_eg zF?Lb@Wvv-qv<psVg4VlW9I*Z+>uq?t9!TTkghBfQ)@vAj55j<TdJ6{FLo&KdJUmZ( zA?({6u(nqH6(f7UZ)?@BAr*%7SOQpzhnwLQ9UB$vGxYcpvl_HAezo8iIUCa-{e(W= z{^I3^){MQB#^2rC-5T_*t9cV^3<KS_-3B-8a=>1Qw>a+-ezAfx><D}$@3`;hxKDT7 zXE^TrJMITK?g!fU*xsC-S+_0|`MO87XUs9S^wg~Oz2m;^PIQO5_jOJJQpe+^IFZP< zz22wSe9#|XTGpK{oNOD%DiYUZidBvILXR4wd@Vy)8Y8+?8<xF6R{D1gNum>SeAsry z=XJg|_w8Q*`nfylhaAPK2@@WL=?TjKiwhMQhirO6Mksnadmb1_-4kk-U303n!Trd- zw0$rRb}4&dTWM|RQcY_!R#mcwa#04eU_3P9Dv4Tja}VDQ1NsLZYrO#HSM~i>C;Nu8 zo0$H>KKJE#LP+=NuORsmdCL8&e<D0sT=jRjo%}_(A<Ubg-$3}cAmLk_FfHWVbUS9v za8&bGI(~H!qP~m=UF%gt!rZurx9xYY-N@y!lV^dKd+KKQv^MuwH>>b`*`e2`Tlbvn zEJEj)q^|;v4?XPBhSaCj@nW{$dKTX~$C@vDnVf*{ko)%G&~(7J-+lWTxPhc<=`&!x zZ{p2+78Y6xO!kLlAS+oDI6p_NeNWX$u2W6O#LwhG``uSz@_RJ`X7zvjY-*U#`-V(| z<5hgRh-vvXm{Jc3D=yl4pg)N+vl&`mhq&bkGh;oJyA}?Z#$Uzh{E0u;3|rs^|7-A| za5%I+1CKGMKjW`^TpfVnieTr=GIg8;pFkj~L2VRr=$_633|-uhv|_tikr};P1)=w* zK-ykl##(sp^r!7oS^6N5wjYi|x3h<?bM^yj+evC=>qMd2bt!rDc+@4;qkmB62kEY} zb$kX2fF`&Nd8JuWFR(FX*6VR^n|1$he@U4&bay$GNwbFeXN~x#a#v;z9?GoyFN7Py z(5&~w&DuTW`b;=%L#2Zo3PY`CjHgkfeq8emBDC~s*xv!SgkigfOu;}3M>44+YHa&c z^LymP#3@78{^-E5={KF^A3NZd!JKo!UFKW~^`b$Fj=}(bI)+v%RlJgX?>SJmcCuFp zq6QKRWAu_~L`$&9H?5idn$cRU#!0|T>d$E9FX9${Q?amL-O;h}2*QrN0<p2VyVuzM zD82|T%^kk2-EQ&Q+Oe9=_#k%8?)ZnbvD?pnms@kkUL%`(Be*y8!5y-_0xL)C2Ay3U zyEY#C9zG?(Mi(_-?p?x1A<ruM+pV#~B28<ccSo{K+MzHMd^D{S8?y-o8b)it@Pv-o z%1OX(KF+BeQ*>KcTQ7;s$7~%tig4ME#G4d$J4Nevj1Oop%Ko(y@G_OMBUSh8@wM`I zWX-VBjTnvxjDD+_uNU@yyquF!Z|Qx8{M7hPy+4_+-cI|_<{d>-5!_~?;q`<uL<;#{ zjhqz5TyAXGx+&LVTGx0wT41Jhx|~OoMT;?g*o6UkcRL5O$RSTx!w?i<aWYazBLbUI zyx>`k*AzK8XSkc=!4QNa{;)MC*VB2u%`k>XZq}}3j;#m^USOtT>x6eEaciBRLMUb! z0-(-7xEO|9cuNwa1vr3!bYY8cT=XY51Nr4UeJ7#}^OIlbv**G##>ZDOe&GB!elDc( zpM9_%#N${+_KvAT*!tS06=hc|)my7b&F<^ksjbx0^m;ess5&#wPK@K)J`<y-N-U%o zEwE7#BaZ4a)jB&5%<DBJgv>&fvJcCPxS8fqm>@?i`YbVhr#I+0#~YvZ`i0#VFg?{0 zB<3G>|KgwKS2eB(mV*uqdy|?m4WeH0+EHd*SHH+<c)c?+9NTNqiWlBEj0%^Pzs>@< zJe=fmCR~;zxnO~y@FAxQ=-)bNwdNANK0ECDmwTC-5yi@z8nrCwQuO;mSii<P)H-8x z=ZZAb9lQpMOOw+7%vmyr8?nN<;HYvN#)7>6zyR$1U7TgQ1E}1u+Xuj)?`cwf4<DY# z!ap|Lfp_BF&x&}i5JPdo?(5HoeQ$@Y!|wWp>_TFN8BVzm;AJHvHnRoY*v$5LY~6!9 zrx_5tb8shGFs_O==_0W;XpeyA>ivJ5-%g#P+ddO*i|UJclgaWhTQhPMMz6^<vG9Yj zLLOexc-p<}W;k=1(R}jZU+OF5ex%D-E!6QiYpn_|n&^DlX{tE@X8NXeQ7#sxZZTpR zm=qw<aP$(BN%(d}hR53%duKDWlC2jAc!TCQGlUHZFUMOcwf_cNw{x*=HgbUu2}U_w zZ&SgwZq*V4)^ql#pz%4CUV63rD;&2MpKsD$Q`h@cfA*vYnb%rPoQ9{)@|%QCz{obD zlQ4|n(5eLgMy6wYWjD8~EkSQE5fLUJ!bC*)3Ib2Y|Ab5)7pUJi{5W~kd4NbEx+L33 zUy^m8B@J&L@eG+zCN>j~p4t6!a(;~HWQfz6iM>2y^+A5_K&#_COpz~sUZHdS1G@h! zCW|4f!^nHbw4T9JbL?h69o-|EDjc!MtvBhWZ~fvbjGfw97!yqEJuYV9T@m{o&KDDB ztK#iFi~@J*(n(n@Gg}AH?(lL0Pd9rEb%ECz<mY>7G2RllSIh@6`Ob2znzV(Zi!;r< zos(l1jpmtecyF&Adv(I@2_J>553q5akDnoO;?=B>ucm$R%y8aESiHiTTATa3k0MR( zw}$E2CqsqOuFvfF0o=XKW?m~Z%Ek3RVS3NYjVIAJjKe{L*cSA9*gft;nDF94TfENm z@UZ$-ED5w3N(*g~X}z4G`PIzMOK?OV9_4++JZr<kI+leBVV#ck+Cvx`pnabPoo>1L zB&ZBJQK8`XD*R|*&P6b1`);pam8dHIkr|zt8ICS>6d2yHufE=lPIDP~&l@d=(nD$c zS<PGaTpU3ty+%iG#xnE%7FU4Izfu5(^6k|DDgn6<xyKy}N6VqYSB0Z@BbH3ns!q+A z&fsOSg7=tByX29F{Wv}>Q*GukpA@!dB(q4;O~`uRh~;bx#V%?~Wi~lhu%GK3X5NRP zyjQWbsMLi5Xb)MhNR5TBHPaQgYBIyt(k%9rC#edGQw(ORr%9^YN_L9Z$9R3{OP|;> zv$y)|34P*utmyNSBj~fA@h3auFes(Z@#g04-qhKzhdNiKsPoaD>bx{bo&BKBHH@S* zqSd(^>TG~IlbAuBkN%s~iS_@a@j!`s<iqD<X7rM9bS`Xfw~?nRTgcZ{eJ#q#Tx07f za<OhzdV4dRt%}N5>H>VcN%;r5*v0ehI*LI#lk2=Xj4B$o)|z=Am^hI)?E3(wZo0>< zHMr4lRvO3pAB3&<QOP%%-5a?_rS6r1?qwg+mJe<>c=XB%hBX+ED>9AlHlurO&A&Qc zfhXGyEXeQf*>0SQ<_PV^hhX`7*!SjQoMxh%wa)ag^(G4GpYcLsEjO(JXij$XrROl- zcEXg<sC#`No(iCOi{u&ycj?=B|7l=SZh7(O1M+Ob&bpd^p{{k|kOHija;Z=J8R{G8 zGze&A2<VUqm>dv>YslA71ct@fX5LlvWXBHX9VJ%x{=lknjgo(A0S&tX@FN9&1n?t( zAL0M9_bu>I6=&ZkhD%f=K}ETESuH{kqS<gu6g4qf*p&n$H&MY&NH!#rWYc5=5d?w( zWL;LNmx@K(Sgpmrw$j!rUaCt$g0<E7*4Lu-67OKVP_;_cn(zOgdCunS*$rT!etf_0 z9mxLAGtV>6JaeBjXU-hxBS7DF=!-xfGB~y6N6^XccjSwnuIGwy3NxPdwshcx7o5fY zN#JDn7kC89OYC<Ho$C(fMAH{({KymTwa3%a)wkZo@l)B0hj2{8zm-1eT2m~~7m$N! zm65<Mk9s<>MMg7jx<H~kpSRy1NBavrMcsjvp%>=;5^fl|Z;}slQdgDsh5zF$YMvWV z6dWEN%L#9EB8my=M)J&O1$cWa`r`T?yn9!PW}*1uTX`vs`gdH7!OdPP?qfHr2)E-| z^QkTGek02QP}i*0>UZ~54AB?)^f86O-&I4)cGtS3)CU+<dUsU3R8g77HU)WT_nmyQ zUJx3E5f$(6WrIjvc?{OYCWiwVC=ghK%~J3!3|;Nu@g%O`?mQf@!a2nkFJZ-G5O{bS z#D()suv3}cwtDrtFc?k)CwBe8%`tz~(}4*E!M_#+aUhCfch7g&m5luYyLy6S*&MsJ zcC~qOp0~VziJeS5Wo1X|1E|7#@ggRB{-8dyAf!ye>COXSRVL!b`y|IDyTS#>;-~Pq zBV6I~W3fH$c~|)O<M5od00(lo_2G}<YfixK>2NN>;N{!_>ZN=2d>}tOb_^}b5BJ0F z*|9tF!-eB;8{hA_3&Ue4xP$%nfPqJ7{houMQ|L_LqYn2&)!yC<`A2IClm6cLKw;7+ zg&~#6e5lf0h47wz31vbm(+Wek(w4%|oo)cr8&XNc66;w>|11m+L*`)L)u%4Js-N>> z>Z+e%YNH+%&BWs^Ou(>~I52Mj7cA3G-i_M>wXd7cZ=tG{4{6?$`35$Qr#|ppK@yfc z(|SFNV0h6*ZAg4+;qlnl+Z8Fm$)GRq&P8=l`GKUcj$$1X503{V1^<atUs6}zi!vy{ z#~tu?Me54iL2wUP-scfMYJR$NSV3?LH+|u6Z?LN<)bE=hPB=N~S-fNWO;NDlvucBA z9&aB@UBN9LJb3nu+=15v|KtkKI5H_O>1oUPJ=iasg#CQq;4qaVJ)z@Y!$~;Manfse zd*}%GzX<=Mus0C?6JMl1dK$GUmK#5Lo;PM>xP|LpVq+nwZG-PJ3BeB7_!J&x7hs7S z)&5p4#T9T~`Gw?H5R2D%OAza|y|!>|`{nSJ$cPvp^}1l&H;peSy*EIwv^G2)!;`;O zZiJ5BuN39H5hyDNK8<+)jI<SU*D(i&&m}(fFy_l3SEhTl2eDwE#<z^-V3mFVF8HM8 z%kXqq0B-maT4G@%>DbzauKJtC&3LruO4?JDv%4|u4yiRvq^^l|%e>k2bZv7beSsm3 zb*DEzKM!Rm{}SKPOue=Zd$_xwm+}rZq~6Kr0u)v(w|s<kuvf6*J_Vl*8HDtr*UMM; zq`(x?!Q@~APNzsuO4uWrcburexXH)u#ht1p1RETwD|tvyez+h52bbuUFtb%o?I?!v z=BXWgz{$G~^<Fu9l<xdp6~T=SW@nA<L3IvCAS3vkr9K5Q^_2I$x8p=5yg$61Ri*p< zj;C>c2cwF<@~zsgXXKyJG42QlQZOj|j*Xko_rrmslf&1f;C=6Fj>b=~lspt{(o1-` zKP4$#cr<#Izu{fh!TNpgVT16#_q%wXThVy!bO_$%ehvIn$;aENxN++B8u+J>#!IG* z1>QsH?P=MHSH53u+!RuY;tqT{Po!uEK7fHrovh9b<%{1cQ&RQ$9U)coF)xEYX0kdb zLsf&GUSA|rhKz4<5C?8XR&3jWlD7=Q-OnD>8ppWDQMb$+ir9s7)7Kv2SE!XHFL4Mi zpv&FqZa$OPy#hZL&(1|4xObSh5a0V2FXwii-<i`nftutzl4_Ly{todlr-mw+ne*R1 z%dLlh9B`b{f5gn!@zyBT1HOrA%6RI6eOP#izMqy`7+#X1TCXdDEX7=BX2g8HQ5d=c zjh5%1UE#=US=P%4)E9;NVB=2Usv`8~m@(-){bdekS5a`AEBNQm{^s-k!jJ>|3krg7 z76sqrmWbe9=jR2%?(Zk$1-DNL_4^|Af!C98$Jy_181@R1c45pb2)<SSW>;H5&U0*t z^$+8>-F8c@iu!_YTheBs;oRU2?MCucKT>-n{+`4TXz(i-T!N`1!P7;^+0FIEY!J8L zPq{x~6lTY_7iheIAHHFtT-S#8o12Z~%FjU^kH7z>qN5P*3&qAy5=6=QBRK;>yk~O0 z7S2=Tq#@E8Grpzp83xan$+-(Zub7;!4R>AJj0k^xL=9MIKgIyeTn%n2I}U#zaK)w^ z!Y2aN^3BDF<Y*9oAm?%rLx7Kx;3w_-0so7{y&#zOdr9zY0gC;Y#M2<$zzZ19S+J5~ zx05pg1jT+p;t~)S1IJM8cOWW&mys9>`vbr$NZbg58NQZb?f^jrD@i;Ag61@mcoW3w zKozDJmi|>Ckuv}U!&H(O1%hENBQXKQ%ZOOHt_=@0Bb%@x7SjNvKsjD;73o%JH~bL& z8SrKj$Kyw>j^G;gWNz{md>eo{`Y722AnqoM?mZBUG)T@=XyMR!9f>PJM9Y09d{{n< z$tlOrkAcc{ZMbO#Y`YP941=Aja=f70<;>sHU@2o?O5#Qk<m8hmgeDS4lBhzGPXP8M zu^a>=>`h`j2>dsaNj#&ja6$JBDl*0P0F9UN^A3IKx;BhV9>EKrnPI%3?Dh0ueHlqM zUDt-KNJ1Vj<D`FKN;9Z(Euv>5IXB^FlrXG%?q(s<@q$5j(c?ElkYQ{Q;$3pu@ng{= zwy#4OD8~zGVO=zSf**_RW*eg5$^4<?#c=!`%K-WKV`#qWX<UiF)A6S`&A1?kFMF!m z6y<O^hn(Hy?8M(0_)}s2g$r_CC1()IJ<2%`1Ub)>Guz5pDx9atS#Ra=9TJ9lM8yMw zg{I=^63#El8G@hFP0mCRtTy+Ma|wQinVd%9Y#?U^e(nJ(XDQ=o-tmGJ=T=JO;*YuZ zGyEBI@yCvak8;%K@QQgs*R|oxW>l8SQ*lijmf){9OOA<{kH6$|@UsGc$~}hP-uUCf zh7rLZYdGItQ$K1xO5!8@QS2-H_5Bn-YK97gOG4%`Ir^J~(R$5S6_w)!BYy$;W$^xH zF)!#WX|C2jhQSLq#`RRW9Di?^(k1Yro>k=d@$-G4a?v>RO<7)0b|F2c;b(%Dw6wdq zrYtWgyN({!v9ezvD;pW~eE!h!g89nhs*Q{AHxPdj5@Gx?Thtxdv$!}Cf4?E;6Ct>p z(HMyzirqtk=R}MHK1+f=OM%LDZ3wL}lCMo-!Lkl;yiA&n3kUv`Yr=1o(+uJ?<&B@a z@W;qUFw8G-!OEcA)A(gMDh_Roay|qR4Z{I84}Z!*30&6(S8^VE_*wY7ii)@4;%xkV zpTq$CFgO#Gl!YHAQHk;Jz(Nqpu|TB^=HY?`y@Nij_+wiBh(BW^{>phl7wy06KrrJ^ zp&Y9#iIYgYjc(%v#4?k_U?h*@*ANmlAXv0-^u^CLAo!x2a+UBQ=LK>W;fMA9ITB&~ zP=Rtk0zt7S$+-_de3-6Ww9c_il;Z_$;`*qvUo|5V+U>bOW5<(&G74sVb=u(E9kajO zFy!`i9AV-1=*%$=mY)_;>Wq#H(q`v8xa0E^b4}F#rXBHex4t-h*U@JUh}L!7z0fUJ zzXyO?fA_CF+}~24zJPz-5(jt1I+n=ItE%yrmsT6)RW-iahAMw;_m#J*wyrT?l=&By z*5lK|Wj-%NeMXJ1wASKjRMjr@)i?O?9aU4#!u6K><h$UtfdrEAQCQ@KnIF~bC@RIr zkDDA-4USrWz@Z`zRL!gQ86&Ez7Wk^GD*gU)9cqN5th9DSz%kF~Xl(G6I~G;?Y8@ja zvEC6>;m6&(5wF}|0mVqSL*+|V;OhNECpr%_!V&ep`Sm`0%h_Lhph2ekYcsmj>Znnf zV2o(2D=!WBE^Z9K*jZ9S4F{?-THMG7q!o#-$A{c~MqWUFUfSnaSX$lai(#JSm`0g% z99I~Qa~&90FKY1DI;IEe8_NQX^*)EIzTRJdj-#jwsjHpun99nMSY*c4bt2w_z$_KH zQm7>wYZuh|7u7m^jKdK?c*Bui@An4`$N3J-pw#!VGcNMimzUP+ioqN{$C0mUfzCZx zRGZO&51+$U$;3<R{jk)M85Pj3d5*eze>qYnjVAGT%DY>X;%8+h`cAjYP|WO0>#G8# zsI4xBQeHXH?DpUj^NB+{$9C7zB4jDPBp(g$91~S=VQGU_EGF6YU!{Wy7xBwy<}<zC zipJWq0CH=*zN9I*oL5y_?wMA!uXIgXSUh$57_Z$5*G1Ec@!9)n(BsUit1d0`Rr;&T z(MOE+dh04Zg;h?Z0S^3}(&}n|S!uvu@0mW?>vBz6IDI?-DNJnNJfzaYX!Qr>V^gof znF*Be-y$K-#0kmTe?nAwNPcE}y^DOM3%qFKjnx4!YpQ4enV2B%9?EMR%B8ga>S&>P zbY3K`J1&$@yy}Hi-P3r`lfRj-cI-*MCx3hRp6G)O-;>^h_3z29L*;MU*ONYzzo!@O z&1Uz`GwJFoeMNsd-toYhQ!q{Ox3|8m!A(Jukrc<T<LnJiZUW-?oA$%sBYdp6(#3^W zQ&%vS;wIT@e?;tWmVig8;PK(t34Z`)(AMyoSLpzoPSn^__=xa-i1ZIQx>uZiB{IYO zlP!N|FVK23Pt|w?^3fXqEyB+oruk3W?E6gk=11u7MEs{2N91W~tUFcftJX}7zqj!> z3%_KH=6_|&Kchzbm++PqZU-j%R{Pw-&y*SK8Q_;DB}d~AnBm1|Gjv$P-%+d78jcG! zCL`yp_P;Is%zVx7DgSeYe<j2a9$I4ECgB%qP8{Dr-$i#E^2cglxnKJ`CTr}l@z)7o z-G@RXXtRH(@YhYz;qM0Ds=rsA_RlTS*bYe4e$u9DJ{QWY`I~8mFV_5%dI(=4d?quI z{!RPg8#phVj$i6P{m#>rVcc)Vk1q+(@y<I@{u?tizXFhmUnhJXnrF?QiRKE!EFHd| zE&esaPrFp}QGMwk73&<r@2UP|3O^UY66H^w@JDO4ar#^L6aS|D#2*p<@E-K<5&qB~ z_-S$vd`u5~hwxcG$lo~oJ1)}!**+5SGq2G6DLwF;=V(4379<K^;??}8u_j<G-v_1q zGAlLz9IZc3Q&_gB*H^69bV-Yg3#S=LO=*2Ma70Q=>(@7ht43TFVHerDRNwKM<5kL6 z?`n^{{%Na^$Umk}QA^*oeZswO=yfA{D*dE_n6y}FO)~XS7vs#mRtG<tLUg7cO{q8w zaGfr49RHLv<t}Vd@lYST+Palm-vlj{P~R=!tvLX>$064$ax#3y>0`c3ME;oiI6l&) zOxSn6sPrRT`}NvhX*UV=^OfMuBFFJl>7Q)VUmTn7)PD`awcfmM{cLYslv^Wm9AA|) z^LI*1pS97_)b(IAWcJ>w^>VzWOL^U9kF6dspUM$#-H&uQj>B{*Z`s1x(!p?dAYA27 zbU2RBbSX!_r#(zNZQ+<Mwv{~_wHU{3x|9XBaFbhl-GCZI`Ch=1|I+dt$LUh$CzhvO zV<Erims+0VI$g?gn|y+Ns7AQW59)9n?^U=P_Z?1^6J(1w>u{V0sBkT|aD^?Zv}oT8 zl$UMRoEOlgEZL<MnE7V2kMZ<FneLQuoG;L&glyq1()q@E#>L6ak88C()nm$0Z>z|0 z9-*9RM}D`yv5?y(ax$Mt*e)J~T-p;lUd}7%Qp#+0+S12-`2gYeKB>cTzCo9A>Au4; zUxuO1w*Enf<2-~eWxg$(q=WIyU>)D4<vA~*+n;^IATt)>nx4|(+Epn0nE53A9qoA# za*pj<j`J3}l(TL2NPVE*wUpnX<<0)yu9tGuJ4obQR7z)ypK`B2E_Xk2%!fH>8<ir* z`3+r4@-A(Nsn^!eQ2#`Pt9x3DsV5E$Xv$maOF86Hp3!m@l%cc9(T=wvS1fXz2hpV* zZL=dmeK`sDMjQX6^>cot!kuahH#xSSr2StbzUDvcaJbaYv`a|J4TJtlk=s}MDTG|H z$mL4-XgV$9V8Eh}^+dS@@!kQsx&yFp8{}pmfPEi8E?4A+?<3yhF-LKWoXoen%S*zk z@`s$MPv%{5a!g-2<kCf7Ts^UsC*^N}{N`tMxy1D^7sZaFl-~yVozH1`&d-!H^D}|` zXOQ39uH`uf?Mt5Z@*0e38~>u^Ie()|>3m0fnDN-gH->u<;c{QmVw~5}rA)Dnr?&K0 zRH=ul8CL>tGK`E_g6k@=pBMB+z?*?*0P#QLWc*O>%lVq#4J7?*q3;tqAXqJUE)Wkw zGlmNe1^x*1alqw<ab7>*T3~PBGWh?i0#9A>r14WAo&{&@22%bFAmv{MQvNSM%0C07 z{1zbPe+r~s3k7$U>+~!KGCh7EhN*$`fxUpUfNuB~mT4R_PxD6s$<Hs*;df$QJsENv z@i>}#eh9o8c!c2J=ID4U1#^L|;GY7#1(*zExaTpyC%q8J@PmQ0_wSc$`R9P-KM17! zwL%XEQvQj{wA^|i`Bwtzf4cbp3-=#)fqoK5|207BKM{yqyYu*5wG^*AJcRok`Y!?^ ztInGwcma@lhYLRi$nrOYejiF!gT4p23RnxId<Bs4eK}J-sn7TXNV(mD+XR0FTmk=| z0a<Q0i2rKfwea@}766+;UjU@s=QDJ;4}qlL1-5|ys?aY8{fy9m5c(0JHwpc7q2~da z{#n2^z^Ov#0BQFzKvaSA)=$Sq6yOhllph5|l{s&i&>v6J{*MZ-5-b9uN}W6gIG^DJ zzX!YnbPDiJ=oy6jed6D-E^rh49|tnNyM(R=GQQbDUj#&7l#u~sxtsyK9XJ@M>=x`L z_|?VQ{}aL8f}4OpLb#2<YZxE!df*R$>wwn-mw@jAvb-h&neTmpET^}yPI4XaJ|Ow6 zK=Ky=SAw1^^eiCdT)<m_pJDx_H{?2iKL&j-knQm%!Nr1S1DU=NK&I~`AniRKxD@ss z0}KJX3b9WNxEHt>{5?S0@h*_@y#jOqX8{?{NZ{R|dkeh^>qU%bDUk8h0~ya%K*m!B z3;|~X8P8N8<Cz3xJQIP8XDE>A>I-DLp1VlL_n6?_f?s=de4hbX-kpLEivRsU+Hn_< zcH9nRzjqUGEieRRzt;j}{8s}R|AxuBf4UfWGw4(x)72Nqc)BKOd_wRc!D|H<3wi|e z1p5HbMfklg93KRHA4vKIp|=bDGvGw{-wH&O85aX-M<$Trex8ptJK#@&KLq{=xCVFw zkoH{-Tn#J&vfYgbjs|@ya6a%vAk&iyTn{`7$b32iNIjoisPpT6;1Gm=3y3Om-YY;P zA!7@09_WXG%&%VnX~(TV#?u01yQ~7TJ<b#VS-=eZp9~xU94q|efwZR|unyRjr}0mM z+kjYd$#?`<3%nQD01N{c02c$RftLWO#{;CEiGmO1YWkNz>bVO@J!^sWz?HzhDF3BE zh6?~GR|y;hoC%~{5s-3|fRsB2NV!o!>N^fdxub!U>jk9T-V3zcZXork&n*C-0ZqAW zK+0_vx%))!W+3&2fRtMaq+An_@m2w;Z#s~2Q-G8!08%a+NV$<fKkzu9vJa^211kH@ z7yE#edl5*vXMvP!15)lWAobl3q}=U5%KZRHx$A+HTLz?@A6NsN4WwK#ka8X%%WD{r z<#iH}^^ZG9*iMfGE=RpN0=O3V)p@#|ehOsx-9Xm62hLGjsWL7FQqRRe>bVg3Bj7ne z>KOy1p3%T%@E-=Go*_W$=`a3$#Q$qFGWx#+OorT_fxUo_2)!QoQ}AyVdKvI1psyDC zvN778OMth-zX13n;6xzp83&|2X8~!?a3JkD3CMWU#6Ly+zsb`6Zvbh}{{U&v7NJ{# zv}c3RtAVs<h0wQWYI}YFq&=&Fv}YNR_ACO@o;o1ysRYuVD}l5p56F1O0U7UULK{HF z`_<W+|1Oa6z9IBiXzVPPPk}c99~N9Hc!BUI0BP4~Anh6kq+KTiY1aur+SMOOyLtg> z*RIi8?{5W{33>$c1k(gl1phiphkH)Yccz}_^#x)G$oS((-7jwzyd_=t!+#yFu?~o; zl96_Xrtcf3!<_|WdWQp<-hX{h({BSw{~E}2-V0<pe+*<gZv(Cct^+ciYk*AWG9c4A z4|pnYDv){x3x0UIrr!~K1b7$t*8yqYsi$fCo^xoqHo*-*%GCfVcLS6sBffMX?RNkf z&)-hb@jeZNXvP*G{p*0tr~ZO}Jz3B9&jr$d=Sdnj0^OkR8LH>uLEz1xj}-c&A)3A& z2vakr0Xc4r1>TAL$N)0@ae}W7*7R1v`vhx&m?~uKL}y5xA-MBIt>+=&2>9O#Wcscb z90O!}ww<7Ht>C4CrwYC`Q1@#u3qA>?o_CJd_C5uqy*~vq{>udi3VwQ=zAtziSO@-2 z!L7hWpdSVXfcF4d?soz?o~#321zZYj0yYZ27Dzol!Kpy%xe!P_X9KAx9Y{Sxfz;C* zNIm~LR`Wjx(!T>p|DEFhy!byM{tt=&13;Ej0En#1m<?<M76TdH4P?A|K-!lr*fjvV z;6d*OQvOvS?ffH<@>_u%PksYrxcdYffDBg(WVo3?hPx2RaOVOUE*;2lrwaB1E(C1= zDgR-bmVXym1G+De_CJuS?+2~~GM*H{=lkpXhR1+qxbNT#c`V=6z;wu64P^OO2o40^ z1p5ACG%ganK=3HRE&X(Txd%vncLLoAw?Z%r$oli)(Hb`jt_D^>-VJO8|487?z$D<+ zz@nqHe}5qT`vB>G#gRIF7XleB8A$$DDVm=R^g(Yrkm=;!SK9R@GIu289tD!W7+4PE z+a(_Ozt~5kL$Iy4rf(7CS}WzaCR_=8N$@ejNkHZoj{_wBP_R^RwBTn)==}OCkao2L zS^s_poC2IHI7smGB%M!Vfh^xo4Q=<Mz$(zF3kqSIO4m4G8Pa_+korG^-9`9c4Ekcj z=<fzz2FwNC2+Rbc%j=&GJRRr&W&;NS&jg}c@nwhp$VOu-kjHn=1a1VD0$YL9!)Jdp zfNOvyz-IBU1A0MM0&f780H*=@%E6VuVj#ok0_Os=ft1Sxo(D_^o)2^YUBE%WJYX8| zLSPE;0-yoR1@48N`M^EE0^ly-bl^_l7+^aPU2FdxKy<<VBS7R&|4qO`;6~saU@K6i z3+M#B2ABnG23`WJ15&;ccm=QoNcm#mr9d~3>Bt414Md)DYN7HQGW{K(F9$N8DVGKe z15<#rfdHj%J?bN>LZ5ZO4e)OUBB_1&6*2nPiGPXs=L)hOQx5+WcAy@RjtI62HVc*r z<_bCl4Z#l7Zxvo}Gm!Cb0@AKl@n0|g>%_lV{7VFL1+#$+p9y4mhxi+U9cV8qKEcgE z6(3N=C;rWXO~S7eeu?<c7XM=L&lUe{@y`^0hxiW?|1|M8#J>ZPD|-Z61^I3U{`Xmj zA5}i$-z5HZ;$I^Ev&Fwy{By-WTl_P{-y!~k#6L~^85!-^iyvI}*#l&}9YFf;6#sVd zkBI+f@!ur=t>V94{MU(pv-mfOf1UW3h<~o2LvRp~cBBDmhavtQsK2=E!*)l0JCOW{ z__qo+3zi7x3OWSYK9qi-(l7qUX}T!F&I<zO{<t=De551j9O?3fHusO+Ci3Qfua!cZ z`@60b+T72TEws6R>sX=9{aPQ0esh1;gF>78v6cvJ?!U?u+T3sTj_5P@S9J;B-0$>~ z(B}T8yM#9PGgS(0?qB+E(P!>QIz#CD>vVqHAoAvZo|!_M`**%C^5%Y!DMFk3KW;-u zm5PEj_d$I<lyt->$<z9WVmu{n?lY=H|3TW^7xqj)9X=PGF5Pq$-Z0F4VSmCnPyOaT ztu4oE+T6D{AN>RQ=03buq0N1J_n_>_XTL@FcT^P8=DxO8(Qob(<Ghx9b6?^8$7<T# zrx+fnX>;G>NRc=9DXtQEbKm21k=L=~`40MDmHuMw<C6R^_tEi9TgAtqNOz^^GxssR z4nNvw?xVRx^4Hu)##byEz7GC$6NGQ>Bm1@RHwmBTASihZ)^x{9d6@eaPr>|>@tOM! zU&DNiw7GBbEt8MIl<pTwAI7%xHJx&d)^F}J`atQAsKJ{Or>OKr409jfv#PuzhPm(P zBcaWGRM%rbq`l_8t4DGFqU^^YOUD;1NoNZEp`_2;=QS2G<eU4#Zb3efc8Gj`DW5c< zKTg&Bh|qt<NKAS4t`~HTlk}PUtR{%Oxvy)ks$UVq+{ZOqXmj7zJF5LaA0`oW_p&}6 z*=(dQ*7S?4ub?|H*`-@X8aB2!X!?BCFYxyY|Em)<oh#w*V*Y^NEVOTkrUxz2;a6eu zLw=^vLq*;#^p_%EBJ>lu-&OjA4$<C}W}|hH*7q3g1Dz)H97Ur(2tAVaf?p)`BPVLQ zMCdh)AN+_Z&-g(%H);KEU;rT9A^bMcw@%W3m&j)dT}XSWPr|p-o+Bg1`o&t`Ii!)F z>l!q@i1vV=B7DEfkBBi_=<^sq_z|It`eFTm^(kM6_kl*0i@GP!KCJZVXg^k(_c>NN z1?jQUTT$Pv^!#ID=~i3#m1y5q`M;ojS?L|N@Qt?cxi)#eer^r_7aKiA&(EUiea)s{ zz2_L^VoqyI&)q{~^&e}qf4z<Vxh*{3ytmr-gCk?<Je&OMHvT_s_Aar}jkfapE$WIj zzMw7t{$<M#Brit(V)S3u@F81$@!9zGHhYgleYJ+)Z7Z)FTlhws{?RsjuD9u5VGGau zYHNHC+S2==O@Et>KgSjxWQ@LFU_N2he*^kQD}9$u|4N&_Yi#y1tTlXrEj*fY41cH1 zUc+1Ct0}9y+VFb4Wlg2tKxMsuk>Rc5kN5KFfgE|gG2mNBkMinbg^6EZ;+s~7!Ru8M z%6$!idjHifZ7ScT`uE;MbB-(bRg~gAr^2e5sz6a`lW3eWmhb(IQ*ZH&D{b)9226&2 zZ;M=4Q<<-hubquuR9PD3>$j+~@K)MFUm0Et^YV=^yjogQ<FEA;&cmBy<f%gNR{Lt_ z2P(bll|ZZh#P33l5BOEII?YxK$Cox-==WEPio^N6IA^w$9A2xHH|Km}HZwMH!n19X zQz$xKze?*VcjW}|=4V5lAFmHe)*RM3;0%=3&-dvU>;7LbcmleOYJY7sb1f|+yR@Oe z-^dq2yW3&nBFxINzU<rmKIr}fj?n=<`W@|W5wajll%tFDnN8K=>C7tk*OXS(>gHGA zj7mGl)Hl`!@HV-P({lxl22Rj9M0u8ci~3CuIJ5Bfve#eXRc|jx8B}EH(XMj!#Q7F) z-9}X$&dtMaWEQ&5sxmKnd%ThDDdQWt&a%qVdM_G%RiMFBW`7G89<iB~xIz|WTB@FN zOiX_s!;38iYbXon+mwQ-;;=3SF>=N%)=+CZ;S^zpr$^t|rek=0O?8}i%v<cM_cQ3! zDTi~i$Lp@yH4Rqg@Wp2w#ZW=J)x^mhg^(y2_)Shly$_v*#aCrfcdui3O9MD^0_m?^ zRHL#%a^c^q-FPFss<tZNDxOkSa|pDR*46oH%at~ZY2)?m#ZwXcj(Y`K7hVvTFxJ@3 z0Ohd(%Hsl{Eti%p@Rn6B@K%&oRjW9A?pkvKephvMRUHQRtFGFQtkYRh@2@e%r%iz+ z6HH11TRP$Kc)`7DG1Nx2I-OTxT9+j$hvf^Q!xF-U0|5eKyk4i7)*0TZ)5pae0Wg8@ z{)<XW$f_n+l_hhLDCyC}+aj9pRDP<)&GXI2_=M91$|@0Bd7-FG4^*iNrBuy_5_faX z@%D2?P|*7imDwFi%i|WJ#=p>~tf<Br8nB_d+8e!dfd9<eML2K4I}N7>)KKnn-FH|= zH|4AP4x6u~O3cUM7Ue1$+^VQZ8f(#sU@GmS_vQNBgzU2Dkt$g}sUGF!TEI3t99xI8 zGhD?9d0CnBOB)*+yjQ7HH_)ooIWVShY*{C$*O+!URL!q-)l8eB)yEd2_B*JSURB%R zs}Hzp(9~7pEfJtfnZDLr0gLxR#VkoPqc}KS(H=%60)vOM+CLwoy1Mbn&x$4loY(;b zjls0Ql63ga6HV6Ei01D6w>ngu<1yCj(dTx+8ub3z-URx4t^uB6bQbLQe6>6t#amV3 znO$1iP@m;QSKZ*nkt~Z)tG!idFY2U_8R#X(spDxH>Yd{uQRc733<qbm@GKw?BXW*2 zrOlbnbo4Db^}Y&Uy$>fDp_kDbTnk-eIaIm8$A636&cpI#l(K5q#mH)9r<yKfI_E1} zpzgmLzSSWz=$&VH(f{JVCDqyHVKDnRWo2x`qS89oG&A77`p?Yn(~eLvZ2dn5N2j&> z=jhn2_F&o!syM2lBrHCga2AeE{TMHfuTiPrS0b{zyK|h1qmG4Qw>~|~614k%dV-uA z1Q8@pE4Q@1F}QhUtAu@-n%nc}T{@k~*sqvwbo&=mnId8qix7*%F=N(L*7~xhrqX#; z3!PkPX{f^OD|$0^kd2zpxtJuIq*LAHCKT&Abz0H%eH}2QqVnulVwM~S6muJ5Rd2gP z(JZYu5o;e2W^<0D;;~I`R6+NgSXD+bv!VS3U}?n#n4z=Fe&UiPpAxb5ksjv+e{J*> zrTj{s@5Mud;*LU6)><kJS{Qq5wZb=p{iiZPTW2}wid9ADbFAk+EJ9AryXvZ`sFHCf zU+q83_7xI&Cw<BxIzve(?$GPh)!A}?%(J@~na<t>44uXCjKlkWF}gH{3YV#l94p1? zUehna@UD^@mk+3MJ<QV+oRO9=!@jkKxSajg8fKZb?y#Ism=#NE@nLKuCO7Kt@$j6N z?K2<udum-wPZC=O2NX8ivmMIQ=VFXH#ESRP|2sKnY^=tCmRMb|%@{GYkC`!Yc|_$r z<m`7v(dlOVT@8ko_*KwM>r|A>pjxq>J?ce`EG}^1k%=p2T#iO$UDp_6)rOg<sV_PR zeK!XaTFdaeiE(m%zO3bW)nS*;9K-IF9p^J9-YYBK%Ng%AW<s2<tavYHyw~{naPeNw zc(1H+aRHt2USr0_OT~NPl_-1GIODy>WyMP+@N#0v^v-W;^48&?O@D1^HBPSeF3gMz z8}BnF-YYB9_@49ZG2<QG&N<HM%yN#;&T%>%<1+E%$jT(wnVC6$>{y3mOm<Fowh}Kn z3Qu2nQfc*cJZbQi7njzT*6<YIhO^4*>dx}xfjiuDUw-%vwpyuU?D>2i+a!z*?A0<H z_=CeXB%_ja53b}gVK5+^NkgZ>KWrON4iAfcO#vYQUhfRo>>1s(dG*hUas_=<Su)o! zwrazgO&Oxsi=4$mL^UdhrfvGpQ{G0d2DKSoOjJJDeiGwQXk}Q+QLEo<F?RcMMc-y7 z3NANK?RPbr7R2sb&|Hgs+1kghZ*PJ2$2K$N_PW)3P(tanM+scuc95$pQ7^BzAa4e2 zFkPBUU(FVeG>_KN4EwmZ!|tF@KaCQG-M&iEH-mW(R|$PqhwXncF5bS_@`y~*;-jQ4 zMJ|d@qgA2Ti&K?LyM65G-6QsJKQ`T-BCT%+(tD2fiut8|HFc$B0dJ#T;`J6v323qO zLX9QZw?vnYeV{aTeT{mbgkCX8_IiDl-U_xTvf}IW8re6vQ|il_nOa{5+8whL+gmDC zK=~O4RCS@BZZV7uTiT3WkiP|(&V6%uHxA(pn5JARe))%_^IZtO5Av;@{d+-89(=Jf zq%uK$?F%2-(cg{t1p97xwHkTbClA8c-p*h|_ySm3QE+~mC%k9~{D&Bx@TEg>F*M23 zHaV9P(T|O#KICf6TQhmE3f>h7g4#ZLHWX!0%+vA|6#0vxs3b2qxdeL3^V%kt^C%Qg z+jZ+G0~gg6Lh#_^IZ6e-0Dke{RZj<tT2l+Q<ZZuhBPEN153~Y2;fFT?^4hK=(0RhQ zJqXAPUPplL4gg)O?(6P{m#M5G_2WoI>T*}~TaO^rxBKv|#X4B1gO3}6`h+jd@he-- z|K3GUGhj2m;;7PqPlbP$ui|PJ5l{HZJ&<&V8(ZDsTN&0JE^5Yy<CFpz)hriEuf7h= zZRK~HC*aFe_#oBmf#KHgpYeOz?%>jmBB~@B-^a(wTFvidwYj*rnyKSEK+LLUAhK#5 z09i#K16g&8_94JB7Da>{I9qnDrJyK;eoBDcNnz-32SR@bg^=U)g@gXLwGTn`^YsZj zn|^-Y$W-XwyyW;_O@3qX$_wz(%vSiOGmJZQvI^I-HO&+Ji347Uk(~pg$pyIOoVAaa zSGZGaQJxKZQ$Ed0U4EUCX}hkDO5maq<NH#rp5S$S&%=xZDWmNm*HD@{2V~As2ssC! z0CP_J5X_vzC0!wk+Wh2{s>j!@rL5>g3*g7IB9`RfOIxj*PeVv$c<KPx#=_vz&87-e zf=FS`7lC8=*{lBes(4p%dMCbF4s<|Sol<rX8Xk_&W?FPGN|<j4tz^%kP*RM{K4?o? z4_ZmjCU{n~6|01Pfe-AOt+>Y`wsh6!y4o94@kO*I%P06$czzZwd>w7}gr1B5+&OKD z>x<cNu467ixK0Z<p5_kWgKuqJmpD2{YHhIs3AIHV{&g%kXiMu+TdY7&+M1~b3DMdj z03;-VZLtCgwVB!05<zcq9eZFXX0|iYT5-Z~=&m!t*4Y|<k}p;1>(EaO23z&F)RlKo zTj)u?@QB_yb>&LX-QTBV|Lh4Wu7ort8{hV5EuAy@{Xnzp?@U%ycmJ<FWDv+Q2Z7V% z`+xiI|4}ZjI>8Y_=*bQMb8=){Dcc0_eP(tmokz2;(S1z19=0dfK@W#G>KWdxXSk{@ zG2FyTFo_5)&-JvlISO;S8qfBG@Ga>s#ASAK)MF9Q9bJ@bvBwNxes7TT8+UN8J9G@J zGw^lTG<OgtH1TWJ4mN~-X2&_Vt0Wx>1UTk)e~+-I@Wlw9d4S>bW=&V$lkTleh`@wo zcR0Vq9eS*pM)lAf-Qgv<s*d0yU0vX7scA*4J`dol+)D<r*B`o0m-muET2Om8zE45q z#1(m0&fU#Od4aFtVusRFdNProv;$0!)`?G;i$3-J>>1PXwaHxb)7d(y{9LSSr%WJ` z=<WHOJE}V=6g4bdl9qS<q`_<Q2j`_eJZZ?9{2^<~hT_YVxwM(W+w(a`JcA@Bn}xx$ zVtl-EPB4ECzAax8L>6w@<p}1NyW3jS1WN^*ZESDZ$RLHmyITQyq1Bwu1zY&*39a6w z2>z<jEu0BLK?i_N0=vVH?E&QpKSWU3yS+utn4q>9jT>q??FqK<7i!ljg1=fVXH8Jc zeu_>4Z*NhvBIsxb13Eah3AXSTIyw}=U#){PBj{kysdcEpmfp)9Y;mZ*dUYmy*I)|) zUkP5#X-(>Y76KI10ki@&S%NL}U_yXQ2mlGeFB75&{z^i4g@gdK4i(rPZgA+iOk*Ub zOqbebE0{PO&};<?)ocZ`n}1uwZzHgfW9vaFX+^Fdw30oCLP;_5{GcsqJ!mC8o8Vrt zwOA$e3wQ7}>4SQnkeU@2{ldAfosGv}wvx-)%9VNExm#6ePjI`mT6egGg^510gMe`* z(a6Cb0bOYw#MbRoY)KmWOmzBN(dob5`0d7zg#F#jJoI=gKG=oSd+>$&;8!~J;ic=H zpUdUI6s%3*me7HZwd1yKeRM*ny_D1%R|FM*h&w!eD2Duq^1I#@L6?aBFG<;q!4|xH zj2il`Gt}1|%FT3#f5+R!F5I812%^!ei`0i226u51v0nTKt{kUqamU+2FC`UJwv@n@ z@~AB#R|LH+`eE3jvslb2hB>nlKZZ;(hm<lWsxTTq&5083@W3Q(OkKP&^y)U|x2l&8 z->kZ5Gka)~>dSRcO~X_bfnleh*0i!71XmTu*hWg(7S(StXX*MUct>pJRA8*isrB*3 z(aU0->g&TdtByX#IF1Oqzo&5=0XWH^am~CoKW%PioZB=msz1iK?)vok7-d-`-ZFYw zEK?&$_+~YH#8}30Mh`)>ER8+8SjOQ9mgUA|8!44-QT;KN;fwLTf1A~vbM@N3UGetO zOWF5n>g5r9%bqpuw`y<--<(S;Oe=BQ9g$&ddkY6E+F56@)4}VYeEi(Z!EDpcXgo1? zK7q7Fi}zg^j5d?TgvK^XdRa12jesa#t9h#Kah%jcs48BIan0JeI_i$L3sNc*qx!pz z3(j2^YM2vEePO5uw|X@@8s`*-magkw9E!+t5!P`cT>BY?Y5xwc{S1-${tjig_^S0D z<l^hvbHz4xQkJ_ym-B5W*se8&!QWTHHtYHkrrlVjdckStS8!_~IuY%gZTc35f4BEv zU0s-AqStqaW<t?FbzEWf)$_uj?gFQT=bT~We_n8gk<@rX{`P`1k_`SDM(1F2em*5s za7Nm8oT<}Ra7GGB$#8xiH9X{Mb_db#h14>eI}~nWz6Ph@UNpHP^-?V2jMSVqS2Kg6 zRGHVx67xQwJF7#kHSXXa++BZQCi5HOg(G*lx9m-JKk{F{(9WIuz!pq12f2gKyMsk* z+&K_c8I*eMJE*_AEAfK?YWHi1ivtykXm@{PZRZJ{Cv_g%IjFOL=kc9Kb*6Rp>Fn2e zL}!X8_&UV+33}r0w^T4*O7-iUtvMiBZ#z9vlFhC2oG8hDp>tG}WFOXfQj~O)JSIvy zKuTdq@84OCn|I}<<7U|@QtmBHvEH3#vdnrmMru^xbhEtnU*Do%i4T6EB0=rK7aq;< z_Vwm;Pw=zQ<k{|3sE|t|!I>`vDm<Z+h82ab8J2=t<sSKxd&@tQ-A`D`=<n{F?E%k| zX~<5U&fr#5*|W}OzaUj!7O;6sgIlc-MjJ3g0~Lr&G!{>|U>Ir?>O;;~ff4L~3d5D@ zh2gr~)Khb*vM~5jVek_jRm;{v9?Tzhs|*S+Nh{2GFMwOuvBOxQ+@UljwLL#2Ddc)# zWu$QkI<IENjZU^dC&KI%!i}4|igCZSE#1;4Su$doS#@LXucjA!g5S8!rT9LU8Fx|e z33fZ4@ak4V=!pnBp`Pw3yK}}9T<y@|igh^E%k~fsk#K-OBzp*<C(`y22`$pXty(w& zI53NNuZ2j8b-22Hg!6=-$OKzuIIb;AF+VmK487#}uv3;{0%uy*M?690t%F8Ixc;Jp zN;x1It=gOjA@oECpr>RM1()IR#U!kQJRuX&gbPUK3|K8ZO+w9ChDDF<SoHWJFp!nR z!3xr{Ed@91m=o(22`laBCc5wE)&2K@%txC>ApwWUeDt$3l`ZVNY{M|URM~uY^U?2X zV-C;x=-VSzP928x(F$!DM=M(yM(2yF41e3f7Wv)GM@OZb!$NrAo4A(2)n*^ZTUE#Y z@6ShPX(Kr~v>6$lFX~KO$1eB(&-rM<2(wVF^U;mN#rJ>bqvpizf9IoI-r@6Z%qR6^ zaR2ksgzGzcJ=-1p)Ps4Kbwk8XPtI$pE05@f?=0jG%3CvO(DnI40Yg(C&L3Qn7o0S> zC|rSI9E(jD&j(`R1}jc&ffF#WcNJqg>WXv@!hQfwDU8nk>cPKy-V5#^+-kML+`{0y zs&B&N8+U_UdLnV0Qjm^^FL-K<yP8%!9l1V#He#L~$}dN}<?axc#e<XPApYojn3zy! zH{ryn3CCcm6t_co-trAC_%^YtRrb6!t2ZJkA+?O27hJ8DYC?LgJ*XDmi^BItAc3iH z2LUDx!b*tpvSrMnunKcQP9m|qKv4O3y;`@2p<KQXwWwVU!PRQnCZt#IgK8-shH}CR zL)C;;3{_tL0Yk4>PXb^S*YrazYA-}^wOX<X>E{7K^>6@Ian22^)SO$aQeOWNtGMU_ zs|fB;OD+I+3WU^jdAcxCJ#2to#Y!f+Ji}sDUjGrh_|$=A2tXN<Kp83n^n(kOAt;ui z@_Z~pP`R~YtMbBfiM16Tippl`7`UK~2UL47LAR}GC%pgV)3WRYy-UaS`6+1ADd=PZ z13cknSp8_g-*o+e4<6}QF4j*2LF9tSRdqast{^yRc2Rg)iRGSiAQrq!xK7la@OIVx zw4-h4?q`!b*x0W678KuHP`KZX?mK8_Shcmp+Wl-o_p=GzPfY4N8vE<iXX|?xy`H}= z_I`iG2bHYKj4}9CbX{{?2M(LU-SG~y%XZ_AKICdoeW(tr#=qZW&egEw&FiRC3~Suo zRDxwOl^voXREM>--|w_2;I&18g*C1^k%CQpXb2tL#-lZdf5&T!j&4?{2sybz-Exjv zVKAjzb|qIuxOTBBlDhJDP=&R(!tgKkT>ehpZ@8SFTh~XJ0<30Chb@wjwgOpA^90-6 zh#|DX4b6o)ds0`osD9zsjHxi`-NN9<5`;?@>Jr^~^tnuQIMh-eJRaDGy<7+L<ZMs9 zc7d9gj`L!BRb1|F;zBnvC*6`cytZVHg*9$MLLFR^hK^#34qjVySXkpy6X?J)baN(K zd-(TUAvB9guNLY_KrCzAn<phqjnc8SRTN-Lp5z&aTkXkJo)z0zi7jh4-AhqweQn%! zXg3#e%r>HK__1fgx)f!~><+SyVP-2UW}VAfeGzBpBz2)u)p?G-W@dDrrLUQ}ou}(- z*22yc^fhaB=TZ7P+Il)ib`H~Ctad6noyppR)lqw336Ngh%}8gTZT$}W8CHDI!Q2Xd zWhPKP>)(ZZPBT{*(Oh}morxA!_k`+P*RIBX$Wy9Q+Z1$02mhkiDx=!4sZIH{e3jH# zW9AfOo=ivPNf;R38x*#AsD(dl6-Wu@r?|0B=Ls*=Yjd$BVA=*foyRdkv%m$FUNbUt z5jDO)Pq4qk+^XTkOi*praOnLK``oV~$#|Xlu$u{~SXZq4)KBbsAjXeDvfBdB2GJb^ zGTh<(V)hHGE<pXnV}<afuAtuCuwtv46G^Iep9+3qcnO}IHk33k8Ega^+VV?~|3=G_ zIZ2DM+gxvxkmrDJtH?vHx8t7!qQ_sl6JrNvu{*J(+19cN!Jyk{d5qnrk-Caq9;RaS zhgPz12g@m9XE~x&qD$r&jf_$=)uYD)k5aU?sboSeV<AYKXhhw*dU$3y5YMn%86-H@ zl9s&flTuKRwhfZe%)Wlj@q18S5DzQ9as|J@!-&+8*ec!T>VPK1KCT}&ZzJ~h=z|+R z$5?_#3s}<LqL#EDwJd2rk1^Lh^2LRztgG(u%yyOMo#_q3r-b`0FAPuI(RpHz^`{H> zJBUdIDF`;qwpgv2x3J8*&FUN5o~IWh6)HGn)B>ZfeO&*J8NZ8N!KXaI=XABhDmO+1 zYkR}a9fwMO8@BE+8`|>I6k`7pR`)UHzo=p<4435=2H!L183n-wv$4OVnWAuys*1pA zh<=Eq;!#VYbMofutpciR$S-m4d;b)o(AlVV(1j!$)H4rQkX96$IIIZs!?Se@#q(LU z-mmsg$Lyy<{!%vXKC-(#CTRa?i~F+=Wu2>Y-M+tTwApFwXMdMjW|sbf<)zBgRy4c~ z<vl5;=83in#}<5|`Vpru6Z(n|p+2^c%zsOt>_5}nFygCaVYmVP{~}Dz^#dssemdxM zvwpA~K<l!|!^5axzO_D5VRVxU=3r(pR;0F~(D0&FZwJoQ1@>NGaDx8*J=UM$W-zlF zDNTCRwYSG;dOr6AzxK2h3{$O$7b$EYp0-}Y6o#%$@r3YLX{USS4)@4sQdcg6Hy>$w zo;3TG!qf-$x;G1TlqaXH9#7SDvoQMu3~Qbsp0;^{6NgO+_gd}__ksr^EehcQ3ZlR* zKsq{~m5dYf8hvws{d<Evd`O1`V;thsx}2{X--u?EdX&g#Y<v)NmX?H~lbAnBT-9CE zzj2ommGQ|esJQ+|k9jYu+omq}$d}z)zKne|_+n9LgeNpP%^loQIPwkE&89x^tUKqA z?%>S!)YUg20Vpod@8yB-QGwamRSL`B3piq)4=qm-^AwZiH^R&|yxJngF<DAOz2Sog z>Y<tK-OnitbKXx~{j$n1JTv}Gsl&Psg*>5D+PM1(aB-1RII^QKJUUrDi%xw2a}ex+ zz@z72<Bp=#$^Ynd#PruNBRZq!!$>tvf30yBpIf?fT<r_5;FCzq+|l)?uIyA%EKlj~ z@69^{ymEu`TQ0@NWOg>bwfiy1GrDehU0(M5*nJZOolmpg@d-Mueq_c><$Akwb}Sm< zPQuF7`>8+N;?8OJ1fMEQz3}~pV^==SdqiZ%3o1K`g70{?ypw!!xV#3{%B+;Ad&^N5 zFYqLN&3B6mb3R4wv)E&9Gh^Z{_TzrJ@hv^_MTd!)`lHtKGBI?aO__a}nzQcogysx$ z6or=IDcoCu<BISo?%X0&Xon|wrDOLNB$Qs4xI=i5oQnaR15+0Y5fbXQ*@3O7kS!SI z*u73=H)i>{SV+VE{dXz1EGh;Otj{@$g5|>;oeNBb;l@o+8mkda-2q*w9xAks__Y{q zZIhIQQidYmq-1bkjs}X&CiKuZ=|#bXFhCE}NUyo?E;HIvRauyGTN9)0U5)<<#<zo- z-%6C0d2WyU1F%N&m7ZNiFuQ7JriAiSTJ|0h7}~NoDUiM@(l{Q|tqQychXhBI=FYM3 zSs&wbI(&RFKA2{W`=Qkb^pCBy+Cv>$FsLZ!qtunRA>P8UuXUZar4_bpqAhs)4EH5l z-OqP!O!B0<uEfp8l;lT~DUF7T`*>*7l|8&HDev<>NuJQcG*4;)DhJx}%Zioy(9G6g z`!MV!LQM!4-Q`X#_`Cc0_g6;TsjitDqp32R2zuTVi*i0L3VxHisunkWh~@8in>8x; zxhs-{m7FaIJ-0pT%Tc0b8`fr`tpjFb!-~4yi{9RvIcSaz6}I&ob<go4`ZEujamb6| zNA<Odc4<6YnDa(z%TnY-cXx}P595@3%UA3&UMoy`3%$<5!RCnA-FZq6Y3*Jf)xFD1 zbT91<Gts@cb9TB@FWgEiEIQFAt%{(-+04ReoY*;4w^x<VN|fD35QcaCsqt-FcVSa? zQMlKK)Zz|L)Ki1P;BI&L_$$y?BU}4<&`<BcScyd|S9@Ww(;Pp#C$3m~8^m}%C<;wb z{XFi`Cb>iIy`EqZUPy4G&o18M3C_e{(Jpse?p_sJTkak~Wwbk-y9<5wF7)V)TQLk3 zg%+iBCKm-iD+->?grKFPgPojKl=E)j_|#LeO@8|>bNnpI`K<9{jCZLkk3~IUjZ^nC zW(`nxn3zhV5CYNtSTK5*S^A!wR~tX(S^$?(dn<EH)iM18UYCezzxL-TYCig;1If}! zvb~Ej1)ZvUkUNBZU7_h1y7`pEje!ZfAm(mm|6_Jv>aHHW>tqC&gaDHf;9>|*#owe9 zzTlwmSN3O*dLINagqjAqlbg~$-;xvnfxU!<DcH6*es0$rvFUM#rgEH2!5Dw8evKrx zpw0R|h3;PI6TM$zn)&F+(>5uM<q1sD*oUCr6dH*;o$kq*J7+5=XL^o`iuJ0JGb<lv zG@js842*bW)awfTft-XsEFbGDFS}dbOvXzgU%Xtg&fS)$;sdJq+-<y_!a%|#Y(d=z zc0Ge#aE<@tZrPihdhI>nTF2L(!cRii=GNica?_P<ZMhCXb-Rag@DRyZY;D>4b?U15 z?B>)hpxP;psk0|^3MZCX7$8%)Mvd2>^!!xMSC*OcH^psypW@NUrJi)t@<ZUdHr%wL z*+{-I=}IU&5`RBuwsZA^gqH-@gGro7VloKsLwk_3#u^a#PK0qciPa$RkrU%q5)-fh z!!UnlZMjW|<s|sQGjg0Hz7L`w@GXw-OF>+r26_-(8}2ZYhrEX?`dr)#KOgXqLla%s zh8tUq<kgDAYvtPU;%NMhrEYAA;g|P}(Ig7+Hx+-kllUe6Xu_E!9>O2R(n+-Ak1xJo zPvRU&_iz&VASgDB#9R<1z$GO98wAEL<8%@oBIY3RrHECN@FNpw+bJX#gP^vPNbn(0 z32-inBaxy3z#$}tfS}kQ5@SJB0;iJrH3&v}0*NO@?06C{fhYl9Kw>8HjVVnb(Ex%L z7$iDCu;^YV@d*fg|HF8dL~mp`PtACa#3>*!1u&i<Q3`?^%^w1hv;c%|oA5zG;kq`A zOdi3DS^S~n1%q>U8$TOqY{#E+|66{CWBL8+TJ#0~h5D#I(y2@8bO77ZT2w54ic%Hm z5)$+AHynS86Bdr2oQ?P!X>y(yP8m7e^LPsIHzXE-V5hQ)L<0y`Pkw33SSG{`B%T5h z)%FnxR;f$LITEHuIawgcnL<txh*3agTa$1uAm?TfQL7&T!47D=iU-7K5X${s!i*%R zKYmUC4kN*zpDG#rbZz*u8F^O8u7`@2;IB6$rX|dv<a6+|0)NW!1{Dp*_#3GR{;2gu z{HY%`43YQ<e-!%)e|<m2j~Ww!a7jy(4A=&TR@>d?%9Iy=c)>RRD|%GpkBv~dt_=^- z*0F9-wDm9aosB<c`%@(9@yDocC2=kO*7JhS49ldk$R45Rxk6k+Vha9fv!6sU{sO$9 zQ~km`T(FPXL7!IqQOh6krz%T1FX*~9gjN{I*CtT`CC)~1C(%X+{*-INZ<Nyv;xy%r zpS$qKl#gJTU*IA-Fgy){wkgiDRt~4g(J-Hb$its<Py*Mr!Ihkc7iv^4s*g@>193L~ zzRy?&;D^EeB(m_s+*4u~f+z%`+;a6B?H}0)l;Z_6pTmZ6E`DCo{*0I7-vuD?FwQ6^ z{|fv~<prI2hJ=aQ_uzkNe?liG)*9vbBu8xnzPHnTh4WnN8Uu!}##>rF-(O!9sI2kU z;K+1+b}~d8Y`oH@9(g!+s?1j#z`^wM@vY4TzUrz<zrWneQ_b<Iq%wbXV@<8M7RS~! z7}4`a9qJHgM`dY)BT(scEUNd{&Uf%sdBam%?rU=3oO6f2!lAzHVersZ$8>efb7Q^F z;i|9q*Pr7ks=^`S2sIVwP4ytc<4Lu64+82CQ>#Q{?SfkWqFRSKVB5jtp$$iRz26@& z9OpY!zl8!-2gAjF`NCx>0L>q7KLX3816oc)l`u-)a)PJr<U1aG7k`i){NfL?i#Z`r z9b`8ZCq{d4DmM?I!?AYCiT%;CxDaP=#@TPNhi8ylo!wrXif3i(WLm<{v-7{rX^zhL ze4Mlpr-qJ+JEzul(X?V5M~+VoAiL_SOUrzf{_1j^JvP?st*i7DR^ba$bl~U67b*Pp zp6Qd3H<K3XGt6}|5}!7?-_sbQd0>_wzTSZ*;F(s`Q-x3oK|zj*Eee&8to<j%jL@{V z=Ytx1%ESb5qpVDQJ)D)BKpDy-Ue!Xg*n8@qdh$2ZWyhZ6d-Au3?}`3@J$z5;I#~an z^5szZoA&jj&*bmK)ZzKrz4J`kJQuHnQwq2V8q8r<Q}}gol!xnyUn2YvWKJ`Vhzq}G zKjAZZV+AJ=7d}@QJ2B}SaCEPz{X5Uo;T)WA!u1qBQ}|hZW7EG^!q;&k3O5QdTk~fv zryy{xytRiLim7L5QgWPq5#BPw+4XOh@a8P7C;QS))8VJ<^u_6~J45q71|*8Vgj0IB z?U<Zf?JvyJ{+VZLq~$0d@imO*3$=ePC$?~021!(Yn}pwl@QLEj%uvCNKLEgw>NoPW zzxmx`&gPPgBxs3sj<Ym91RSgVqa}PUr<`y%;4hJV?ZW5inNWWwL+j5YC*s%bhaV9> zXTR3^S1I<b!@IR~{b0Y9e~<86vowDq>JQQvm;MgUvEe4z!naF!$9T=J03=HPI^o}7 z%fFHW9nO)h@kAYeo~E$UCH!38ror{m5NBVp@O!Gi=69@f5k67=wo3TXJ?L-WPy8MG ziGPpqr5VK8@8G=}+)xd1{9NH5(*wU)`1c{CwSMoE{A0bQOIlo9IL%0EO6$9!7s#}< zetlEcAq<Om82*ZXg|$#P_QP~3%R9A4UjMY!N8}&Vr>Ldx+CJglH}twOnf&AV1DCW| zX-zWqQ5WOvct{7Aei`>~qKARtC|7{Ly$2x2o8`2JwLbRa%9;A|TY7OZg8FX3Uz5n~ zE8fQ;w@&1w-o)9*e3^*+G4-*3r%UO2KQ>>cwDegU%@u9ONeJh7T#M~X{~eG^5jpnH zO8=8K{l&5QPP<+}xU{WWKgR_XZs-TGcG=2{`ST#-+or`hUMOeg<D?dq3hEzA-gYe) zwd*}weX!X@{l_C*%Aa+(p3=>B#=d6HpR^pu73EAj669w!<Q>mzd5$wN@}6$HKY-jW zk>hwnm$KECFE+br4;PM_|3~XLN6?ffKhz$kT^DuNv#$|P$%~rJaY;E-&Qc$#ccaL0 ze2S41yBYsIv~{P}_XjOy#KkZ2%;#$$-zxHE`;NA+3tOm7wd=2OwO-^ne$l1e9G9+` zc1``SAYAiH+8&N;$|Xo&FO=Obk&E6PnsQ<X^^JyH+RIwszT{>=E_*+6s{TW+MC7)K zc`0Am%6W2ZyJWb2z0u!DIF5&ODPQe79Lwhe#Mk~eZ9nU-a%MVh?TqmR5KqUeTAt%3 zUCNWTcoNj}83?!QH64!Qsd8pKQm<6{A(#2OmgBfem-4Yqe*(MuVGv!@p~G>!RpF9t z^}!Zy7=%7Re06W?a54_Z^_P_6bB@^}*Hina+(gLbid-&e<;-+i>P@*tAIl*|PDtuo z3%Qa5u<t?0xevg;S0I-ua>FH_X#29n+Y5bmw#do&oiJZUL(bGE<9M7L(|14Q28lk7 z=X5DI+WKATr~ffgoz0x_Auwnd87~2s0q?<l;CkTAzy{!C;3UI1&k3B4<@a|nAEEru zftSO7p`ahgaI=8qj{(jBjuLthkov#Q(fpl2(w7340!IKD{yog+NM8qJ{6m0Y;ITl; zA1U}Y258dH0<Q)>1w^(F{FV6M3tSBU<$~qFCeU6W<xT)H+%ZD;0WJakFU&W|{|rdF zQ|LE^eo5$dq1%MM7RYoj1U3U}g}w|(J2QYYkYC3EuK<0tU^4I~(7W&g#?9dGMFS;1 z2xLBlfXtUgK<39tAoYDVM)MyAE(cu+BtHX4I|c(Ow;uCzmcu$A{TBo2KNd*+-(Y@E z{htFFz8OgQM!^~&!(9esxbcGhfDGS-`v>C3KxARYPT(xq|7#$_T?4!nbg9szfwMsm z5c(C|-&_Xzk3h;lA$T8<@dX8&1&e^xKORUsdAth44Ho`~xZh&9*9CtJJQ?(IAnmLZ z%mY%-ARxmZ1sn?e2={x``!0}ro)LURa6J%3mQe;=1e^_IeR&HFumtpNg2M#&;QsOy z`2QTZ0{BzlTHud>tS2`B8UNKl##aQK0lUryvYw0p(w<X+HvoqKZv-9-WcVY1>wsUL zi7^u4J_Vi&`~b-EcpgZ7ZNL!dM}dt0XF#U+X5dZ0tARH|u3r2rfG5HKQs8mG0^y$y zq&-7`mB6EbwELeUHT|yOIw0+A2GYJJ;6mvCKClH?23!N20}Oya1IT>52uM561XBNL zz$)NCU<I%%9nWEap93lXF_3a^0V($a&<A`3NV!cw%H0R71bruvayJ0y0~>*qs|Hfe z2do5r8IW=p0V(GMQZ5}xxqpn%>HZK{3IBJ1lz$mm27C_4`u20+0^l7$hQAHS@NOW( zO$0Jr2CxEnJdkon11Z-FNV&bkwcKtX<^BSs+#i8`Ah#7rxrc$&$1@1Zfj<CJZWXW( z<dy+TL0<u6xnBText|C`7o4%}4BekREcgo`x~7cPK+1W643{VLU?9V_4Aa>8J&iL3 zJ5DzYTxQ%4q}&OD>rc~kI*@w%09E^QNc#hlehnA|J`H3&yA8;61_c)buK-;q^nAg_ zQ?*>RU^$TCM*yz@?mh)i`hYJ3Yk*sT^MH>7`yikG3s?{OUZHD&wBs`1GT=Et_A5hx z7?LuM0@AJ|!N<TX0eu&+7I-VL8h9;``j-GJK-T~nu3YdWpcnMlXnb|RJwS$g707Te z0)3#L2lfK}6p-N`7hDKrymNqzw;0Iq=K&dhJdp8@0y5m`g0CR68SW22hI<IeaCZY4 z?hYWs-2h~`Re~1)8SV@q!wm*9Tpu9Abq&$sJ^?b^Zo&J347VQ0aBG1KcQugV>Vb@} z49IYo3p#*Tg6;?O1G$fe;XWL!!@Ub+z5g3<5U?J|@#jP!%kOJ=E(88qaEstdAjgAG zPSoSmqrl5RZvxIlQQrofgK#$j*{>A?*)Glm&ISJC1l`Yl2y8^ScY)UecLJ{iJ`ZF+ z_cV~{dlJZg?n)r_&H^IKGNuA)XAY2d_60Ki{~W0Cec%<KJB0qL;5)}_{wsnn02%%^ z;5ER@fUNHq0a@RjK-TxsK-x1D$ohVQ(66D>SM3f+J-+~=YGzyy%myw7(ys3djsmhg z2LM@~y@4#3Pmb04JAo|ESAh)og5X*p>w7hj^}Phha794cH3`W2o(E)o9|vUk(Sq*| z(DD8W$ao__hW{my;qL`9-VH#8yGgJRNPDw@3^yFeaK`}|t{;%$zQLf%aQ_f|0LXB+ z0vRp{WVnSuhVug%ZXS@~E)zTn$Z#n@hWk2IhuaNgxHo|e_ZJ|;{ZVio@Ji6v0R6x^ zAmf`0WVl&C*7qquRN;)_Kvc<$<AJPKNrIvNy5Ft?-i-QK1k3@yw_xNLO)n7~FZlO< z+W&sRs|4M^%c1Atqjh^p2RfkdXGiIF698Tceg$wQs?Ka6;~fvAonIcQ`ELSMJp;0y z-6z;8SOc7eaAyK%1K&^4`d<JteOm<Y7W}BM*7p*S`hF#Nr{Fb$7YdFS{3kM#@x0z! z=hGj6wD%`K=F_Eu#|r)#m685y1oH*IN!I?43;qbme7YLQ@*fCfeShW%ot`^@^yj(& z@uMWMAE@jX{HfsWKn!6SOMr`jbwJjG*+O3=^f5r{`?aBQ1(5w&8Ibh}ZCI7h89<f~ z>WoV7<4E7RxX&vFeI7PQxq%*FE^sw46NskKKOKlB*xvyh1w@&0cVT~2Z+6N3Q5?oZ zAm4v?0eNi4bf5!BJ!!xKU<z;=kXxVVzXx_-0^9{$1?&J`2;2#TP5s+}l#2i_25tsY zZWC}ca3e4S*a{pATn~iJ{nr7Vz%{_LfX%?Ofla_HU>$G_uo9RLoDDn^SPVoH>hA_3 zZT)kB$e;e1z;l4<z(Sw{sL}--208_J2G9Ur0NjK8p!_ai5wHVD`F7xN;11vjU<8;8 z+ytcjM&MLnE0FT*fa$<Bz>&aaU>>jzNcl?O6krLE^2NZ(KsS*2lnXo!$nrlOm<c=| z=m1^>WI0kU4Y(4R0z_E!5?bHv-q`wvDpw5r0sM1;NMav{pdr|S_CWuLV5?xWV2NO^ zphIvFkowbr)NhFYUU<@f4}R$10aW@0Hv{p%54RkW-zxsif=xjD?^A~#@=L^jw)hu| zf3EmD1R03&bfA8!_yjit!RoUKsNxg<W<hREB)?AhCE}ke=nxzPq#WA=^%&y67m?9_ z50L&HKo!4Wt6;Mr>#>RtsM06?xq{ikXT2rgA^wBJKTZ4%@$W!+<Fe0AAoaEb87?CJ zt%A*hC4#wv4nfu@l|CTD1C-w5G+ng)6nH|wd|p3TX!H5^8<=#EZ$8g{PH6M_^_?Pb zK94?MX!H5-D51^g!JR^z&u_06+I$|{M`-i;=cf{%`Mh(d@XhC!i-b0xN0tk1K7YJK zX!Cj6HGR;ZBt;DKxo0uzH)-=Z^-9d=QjziIbLj}?W2DXJ+@}fOd@dhCMw0J9Cq;L@ z(hqrzvvi-C;e}r*^5(vSe<E)g-gMloPJ7Jf+H8-CK21wJrQ{>geFHAhXFlh@6Y~bj zoBIxOF)tt;eU1*hNSn{a*TOE+=5y%l`fA#IF8*iqC*+r4{HHrn<js8pe-eAm=iD5Z zDR1t}_>Gz0?C9WrD}0COTQ7X`Is5IxH}{Qj#|QP9&!Oij+Az$032fiwo6lMKDl};a z1_`>GF|d+uMdwU+vgBWh(7zY`9YT+Q4CT$|#_x)K=5y-z#J*gSe+nHn<;~~BBhkWC zd>GW|ss?D<d`|8YdGopc3@H!uIq>r$Z$7uLVtq?#HnK4|(EW_{3AFj0Lq5n&MHv;l zH2+^BpCa-tCu#X&p%*hh5Izlq6y4cEw+sJm-0zUTPUy-Zn%*e#Yca_nKO*!zk>4rw zKSh3z(4}a<D!xJ;-&ESyx7lc(tm*4%KWOtikZ-a+_r>#<Nt(Y)<o_x3aZC^7(<FQ; z?FZc<^a(;ognowhf!`|hXxc{_gDTwz=padRkfl4;l=o=*9+58=`csL&L*)IcJR(NA zq<0(bM|qgv-Q@jyYD&ZyB>Cx9`5iHK3H>jXe-UG&(7zG7Qs_e3hw#Os|Ac;+e<q<m zkJ9#?1sYX2>XJ~utn|B>BwFb$Hu?@5-G=<O%3p{6#7a*^daU$7)ORa=i_M<bj*jI& zWTUImo~+@2h5WP98*TdjXbV5WCV#Yzeik`n)ps2TEB&60f0vE_gf0HlZTuQr{!Fl? zr`bmP(eGK~Kg~|t^gV9l|Bua{Bae#JH{DjAYfu-h@f~I3znvV*M{&l;a{_7&Kf@M( zip@SZ+Jja86dS#_Z!G_On?BrI#e^SX)6e}aR{fvY>cdi-zTP(a6I*!dvg+G}`9chB z%U|AqTlxH~b6HcVH&9uRef0RA_w+yxzCVm@`lSKiLVA=}7b`S(?8bgSzM`?V%!A#| zwy%FD*uVQ9+fhBC+=oy8`mc6rGpCH@R{n8n*ZsKC22X7u0b@dG!=!3|X_S><xBb{f zmEC;3n>-6?*Pm+la;G*wy<6k2^%Ty-u5a>GCVH!Vwetg&UbVa5j9TfB+hsmJ;HRyo zkj3!vr41MQ{nZIL*`*D5O9AgB2=8#+=kCmwV)2&yWGB4OOwM6zvolayKi?Pd@|}#s z-Pj3exYhnz)6T>-tRO2|O>*={!13Bm)H89Id^1d9c7Zdh(wSB6uPMbFJ*uup87f@t zt1D5SrH)7arU#r^co)a(ukfmOaiR<=vb^JQm8&OCd5@fV-JHX<)<qK~24<mesVej8 z&zO74_^L_#TR7I&OZXB_REaIm%=biew}qY>?@+`=0KfPc_Vb=kOoZ{>eZE;sdZ<L1 zQi&4P6)P{c_<P`>_<P`>_)X4XTl}Vh-&x5?gfnKb;aOWShx-|xM7~p}9In|nUU%89 zX|OPd{Wjh@tni!D8gu0FMms-~Q&I2p#rUd}cXyJ^i`qps1asyS*KQIu8+*gV#Hgya zD&Q)fQdV<lwH>@^rFC__+Hz&uK`Wb3?`!bYFZ8*ri5ws8b`tbD2a<buk!~#BEga8x z3o$NHH#)}BvITe%bb+^`w5nPe{#`X4n1Fhg=fzL9clspnRo`js<B`R9d)1|5wTz_b zY~%c@np{=Nx>z~-sR{o)-+T<*Wu<|#O4AE<!QxR}T00+Pb+tEoKLEj*wS48)JI&Y7 zSmUF9-HTX<Z{@3c5u2~2<mNY))|Z>{sz@4ZeNA<~vVf1?mrsqgI?fNNLxWP1*7?50 z`(OrB%)T3{=GR7}I5=I=MyAX~@9M1f&&L3-CQYbOW<p|<Z2EpzReMZ>FQ6;;yaWZH z{d7JY(nc*=?I~7moUhILYD?!;qZhC6%q}f$sLyhu18wkD`0E#;%E<fSc&By-x`c7+ z1@DG>=Xgkz;eB%T`gRq9v&-PbX`Fu7++Xhv)R$HT8a&hUy{?>kUxlyUS6k*oucCFh z7P`i&Nk91buX5nK%K6gi%=Zhw+emd!W{H$DKwsH{!m1i(Q;$R50ZtWNu7%U4%<!VC z#DA&xW4vDHA+0+)4cS)x&ckkXqO96=F)HJKDi82Jwv6I6s6;XGWOHpMfcrfUmtI(# z<6Z)Hjcr&|TIZTJeVo<6_#1=+8LD+PJ_L#|njtBoNSPf|HE~jau3KZgctJnfQe*2c zjtkho5Y7y+3t0z~F<1$3T?JDzbu4i_bkW^hWoX<AkIocPkXS_5;(d##91#)AFahmi z+>BX0z5mY)nlXK!T+cqav!=39l{Gb$&Z}DJ<T6)76;>WFM5<*HHQjcpSYjoeYJno5 zn68Uz>8q*CSI0W4HHe+DYX_PoMkZkOV10H)y}w4qF>Q)<I-%6{5Jr{70SmKK;)Kn- zww<@2GRRCr>`@HeRXDEtI4AgPqr&->n34HhI0qr_GzX=^QZdkkIFzb2&>39IQqk+& zwVVyYs-bPNc}_R`|3h#*gN{U|P=`pLuI({v1J)!aVCZBfV8p57Nh95D#uCD0#HlhF zajJMINkUa7BTkht4&U4D=&B>CVWwL3FKxhV>mtm?R8nV|HRrG!h|Qvqns}Jn7oB+> zruId9hFJUddvHxmFYs@KjmCSZ4xouK=nyKk4hU){V>XDm)uRKPN=viim}%*ZL~Hka z`cSRwn$6_9jW4bv{Ew$k?q&bu=O<a~*#SNzMN!&j4+nf&)8zboS=96fcpIH#*nP6& ze6kXFO^A~kALrvt;59BzYV4ReuQ3U{vf`w&;=P<sGzRbdrY0|rgTsT<((0<f)!v1f zabe?q#>9JNaZA_toM(?2@91{UaZYEJb9{D=)8QDGi62K+Cb`bc%<*H#0>@`%Wh?QL zqtGIYa4uZ+bUcl%_T_U*d{$Xq-C2I<HQjSxe)tWy3}BmrdhU+x6h;RL2mau&9m%L9 z-GkeFnlKm;&ZME!;2$3ED~E^AzNUZ>0Izq3Yxaz8+Pr!k`(u=YKC0Y&hGA@@M=zt9 zU^--T8J4Kj^qf`6uFur71N+zL9!ElWxpS0le}UrC9+Z`@zO*`9d)W1@;YLq5hx*04 zeb}dD%@*2fby0n&g>-g(n{4_vL7!Cz_lZ~??r^w%6!r3Y3-V^<MM<Mw^fifByXfmc zdhNO>0)6@cp2*wnbF<*#9?@X9vCquvBwM3i@%F`*ZyNS_(XG{Bq+uV3HND~;1+TZf zG*B8PVQ*}DTSZ^9h_s5n;?X^(*I!dtS{Cp&>J?&dVL`Wclq>dK(X~p#9M~ws@{K^> z_Y_A}AAN;iuh&=Ut*FO=j@rwfe-X(q?(3$Dpq=n?XNInS*j7`i81gd=h^=Kfgh96$ zn!zINfP67A3-5zqZw$iyALiZ!KC0^MAD>8ssiG72)J8jMR8Y}`O~&obkOc0?1f!s$ zf=LKL(2%6b1aLv43CQ(!YFam1TaB-MD{ZmHx>1*sh>~bq8<i^VC|1E}jpBk!&Hwv7 z=Q(%oOeTO!fB)W3Cg1y<^PJ~AXJ77F6b(@2i)9R=xn^Gd0AK4#x@QXayo`w0ALHr= zE50kWvFstZ#mA2erBwEEFP7>m#4;aP$H!$NpX5Jdj!%y`#c)%It2vhVEgQE_B@VE6 zPNoZ7qJaB=aNkh8umI95C8evdK%reY0rw{0CJlW7m1Un-iaUa4;Fhy?Tw~R}Su-~` z5%Ivi%I&~9MZ>M)iN<eVuI!sv&>Ro0xoXvKe5ECyuI4uU&%p1`{AVtD=xY8oC_d}d zO}li`4(g8I|8Df$uI4^v1vBLr2)u4oX6kiA;<YF7+MRgqNW89=*GTgctU_$L1tcyL z#<d~Wwc*ui;>D_#{j}A&B^Y`%*3j@hQK)ynP-p#Kn#f3~Ypd|UwF<rCFvynucWdPH zR%bu199(CO{A%HDCYZg4H5`KT>>ss4oxB+M^ljG2N3Bnv!I}2ktPEV-bDeVD{MZQ3 z-4)&&7avFJ55sCp_xj6}I~L8Qn7pMyzxQVH&IT*~P&*V;v8PQUxaEsEWu)b(WU@lr zsF4MYKC?c3+G>6s8g*K>3XpQg%Mp5!!zfJ>U5nCr>(U9hy|q9%lX9Us=HJ{(rbHOR z++&b*?*XnSSd_(E2=wg=Y0Aq-1IkMz9>cv%;#b7Mr82ruT$VfH|IbqKdzCM`zHX_| ziI>P`|F23#xar~CKI9Z%V*r;B43-TaLpJQgB1n_1lP{WdO_5c4hcmTZlQh|IiMqJ> z|L<&=bPrT&ezPL>KX4DsfGmefFq?4&%o6k~jE}3pl3i~Vor&v6Sw-^_v2R#MuSioz zuh_{tdW9~R@rS-iZsc`_%KiWQ>=<c2DHoOWwT$HWxZh%(uc_Bq2cdRVdhxEIs8iM5 z=${+z8jAZi1E|rn*Ci4r{}WR&;0hUBnS;wj)GbmatMxr2L-kEZ?dGC*w}L~)bz{Bx zF>8=onZ@Bp*yG@4^ORcoZKWlz1~a!b9^HF{xqS-8z32d-W?!<RcLpi`Gr?3AiMpFN z;8@OtuU~O14R*4kHhw4Fdn5Psp|?`1?;gYzc!8GJkuXgUsR|>o^i2@qrZqx+1d9C_ z+&1V|%eYml)f=Vutd&u8G>|yBKTN5JJ_`CDB`a~U8WKab>*gvfU^is?cmZMYN)#v6 zQE`(8H^JG3b-08&Xcxu;S-4SqufoM8&IP#b?1~Y*`x098OEgrXxxaJ-qQl!+GR;(c zNvmQ@bUV~_Ql;)CVu=RX;?>3D9>n$`bK^>HPO5FU$2Pg1blv!H$%`S3lIqGteLs%6 zd=c40t7RBG_t>z$()VDxJxEEE*ig2wy<d6Tf6LLez}IX1(I?aiB-g8{`-uwk&{rI+ z-N)@psOysNSZ!efs(XX3xtjSz-(ys&B&&b!J)>#wRni)y$SiR0Aqt-vRyW__9yMG? z^kpReaBe$1LH)H_xeVi~xjHHkzCQyu>fjRGc3fg9cjdHnH0}{`GI90k+qm8rH<g>h z+R_nYTj;$`thnWq*s%5tyLf#sF6Kks?i5S_J1;fs@98RDPd`fH)w!jS_+_~>RL?{y zfXlmgy&40Gt%1wCw}t~(L~|FHfTJM)rMZC--MxFty;>iJ16f76i&ZDaS<ZXMi=1{| z9Ucxn)o^I&g@vaibaQ5{542nc|F+D)VQ46_MTvSS9C{Vji_Y27gg&h&zreGe4+Arw z{xEQU&)mTD{c@nvhk<kU`v?P_xq*>qc9=`XKMd?uywdmu!{U{51IHG3(9h;$AhV?- zu=I7@r%i<smQU7Zz(q+%BksUdky7AB3OM#ckRYR^qjw*5?PB8IDd^J)eegTK6Z-7> zW9R{WcAca2Ikw}HgCRMv^l-!geQL>VLU?<Ra_c8$J1of-dhR+3&I4D!4_<rL`VRv$ zcFmz&D53>;qSt9+?1s7nXFu^_;N0%OWV}7I)e0Q-^wz-nPa>uEisr_6b>alnda>E4 zJW5do2U<>tD_o|9dnS=()TLfapNQ?%YT4bE<F}SR(fD!iVYnv?tx=X0%8ng?B9W!& z-7O~!BU~YMPF7=IG_(yhN#n{y;64l-v*F4w-p1fn#aQ4cTX4Dfmb(#@=FbrmhtXfV zOXVq@v2>2PCu7SmkR0K4ExHqjF1sh^!x8Sr(t!xHjD$pUkDCe4mEiae!?We_FV$6S zN=4?C`#`&8%%XP51#1iZ_pR~cpK@ZQT%I<L)|R7Yt4#3k&ag|?BT^doHYUpHmL>4Y zn7IA9>C<paS-9!XA5c)BWd;66;(ulxp&Uixm!q&Q^eZCVHHrH$5o701D2ZQQz?46~ zBtEwk_m1iKip^DV^_C~?_fzHXo2Gww-7;2+zV?jXUGh5;?Tz0kxHAzV_p-HTT=^CA z&lOW~cU(}{B2KHy=1(^GLmw>MJ-?%Obm+stjUBy5r&b6*fRC&YwqmBk)CDL}j|Q&m zz<qOxdlGegBBD6U;*F>(6;bXzWfEWI|DpK$hB4*VAIu-pZ;1_CcQtcIM(VwKVRbL4 z+t>Lmc+jXWCk#G&Q1`WF52AV`9<@8Ik(ht@OwS%XwQ!iqk7nv166%O$N7O*QQwHi$ zcc4C?htAuw*QRz!E<m!HW-oo0gqM!HcgX2ph^PH9<%##gV{nbOwqGKq@iexZx|@Zb z(Kd9(4M~yg5#ZWQ_fp?@V~5)@hq(%8)ZV5?p6dF$RMl5OqS0)pRaaN2oBL9ELAue& zc%IT8CHhm|&dw0@b#QfJLzYq#N<dBA+NkO*B_QcuNY!6ve+1oST*LeCh%?Jy;w;Hx z@J4RnO~TPoU&BQa=S-h9@>yOJ8qL_si%UB<pBw|1o&caVT}4JdPlvpJ_)q%G)BXUv z$hhgbp(xVXzY8v|#=XN|lsHxB=57*+`A?wVtLD2JkMAu$H9q!ZWLG!(aOWpduGqij z8W={_h}a({i#RoY(!c3QlIAljp0gnuKdC!a*wpygt*Fm?A|t<yj@*QMI4|FaG2}G% zMC~_pgwfWX<twop{U!F2ERJFJQBmk#)2gB}*~q=;Qk6gG`xUQ3%(t8|OuJ1`8YzMx zf4cd3zQ@rcWo3h#-}lxYIK%o&NA&Kl$^ojM{?Z`yO57p;wfmd>H-FmX8`8*$RgCz2 z{cIvQJVh7E$Mbi5x8sNXuD*v!3`Ltuf*mm5hamjG8WOzkFAP-Ai7>%1!B<Y3Q}GWQ zrZpQ)Rw*9*>%aM(CU`#YD7;h9S!8d-kDeb&!p4vO?L*>SA)bd<zR&RcIezN-8BFLO z4+`+zhJW<$0TTS@@oz;2ZhI_%Im4;~aUEXh-KF&54*cj{J&E1mlwUm-khlQ^XZIZv zPlMnLdliU`-S7|nFkdBY_QOAXG|^8!2x_H*RRDroDK?tiEnI5uI1v{#EjLztq3kQ+ zq3@UYF_vN^evRK^{M3^J6M9rZ8y;3pLOmx4QAV2x{zb(CasL-YeVF7@W5$>7;m0$r zhx`OD<^X5kFW{6mJpFsf?I4!mMV^c$nRs*W_xhVL=L;42kOnW~H<B-W`fu*>4VlWf zBlwRGUk=6Z&m=7Tm?rGV@L*1L@I2pDkSX(5B(BEqRKA!;7y0-5HGNKj#y%V^#K+L^ zUq4q2hMNCB_djbe(S;Q?HMOzee0-#<sEN(T?&M%au&%y#HkKt;&u@s$uM95W$JpQ^ z+%v|Tz4X;s!MX~5M8c=XhGTsqqq4T{;uC^;-;g+(-w=d|>gphuiPzwJZZdB}Z6mH9 z8<e-YVs=%vZ#wQ6(<(rkD<>s9YT@DNkmr+esW%Mjd-9-{ctMt4xHz_WAudCkTvdZF zsxd5vS4#q?i|Wb_E8CUNX7$POvn%G5nFYaWTZgtEG`>^xHe@P)DsA|_E)GYz^4@P^ zzAtCNoKH~wmkL3@tN(do&$`3wegZ2LJZ-yb9F`(~rP#N#+Q7p~%zHmc5x%_eDP?7b zXC;2=?(a}_5bRhc@jy!Q6J#BQN5l-U&l7vrjOpZ;ihU3ji8p-rihexLkI#GfLH_~r z%O!!%S6l=2>k#{{LEN{pHNYd$H9&s5*z@KV+`kgm-1zpKt=~E@kIUz2{Ji&r<cWP7 zCeQic^K07hZxs6|<fpqICQpqJ)fsv8e}I0iVn0~?w~75=@lSI;JG#HboSV*k%*Vg> zQ(c9IzuEmI8{X8;gGw6y8973a1^yDh9^q4MCuo1y_Wh+h&RO~2*78{{`1t#G?2b*| z#x2?%%ZqYXxh*-IY3>zx7mSu1BhPZA9upqVdHef9W{>bmc^VMzTsS@neBHt)>6(_0 zw_~;opGikI9>rhA$D80=DSRwveEeT*KR%8D&tq`c`o0c6%b$8oxKi$apxz&WzqC*D zOL-iiH|6G_E?X{qESKupj@&5tM|_~=N;yp{_pjg!3ZJ=Y$zPcgPPylSdVC3f--lW* z%P${)Sqi`BUXb<RZx?=+XZ0ApCBBW^ZsB9OPU1T?`Mw#(+cC(ao40B`&J}hy9X<D* zOb1`^Bh9zHd~q50{K7X_zF3WV0WIXH-vQA{8g--KGBN+Y;0ODvb0kOo9XJ_$_W~yY zuM+wQU_R)lP>)ew2M|kZMy&!OY$wNoBS0?&9t~V9SS{vrfKy<84zL7xI&du9oeB&C z3xQ)`ej*U#<^A%37U=H-DK86%I3JY>JPP;$>f=%P+X5v28$fhEN8Jsi9{lb`|84=& zzZ-${?^+=JTMirp^ClqOF9g!Rd>{q^qngnk(A}j#EL}M{2E<aIljj1D0G0vC|68;> zNQV7x1ER?7$8&B~_<(eGDv<6@0@B?$Al==D_AUgx9*BY2sA?efE(4wlJQo-NT0qJx z08(BENO?yCDK8gDc?SY1=K~C9b_dn~Nlyh*UIa*ai}%p_ULZI^FbJgne;lseuK+S! ztw5U35%Woc|Ar^D{}{+{{0>Nee~N#{0%O3FfEJMX<pdy-ZqyNi2LKB|?+v70A0eYp z0KNe{5x5@6{Iv$i{Iy!_?*dZZCBRdFGl7TWIJq#8@fQM8&e4KFG0z50f%)#h65tRZ z^TU_l)A`|JAoIg}K<0-{K*sCyV*YnAe_YJ}7f648F8EU*^}ZB%0<aXwcsT%gJTO!6 zW4|`%Ila{PW+3HU2c-L@K!!Ue<`)4O-tj<&_ekIf;P-$>0{=ZshwDQi!}Si3;o1ab zK7Sd=aIFV2Tu%Zm(02o=-*15Qe-UszFbX^lSOCleP5{y!?|fmohylr83S_uW6bt~F zPJST6|K6_pT<}dm81456@NlHlwLt2BmEgrd%KH(J;jaWT{82Fv0gFLr02%&|kr|ne zn}7`OOF)KqJ&@t$xrYqz<3RfR5Rl<L97z4&LZ+pEj{>Rxoq|^abK(9HAoV|A%ufX# z4!v1-Q?CPn<nsd=jxW$w5I+P`?mIw+<7FWE9~bjK0vV1=fDFexAj2^e$Z$*tG90|u zo#B`SWH?R%G90{1jN$ksLx+QBRWdw1Xh-PpDj>sili)=_>Ny9<@SF-92P^<m9&}UT zDuUdJP@xX=!I%u02RsB=4lDxB0HUa<^K+v>=%CK|Ef9p?ibh`H*g>6#OuiuK1Ay5; zRF&!+T~w{=9NmL}i(x(*NPoej{6+ny{6+ny{DWS~zr%n9;G;hDF9@W6g+RnT*EcHv z{6PALwov(VC=jIL<3tdmY-qV4=W0j?1$}}%Zx*lWyxFO6zY#R~Hi&r-kmem?-X_>2 zST0x~$n$0?FAqp}K{59UZiIe#9oiw-Cb$AfcdbCWYZCLtV$OJ@dAXR+5c5(oFA(#f zAmfGdvVe34Q2y?t>5}nGJTRE?>YhTI@#mMjYkM=^d`D<AzT`RRbZ^FU&x^eoKRqV2 z882Cxm^sSm@R@NFZ(Ad6#>u>oi+S9P+q#7|<2;_1O?xwLM3@w9#&NeJQ_$XwJG0?G zY4dy^^)YEPuAU|QW*nZQ^g|s8cYF$!em<WW2d@+V&A57$xHseQvmsmgC+>M?7-=(( zeI7DNn{nmm5`Hs|J49$R?t4<{i}PdAU*mHr>O;nt8CSlILdx?!dswjX{0oJF=U?Wb zQ1Q8s?qT01_KRo_dZW<y)BUg}U#ZY*X^$|O_1JB65Bu?Af0nXu@-+#)RQccGYZrQj z_;1#mk5m42__m4to6wEtXJ$$Kd<h!S;XYTuKQCPiz9bs)<E7)!)k~j&`1aCh(~{^D zVd=G>m%`6_)N6lv3VlTiKgXY5ezs3uIxi)BZ>G4vFU9@MDfU+)zj@`co$%89yzZsH zmqN3B^4i~>LUX+3wZ9}q|0h%E)bl9cOo{&^Q{=sz;{K;8^e<BAj+FR%Hif=7g@09w zJ+e<yc!H>(yy4@!m-dw{s9I22cQF?1@9a5}Q`GkFd^24+ttvLIYC&DhoZm>>9ZZmp z<5@%Q*^M~&$vxfaJ3q8>2bv_G;HdYMja$%&y*T3=YpQE2FLKYy<LMXLW~|5Dd!|6@ z$&M<XcHn=0-uwm=k)9LPcI0YoWd%+@ss8#dN9R>72v=WFTaQWh1=Gzrp*!#M=yAzD zN9LYU^`l0d-&r*$DW>v6IA&m8MSazrvPD%DIPIynu_l&}{d4tI)m7MWES5XrW;71S zm@_ApKapdS4ny2Qyt%yIgmw?Y!^u8l>Y?WR1vpr&zP`5JW5d+XA2<i^a_mH=cX>Vg z{9Q9uq;}@3fa^lGK@ZrKx-&<8qzXwBFz=yuJBn2=Z~jgN!kl2oQ>K#Rob}M`ORDPs zOHY7<df)Cix$PdaHiw5k$dPyWDui<hiaqDUm@2xivA(Ko;r#koV@0(w`>sv{o4PZV z*61;wO2n#YD6FknScP*}=M>MM^NmjWO34G*c5P12`Zl@zKX;(b4hqD8Lt}QppLBwZ zr*=pj53@609mmD^{ZJn-;%%JGxenj?DKL^Y11k@+1$_q$?okPYNzmtU>>%=tXFE{? zYgWBgeP^WZOspgA%qQABY4GY|`h)I((_m1X(;PUHa^S$XIrqhEy2oZ>oQ|o!Dx>*S zhpefyej=p{A>Mng)EWAF^q53X0^g;fCmw#2Mk~IcqD~~>v}}Bg$6+C(%cg~RI@{Rl zss^0MHX3J#s3Wx1nKg;(3rrB>p6;#Ay}@B{RIRKApZX(UP>xxtngft_rupzD`A)Sr z-h|(I2mgWOSIvi~gnu^&Or#zWu#+462kg2ZxUGLQ+m~;&Uq3$&^JjRlKVNUa59-I= zpFcYN{`_%y6UKY?=a<f_M{m)yD?i<S{8o%1eL?*2aM+(sdXQ(sCEB80cnpnU9Ou*2 zN+5FV?0)<&PA50Mn?W9iX1?VZFvl>)1kr^5?z5x)_+N^gePv!?)tPGE$~WR?DdRPf zxTF2^S+g`Fl0iKk<yt=>2kdztxIaC4KY4-3<9r*RzH%)u5BhP;nfmN#|NIJ(_dk*j zRz<P|Mxpl^s9*B_`Hkh8o2$6^w9ZKmuQpBm-_id0o=VM|C-Ryu(DD`|yeA~YxNp>N zd;8~kxg(z@%m?vlpRc|n`K;^JJ%2Px3i6Kj&o|Z33GNWY_?}N*y_Pp&h0ZU?M)S0d z{+|or9BAtP`2z5-g>l`l@tyHdy(F)ce0VTlt$tL!8NUMjzV2hzAM5=-SH8Ov0>bul zVZB9D*6cc1=*q3iW>0-raU1<vhb^1Yq<!&O(fCEduEHQ~t@yOuuEJb?F2<%#r85>R zw_$^aW#3Q-)6L{^irehM97=M9&cizAOUtczL!G-Zep;-nFs3Cnx6v6M3bX9{7E``` zW>eH&vO-CW+6!8h)arGG^SH3Q9n5-DVjK3ok@5vbF3nSVEiC|uNvSp|7ZYsTZ?obz zD86`{mP))8f5iJvYwc}(0m3Gm#=DwJWfBLQ>v=UHAG{XGYw^-I1J^gt02OZjDg&?Q z;B{T|x%i&}HZH6X7c=EG>Ksm!Nb_S@(0u!1m|F4X<pdlJkYJ|?AIolTQalZLh>wn> zR9e!e4mp`?1!_9DDG7VGR=b)zOFE*V_hWl-#qXYKk?)A!p?a}z#C|o>{4Yc_<k^D= zNo*k;T#gmLCkwi5SB_;jF4xg53hf1jqRx_5tVPz#kayEc(JXMkiogC2YzwxFk!Z|i zUs+C?T$Ulc@!>w~aI~kygx_*>Msm(<Qr@~5D5EHF|3ge2uHN<|X0=v!a~-3%OGS2Z z3wA_WT?Mqp76#1t5q#E(#XZ<cbLC?zL3_5lDha*2^m41Bo0bo$<Z|v|0xE{6b31bj zmVd_zvCWW~C>nY@c3d?6dz!oZL7KZZTeh-R&JwJRZ({j5V)<<`*J`P~hUz#7aOOdf zb>focjaZA%<=nlyGud@=k3h-kgW}qC{Gkn=_YU*kdo;IO4pJhR4$8G;9Behk9_vEv zTzRMs0-~W$8%IW*p;&NEuScqln;Wd=%}v69mFMXd({i%Z>h$Kdc~<DP#^WppTRdKa zAhREV;<$WW7<68CZ9U;M4)lIM)`unuRa~VxKSA#gP1(<&!qtRualw4L;$y`xEs)5( zbcBAv7PgeV4{AS<h3yF`+qD)KSj`<liXLuC=B)nm5lA*b5F2bvexUxT`#s(L6V{dQ zE{BG4L`ou~CROffYW1*FoP$~#r=ws)a8U0H&NY=f`B~Gl(gtI-U04mqy2J)z)KG2k zl@IyWHLvDtQY0_shD+30tem6qdpZD-_<aPktpsPHFbBev;O1(bM`6mWYT1vl@>X#h zwg0aU?@{}{c@*8%%)HLWcpra=#Rx75aLIN=xr{hVSuroy)wBIrxbt0q(em3_2iTpR zTe6lrtfnpOEW)uSw!;cK;>62o?eM=gW))uS+&2$UWZy$bN>WGH;McLZ4_1R;*91#! z^=o+nYNLt6UdWQ=Z07Piid)_c+|XggPkP)BJFPY=lZRL<6)*iH(6XLx;)OX@d`dOA ztw2$CQQ)q8)MEF+2I7`9iL+tgkL4oNsz!6L=|k6T*cxwY!=h_c@F6F5MUm5xQ*?Ag zHKeIvO%;iz7+H>^1leIf1)t^$u0tgwk{4r_$>+-Z-s4<*M3A`5phx?=76owV%0#yy z5BuEPqBizBdHWve8zjBo3cG30s(qTiSlX{zs#W9usc$MoX_MBqb>-SDqzSUIyHjg> z$|TC9X*`xAwNe`oRksym?_^%@u6WP?1Xb&D6d#?bR8yj2H|nUiqGaiNF>GCwHst+S zzGwd#PKHU}e!SoKrsXVUsfaowO!uG{`*WA9P~LlsEV?2LB)rHY3|em|il^l~!s4m4 z#5>Dq?+-+_Dcr7SrVel$5FR4%jhcxaw*sO=?{%`DcZc;U18g@oVc(vq(UN-05qp?) zY{Tm&XCsQ(Y4>sSa>Opn!hsIKaM$D@%}U~na`CP@%#p6ir8Hv`%C1n<{!m2~x+P(I za*h&}5IYYwdRaMS)xmuo-9_SO$MCMY%#p6E+h~SIi<2(%4ea{r1h8kV(2}bm8Peiw zSP>8GGqZNJx|TBKC=R{opf+JIm?qL^R($cevb2-B%QVt{#uJ$VM_Hge>wXHfEk%^_ z!7F<`^2%zO4~`|dn)P#rFTCz*)nNvo=`iEfbeK(Qs7AcFHDX`Q(h-SY%_<jsts)Pv zG~ojtR=J2sbegMBy^K<(&5xtYy&$F2jC_Jlv*}y0dU-o-^}>#*s$L-P8w-iVZ)N#X zN)09?xq3;j3_{Onv}|2?k-1QH*uSz8iLzhIX-vgOny~d9XNR<5*P(7F#7w1Kc=^?A z4ZTLpS=ugezp`xJmZ1(MYksvqY$KD~lj|}%@IU5qTJimUs6AVm#xt5Jf%a0Jn^bmz zI*GENEKG68fHtlh*N<@E{s*+Gq8>cG7fW)$+>^#rnx*qp#s-NJ;~2kHfuY~7Q?K8* zYQIl<#gB}n1S5;pG3xZdq2;B-xFPJ6<)oB2?D{=GDT{P^Mmu*@0!ExQEE$&lnKcsK z5bSP#@b|ydj}^G<X=DX!<Z}!6w&G_Z0Uu%CO1bVmw&55nKKwjvJnim1NcVSH|3_>k zPJGa!(WidX4N7tTd(rseKQ6&i>z8_KlFoNR8^P)T{d)Arby7KT)#b9M_$_;g3X(QY zR2+yeCaUrf?=wuayB=E3tmRh!+DP-`*_N}U$vx3V&S|hatkBv(^Bss)3|^PRV}>!x zzKfT6ZPdO~HDG#Zj_B-;n$cDK|L7}9FeA%36S-=OQHQD-AES<vFeRRIY~d%F$7VDJ z3fC1Ko8c>5mwBuYhi|k_af*)3T8A~0T}8+GSzREaD&Y$Y)@w@QmKRh`8+R^Dsh@bm zihZ4WkHjC)UE7;fC)SiC)WRJMAUZpW4b>ex&KXGjJSILyY6m0ar7HF%<}p|)z&SGa zF$n#buyJ!eOS*Wx-}6%_^^t8#t>hw3GwqqJDpFw+m!^n2x3ZEA+qcfsP_BWM@Y0vU zf$LSZjMIyl`?2Nv4(51uiiuskJkatF7>1q6)nWVbu)Pl5$gPP^X`&a-l5Q>i#D1a3 zekWo-9t*KExexjw7}hgQwMt}?vxdZ<uyd`_$~n6_to1~vxx_vux5RmXdXzXd{$l5X zobbr?;lN!lqYM2j=!0yO@EYAE<OX;eXn7h|(6DNGQD{?O*$PmcxoP=5jqNwA&Np_U zM)p%%egYH7E6a(-k5K|mkBR%`**RO<5jz~at@l<PL2R0TM*_fpTbFv50F>BcbCFYd zAGe!ZBF?p{)^PH}&e=Ke=O!kAak!-wo<nxF)<q)7vj3vJuwTF#isFNg0=ouB2aJ0@ zGMEq5sXl=F-n865@+*aoMr5ZbWtv~lGzgp7fjwCq_@%Pq7Vhuf;^)8p_%93pI7I?` z$#+}O=KHp6LtwYO&VT>nKdx8Y@+ST%PStL0d6;H@=D)wV7C|@9B-K44I_fm8*us1R zDeBOK%}pp~ZE(%btn?Z&jj`oN;PK2I(CB>aEaF^Iiqk>!qM`o4(rU7)DHYR4=q=O= zvYqHXSiiHq>UGar(PnO4$djrPVecKLCyXAWrpQo<{>&QHWpN&0?5b3bIJc@s9yy}G zG!&uNV#n-6eXr|L%gHu%mq|r*qR?`&Q)p_R6CYu(A?^GODlS%JTABD7)@|m!!@QT+ zi^>N^G>-B?o6*&Odh$#Zn6o_5+qhSR=LGeu$sXx}C8n)Rgzr@Uz4_gFI8wsGd9jIs z7tdG>Z4I>ClZhVg18Nok$5x$-!Hp_|@ToBHK*!0<jP+=pCi_{o1Ew$<HfLB`W4PW` zMFs}_6vrp*EMtdOPdMm_hR)4d%hhaf_?k)C%L}u^&ZJzs5QFqdIcRB7$yDY=oXdG| zQf$9Sd=jR>x?=mQ42KD&;*Q>IOmufpcJH35OOC;^vdxa7Fd^zp^M)D*J=cESbKOU= z;D86@uQrxCL@@lHx4dv3{Ey)%IQU-;|MAlUFx2M}=g)2Mhnk@N=~Lsf6lD%@mDvNm zW-5YCaepb;F=R@b=G~qm&N7xyyP5wHW2^w}X8w;j%gPnO|7vbZ&7WiXlEon6+^^wA z3zUlb@HNZWkS<sAP+;o-5sBYV&`F~wJ7MHzU2ri=!^q9qn1^K*h4AOmUxq&tUq++U z#2766=(?;>Y4I=ZtxgL}T(Nx{JV`K&XvGPQE5d;XT5_3j!gg1<^L;;OiZ($>&JOjb z&JJ1j+KBzjTxPjqXH_mEv3Tiw+Cd~<l$#TYM{_Yz)Grf7Bhe<`31MhtOpnDL0vE9( z5Z#o5xrd0;q6G2~MKe=We9gnTZ1$-_%QCnx#xb2a#YbNT;eopzRvw=k&v`_P)*YmX z^J6VXO&Rsa&Tze`^C$dRjGEy^6;ZwUE(4<9xW%MVf9wF)rT|WjRT$0PEOfVKVMsTQ zK1Z6@VMy0FU`SWBn$xlRQ-GT$m|l);@9Tq-J3yG8t0>k2J(--+(#{T3yX{FqnMqP9 ztq^Ax8i$nc4=k&X%}Z@~z4OI54~B=q=+Ao*dnj_2s*zCbjYU-#iQmE$*EQZ=oM?BD z7>SyU2I?5iJ$3R769<-aqL<74{t&U3>7n?an;;eibU8pdjX1Zku<}@%i6~esv5c={ zQ|7B8wz3i@hOO~U<6Ju4CMHzlwXB`#t_!Fsvx7|3;}|oyl;hp41n}MgA(9FQ;Z^2w z&PP+GYCZ^Vqv>FR?eo!&U5;+TI&>30MWca8+!ysB&(P7c`T8xWj@bFy=joX9pRZ99 zB>Fr^&R<=lM&t?FQGI(aU5=Rc((KA7=xbDmK0zbDIFoZiJqwpeA3rw2IjuVM^uloH z0ZIxiV;4AZ*Hal!TaF&@cD}xgHN@Xr7<zzJ_QKhLyVhm&SkkTS+z87I%&7Ms7J7hQ zFT8wYH#kN<nenJA;0^GUq7J|@f>{|Vep1h~I`n@K^^*3zGg57Hy|yQ$+79*F4mfvo z^C=0*o?M0DZTfSwdNXxzZQ#LQ`n<QZrb#>;CK1?(?uCk|z+H=Stj@O();!DZOB>Ad zzNRv%K|Many{Zr0a{zUP%x?Dp)jj<wq<@P3>>e5Yt9PLP%_o1o$V}D$i6r;mPX8lJ z2A(B(5&8P)$<@evmdcc2f7&G2fE~mpr|nFBNDac!ZyE$SpY^P1fd^C>$3d&dn9gWJ zfhj9?o_!O`p{<6AdX^L;uQaFEt?~q9;BmY6dTa;D=;?Aw()<wXALN&Wz9&;(P8Kgb zJ)y7rR_eE}RjOahdceMxwZ--V(2G5-CM5<2;KXknfTZ*1OeQ(fxth8;O1Ds_{b*p~ z(>jiE-08&5r5!T$k><R^MEH+)!#~9hwWOD$=CMOPfr&jkPPz}U%4zVBhduG~b&}51 zPYHb|xcWw2ee3-8O-vshA5eJmqk6t*dr4KWU4>gcwqHZxf%+m>>B*8VD990<4ApRs zxo(PNokrqIL6=HZGABMH$ft$0g=Y8;RZUxcw$KNCzB2n;denIxJMb;f1X_Nzi_dqB z!>;ou>-ssCYi3sCofn<|3WoXuOJ4*7R!c;jg??)!OuyR2xirTLeHB>R1RJaKo#2Vr zv0Goim&p}c9Ne@#5j(%gnNnS{^oc;rSrqHs!ycV;9sR(}4Nk~p^Sb}kcxD`Dz4jN` zU7hdm(%)q@zdbC_@^`3hefk=7!Fj08p7w55^SVr{`O!?PzpL^6E%(4W;!O493`Knm ztdTw~CvewwEWjc?8V`RN8QI|#9y<hrlj;j6&mN7X4hi{@=50CkMVP$M@ke{7F4L~h zbdU?{{Z8F*yMDM+mu1&yId%Km_4_(?*>-)lQ<r1c=cq*!&5s75TjS&XDoVE;LXGTo zN^TSfH!e^1AK`PRX4<D_B1rbBerM`%`_$pi)GYhdENAMz_Nn_iQ?u<;vz@6q_NkD+ zE{K?b{B@0w7dg{%ibGEZT5d;-lsH4DK(>6jF0!8~8u=umgQZ4C$LW3yv2I{&N6<Nn zj{Lj*S?88r`a5x3$gtRf)~7G%`I_YT=xlu7YVJpTOo<O~RsF+n5g(Gr;#P)PxUe~h zHB@T!+^>e#dPQ3LrsKHd8I96mn3>wb*&f?((n5ZWGarofL8=3_fNDTDMYT6)htD$S zmyf{Y&NbKR?=YCSh)>B`e&+Kn&tRC_>G-0$9F#c67C8^8F>(A3A5sWYD46x#hy?mS zBqbD)qn|M?%x~#Oz;a1Pap+6SF794<Q1R0Ki2YP-RFVC;N?P3Qf@N^M+1Hdj-<yy5 zVp`(kh%&`MS)U?pzG;gJx~yW**p2a53ySFt@V5vh+))!AMMqy+jRj#Wv?We8@4bMA z@pkHpVfCkp33Rz-NEF3K|1&#KzMsbz`*7&Fh5IdihRPgnKSM>;+`}imdt+vurU6aE zNw*r}Bs5h1Vzw?~7v=h|R0`2&3@g2tn&|v0?Y*ww-08DG3lD%aElFS*(?eBes5a~; zd2vtY=esx!)fNs>URnc7T{TIKhRHQEQ-JzUYMM4CjGmJ#a@4{bxJOt&(B04D)73VI zNp0g9PdZul{<^+FoyPi1)e9ww`Udt+X{LQvrh~r8S$?N<xP8`er!>nxE6XX}*FI}s zr!?C>E88i}vCoqF26Y1Ko8DofSh&BlNEfjtwUp2oJI+z1tSHo7WIqv@*sYflg+rZ1 zAc|2<U$18WtoY6R!reOzt4R2=Zb<sFc>9<{X&KlHItb@?m>5i7mQqXaUp(@5rt}Un z+A-r%HNU|2&XXTFwol{-wt{K$Lk`v%sVs3J>>X8kZZAu4)G1kli<BIPwJk&>as{r> zNYe=AAX~WY%YQgOP$iuo_-69MvAVfO2CzHBfr(G({DABMLiH=ZR(7~PKat=Av%{XF z6Sg~-9Uk_``&QYZ$nF0$tznYm{*iCq4XaMlD&06RO*d>ne=&B7$%TvduoBAj9-8PC zHm_k)p>xQ-3?J#{r|ld*m$#$XO{0~kK1v-g#U{J@?Vr#f(NU$MN<HY+yoUX`om6zx zH&Rr`pWD7-Jt=(D_c^&An8y`h-3(?$d)!LLUW<ho_o|6ueC=CoJ~HD&HQ!yfB&%_| zPznyZ*7I!;;ly&Wobi!1k8{3zoO`Us{q2~6&e8rq((Q51caL+A)wn+naDH#D>dVF- z>GMe7yGMe@YTSh>5+d<?b32ec__CtA08l0y-9LPwG4y?kHq)2dS_j{_;e0r&&d7-^ zxdp&L%a0+lIKMv{zq1s&;Pw;sxZ_vGAU@yr9Bn2p?JoOOB@_8D;@qpGL^HlJ->cE; zV~2)x0Ax1<7GfB0kJjGm)6+d`PCD`FGaHLC>aXRkXKdb~+HX~8$JM}Zs$mi`F{hsw zcBbdDdcNMoZ2=-gLVO?JJ#p)?8h6B?BJ1!)dU|e7_~;bDT#{l0>*XoBOMyfn*;|ZA zdikjBD#{P<Mp3yy2x*5^xki#P<i%1~KE{&anRUk(7^Hlw(qT&*V}=IGb8W_i)Mjo- zdoR@n%od8N7mM5}MrWAbnZ0Lg1~=dJMzn#Om3t>>1Gi}O9;pr7QrNqHFNTcNg&D}> zO(My30NwfM#Cr1PcPE7H^${*^{lb)gUGR(K5-Rk6W0Ue<ipCeLRPLD(5*ZNJ!DMCL zx;1bvzJ2J-mOlSs`9=NX=pFZ<&*{B92%k4qe5~A#+R5cX>Q}6UZ%6t-ZPTEsRhyd; z3k4<?P(ATIk-i=)??;x+jl+@L6sKAQrHW-g%X;1;4ZCQRS@RbejSEcQ8a!)8Al=2y zTBD3wv^WG`UHx_;K3-jlg`x|yG*i-jXht{4>D`AOn!G5eoEXn6S!j|p-Zk-&hzRX> z6qhrUV98BBHc@2rV?|K+@AZ1&OS458W!Lx)xf9-a?gVHpRgCIi+WeD^%v0<v%7I^2 z*W@h31s2Cm_AA7lsaDr8z6M(E#(&Q+M^`2htdMYKVYGGFY4Kz3joKGM3Emu~ZSkSB z2WF@c)HGs#2m7N~byV1uxr#!UKJh0)Y&<GWx4y(6$bJ=Tj+Dk*3j;GUSK<F&nXCHI z04X`4ztq1-jcr_P)WM65I>3-Md=;)Y>L%;(RpEGXMp3A*{yL85kYlq`ssX12D-2%8 zby?_(Mn`V6K1H_P_@$N6Z8;^~7QTX-H4G*>Q~L*Q`-}3YH**v_Rfxhj2i%_6HADsR zINT|rhO#D+Fd&TDC!QA1y(4N@BG#}XK(7x2>F*ti2BkRvO;j{1)posE9V$Aw4Fr>% zEo&hYYf-!L6?$dZiL+VEe@4C!*w2Q$GH<1)CVDT#{a@breZR>5M84#1#rCrvRR{c% zuj^3>crCL^dbS2;maGTI%uH~c(}}kks4sAdROYSW{&nIxuJWqCL+w#{Qj+9R3LTD$ z<$RS$fz#;{ZsOB2LXQTnI-50qCe`Qmsw0q0?a|Q2*nYUP6$$dXz6u5jf;(GF+TFy! zb%!a{4<i8;Q12N2!$@}R*AR#6M3CGa9B#)BjfOs_?-SwsHa9z<|HQ1It7MZERC)EJ zKg$o7j`9w+f#s*iEk8x9?cyiB!jw^o3D1=WmW}1BCvC9oi?f=)$gCf4ztH?TS{bY$ zeF_)a#`ndC&5o?Vh+VfHiemUfUtq6-zQA4>`(rm!^SUn^-^a~d{@xLm{iwx-X2{7M ze(TTu{a0LpUq9}5!gL<&Xxjfo;|Hn^=OPe$G0Np+m7Um4kg|nLm(qVRx#-ej`z@5y zRw<wQ9u#I86dEkpaYjsu7k%t23>=I9Sh(D61twvFr_csDz{y|9o5@le{WvplY&ZD- zn&8j$mh@IC8SZ~99C|Epm0IYk8=(P3TIrygXUq^WVPi)`Lt9iC-xeLYStly40cIJO zgq7ZvRMp<^Yo7E)`F;*bj4SxU%@3<y5-P(lP^!5m*KS1Jx1<MA=GI@H?$^_ZS7hEI z>CS~6tnk1^YJrv?ATN|S2b4GmH-9!Hu#DS_!uAtkq<h5fF2SeQ7A$B*ERJ0siSK(& zBz}@(g?h4|iG)7Peku4YZa3!p)`IL$)MatM0B=F?!=^Vf9>kk3u=MBnA7%aWDpEdb zKbzFv1hR$%vUUs1><;X;TOeyF%5-3_UAP?r)2R5Z!>{Yh#uqRL615*~JiWI*B|oGD z2>BiX;@r3iP-dWcoT`wv+y>Lu{AZK^H-7N-II|U%!OYB`A@``)b26_}uU0?ql76!O zl~gZOCl&L$%?%J3t$eY>8CK%#8UIoL$mgv1<r$ceMI`d<@dzdWAL5KI-hGinUJSIn ziZ{$2wxi`*5zTlt8jrPSVlD9sjE+#V7OyUe7qw@e7C-6dNXE9PU4pe1vAZ*)p|0X= ztjlU#S)AQp9PF|}pJu-VvJFul{-g_+)^X`$L2zr+CcM8v&*Jr%jNEE<_U>W@9(-$; zs8hT;icA=|Y9nls(KA;}M1{Bl@jekP)C!vX9B~gKbH$&r(9O4nZDC3-Q1dA}nG23V zNRx5_5B~G!0?FTBEBymYSzm4W0{^h?5$(+qlyn`kEzK~@e@3nK<o+kzV2f2F=S_*v z{CU>Ycx*-1Y4OWeWX)|wJ5cmMAO1)0??dR(3h*VX=$<|VA5_u(w9I^f?Zy3?0hpC} zkG9UdA9>P`oZonVH1xbtB350J@oZ5B+C210GFMEAkNx=+q%ivz$Y1!)9EKbPJZC5o z`AU7!;8&BbOk}YadyhuGRQ;iy$dBRv$BR!~rOJNbsvO?Mm)r?XDqn8<Fr7DwVbvz) zcE9Asm{}$0#O)c07v+}YwyeO?Ly<m_u9jRgdBArw!NE%p)z%uU1p2XBV`g`EZua9l z(n0R3DksF%D|_gU!8I*v%;#F_Z*N#Xl+XG|PxWBwi>w!uFK{lMw45l6>&CIu^kF^B z#TqUSb1jstkxychc!>3oXVm#3zmJW4bzy+llafzq(;I3y9v8zGV4Fi{?}(K8L+^Lc z(iOMyio1y4KpZs=R~qzphcVk7i^N-U+nN1BeT|o)xyOy9Tn~iF%3tO-F$VQGFB;ku zn}xNNJ+0_2t7VxLW|?E2xy$mK-e<TG{ffqw;dPVzoN>=$Us7M^=7%0C2uV9j{i$<$ zdUd&(-(>#y&h{^3V4@Yks=4F~+}!$haQ}jcs)E6mN};=xBr!=|;{N13oxjbnNsZw) z@LtYfiF0|7sj?5V{fQ;^Wx2tKeSUCDCnAkT_)Lt&I|bSB2wmU)9$qI7jkpUw;!FZB zF1=R^>oF}&K6IS1XqJ4JyKG>I*pq@K_MF^c??px+E@6hyWQn*eHwcfBZIo;6@vBMF zx+W<OC5#<X#e<8vxmLDE8GwLxCH6unuq&nMGX^#^?t!SvbMu9yh)#BQ%;!yi%*T5M zzTd%k&tw9Qf45MxM1RDsj}rF@f1&mSp)=i8+(Txk(BHgmm)H-mWh^#gX-DIDOvT*& z19m{nJ%eLmvMI^rP?)qQnPkD_b*~BNEnZrUQJssjOG5t&wD1^RZaZw%y0n>tK`>8= zar#>8>E4wYkwEeJ7<^9|@*oFM=oLWXEs&@}i)&0Xcvm{U$7e+XMaUf3Nu<}O2JSzz z&F;y~z(BMeUCZ0>t?>iv>33Q>tU&RZE8S4Rg_4Asvja*(@0Zy4lwX6+1AIBjtM@0x z9q6IY>V#`dshT)ZOR$sXLO2H5vlmq*Cy3f~k|enG6i&*0qih=@$eU`|%@;q@Bhr<b ztI#<gi)b;!vcVeJZH@d(pyhHHbLua$##F-5z+Ky{)k5tS33b(D#3F0*-MNUa2#TLS zVxN?YPvTdgYK8$kEpbl4J*Q|~UyF@!zqgrXuAEO~ne?N=#ux`LxHPu$bvKu*HEIzj zCzs7W?novl1mO!D_p^c0aVzGHn-!~QWCp?R_bE?*8-6{9o>T;D(?`Cj8k|3yuwrZ7 zb0yA^5odB1)+%zG$enjs=7?S+Z;uQt<1Qc!0V9vdX1v{EGq7&~n!g<jO8-aecZE?; zSvI}{u_oHE^;eQ(vZRKZ0m<*cNU_Iqm5GMl2`qaN{$X^3`F9msR8VA!I05RYcEI4p zk0}Q1N*bc(Y`L-x-;S*iI_8btC4tEw_Xd;t4=Nw)31alhvvJ-`b|my_<7U)Aa8=y1 z@I1VAM?w&@Hqg=w1sK9ac{h{C+`2~_oqP;tZ{wyd4}m|qKb}55w%`;eU;Y!!cf6;Q zTK{SKnd;dU-&PkLX=R{){7&G;PK->jQw#TXzSFRG%M*=zs_0m+qNBwAXQcC=Lr#m& zS-{e(%upXj>?@EL|0k01Wr=-37PfjI_a*dqx6v~29{m{!n^4bs2Y!R)AEXEJPsAxh z@lkoj8u^0CD{ksB*I)`L(7c2Z=w=tB9LgClFa^V_(Tq)qwT0hDkhJcub4g)u^gO6z z=S)OTPs5pr9xJrL3QWYzeHqpZxiS%_OFIx@tKqM&@uc3Vy8Tn~6)S^nL-GE<V*h7y za8pE~=ldR|VD_LuxyPad%om)8yoPFOI3}VoHjigwf&^n@yVvA@)!ypx&@cG&Zi#ce z%BP{e*d)ubwnglcZ9wF?(!Pj&CVnNGalFnp<y%)lpP&{JFW8K{wi!9HaV?5biL=Px zJEX+^sKh>w0YPp>2APcB?_05b(O<{f>&>S8mxMlQd>`dC(6Tq`UFQ6x0IQY^ld4FB z*!NBQi9)d%ai$|I^a|GFU|~mMnY$6~)@MoWUn$mE==r*Jh3L&mE3O-0D~=tsJcz{{ zpVftPRT#Zpg{nS?#xEU#oM73{>Bx>(7C>Wn+AiKujx9w^bb$vGX{boO*TtH0sXS(1 z&AllW8$%xNMO;1JI~xBi=b<JFKt~vHH{ehpQ;ys`X+9E|`TIfpdtc|iU-nN>1^>tH zr(K&U@6<Q-yd2d(UK2z#=q#3U7S9xP8ZGSnnt}+LhBPb1&q77V8;sXdUQ)uM_c$32 zCcy!=iaDo&c`AOB{E7ASsp~~k^-<>m!3Sq?wl!pN)+e1A*fx$0W=_<PImGd^`d?2D zkHs}I&0T)987J<6Q25XT>7sY?{ay5<iCT}C>Yoa~4ti2Id_aAN{EV5YuT(4UOhTw| z+qSCdB9E9xGZMJ#Z_&_a4VOnAHjN_t6uL%&<tx#QFVIh4h}B2>tQOd!1D+*y8#o@f zymeckc?8FUp85@aw1hNF1+ad5Ox16JrMrW7%YhuH#V4bHe}=_%Lt@A4#dR%=8Mk<$ znE5r$&K?>yh*fnVIw<{rxB5F9|6w(68xpwc0ZamU+Y2e41KdwS*U>^<ilpc&7@<WM z1O-*eMlio49*?e=Jqs+o0M*$R-g=^fk%%2s+5c1;B&zJU^nn1wyCd-{5JO*B&6|eB zj<Y^}3G1?$-d5K{Rs8@Zejpan*8C{yZp6#l##cD&`6Olw7h)!CSm3G;VV%g2gSqdT zC~-0|sN{7`l-h1$fzT5K^8{xImI_*eb%OH*%QarLoQTKjx~fUN@O9#1F=}&-u3C|J zZB4wcPQ11!URRpeD<AE^D|)Hh0!#UMHX6_Di#P|X<+-6(V^iJs!nu4K=GM`kUB20J zCiP)XAHR#yo=w_DS-?KQ%?jfSH(Sk}o2}4Rwr8q`%&ow$MeIEzSbtVxPePyNi&(a4 zPm|iC*Vvw6`7j%bq)J}3WywZs-8--sz~g=Jdm$75IEkB$-!&vybPfO(kjMw|zxb)= zS!4sc;az{eA^5j1ke5{X^6`(u)5Rpl<KKGYM(+FWfVm$(UOnP_PKZb7!@Kwm$8Qyh zBjAigDTy~h(9P=<dI0?X9`GL|g3RVX^~?uBHf8f85Z(Bx2lqY?8PYYR21FKq`{P;| z-y`@jbgxm^!SLZ=;2%kx1mar!)WfUD_r}|uw0Q*tMrXd2B({N|io9&i7lt;(>-mq@ zbCK;@5>+4$2Tr1=_Y2!Kv{@r;OG&&4;uzowWIF+&X8cSbQ4N9`G?9&w!ywd>;PqsT z`6Xn#1w;UNDTzBl90<IaL>Gwf11}=6QP|EUF=D8`JNFC_8OMXjf#E!gt^hFwxPZic zAa(~<lIQ@zz@1OxB@m2*(@4z3ScQbrdLD>c5bAjz#7w*?n=weE(PH7N0&%Rd;dOIZ zuBe|b5EaH|1myFw8TII-k^DpxQ-;+G<A7I@t2@<6sONtCCoz&Xj|&0N_qEdINZM?| z&vnDPjKtxz$-uvpf$HhMd2N&2VUDe1`r!+?e?xLAepsQVpDO^g`87$760v?oKmP$a z6OC-X(AVG6;B@?4eXasQn>+CH{S?1+`Y`d;!xwV5k~&uizWe42!65k-<CjhjlU+T0 zp`6=DT_gnGeU}JvD+wFFbaKw3B_F;}&dnsMgy6d`CIml0sUvaI$vK;reE32+za%kN z2)_Foh4=-D7W_PNMh-cWrgi+shcA@E727^0^hmz&>A!i_kn{M$OS#meZs)>V35vS! zA26ju^}H#>6xwVB;igqCOvo0Y%^3W{x;Xu~^6QyB`S69jpV8n-A!y-i72;Fc+=_pP zDP#P5RBS$`&C~dIqOo!1^VAFV@P+cX(SY;cuKuhoN$?&(-!1s(%I_2#ej)Sq;Gajn z#N}kzsE03<Qca4<?1@X^okc4?d?D{uB<NruFVj>#CUG57Ok5A|ZC5p+B;SH4S2qk2 z^b6B`JtIAeAAMR&;sX3~@l!UGN1H#=hQ;2sc~Wd{qs>3@W2RAVc*`^0s8i8d<**r5 zHWNX755!OCW(o*a^Gzhq6F0RaxY8&O_%?}+Aa(~nM}mi8PXH=uyvdRN@Wx1AGYIVa z)Ha=B!$!*Y0thaiRc`i#3G43=Z4Si0*MaKs)KiBTGrrIVRr(9?62$Ko{Cws3QL9$` zR7rPJxc}zQ8Qt@K2n+gjDSo>$rYVSVJLClXyAnV3JcR#fu6!?%>cDS*{GP*4{bN5x zJ^#XgvVDQyu&wyVn3E@CNrn$$#FL3%|ILz*+GxV34L>zX%D~H=_$|jzJ)ST#f2oHr z6dosc2Yz&VGl^G(xRJy=`0dXZKK(b}&oJwD%^3RdLbun^V2ltfn7#u1QxzEA;num* zH{_~}QoN%%^c@Gwj2U<d;-?-~yRJ<Wh(nYy{@sQj^Aj^!#_#aLNLSAj_|N!KHc#Qj zwRsPO>*f;>Vf@qsA$a<4E*=tQNLV_#EI;Ehyc~xg>xPWI@Q==GNsPun#+71Y=8l3; z535N@i`jT#3FxLt8-5H6OOJ0QeslQ3$4$39$Waepn8!BKfY;`|tj)=*<GTa~<e(tc z`5<vSiG}zbh~J$gTJbCAOS;FbWHFeI=i8Vue$qX&=P#(8gZqQ#;I^xphWWKMiMO)( zHFb?>=_+fh8yD1+)l@8~YVcK8%&w~TRaezq5S!<lQxU5WF7;a57^4fm`}B<sCj?!= zLD&Xs=LTov3a~j1uKoO)IaP~O>|*ogHw5d{l@CF@iH>E*1REQwf=6CZ6)U3`rM2^G zVpa88fg^(zHFE~qX^oEbrATb7(ZNnH@kn1`MNLg@ELd4vQ&UwL3sx9q7U8<IVC|xs zpbFvuu7>$F7gSdTE9&bjE*8-uB1uVOW|W(r9NZM;gxghW&isa*)2qI!vbKIsaDGit zUr3{rmXMeb3Xh3l6HdChxTbPmeQix`V?z*Gr0N9zuc)3Mn_txsoL8~13Mo5xZdE<* zi3v(}IBj-ARsF(>7;+If8iI@9{DMRV*g+y_Roq}!;(oY##C#gvPi=q)(_;0Fl`&j_ z6)ff*Z6^dv<~K0@gHxfbFFniji|d4a5QeiVsvDCy8fz}9VS1~3;DRx@_XS7P*Ve{- z!Bc{X)*an&b#vPo`dhrXvZ{`eP^?YI>!KjkgtKwyUd8O{s^X;LsN9Fbu~_~5*|>Jl zy%TA`y>9vGE_TcJUKduWuI)({Z}f9Ln276Cyez5yUs&w5HQ`HlD^I=zZ=t?1NJ8aa zhE!HIx3Q*@(Sck4_{!^u@H!g>KXOKi^4G-Bq=mQ~XiQoDm}E7JPd%e_+Ssx)coWg+ zy6TF`s(H25bE@ha#+H@U&5K0m=j#x|-g9f(w8^-3Xwt%I<9Yj#FTFmq5epIes#7n; zTW=I3u2dRSaimN-#YgX0am1O?5BI#OixP1&W@B|s-`12SlG6C))ixn-9Mr9-zt~NL zhz_fXam4pPQ42lsmF`Y1Ch=hH$zbM^Ee60~{DYYf5HN_rw{<^=Sl9SJE#G)Fm_Of@ z`HuYAS$o5`BiwCQ4E|>98a909zN0Ld^9ic|KK8Ye9yN&vlk@S*@NtSH`DqpR$7|yO z_B~?1+aUHE#Xbb|>Q{Y+b`WHr4$olj%{|$_1)tabW^uo9|Lwc)6MMh*e}MjKz6>Hb z1USUE%K-bfgSIcfUF>tfmM;E!#GYd%#iG&uzi|ileLJvMbDoeknEWixiEhU}xC8q< zu|Gw}PgqOCeeTosTb+zNxcn6H=h{y=Q`_eSHKy7(iG82gKMXdn`);vsKSaA{x8G}@ z#qkTC@<TP=3-H>{5c}X^+J3wSgd+JV7yCcJ*z3Mc+-K!#{<~7_H;a9T*mI2Hb)P4* zRCR}I_vJ&9?PrR8&j@XQ2{c3g9-v?8QQCeuhQMC=4~zTqW3>J5DfT%WW8$ehRwGAj zUiX)YeV^FhkYc}5>{~fB#B&RNUia(8J}*yM`?#dtTRwf~X!AUdHSzorKd=3WbCt2L zPwa;v<X-u8V(*iLJ0I+@9}quvV$U_>Uip3EzFjIVP9b>hbI#NLw}&*okm7!h*tedj z?Z;#)_XGUz`5$ec4f%WRo;kq2FRbk=0qN?8@`>8Mco6$`u|FP?Az!3nq%HdO6>9gK zAxjrO<we^5Cvfi#f8I=O-bat|a8}DJ|1z=n$;{75I{v_w{1ikq&2Kth`76bJ`4ny6 z2k_dj7yD9~Qy2~Vbn(+F_Ds%n;p-Foq1u}P`uRACfM>AwB}?oJz?07ZQn8m}Hb8!p z*bnA^>kj;H6Z<2mBvnXxdc^(*+I)b0pV;p)h`sub0lPuNKUF)-0i+9mp4k6Im+t}o z(;c6TOG=|>_%aq}4Z9g7#g~;ee3-u#+$`R#B4_**A6fCRpTfsqxJes?_sm+hOW__v zOPh!NcxZgrpJZMOpY%sDV#Xy(YKD<VS@bjeM(sR^cl8)KLXxitzbxTn{h=PiH?djy zL%wSKEa5ZNh0pM5S1JtG<Goz?Bt9{}Ci)8>!@DoSZRD}v!^gk&jqQe)dVGXm>CKvL zd-7wDKSB7|FXH2WZO8Jb!(IDtwlAOg{4(&Z5I**s)MLU~lAKP|dlmQ>|6a>gQ>k=d z_zRmeIUi2G_2BDUwSE7|_a*o?2%pJct~^h=<)Y5%5x(K{laKLNQ_9~c_*U-(AMX`y z+X=p3f^Ydw@I3~;x}D(TotiUtz{hl{Mm!b>ANyl`{12t1yTmv7e+mB5J9T`s|Ha2Y zET!Ce`2Pz2jj8-U9Gw44@Ynr8%YRsl_xX<>od1|iFx{p3Z#Vp>4bDFk{7u4tui?KS zJwNl!Sny}HYx&YG7?2+rFZY6Pgz){r$UQr~T=KsO{*}Vdejp!z?cn_TqRfoATkE0b zuE~G(;QU44Un%_TC-U((56+(h{tfqP`Rq5U$K?Bz@=5)FO?~dy{Om{a*`ECM;P<cA z{OngM{(A=3Clig|=09nE_A?d#ros8gf`7t;nxFkn#sAvi{Byv+Qux^qRs1id=V$$U zJ@~U9((>6aRs7GV@TaslboW=d+laldeAr**<L`P?8*C?jGlyZx#Tw1Veyno$e2TkM z6ZPQB@W<-V`~%u0DUZ~Lt1()IkNsOEw?9R0N_wmC!`+HbEnhyJ`TSdV?C!5{SH4!e zV}DrrH{_q%U_0So1$X|(H5>cM>e&we%izy`Li4lVoWwt+dFYSbUVv^lhWjD^FPgtn z*xh>G(;kckU#ajF55mXzxfgtkg^&GeKK`>);wOzB*TY@YU$q`{wX;P1;z_rC@dd40 z_}K5}<G(sZewuWP!d>twEuZ~y<?iMbcaxLjhvoYixZ5V~*iTo_An~ul4}SmC+8_4Y z`S{CH{7IwVyKvX{jCRNVJRkqG6nCc%>>vCU?p8jl-Lapq9;2Tp{XPO;hwz!<pPSAS zzqxRngU-=5;X_f<kC7)N`HH}|QTPVyPm!-0mfgZvAnsj%J^Eemk;iyfPa1z82H)nL z(C<y~_3VUx!_miEEqq68$KSEwGw~<mg+%@ocMR`Lk31PSq~&V?U)xUTw+ejAg>SI_ z8slp{_?m=|;|cYc_)Ez*n@>kM#afwe;2prvPs7qXU>xI-p94n#X@4N_x4@x-pJF_; z0PDP72VR1OIyVBzcQ&vI=0^zr5J-7L#s00R=DS?54u~Q4sF}da;4TVm23-WCJ|_x} z5qx(F@;J;l0+#~U0)GR%SMYM+<&ZNCNI6r0)N2Be@^XaUcB-Zq0qK4+ka`Xi`i_VW z|Gq%l_gdQic_8D(22$R1AngwTt^{^Z*7k8A{k<4SzHO7VK7Bx%zX+uH^}yc%&j-@~ zvw)QU4l33Mfo}lG_k!TPg0}$w7v?trclG)9yIjl{0&j=;X@X;cw}CzmxGVVHD$?#= z0g`?W_-okzP3Xsjen{v)3jJH5+l0PJ=re!}&m<u8$0<UO1XAyR7pk=@CvO5?1^Oky zXMt-#uLgD?y}BoAybVZs)j;%dPCiZOFp%;l2p%W+Wmu>8o4`k4|1uDD+R6U_UIgp{ zUJ2{~u7>@;3$&cS180Gb1L<E_@W7LCWCZ93PV)KS#i+MVRO8!GOM%UxmjKEC?g_~B zz&{C&1P(!bejL*2xC%)AUjxbCD0qb6jT5x{iv>pjCxdS|@B!df43L>0ZUa)z&w-Tl zeIWgPe!S-U6Oeot0DlLZ4g3@ETp-h9Dv<6%K*rx5z)KMy?~l{z@ivh1Ujse_d=ZE- z#;9k2bpI%j@%kX}hj4cfa5iuiunguu1ybJCz}28H0n+~}AfjZ{G~gOw2-pF>(PDlC z5K%em03cKvl_~bGj@9}+2mA@ly9I9*ya{+M%zq60F>n#^r@)!OtAQoJ<-j9>4A&2V zl(U!MS7S8&p5V)ZJj#=NtAUKC-wFM5!KH#f5<E?C5|H|w06Yk|AFvfT9LVzZB^qMd zzXzoK8X)cO2h#p7ApN}^NWSZV<f{gfuM$YU9|FmD0FZpcf!6>($=Bh37fAlMf#m-^ zkm2}WAl=;vq`Rwubhilj8(<}n?#>0$-83NiCj-ep0T>4!0wiBHkbHXq$+s(ze4pfL zzBhp6djUwkXMp5e2PEGEK+3xv*b4jwkbKtx$#*r7e2ak&upHP5oDL*k36SY~6p-nA zD3JN}03h>e0En^6$$sD}U<UA4F#qg0?f!ir^XZj9y1y7m_ccJep9`e>G9ca00MdOa zkp52s(tYo-+WjUV-ERQWeGicCp8(SRqd>ZU5J>m!K)SyGNdL=#bYBXjdkc6g+=YR6 z0>=RV2s{ROGwgGLlye}Ea<YJQ=Lgc?3?Tjee3bV0Lm>G#1Ihogn6DS}C&m2XW7J~L zQ8R$ls}xAR!a&Lo0jbw$;GMu+AoV&3NWJz0(x2Ud^d|#Icb^@t_4*LF3jDpmU%`A6 zko+$I$^SPoe_YHT67%04rS&=(cn|pY2X+FV8HvUAz{`L%j{#{uQq2E4LWkoqAj5GV zkow#SWIX)_NPTVvQlFcE)F%$4KFvV#UkYTnV?c&`E|B3a12Wua1L>{=NOxf%<%Puj zI5B_za2<|0K*sM(AoV&ONPi+g>NOEay-oyD&KTgXkUtVg`48o4_xAwl{x?9nzXeG5 zHv#Fs6-f8XfpmX4knZcn{6aA=7xUeK)N2<Y<$ipamir!%a^C_{?rT8GeI7`;e*;o( zr<ngq%<mHOEMPP2{Xok7;!rJ@$7E6NyFkkQCy;Vq0aEU>K+5eB^EG0ApO~Kpq}<6s z$~^(dco+?&+@pb%n+v4e93bWH4W!(mV*b@3+WaFR%~t{`w+%?S*8wTl0a9)YkaCv* zDYp?wxfcQHz5+=8bAZ1D-x<K)1B-xn15XAr-;4v&-O)h0`)5%5`wEc$_5dlT8%TdU zf%Nx5ApQL#knUFk>HZcV`ELZ$-)n*N_evoBy#z>q>w$DP4@h^10~y|ffb=&DNI8BW z{mlT<-_L)j{rwO~_nU!q|0<CD&jIQ0-+}bE6G(p_1k&F>0+qf%y1Niae`f>f@999w zi2x~QB9L;%0x4${ka7+OQqB*6l!L9A%6yoZ|NCHV{sEBuTY%($P0XJa^S_9Br<ivi zr29z^0@-i*jo=BuE8zbaAluU;1%Dv;YL4!IJ`cPX_74NeX9LdzUIe@h?&knmPfZm( zMQ{(`5;XZA{XqAV)&o1he<!dU{PP446#U>oJ-)gN_$chJ0J0vOBJ|-xZ~DGAUk0R{ zaln<pLj?nZ?`NwezoVLg<oo;pjWHngtrUz3?gpfOZ|$%9ZT|o=9Um2J05bd+2%aZ+ z2=H>aI}pft`f@+b_Z09v(6<AB0=z+R8SpC5bAXh;3y^X@+gIazf_DgB3S0yG^MKTE zI<N(FK5zwa1d#dQ5HTMj=AZAQ%{K!X-dBK~z%@X+zYR$DD}Z#r40sRdOMv8?3A_&& z5PW=ZZT}}A?XL&Y{x~4RcZA?Rz#Bjh1O5!SbuTUdU0@va>p+J0H$bM_jliYAD}Xlv z8-Ud7LLl`zANYTurwjc9Ao+#^uLEw)QX7Uw{R>F`=YVv7H}HDkZ-xFDkb2sJOMukl zXdvAkBJ^;<%>lKhY1Hq4ZQ#2VNWP1J4EI?;$}15Z4O|9#Zy>`z6v*&@xTkj43uO3T z1k&Bpg7*XI?pHv%`zes_mH_GBLLl8mfj<Ej3g!WC1f2^ce-@DZ-vc_J|F(zD?@I*> z1P=x_As@XwT$kS;0~rrZf-%8)z>{Fkg+bKsce`t>2eRJa91zR*R3P)^5y0cY$GIlv z>(6%6xDrVDHwj)L*dTZm@LswT`i1Z5a&tG3`TnOs%C7;IgFZs=b-$+902!W3fvh)5 zfJ~o5g#L1vrXLqv0K5$RdjiYAw|=M|FFYvtYr)HaEZ5%$GQ7J38Qy;*lBv&gz;ST@ z3n1;U0p0<6v0$y>NkGau2FUv003iJz3S>NO&D8i0!EzwwoGmy-ko!Steyrf3g1tku z{5OG&M}C7N-wi<e7XvaLrvs_?XdvTfAK)_J8@p)aH%Z3tG(mp1A-yF-$M5ff)cbTG z<rfQv1V;gxU!L-5dEiy@3xSNEV}XpnAg}{;AJS(whWw?Vt9-saE#QxU1;BP-9`GpO z2w*-i2%G}U22KE?nEFCMh~XxYJx4&_UjT!^bAbFVa4s+lcoC4_G5!GL&b7tBJ|O+s z2&@Kf0A2#@5%Uh<g`ighF9x=Yc^hyM=oP@bfLx<656IKL7Xq7rlv@XE1kMAJuN+tk zoB=!?SPGm0w1Crr1;8_b6M$y`^MKQUJni5tU=VmVFdH}@=m*vTeL%|JhIj}9`+$c4 zHv=ny8-QV84-j2~J-dNF1a<&t1KWWWz?Hxlunh>aJzIhQ16&R)05$<H0M-G?KM&Xd zEC-Um6j%eafYhe|crtJT@DyMka4s+itOsTT$(IFWy7+;$K!B204ucGzZ)kyFP|zp1 zahSI65Ns1{5-b-i5DW_X1UC*9_kyc|$Rb1Afq#Y`ZDPJc%v;60NzBUyXNY~N*cXWT z1ToJO^Prgf1h=95)4x6-{o4p+csm5!1e*lQ1!n;1t`taj1!6uy%=5%NDCXH>o+ai! zG2e*#gZ^y*QeF>`@;bzPwV1byd7GH85c5_sZxZvxVqPca<zhZV%uB_*K+GqId7hXD z#XMWgv&7sd=G%ryd;wK_0abhnt`_@tv2PRe6=KfamUP!7=8MI=PRz^2e1@2pig|&U z2L-dmK1=L<V$P!gRC?l{(hsQOSIm3FyhF@ai+Q`4w~6@*F>e*~CNW<u=5=CTF6IS- zK|!D3MtH8`N3cz>Nw8e7Krkri6J&h?QA7KHDm*|~4ebzI4WxZLkoIk2-XvHqSRfb_ zWVxq1mV3GbD7olnk}mo15Ez2NtUtdqsA;p_`!u1=`t2b?oAty89IE-v`r#);o>?!< z@h#<>^}!s!k~Zssw~0Kn{`VI`oAtag<3B28J|_jWd$V4*kCiLrnf1B%i+r=*_Cle} z`r3S<&3f8@iafJ^c8$<xz3kOOoAt33LYwulBZW5WUvC%rW<BfK#(#7U_#7;>S+BZ( zQ0w0&_L&l&X1!;t(RZeD?%Q2xvtIKVac|aVZW)fPy%`-ovyS&+)W4+7y3;kNk4T$! zx+74(lQ!!*S-+BI{l#Zu25EdpK33Bg3*C{c>BEFJ>y9}dCBIn*y+rBb^O<$q+kT+! z%{u6F#NMpi{wvaw?#(*u_x2YWjU%5Xu{Z0)vxKe_{hGypvyOXT^uH<3tUGTL|J-%z zC<wGS>xTCd|I9k)=k^u<B|c_~z1hc5FZO0%M4QlBTg(9nzu6aYuGnuBd7lr{^3A@4 zy;S`Bd~FA52{Dykct^PSOceKKpTxcxmodG}y4`<Cdb;bFm3-s}@sAC^;-9GHog(So zD)#M&3uRxV?Jt-3Gy4WkLjBA5GW!(H5&OKL<{u+;pU@K}eayOUwM!oE%{uU0k!SWz zU`(Urn|%)7Q~IEfg3c!&_B-jnS;v02&>JPbPLlLB`ykE}`DWimDP+*S+2_G_kl{7! za&N|XhqPJ8TZ{^nbZLq5-uI~RX9>-AjrOfVFHrJ3d}f{T42f@kY~!<B;@hl)eqPeA zP3$)e)AF*WYW|m0`gdR>o2IvlKCMwrKN`^dX5Dw!?wU61fa~_wv|0DPNc=PF$Tx_+ zS-1WS^XsrCU-ld=|GND&-BYRQ-7qgi`yR3XHTe-IO|!K9c?W3w&BFi8!J5t!{$r>= z+}8>HZ<bfk6RNcPO4bjcONG8q<joVhPxR>!x*6$C{wAU0Xb(uY3H<=|8w&dhEq^iH zgWg!K>6gB*=?<~~sp7}E8e%_*{)0bL>@Q(>KnI21hv5O;CUhsm1G;Ipmj4vv3v{2@ z*NMEkN^Spl(WhPL5W@rhpwLG#JfJ&7-YgaV4&QQ#zg5(KSck7&=*uNN3M4%aRq@~9 z+a~fjFGqe$_(Li^JA503{)5QhAn~{Ro*2I%f0vKf`W^;4L%*v352L(!>2`E9y!0m2 zuU`6BdnD6`Lm#jG3gl-m{Wrvim;OVFy`7@ZlPU5!f8ce04eC!X&3Pa%eSeDk+!TI) z3O#&Cviouf^UAwvmt?vxg}x`n|DII$DfH}=@E?x)#OvQ>Dfa)D68_~W^h=lr^16?w z(EF#z8-e=8%l~AG{+FfLpPQ2Y2cv%Ty5B3szAQyQWalLQNQ!@#qQ3UZt4N_^Dd8E9 z{O#o*o<fgFkv};_-f=1V9GOBlri6c4ivK@Lk;gS}UVUCo$$#}J`h1XLe}0O4h)<ID z@*&CeQ7PrMEJZ$b@#?cnioLIFLDhoFx{G~fWo4C%E6QRx8(|TMbEm~ZID}#Wc3H=& z7Sdo&b*aV*jZ>#^bGdA|9#^%XE_QLTVo0(G;go@rss*+6#&TM0Oc}QN=lxggpFe(1 zRYR=4*68L9(Rc)XLB(PTk|(J7`RWLV)6|(DX{_^<b%bY(nD`jW;}gcILm0+YG(>8Q zg;#1`;`|Ha3`tOB&RiI~XkLYJrqs+&K9eEIUdQoh#PLEL^HE!0#`6HmDr*-ksI7@a zXX97_+Nq>2(`Q_ise>Q}hGv`!j8Vv=@Az1)Iul}Gisv8S5W|@z74>t9sus>yr)H#a zKXyS?Ma@9}#^Ria1%}-dZR0B%Cf3$g8yk-z$IBTX17+opudk}8uCA>_4vwmWU5s;& z;0YBCIB^5#YoxIo+c5u<Dr4^PaxnA!Jbm)XwDitG>f9NR<$qOC$e$o(p=^#DYbNaf zU5e(%D(ZPw4o@xluhj5(RHfCmHAXpaF)kV{8hf&nYc?&GKYo7ALL5djrwl=C#K}dm zqI_`x%Q5whH8GrLqzkKSLs2QUfomrzH}JFzm%~#QTr;n79{)!pdzaPDEvv7nxu7bE z*>k|lg~drW`8z&Z#pVC6%4Vrr4LGnS-FY?Mb6R*@jVpvP>WL(CD#`$%J9`RFlHk<D z&vUbkYHHIYzTxmDwAaj|D$>(yvoq;w`2V}o(`fabCxr-}epb5j%bwHp$aZa#i#0o9 zvoEQtucgbWQ~s;saJ;U0i_d^sAy&UQ{%bB3Rb5BZ)|R=Q7GpEFz6zC=>B=x*jFLp> zh9)(O77zw489P(laQxEzn)$Kf(kYb-zFTSEUbTw4x~iHvN;MVSif^yr@i<Hg2a{D5 zdqs`cT|S;hl|P_**_lWzo{BT6BKmkKoZ2LM(~B~6>?$uRtDJXH+1!fx)hbTBUFHdB zl~pIV_`(a7rKftyADetSTyg2#fjnajkLoF<V>w<plI-&HE=2!&v^t(HGPk&R;Tcn= zdYZN3(&=Rhzw+}G-)K4^b28@?FRP4gJbvO(DJ{tx?EK>qZgXg#?g193;TrGZ(&0<P zl$T%<8J>WkKdXAA+MUN@{^H{KD#ATxh55=%mCV^y7tF6ILqE839+Q#dJmf`VfC1ow z+J#lhrW#E<%&V)*+`%8r&#YO5Q_afGz}a03$ak))>yo+y%9Qn7s;MW_T+oO?f$|0l zC{G$|sutH_h*Cx4bG=Cc^#_<Cm?+tbbBZUV9%HF3zfr!&5TjxK1vRc0-%gfW+LgM9 zm;CD53+7kqu3O<~k1r|RIt1JV(i6r(O=pXIw)Ed=(U<6ml&YG5N6=N(@OZzn`Ew&P zDk>W4N9UuqZ77>tTfYd&S~edUrUGNl$aI`bHx8ZH#;S&T^k*9|?ySKe8;2UshjUge zteVCd{<2to#r#-9WLjZaaj3pZoxE6Cg}#%PQM|Bttm^2)9)BvdtX41zpI23RQFQ(S zIv%vu*xCLR>x}7T)5837{qXdHzO@HPa<rPqd%e&Z>^n^~?aKrmg#W6pLuGaGX-NA2 zRBrV&REXvzfBrxAz6Ct0;_iC`0aitJQPEVXE;UL}(S)0<pe7^>=fEyTE{au55Q3mw zBH87lqM=EY<MG(E)k>?rrmwc8UTRteqlg4S67RuV@d_5JgvElQf|r`__nVn>_Ut8q zw(s-3-}8Lu$>w+F{-2ru%>3s+mowbHr||$6A`YoqG_5i;Vd79Xfj?~coHmga{U3-3 zO+FEkYb52UkIu6K<Frtv*$gz3S01|ViNx3z3fY9DHyK=nDS3Wy8Lp-j_2TYS2V)=# zT?GR2J8?rNm2h>DC-bjDx$GrtX0R98RQ9eO5AoP(C&$9xBVVc%Be)V3#en-MBe+yj zUVS?oYDlLAs}USUd5EDVT{NDm$?1z1PrG9F!UC$vs%B$0kFi1M8-&0s;!p8eASV48 zy@|3<*4D`wCaUW>g(A(Cj-`{{xzj~<Uz9$tv!hilzcUX`ciD*t_uZw#XD*mOR}h#Y zRHc<MJ2>|UE{JhQB^Wx*2g=b^zjhANtYm@M*LyPYNp|ri-)<_L?BYvzawk@B_WXH{ zkK$R>YJ_lcXxeqBBC9Uel<X7~qV6Orp<Lv+uE8aZl8_Y3iFOVC&`V5Z%&M0Eok(Qa zyT&<QkDDml3=T3w=??$PW~z<~4)vKYuH~JE8*wL&g=`{fQ+1tCf@5kb=SonPQ)rP_ z)0Qp-AGk-334(D7QZ5BX4@-UtmX*z&R;j{6&0aZe0TLTjHZe$9XULq2D#$m3khajh zGl;97h9^YhtV9R~glI*=%I2Yi)8Rn`78N6F>=3jt?s`0A@2cG#TxTa^ce)~UllCb4 zfAuzG$-1gx{BI)4>2m)U5tY;x4wl!Hm#O(Hx^mS-lsX}!bRn9OtE(;;q+*ft+aDGQ zX1ToIoukPil7NvQW0fED7VM;cG`VIDDXf$3zjeEH5*7b$Oz!bj4!Ejl(&og6I5l$h zI<8*dF7O{3YiGmEe<<FxQR+VwuU+8>y5~Lp-f?ly`=MNy?&gI5p(Mr>7b{I{nYgWg zP|%ZVRgi8qWO$md!Rc0m(yh);50`E=DBWuCu(W`K(yfN3c^aH<HFQY2uXL+H=~hDr zrv)66ZZ$aFYEZh>kU?p24NkWjlx{V&AT8jKbgRMXR)Y%Aa?7q<ytu3qUlf=>kDs_$ zQnoNZExL4@q3KqG^0ANPa6Bg$oHb~8An_CoEhrdNFl=~mNFXpYzW@${^66TTpFeB} z?9LuOgn*~~aHwr2LD@48tL+mjqGwL8tUPl*q7~08Uw`r)w-RCdmDsP64ctaU06#p~ z7U!8ob0^P~waS43@z`d>$s;TF{i`UGXvN|veaNS*Y*J{-B-@n0sfKz-e2j9+dVJ>) zd%a+&RxSd{%22M*e9bA48|qTyD_8N@fyylzpB)Fb<0L((vgyzgirFArXli`hRD3zu z_rqr!;v-q5Tax$r2uJ*L=o=z!QsdiyhqPD4=Gp%n8J`_Kwa76yraI4dM*Jm3lZqUp zI8;f~6x-^zs{BA7wl<|bh!4s^aD;M6rEkiwrNeP*6VnvL=YE)X_mfUva{X4`DSe-U zeQA6u?@F!@X`A?8CO*mIHYew|;cn@+MG?}_Amdw!{EklqbKXcF<_FWGWihE#FAJAA zj(AyouQU~^`dxgVxIf5~^NzTmiH=EGE-R~;RW@@0zF{Q8rIugQgVMeM`-J&4JtE`F z+a~!1+uLRd2lX!($g?FL9w^1b#B%V<-zL8fwrw}g`;C&{h2q|8KK<11R^Y?<Wy&|K z5BMZ~=UZF0YbAUa8GkD>zR>VdUG=4J(<8p{ZFM7sn$fi-)PNVyrs5n=*c{4Ne4gAN zHmdw#YkI)`5V$olx1~6j*WckI!-8hbTG|jcKGKZI^*b2K3^f?VeHo1t<1Bmw9G?WY zsw!KGE9pnGCPrI|qcWPB23p}^Oq#K3I3qXiC<KI!*z!cAb2b&v^7t-p_6-O%Xf2^e zhVc!kD;31ll>=lfLnomfYSvmh6uc_JhmDFAB4k~q@ExjFUI$38v{ha;YYk%#TNMqO zb%%)DvgjVdC#;RN8s3my5i8Q5gZ)mwGBq>S5UKkz8pQY5SK{mC(Y%>_&UC)RThoH? zwl7^N14=)!oneHsKRg|(`^0y9O(EK8QB6k{UW@RmSv94EmKq-16d7m{HsaN&;qguQ znI-*HCj8Jw`6-uvs->UhwgbM_Zoe8ei-n)6e68-CXfaBzIf)-)4Nd(J*-Xthui4i- zv{EysHrZcdM}C{b!H=WE_!0WE#V6bI;%8~*b){NxpRe`>go6t*x*}{=)GG^q*gdbk znQr16@0#(xR`btlk+5+nsU6AGda2a#iF1A^K5VV=BO3>d1Yf1MYd}!lH;Fd1ZAnmG z`~CK7z$U%@7s9H$X6$2PDnm|_FxNED9c1;>mUUF)J$964W}m{hb^M1waY<<&s<Qz$ zd^B_9DfujX6_7cQ0r|F$|B?b`3*QV`BpiLK1)p>@8^r-51omai{4#9(U1ZZ~m|4o7 z)zf1XR~qA@%CBb1wr7gAmk7glmt|J<)l9+ts?54ciapwhP#cI`ws9paE-kvOXll{r zMP*Yr2ygK&agT0n3S0M)Im6b2lK<8S7Be3u)2ZklC6k7Y-L|n*7(Z4<nOIFTKI>k? z)~T6m^64Si5zSQlXv2HpO9r;qVEB;lVRKD0-tk##UoFOFM$-yFG``wpcyYdC&Gspr zRQk5J*oP{L_+(_u-TwJqY+5*-fUpRgOVJZ_;3MXum3Kr>6yGsVZ~q-^|Ew<6o0y^H zno(S?8C$fP9o3+-f#e2TVgoeOs~IgF7Y5=3m|~g-uWSJEBgjQIkICr#q9xXB$k&2f zV;~9NO5aNMwZC?c=-5=12ic+=S66g)0J}f4$D4^-&90mx<4cS(A!DEHsoT&~Zv*Y< znT9^~bHdU#yQejaNl}hwe5DOoudV;8tM=rB56DOJJ+c|?QycK+LZ4<`=hv*sZK5vX zc~z&5vwGebwnnzbkDKW`2_wEH%JaG$Raw{Nph9CinUb(6F{-BEbK^OeO2*WT4UQ8E zKzK>+pGAHynuu)JgQeiSu9{U`j;g3;Zh|eHaNc!=k__v*Jn<4XtNa`c@|jf*1}D^K zpm!hZA49FN4^&QVXMyo$gUBE0(F}aH9sApv+x2J$sOH6mT1|6+l=Nifu)d~tl;=qZ zOx=LOsbv5U!^=2jdD-<<G`VQfM92rN@S_`_yYibV9B?>KN`9Qb$Sle2i;-Rj2GHSX z>vsTh?LLqpI9_XpwHV`~W{fLmh&e{_9EPYw&m%)bT^*nZAje<bdMsD8bYrR%0g8N& z*X9<Y(JvR{;_~}AB%()=9m^W_7nw)Ku(5`Ibo1_9VgwP3&Ly}vdb#2sYa-ZuH~G!j zENjmk=hf<-i}sQHWwf%@)jb#cB7QP1L(<5&!JO!EXexeTK0-5#VCB`UOZ>4t;ou%H zS!|`oW@jyzeO^5~IIX3+62J$qv=Ohy9kWCk)zd2pC6ZA32nY9ujkOeqbmNuirA$xI z+kyUC21};7cfIxl=|wW^zR(dZ*R7kYNlVMk%K?1wN*g|!QAaUIH*RJ>u3L-p(Z_|2 zRTROZW5QOf9)eq=X5x4fJfn;tBh)8J4J*PBf9!4qePbgV#+l?|bW4;6;{A2=MkzIH zVkGRbH}FMD3r+TGKr<ugDPNWn0}@S3Ni!m8DP<ZnWUe3gBS(Vzw1_g1d;$myn<C@B z+IwuG^4foCzd|+;uI<&1jovb*6b97ux&~Sz(+8IlQ2O-D=Z8xP5%Ye@S;5bJwI!I1 zqLu|$8lmc>o~|wrHJNOaPa8{&!&3AcQ0IqL*m$@SklcTU%sIJ%h<SZ(o^D>2E96Lw zS+b|qjC-aaz`ACXvuJ7<#PpWYe&!75l{pjy=tg%m$%wH}uW3R1v`0ouFuj?j)j=MA zUNc^ZhBb3)b-bt3-+}*4El?DEX=xwXZrK`l#!s^Q!;)b8(jzr%3i?n@H0zf&;~B_f z#xoonYDRdXN7}p@pU?JY+`&o7y5S&B&|G570zr%O!bWAj)>0^mZXxNY9ZODNG;n=a z&6G0;^Ki{Pj2#LR!7J>iF2_hB3xAV{Q|qW<*MRVe{Gq}BXY!{TE%EO7hx~=j!5EHW zvlF>N4TOw&0hE3|a{$a!C^DwE;20gcBjW}PPlG`p`v?u?k3piY83HCV1rwZ{Ou2KU zn>XY&vFp&XTG+_Yj_NgQY6F^Tvu4%_#)1Uu%M%R6DFu8qY3M~X<1-l%rWFub!lvN0 zXduz(qNk|t;>StzD~P&Ew2`e3k}H{xO|6@VkwXw_zBzh~kjISm%uii2`uAMaw{C`W z{o!E0=y7_@M*qxu-OSDftDu9=3R~s=*zR!fQ{8ycS9kQk&<mP9G_w$_(9zLmHyM<S zEfu$-=u)L(4ec##{(dn?YNrYX6=NIu`I&f`@Svo!I7VwW&!i$aMihaFAv#7C!TA_& zoNNoH_!;hq9G1?O>7ynj4XRwz3&~n1<#f^8Yi7Qxj5^7n5NKS|Za+z-?PfPuQQ<Nf z)HMe&#AA#3@#7gtH_x^$l6*TdKgJnK0_d#RIiuUmCo^>-fa%t{J@71R*;?m_{t@%> zX4r%EeYFoTHgg@T2ICGAt>&;Zb-CR?Nck*-{J)R#|D%k@E=&ds8`H}VO%8`ozgxua z?UKP&_XZYKLc6O7tK)aN`J3`v%?(~pw9C{DsC){2?0_Bp!a?Od7NhZ{Za95>lDwxI zJz7Hb$fT!e(-_Kq&N!|cWqu6zfufc%0lG)5`MG!(`XGB)gKUk48><c*J4Gd!q52|Y zOkWXIBHCFXpsXBmRU&*P<I=5*qj(oeA@^t}qFd!5=NNb709>)oL9Dh)s2&rI21W#x zP=LN$MAt$aOg)Nf2y5w3@G8cjE#KL?8mO40W~f{S;&7${^^}3=pr$O~F0vv;94LoG zGL}VmsT|sYSkWO03XvKe?05PV@6>!m>OPE~fhN6z$`X4%uylp=E3G*nsDK<LXTURy zT5c{xt!1$ll(PC-Zk__*gIC&!SL0@lj&fLsL#6G|A_jW;f$+w@5RIx_dS%xPuNmY# zmw@+!1iFl37KCh}-N_`YWfHM6MWR~=m(!q0+-6rYidsmRnd1@#fnpKk8rZGCuE0J$ zmkF*ZL_C@msn<-UjzrzkPSjV?@|&e{E@8zcAl-bcg=5YBtfyHMHSc#68E8Jnn98hX z{Es?5HLK4bt3_h7G9*Sj5uqVjTQV}pNwhNIU^lcZAv~iiIYGC^Kn|&EW29oB%Gaz_ zG-0r^);jSzbQJkkKQ6PQvH-$zBw_U#2%}vl!eo0jUG3GTPc&K3=g7V!5#489YZ8ex z2@;(Y5+s_7`hs?+aZxRc@zfexeIq_AQ1D57hLS3DV>EhOSz@L|kybaxdm&ZI_RbcW z)JcfmLF5L}=h!*31y{Y}S*<2ior8pqLqeL6WE7_uEwT`r_29F<nw6+&46P*4?Mvu~ zrlN1$ivH*?H`ppEV`tcUn5l^wD0C-xco@)l%cg{MhK+wpqZz4=SVMXieVN@eD|TGb zrV@Nxr)X1lPfz@WME?)zrl%j%CcUMkrx(P4nui%_0d#@;RJ2p;+uvY`TVi^GKG9se z!_Km9J}x9v*ZA)0OHicl4#d^7SVIp-wwPy`2!v@z>aW{_*q7h2pJ^s6n}lUEEv<X# z17*SdYHE=}=v^?0PBK<&$@36dUMSU7j7}t7+w7~`faMlDDU_{dNI9FY*3j8YRry1g zCPEY$8xJxk2`v{BlD(MF1`w}ZB`8}_9A-$0!#kr9Wfec%)+eg@$cy%TL^qyIo{xO6 z^vJL^D}6o!k9rMAjUH~-T>L6E3?}6F5~CahO@RoSX*R+kQ!_NbZh*kl=|~SuM|4n* z_9$vxm66^dMh-LsQ5n|IbFNP-F6as^W?V|ny73ZcDibtQOz+}8w>)Cc$6mJcpEe)+ zG-W=9d~?3?teCHyjNvkNbt1pIu`y&sa|2-S+<dY(U-Il1uYAeo;u|I{b0EnZC#TO^ zKC)*mD(iv?RK9giU7aaQ(sTuqxSXqy=?*YgiBdC=%+r{+NYzG8LQqfkVT-{w*S4RU zHov&1oJEd>8LY0X6>@lRYxHC(unM!tN5U=kA!<Z~u^U}t`Olf6U}#F6qO?B>%l1F> z-=FXgMc)3Y!Y&FwQ1}_jneLmV8BD{mvHeYD{hGqRI?g0VkVzH!M#W?a3#_I<K!TWF z$_6Z?p?%R)llV#M&)xEp(4SK8w6Fab1Vg-GC`_R`w?~>_i?5FNV~IKlwDT37I8H*l zkk1u>x?zs9Ep|!rI0VHHm+$E#X8T*npxujzbY&MCFJcHeZIh~EOqhgfD=$(1@xHDQ zP807Tmrat3CNF-nB!Oc^qO_c0F>Z%a8Yk+UixeYJyEZT}K6Jt^@WuI!7!Yh)bn9M? z6(^^H7#Jumiqta=66WKSL~ZtU_1g9nPR-p$tlfr8WK^Idr9CK6nS^WprknRRv!KEH zBT%QUd<X0Ix7Sm2L)a<OZ1>oQb~uOqh3L=8M;e2~pvAS<R@|#6V%C#jlvr;}`8nO^ z%83-usaSAkZAxNKnU57+Ty&Atx7X~-gR<QmGesz{mNpxcUyshz&Az$Rn0doo40%f| zhCJ<B4Ea<GZi?#b{C3e$QDqJN)546UEfh~;312h&AcRvRPAa-Z{f7~14F|u8_6I*U zWBADnTa|@UAHvZsY-?X?Hst77FlxtKw^_ql3@0sq-5dg)NT^ja{i4h_6??PH(Cf9$ zvE%I}5)?`=D0!MFcv`Whj?#Rr!sNMn8nJ%0RRp*B%~|g_(0av6WJ!lw(D;|lVsic( z3I5Ah`v+*NbZad&7hz*AL<j2NSCDPRtJ&yqurRk&FNYH!VKi1ql?MW~RMV&9Vl|c9 zaab#)ctpXZQI4CgjQ~v0rRJy6P+jl}CkmJHA0EP1BU_oGRkR@nGaLD87mXs<p7tqn zWjH9_5?cYVQX(dc?uC+~TgK!pFU~14$K+y>MmNXw#qwg`uyu95nkry|R~_vGSv;Sb zm19L$g_%RBF`i@ZwTSnUN;#_b(UCzC79FlF2%)b_OtOwveI1%q2vg;y^=K`iVb=2E zS)d_m6h}eB9MCXFH{R82b~*htm?lTH%v3^-a|nTYRuF-?Ht8_-IXf~AMuTRrE<Mh9 zyy`6;XCdm=owDGURx6I=4D~IS_5-|}vWlVB7BZGV>V^bToF0MT4r)9zXCXBbb1qh9 zR`~^2WQq?Q&$vVelIkNRqKNrNvZB7Mh3p#%e(S59A=U%xXvS<zs`wlg9Becp>$z>@ zd|BAoO9E8pVik#Up{xH3nUvO`a?L|Li{X}OSzv0lTmEi=I*FYfWV<n5*#^~`Q;&%8 zFTLhj^u4>W0LIu<ZiOC3N~3CBU@BxEW+dJl(u0ehPUO)%TmM%QOqEBuKHzh$FE|SY z$JkoB_(IqCYTQA(5)x~PQ3-m{!5WJ*tQXKPC3Lx7K>d^Uz19nacqjDNN(!HB=ld{_ z%=K|K|45O)50GEV---O%g7^q5^Cd4Fw1l9}Ko#Yys>*X$ncl+9qL9JoLj)fI5nN`? zSvdI47Qr#FptBRJA+j#zQV4pcgcJ_W2Xmt<aTX2)`$=J(Y$t{BxtSLZ1V>`M7QG9$ zu?Q*b7*~BcigUD?YI;gpB{(saf4=v6!B=9vVDGo&{SdnJ-B{yv4PF$*`-F`hoo%Dh zFjP96b{@w~DOkpiME}}={<VP{gH9po0hPZTR}d$t*rZakwAvFrj9C?>ZTA<6@(}w2 z<o*XsY}E-{Vylkk-m%kCvm9LopRn<$7&Kj*$gDN&UJy)lC#C>dwJl<mO9d0dVT;(Y zMjLd_nhYj;;ztQ~FnioXYV_n9@5Dw4cl#FfL*C+kl;N7OSBK6qG3_xz+iofL7A+s` z)r0Rxd+XK>&=OVQH&JdNfkhtnD$3m(FciX2D5x-trxY2Zr$nq9%3U%}A1DOMDT^is z%{DP;wlPm)&_vH4Ym<W}7#JqVSKrBunM>OkR%j;OgJvTtwGox-B78(>TdY^u*aInQ zxZ2Ai;;47mm%W`6Who^Y*Cs1jE2u@*icDUXIII#y?bfx(%~n<oM;v51pU}y|3liLe z{Mykv3omNHgwv5xh@usK#A3g@KNj=3Lt1YMCv8nFPg{1$IH%wyRxPo!De7Z8IR^DX z&XGH2<Xb?nk|@tq`Ez2aW_%+v2L)cuM(?H42jyj!|1Cn~;)WgDOf_o4tktZmgoVd< zdoy<CB=;u_Zwie|!oPdIfY$#n-3np-aS!@HGSf<5-BiS;V{Q+KSgTm0*eK$w<reC& zwe<C{RncURXJPYdbT*+zv#_rbdR@0-0o|IMYj+Be+KY@37HC2_(913@W#RP32#Zb| zy(y<UA5nByJ7SI&>*1|(UHyCQhw;^MZ6|EbZ3NlmO^{tJ$&SWAa+5Q@7MURsik_UC zh9}NQ5ZYuEU$&`u3PupQJ?B_weER|P#8zOM(1_wHGGl#3%`)ANRuo1Qs`Zs9aWv~a zzPiaEGDAuKx2vR+>oZZ_b7Xl}qP(MtY_Pnc2M^6cd9Q6iG<K1fXDo6*#_u1HzXO!F z-0jFR7xDq}4MI`gkFq#4>sOC4Yih%V8EP_W9)iUtq1blH{`kar@x$ngL6of%362P@ z#Mo?xR&FZvV!zNv%{51iK#|V!x0GZWTA>Fw`f7VfyJpf086dg*#nuz_pWxnDgQ!_( z0SXa<+Jh@1)+2n6SW@ga*NNc-eQ>~TFVv6d#(65_dFY>GyL59ZQj(KZy(Q#F!jMfv zUWEjx+2=OK51U!9qDGFIp!g68V}=dwF>G34!@ib#48#_*qh{8-%TMk<DB=EtKw|$v zPt3K&2D7j=4f_wUyI=*BLB6`9(4x{>ldrZB+7*4-v(2Ol#enU%d-!TVHka!NPl5uN zKemS<tTi@qQ4(53xr6&ul&G_wEcHc8n?->rA7XvdwekDk-!JE@n}po7e@>kz1so_2 zP+dcnq!Z0O06nasog##)AxEZh^a+|NmigGhivC)YYorOYoC<N9rSY}wp`HA*e^%i! z5tzEcWln_uH{+wU!u_T<u_x!wlpkxxdbNHKyfAQM_oV}{@zX1}5yd{iHcP>JS_`Ia zYy(@w&?WoBU}@k6OuRi}OBCe)r8;(~aJx(FAE_Foyb1=EY;B7gYO|{xX;U;vq-+iL z!eAzc6fm1Hu0zDwoOdniPVh%NrF>RkYE>lakLBkc-xl*^id#Ty3tMtM!n{`&$2&MK zQH_NU&gP;;VN0w}xz<-UlmxF1+<-o$D+tt$_hY-_CnwTddVJWbLeUkAGT0nHB5ZsU zF}|bv`TdA_Dwh{36O%PGtPqwBFs(W0@`7$$mg|ogr-JpWHM52tmAxzKqv+w-t4<r; z90s|E`H<~LPHr$u7V|zcR9)hGyosGeiLt+C4>spF8)Bp^TEE+ym=aUr*HSFH9jETy zk{a`Z13Lk5zPXA6ZHe)<NH2n=670jfJ~yA#Vly6wV3D*l$vFw_3_VkIRD&Lhbf(Xj z|KBU$b=55Tu2{%H-&T!tAg-ySONkL`NLox3o6jmT%^{^=iBlY6@`ycr2x)Nlyl%4m zq9Y^LQ)0VrJRALaN_k=YhzDH!cwE>*vvK&*3w|UsZjG2{Lr#ue<z~i1*_)>umxB$@ z*3DY6ztiTyFQZ53hP1*aE8Ua?3a-#QYI7-%>gMHnawm7_R>)fc$XmG>Id2u7%+Rg! zC>I9(>x5i*l)al5<v?Yi5DbM%M>BI+3?Zi&j!fh?V|k>sPj`77fdJSO_kX!aAQG`i zDtTBfxk$u;7_{jI_PmgmSt{jJ?sZlw=R2j+L+aNv@W=n!@`#uV^SB$onYp!hwnWUQ z*=6x;%e08~2fpjpe`$iFo+j{U4mR9YBM?M7o~IchyFYUTPiO3km?NDT2zy#3P+?hu zA@mlxe#^ES@1bHwo2%E2o0t|}R|s`kr~x*Vr&OoL-Iy4nigfF4*&4gc`ASJ}mKYx> za)G;2#)qWMz?;c>93oP7%zp1ysdmgBpjBeiY^SXf(m3bPkj91VCinW=at$Wi&2Y5$ znr*6Sf(f&UY?SH8>8d3kgzCjEp;~qU2`!S;4s+~~b%a{&Cwn^E$~B;;4eV0?;9B3B zg)=~Di!(}shqOA26^J3n;L3>5lt#~sU^5b|<B9fB<r>e~e;#uC=+E(dj=Kvz<n01# zJjdCCx^lr~l*BOqjbimz*obaaP%4YCqmG>@W^GBz>t|CZ2)1wo$%@-BBF1jDrQNN; zju>LYJO*m+THrvfMrbhma@oCNf>9kE6|sIV%IXMbzQXawU0&~|m)CUHcq9AQjqG3F zWjmx=cb2=r4n?iYRndqs5^G6GW%V7$9933B;Fwlex>*MG+L~&Xo3&=SDCS2AlJ#0@ z>haD8=XU4`iaxpu8?$1$*o%!8e!gxAMv8Y6^QV$v<@adc8`-|Mvwd$wXAm}pVteNI zErEz}B^BFg1z<CaXx(Y~SAxlnSPXEhvkxMZWYlXPKql!#$IOmk*1y{k*xOVRD7y_u zf0HWTPtke!{7btP$i>>Q^$59GbBp*?@mEv67f#9Yy_>(^OP8mvcJVjlsW_SYy@*+X zA?m}}0(aGZ-`=1CG;)0+MZ8BNQsR9K9@6A{h=mdJMlT0QkRzu?>|UfO&bBT^apc!t zY>*qsz~j+T&hVxB!`AP|-_Mf2<B1(qg1?i-uS03!YT+hz{1PqP7Bn-DUoIa1AC$Wf zFxXA`emoAv48?kTup|EpeXkMw99@+d3ar@YvV&5mX7i*D*wOd8=d;6g<BPEQxCmz~ zwI{QY;CH^-o5Au>EM{TwTZw+XO|z<{w@@QBwsQWiL*i;`MvtduVbw?OC-FTVX);<* z`Hr@mcNnkCtoayH`Q&EJSJH+}yHrlSuWkNk_4X{?7m9hc;AgQ}weRR=%nu*2l{2v$ z&0N}w)rTiw{w8*rR`;r}c0FQS-|ju9S8Sx#vFQnRvpk7wg`T8B&C!2AX7bhIq6Cj` zwO{LK);iXobF5}9%!+;_>9uK$pD4|UJ33pG7CKi&KjsFP>*jdMU(u5oyF30A{ibe? zhWaa?>aR^aU#XiAP?Y-X8gagIKjaZ#-Rs<#HQY|2$Q+GR@6h>S8-jg7gE<w;F7lW& z=7Ep0s96nlzePxRgd^)6Rfz=^=j6JOXGHy@@~Nnn6~AmlHQo!J(}G(xtFTb>Ve<<J z7fS&`qwkbga{sq%*B0n#gmOoA@^=3x*0C@KQhZe_Fg6FePO|dsCzcJ>DOT6ASJ;%N z>5Y44!Cg}qKVa<TA|v)8*Pe=a!`Q-!yoRmcYp_=GIJm;aU$SpP$|$w4QW{`X<T*HB zorzjcbe>ql&1cCO8rB0WMvNV$dBO&zXlMbovzj(IegQym<jrE@sR!lcinpj+c{ENp zP|Y|RC-Y;<a#1@{aXO9*fKE?phN#PN&gZUAIlmPF{|t!ca1}%F54XOm^INlo{?rns zWW407+YKtQ>5XNGi43b7(+$?NZmuTS?4`HdWXmDC@n6DU%T4saM>lWN@T!flSXaK< z{@8?sqUT0P-MXm}KCts)IGkV-qn=Th2NQNXvt+`??*jm5{Df?RW7GMt(yVI&_ArZW zJ-;qQB1W6g675;P)2mr)>)}iACsex;sL^D7V}qHngq90MhMm!lH)t7z%{`*_&}SHL ztKdrZx0QiOQUBgA$ONSyX_nklW?90{s;jmspeSYRh#3Ds<BS;JVn)V7MzidTV+&*n zwVtDB6v<+HK3tq-oi+6=DvX&YU`kzzeN$e<z*)6fn2%i0)X|1BryjhZVvy$qIl|7W zTMQ==HON8QbL_O;Ya1CTNM7PtvrW-)qPA>91K*8%ScC~uXcDB5{!~(gomE%qkkXBF zIBXJyyiYEWbz}ay9My?UYhh~@L-=a>0dT>u?)E9`#rL>qZ|OsTY=0O9e5>yvGdbe` zI;d5pw7^g>w-y?{Ra0oP?$HUplD%R~SSuQ|bx%K55J!dy?7ip8QDIops8IJ45{dOq z_Tl4F$AX=S@xt!K+9zU1E$82e@dS})a)``N-8;UzA#jc#KC|AoLk-IutjYn2DAYvd z3Ja@lIqXG5U@_hNua#_b7+H$Ya`}#htbowJy<m<D1Y4J4MIIYDpTjgK7LT9mw6Ea$ zrP%t$8If4Eh`kcWhO)h=X~yB26D3U|TNpVG*c@!TOJZJhQv=CEZ_hcTkeY-IcTVc& z(@aZdrQ@bX;ZgKS_ICOg#di84GZH|Dn1^g9oo{Y4O9R2p%%2~H3r<J=PD<qOd3!s3 zDSF9QW3OPIlbGy?<G-;)r;ehOSsRV49pnh`OiXwN<7~?;5R@txy0nd*=`|weOvt~N zL-Ktm>b3O<m`1_!MyRLDq)05f4I~mE6Ue3!?J0`N8NVVzjyTTNFS+CgxqcQx|DWgT z|0AdeB|yv;=XW7MJnO6bl}JJL!S>ZNtMXy1nWM!3gXqBTiSxl~q)>f(e5l-CWsb+% zd_l5X^hcVIUbz3tgn%iAAI++S{9+Fibw_{AlpLwR-jGju!6lD~taC(`eS5rEbhNS= z#Ub3-4#J;p!Tw2F92xh<yT`M+r(F7F8&h#^6__lqi2cdjTw7$8;Yy@;Qk5Anqch{c zIJX&BTv;RUp$Q8#^0pQ5TExJ#%NlZb#E5}kKE^7nbmHC>>^X+DH-1>C;6rh8s}(16 z*$=8ii;y7Tr%4ZP^3^_rcnhAJS#Lzzz%UbVwoA&FA>)&Rcf{o{wM^Qxx7ar&`yu@A zo&8Y92A($;*$Qr`>O+I^eu+AZ8h=BscXvD+8Zp1`g2x@N#(Kz{qQd3=1}r~zN3&J? z8z7H^pN6^QQPgK8s=PaPOrt)#M%uIyu_l%mj@A0=!WbHiR^()_<~yxfEUq+17Z_V> zzUi@WOwD#2y5S!0=ty5)t8deD$oZsPKkl$_+ON+)VUN#$yzlbOzRTb8^@gGM@mkF@ z0Wj45*x&2kiS>%-qFfw#b8nH)-}BbJzRO$j*1PAe5YV;YR||GPHg#{e7WI$mFs{sK z#?+xT`jc?*@6kS*HR{{&fNk2oHmzpcw^~-4W)xw{s&=+3aUe-vPvsZvPociA$h`c( z{1R)74hdUB1i#pQzG4^M>U+0tOeMQOsfi;XjiL%+<&AeEt3X|d1z`(EX4UyxXrLwA z2!TqnO}&m|9<?Wco4}lH1<yfWwgTgi5qYtw=7zo=UoG$DD0s(sCsgode4ta_dwu@M z#=XAFA}qhlO78LO^<A<auT!$`W`SnkUDScm=0?d?MZrx~=h0MRe5quoz1VxW5kCDQ zXm70XCppLO71NzWeRV+P6l*LRad}_g&%|n}9XHu<j9|mQ$@8OBeq028Jdga?BIR2M zNQxg93x0eN{0Lq7K3|<Di5F2IZ4}5TJ72akE0$gGT>M9*yl1XpAK!(~F~>b~#as}_ zR-?mEe!_#~FWbYdv<u&w?G6PamZ-aE!SxGX(r|8vavV-xg&MTrezKYNtv28*ZQo|C z<^!<VdTgF<5S7e*kI9=pSbG?jxS}5)B5n|i)O|uz^i;+d4(^cgg$J}J$7jpRlFQr3 z;oIr8IEllzxH;TrMAv*YmA~_JY#=mZO*Vfg-&UgT$MDsPJK?O6@3Bi#+>1Si*!5wJ z+@j<5jGAw<7mP68s`&tY_WRm^mvP~Zbqsd%HT!*e-L{-fQAze^zTSms@>n)$W|RLm zwi`DOdE=O1VcYRrnt^uO?A4y`=(zDl{5q)r97H$Tc03pRRP15kev=!}@rynd@<*%{ zC5HyId=^?qbrUzIVa;SEn-D6Z(O3Hx-t^#0zS?&om0@fD>j{2E`(xmm#dFYv{wkVK zQh&hq^kMvTS9|KsZDu7~vjvxI&Gwzys{2N7GI0wfEQ>leVxO7anl@Gy(o|x6<Z4Z? zBfZwJIb650w-))%%-(7T$6J!;_^-g99k>M{)Kp@Y&nXFR_x)@xSU%p%Ri8*uco<RM z*H?qHyPlBoVW^-ZK0wJ2Y`?FMwMw>U?;QoM-kzX$lmW}4juscaEmhdRMtZ+1Q5Wlp z;3ODI`mt8__E8{syCis&fwyGe@n6*Irj%d$r^_$smmA}SDg6bu3{#$=TQrw*+BEkR z`9=$(`9QuYhQQvA6T-4$yRxoPP}l~TT)%bATs}hG@_twpOvu1}1|P;xv-#03pKoOO ze3Mi@-*j4^_6~%U^7)44^NmwJ->3?;eWQF(;EK*7^yi{Jb#pTM#aHe7S~hEDZ%VfI zeJ!c;{mIDaSPam;!`4+|z8`7C-gvoRO4L-!$k;31Gk$oooMc8&pU|(FLH1)OX~D0> zP`O_luwM?9`_)h>nz}8_I{S^>`oJl;92LuzI4z@;g7#h`+_OccAUj)ke@`)4Xj0I1 zw#a)<L3F)l;>M!Wb1;L~*LQS@UZORD(fOQ@VQ=AK7#wAPYSRK1Ku5X~zlL#E$y&7Y zP@{||Uqm%vFQmI0jzXVlD*^PZ_ZUK^-Hf!`$QKB+A|>r9>1j77l>;SBV=5G6Q=8Ew z)*$IN8BKoJoaNOAe1Q)AhND2KeN9L>E6xC7(ig*~jL9lK?sHe;NNcC#NUKa67bx0( zS9a=mrR<uODpKA5gQ^C5+4s9a7DRjNT>psecgrz6`RXQe(p<CAt!<8XL)LNUDf0h6 zM7mwQiT*ixyjr$vIVw%3+DGj3vG@4FI0ejN8!^EWM)P5wABhBa`D(rFDXfqfE7$Mn zLRD|g{vNnL)OQm_aqWry<Ti{sTEF$Qt>v~*sHpbiq9$$q&aRs8$&b1&7zoKAJD1`? zE(W$fCl#P)$$Q&(`4-5tkS+ScsW$}Pr@aUq?^5t3oAp$l*ctGdZbcu<$6y%GXM=F$ zTc3Y?o6mpIHeVj%c#Bf=<<I+iU*6{HJ$@V9AS)l6;)LO|7lzJ4NX>g<&04TEdX{b- z0};mG?QbJRV{^AR#0WX&aP(7$BS5wud?U6?dqU>5<9yi~oa<$9{lQ{5K^m!sQi$T4 zVD16fvGTsY{<|*G33~8l(HiR|SK10SgIg9t_2aD}jTnx>sqZAxxB<KU(C6WhfEol7 zPVg(QE=J>R2{oh8Al$~o1Gd}goolBjMP{2lkX93ZjVe8~BD8g+LKU8)^NY!?PS#|Q zq~?TBpWBV7snbT(B(r8Nt+)NI=+v(~rVWWKdJ4D<lXAsja=sDH+5y!lS<snsP%n=r z4^dB^7z%#Hp0^0nqw0AfJ)&m`RZAk4ZCs8ram|<G-ME9}Ec`<g{2$BA&_l{hyq6$D zvJ5-Hnx$=?C@yiuMFN=a<ID)f;?psKbj!unAl#lZ%WC0>@3e>1_MXFmohM9;Z=Abp zhL)Z~OLoC>k}rCs5VVAil>N{dl%mXK30kZ8?s!ac8tP{}SUQqk*{y}z%u3$C!e(Gc zAew}oQj*iqw}P1>n3EW;EHnlus6B=um72wzvfYKsg-ilf`EU|x-P4Rt7vhPlJV+i+ zLsugqMP&=bN%1OX5s@}?8T+<yaGUR@-!u2-Uz*vDvY;JTY9H5y9>zY%=PDvucD65F z2$F3OpfK~oq3DeZYLRZAqzsx!?JwLFg0?0i!Tn-w5%Uo-S+&nw;+!&fuwxpEl^Nc< zl2pGcKWm4(^J8B%1N}w}qF{HZ#5r5;K&@jC-JVLaiepK}I9fpUl?fN<$zuUjsNbnj zV=D@p#?)vbie{Rhe$Vw6%%{Ua9EpQOCK93Sylf-c*wu^^Ta{Uf*3hk(A=#5PEwS~L z6Rf1I%C?_)6<FRe%qIUsLW<{$7s0&oT=`D!kLL)z8cKoH5y$3Ts@0qli4Tw#WIj== zww{elDJ{hP3-py}ERuVi^I6MwH3+`IHg8AgXM}bjol-kmsKEK2Xb&!@M4%C&9kHG$ zF-9l$eJgH#O_Wq3NE|ma(yr#4tk_(;C}3Wf2kuv4K(8c5Zu^FIz-ts^W$8NH^tRA1 zJtdW|O&j8gAI${qwyRJCu@kc!K@xw9{wu@%%3&PC<2kVcO<k27korEke=zBO=fr)< zDjQo_4(-U6XJ&n=uoM5%<?+%G?$j}$66ZD5xU~SCfjj@$TpeI6z#N5sf!1|-)NyLY zn=*se^g^MmlIQqJjH{<$ZMK?T@rd&kqG8HrE7IXgablI3C3o=qr0qeG+gUb&v*f5C zOjyD2tKD0?zEIqH?Y>_;sl0F>HvQV8yj?xAd^@X;L!b|QQYdQx<s%D5RU+=UJEZ%r zWoW})f63z;?iAOJH?g7#krtcByik$(sgcicOUBFL;0He5m*mmcs*A*Ny^&8F@PfAf z8;GZmydTcm9uCGA{>Ux}&ADU){zS|JTDA52>35U%<Yf7D!+g4GvX%uwa*O60g&w%f z>xvUw0(j`)*(TO}Y-D`AtKx-MUZ7!s@QxR89gnz(+}Uf85*6l3pD-4vjAXHfjdm!B zE)82}V5>+^U4!~uv$84uv_T4V^amIL)cC-(kPi0OV#D_sFRr4Fj>h7{e%*-d2ky|! z(mlE{8NbL5tjO;dskIbxeG)ux*Ja@js2O%Z2_M@KG5bf%Mc#PVi1B&EfK-LNV{q1u zG5$#KBTmTqp^zOmM@534$96;5^VRZf64*C6!=i<Pl~D=NAKCf^to81&dl5bO9?my$ zK!*q@cShM!JNhMuU&YB@EDa3Df)jmh=ZIxidHMb~CNFlhD-N}zK}t?vAv#Z|f0ieO z5g$6BjPZe`^AmKXMP%nEjXt!6%<);*1=9Fm(3I9+%Ka$GU6qAf*Ujq+J3Wz$QC#d! zk=<ej`Ek-j=!i3RgD5%P^a%+=t}~&t!6xuUd3Jxqb`P`U7u@JE#VB_7f9&tr*NHDd zKmxXdvEyoyM{c60$qwRUE|hV9cv64$G5f1i?O=9m6*0--HlsYu{9q;G+s-$XWAzao z2(G2sqM@M=c)?eT8|yr5@%lRZx}C7^k^NeeG93=x$^tM{@^T1<H62^{pxqsrJI>0! z5p5C{*u@?(u{MAtaGWsD;a7XgErdp##PK4-=n;6^Pw<=A2Tnl=O}CDlfG}5!p2;&i z*vGXMHx{6Lgm=L!wtZ}e@Tx{#yP~*WnW_KO$lM*;fVZ{vUw2LPdg$lgL<?7aYIwj0 z;^raWBQI+~T&+F1&3DsnC?B-vM28xkg5?cR{xJ_sR>KvFYSMS3SCJ<iS%3ZQVoSZu zL){Dk-LyHmEkR5;xYKvj+lUbLZSP>=bQPXd@7(@0Tt&Y&U>o|xu1;5NgwQ!ZLp68A zH|7f*wsG?Z$Z+IX_K)a-ar8fizL23pZ3{2OTPu1yNN>K{xJcqgZ=$`}rzX)S<}mNF z`k2jlY<v3}_-Aqn|C!4}Tndk|!ZpA=G07QVS{L=l0K*daH5TvCy*?ZEjoMjtRPA#- z^N-?qU6d|&*R20X*9)u}b5Tk*Q-b$y1TUViXMKy+bm*@3@{>c(d@(8WF8Wyr+mrj} z<o%5JIz-K`eA%XKG0DWlCbWe&xZsNS8v<NlIXZ&-#YS*XYXB#a0`2QjBDA_tZ09P> zk>g<pDiJ=!mb(B{Z19UON3_?A;)V=gs4nuMzZ)EH@Pd0h0}*3JZXkZO9ihd`Z?-1K zh(ja+#0B;cp&21Eo)lZlXyHRdhAM|P6n=2e0vaghQM8bkE<}ulAi$B)M})TEqK%r3 z`A$n!owl6dIWlfq|L+L;QnvoL<Xe?wV(d!PZ)$rVjxIe#hievlYxZ}Ep1>u&JS=Pv z!-VR0r%}*Q$9m&KVDnm%%}-#{kYwYB&1Sa^%x}5P%pp#{=R|`4^wsieb8KpDs87*l zW4kKmB^$KO@s-@HdO0Q=<GMbHJrCq)#CRKGl+143kX7_$cbsck=+}KE*r14ZEVrxq zR!?p)+H$c47Mx&3euu3~pK6<T)?z<wX!1%YS9TLY&wE@XxEtHye0B3EBv?bwaMS%| zs5uLJW7i`zc8uC(B5s#R+8PS7<GsW>Iy^PVDoOa3)4iEOp1=`er~R>hGTtY#j_fF7 zN%^+RIPk8PBQ_|R6Cv)F;)ib)$jzpV&t^}-S!g|D5MVR{VENd*0G_cU#Te~P+$V7` zdc^l-kb=25N9(%S|K<8D?9k!HyRa7`)v&1@A0+2TqXNCA#fv_C#F5B_2Q|>b<gnkx zMW1s%TC9hN{=|=~aIlEUHC1c!7E~Tyn?)gDc-O^g%GjjD_9SuYOZs-Qw!oCC1- z;pbw+d6G_@hzFuLT748pJGzU*Iyb0MsRMTb^IJ(9{Z1ox&0X!$(={J*oo7OOdVzx> zwsm6)2$d-c8G<;Lp?$U0$T~Ed0WdXs;1~7HyQ)9Piugk1-jHu~4E@$Vee>?3>W^r* zG%phT7>aY<H|lTDdWWH%jh?4li?eE<LpxZE)>WAms{N81xbv|NgE<8*RSm5a`Nl*b zj1CG5_|3>6?n;PeFBu;1hO4`(AgzX)us#UI5L!^&S6e_W18>medY;BjH<;vOPLFo~ zc{}xK2!)-#Ameo^-}9m9m&u0mb&w#a!FB@5I4`TjKV{<BG?2Yy7!&=t>a2(v!|4Vj z@-ZUB&Yq<42I=u6b_~b5C%3lmA{m%7gbm1#r?-y*d06vL@Dmo7uvUjv@h#EMeXEPn z;kTgBa<js|&~<s~1)EI$dE^eQqeV1*i02RiT$zY)SM0Njb08dWf9e;=hu3Gk3aa9V zAuqm~77_@>gP&AtMh+$<-u4DJ)$w+&?&A^&46dg$Q_<s5>wd{EWIL4wtC0J<g0Dp{ zNy|u5-AB>gRt4O3-?2&Lpi0!dO*80~HI9NmMb`F-)R5qw21%%3Y4_%JOr4szkPzmE z0C(RdCIPAzAjo*z`=cMs%<t$%Fv&yXh8*gv<%CpfmzOsCR(C<G(Kr87RL%nQ++(u@ z*;s5fBCYYBqWz<hpb>5eTUQ54e5<FU5qvBf!H2R&AsXOrN!19VKf!%8;Q9~I_2QF* zw(bm7bl8&qJOPCM1Y7p2PLLdhQ9srYpPwvm!CkWRn`GyHxTzcQfqAY*Sz<03YZdj6 zD7!B{4BJ5KK|s|>U>kIBqE-0n#)^rfDAG7?Mm#Uh>qrDAU=a_>K)bZJvYSkv!DId_ z`a3M--ab0VS34ivEy#28_jrHxk{oQOpTL&Moru`C8GIhvf6zO!`q~^%^!WG?XTE?r zI*R_)=vj1$4cJtalZDk4-|dAtn?{LO++`hmpuHO-3l?DZYdkNcP#SRe+l9y%HiTS* zIKJdIOAG}}(ikN%=*6WPMyWSGh>PeZD$ywD)aMl86B&FS7g-sI1d7oM5zi<;N!e7$ z&qE+NBnd~5jBkrD84g$U1`KxLO$cM*p~xG*P(*+iO+-f9)Yv!%^=7J_MhD?xEc6i~ zDjcNI{OUrbr1AFqjW@2_rNOvGI7f>wn#qsE7{%yVujdB6q`ANO9~*|GydVY@C~JC# zOmB&KQ6Plvy{Blwv%@A<kUooE6TzPAF=695&hK>NdEG?WVZr+I`1nxpd7nkyQy8k- zNL{n9mNSyDu|C01_>2&=U|ipBZx*fj)1>)I*u2oM2XV#t=IG}k(-R7g3M}o-1gD0L zqx70*F#T=gmqwub_%eE#=opOsN&AssHpk<8ORc=$yBE^Im=oLS{@&7hZb-%kOS$SE zdl@^H5FxiM?NL~Ovow4apESXZY{9dm5Y5M9ds`t`47b%SfgL^tsEhu!CEC4Y#07z+ zM<Tz`i#6jMv`bPb%H(JfOVW7ssd)|P`;_#N*O3<JJKdJoOM)+xz9P^k8V%_?T+&su z2`nmTJiPs<=p-EZCZj$kq0Nz!n$kzJe>jMLIYK2XY?AmHk{vdKwFIVi1f+Z^<96tA z_M4OnWvS4VQjIVM-)KR;y2q35V|W3QWdO_KRk#IB?vQ^k*3Js62791WSzmQ5dT)dq zCrb2Xp23F#(>YNY?NRV*`|a?$t{nda@z}@-2~5oCFar~6GA#8%>cV|-$5VSzYVR(O zi>p;i5zrIIrH3D3p*~;7EhVM$bVUxPY?#Y=>2BWxpblnNU<8IpN+A#7qCIq@2ZbKa z$t4XPWBh;33LD!*@h5cc_6$wskM(gdd05of|0D7_g>yV9{PO+fbLN>URaBH%^8l(^ zz;Pz91*L%j9CRGzm=@eX<(SkFLJ9Vs@MkNpp{3Ww7dLQmaQ3D6!3c)1im|@+wpR1^ zt`I%<y^Z~gEkz<dph!<^K_Zm4n1%JwlmR<l&^n%py@3rWU41{hAFi(ab{ZZ%j-|=) zErof4wwA(xLb1F9J;Z;=kBiot4d43euB1r8`I@5y)y)&xA_t*)2)$lEyZ=GEhW^Z+ zsYut@PI`Bgds6A?;$Nq|Lqn4X?GO~X*n*9ZMfkC1UXCrCSgFOt1RD*FNE4L(Fymbn zbn2G=uvtl2KI|*mBSiWDw}4^-f@^bHA>ZI|48`Qyk6HJSwxRe9IQ#u=rN%j&e+9ST z?6Tq-3WIV#t0-i2)Z-{S!k5@s?>aBU-PmWj>Qn8gjUT1*>k6i#itWOuf*K)~HDQw| z&RF|uSD;p<$o;Io`4b_YUd^k2+OTF{+YDiFI)uTBws?20R~RjrRp2BKx~$E+ayd1- z5>qq8xznB#ogwl_nH;mRMfuLk8*<Tm$w~2}lG<A&_>Zb1<jo_o`{MoTsi0&g@6<6< zj2}~v^y0_5@`wAaDb<6z)|9Di*tiaY29%84&?!zuqL1S{td^oG<+cR919w515#%33 z7AQ(TPwULT)b~m+K{tE^zgN1R`^9<2$eyog7*A2>*i`7NJBBOYr*S_q!WToH!+cTf z4#Wq!-6sje(1Qz7sQZ)OBdrS9TO`zw5k0|`UktZuXg<{Mr)~oYv6acGLO786Hd*>f z@u$)&Mg#E=5h;|~89S2H{?chrst-&kAUGSfZUn=t!iRca^n^SR4TUpLUz3$2+kutl z=i%@pbj<x~o5@)DVyA#)O=sp*1$M&)`(!sUXBo)ZAP(C(Q$VTNMcp2~q+k3Pa+@o^ zk>D3qxP48`u<wiisNSC3--)i(8}F%GpwQS7$2pTNIB0;;bc~mMp3=Hw1<xNghI17} zuo#q|RF}Y%&z?z?mJW4^xP?7w$r@#8uf*6rQ$qgWdOimac5$7qpIOCdO4pTACOC=< zY0izeV$n;gh7mPQDe?`+rv1=Pq3k>GeR-?Y%T=7$G+g6`7PA*Bs(5d^zX^^HERAdC zLiqhM_8Dj6-A0THEX^)x#-0#!BCKDH=D5leU;X8rL+mF$84QfZ@}ubSxcAAK-{amd z%y5IfHEV*9KXYQ3eqd0-p)Px?Q0mg4D90uaWMUL>%Nt=6lXx6x`HYt}WBfripW&`w zZss?;u=(K{fuEvhekbM&TVwtB$Xo~qpRkMXGtR(tqu5{6h)+_E_3M<7F-dHTb`Kku zc;iQhjURExGBjeCY;`L@Prg-1p(VFW$iab7ei`I)MDQa><j7Y6Z{nUP=2WN=l&hNM zVNAnR3j#gobr<??8K1L!EQ0TYuJ7wmEiMpv83P3>#8>+)UP86a(VQZD_&KY6HH-;) z1jIs=6bImZt4njD=ObvHfs(=eF$=R>bVx~aRwTwb>oq9c1rme3q9vMfkvCq%`2d4+ z!jlN@p2ubkjlDn!U8xzzI+?>5{0cGxrlR04a(TFzrHlC!=B|QI4(A-)SNj*494KWr zzVg*_Sxov~hBssYgyQH+tK4JWei%o8CT34@F|D<eL+9&G?KdKPQfiD+&aFji(W`x{ zi*iu9)7|Mjz<oj}+4kRw4MVTsTa8)m=W>Wvq<0sJg=?ukkdYmDmVS|#R!^k&_Af~j zs$CTbGs{>LbAB)gawHjp>I~3npoPdvj?M(Pc;nL{|HUOUp@hY8fADpY|CT8^%P+|h zl}B|3zrlNu8UJCj9JAusCybP{_)XMj;zw!*6a`(ND?sAw*&-P8Pi4&1nV^^tqM2~3 z5+se6PTe5)1K9fCQVPUqrP$<v3}be^1%=^Tjaj);_CmIp=?!D4qV_qw@*}z2iHRE_ z9C<uVE=iU(u=UQZ!L(P4(JN42h5KQJe4&|_BK>z_e?^gst{<B_+hV_tXJaRF8&~{_ zGbHm5scn9PJ>H3_V~mt3kxcfI!>L=`Rn?WppoL1&y;CWzJYL6?Sg7xr(P!j<VXN-N z%#g?I*0q5Zg&PWksuWaGF-Dkd9De52x5l_UScs{hnrx)Z`KUfb$rNHJg>>O)|JzbT zCPadc?BLq}zd}_+{l7bB5G)<J#SyjTWX9bev*&c=1IXL|UqAZ&^`oNvT<brIfwrVG zP<Fwq@vBm}XGktKpnwbP1#fI@X(=rDQhk*b^MD_^CS-F((yEZ1j@)#Y!Wdxf@B7#% z^=wQJUwuAC6W1@@hufy(uDWH_)t;_D%bE*oww|*&L4O>-6Y$%?h3kLe$BQ~{rXdea zk%omdl)#V+te}CX0q@0NEuJ3P=-Kdg8_+Wt|BeIRO2ftY*AsXP4b$<jn;oX(t^r;9 z!_qUI|M>9bF#P^Z!yNoB;tQXSyY5})>3Vn8LwKi;`X2aq3@GRYyv2)u8(}yKIGKhw zVfcfc&h<$27+8Af@)!)nos1wK`REP&9Sz-35L}MDmxlXcAk~l1&<Ml*K=Dk14YOZO zmrL;PQahcFyWXp*M%ljJ)h^rPj)0%1@MCFwb~yfdKv-YEgES0<fo1z!8ZLw(7iiEB zgJCs(;yE4b+l*)#U53HHnpz^lz(6XmqT#nNuxPHJ;XdW<r!+hb!xUhMv9NOJZ310J z!ob+Z(!iR!0vM#XS7Bh(qv$dT8D<H_>2fU$tm<|e3>c0EeoVvNFq{N@i-tAITPqD- zlprIz0*0&;U?_v(T-sa<1M6cr4L?_g!8B}#;WXeTMsOqw`gq`@H1vmoHT4%7Ccr?v zoBv*hffafc4Z{)dZ-J|5C`X=|pG7pxfuRH_o<<l*fk<Z~3?N+6_8bfkqU^*YYs2AL zhco%Y;@}o^PX&IP@DoqRT~oVW%D3%y9DE^p<3OgT4@#H;htbdo16{h(a2qIK{<3Ho zh+-h&ej0)>47B;eq2&q$77t(8rn8uZ1u#(H5Rc<`v2DW_CeO7@&&~K<&KEu%cWnR{ z7xDEnJ1xGDzDG<o{JfF24i&lfIki@-Phjm^dF-JZIa!`NC9pu}DV4aFX46DqzES z*3sn}{QEUfJPz$a+b>_}_gAzC;oo)AC)3=t48(5`>Ahmx@`WrliS_&ze)TpzvsFw# zr^{j(*oENx=;&0GVJ;1K!;k|kr{QlfoD95!hLb>PA@El;%!I*l`5g>8EPp|lPhl7e z6k)=s8Cw2^|3;&@t_C@G((o75Z--4=$6c$dk(VK`m$hWSus3O^FZR?dc52r=+4y%- zBCJz~F}R6`FXWDCpx?6}zq9eHq+t?*F`jueTnfXriFkg=^8C3l&$Mm%!dlKkMm$j% zShyX?qUU$Y@GlyUMRfG`4Gp<4u<d<C!vtm6M+3Vwdi#Qg68xjLy)-OP29};@DgJQ} zpLja%YV&j*zYy>2m%bxmx8OGmKk<Bq|8)75F5U5ug)g2FFt8N5GOy!c;GGZR>9}hr z%Ui^8s<QL&g$#QSNw^(e*$R5oz|%nN#>A72*y!S;OCK2eOM7&&FfhGi=@N$F&O~}Q z|IE|17FHh5Pxy}yUk2iL5xrl49}^!-!&Uf^8sSop7rLBBmk04X89(9jGG5p=hSJ54 zv`z&6h6ZMqOm-&?6JcOE-$cXZ$`GUBRv1Wyh;17TXToq7U3!63j<-{2V11rzyO5>W za`+`UPZbQ+K=JH_frRGK#gBi-0#BuZ{|umbI_~;fls$(JQqKn6?R5NO*emhtinC;% zW%!9_4gQm5-l3@(KgRkde&Qcns(Aj1|AGO5J@(=sD?&Y4OS3$n4G)>vZfhFenLa-~ zE5=Ng(X%uxz>mT2py6lut>6nEr+>;vVTp$?49L>+km25y_K9?uHP*!wbQqxw*V8Z# zKhiv(hEn{ZeBmR~xdJa7a9e59fFEOd9zV}Y{ATclPsd#*<fWfwF#`HH3q)j1!Ak%? z@hrxF$E6yEe!?36eup1MK2Lv!c>pi06!AQV|D;X0kkK5MPhfDud<jDle&RtScslM1 zbuD5~b`gG8G2)GQISapQXy}c949*=8S%dJ8B`v&-f*}lpcy1K`o$@YG)?zGYUhbp? zeY?i8|E@-xrs&{#h5z{Qg;n2=so{sG<F32m>wLUXI-5buOYs{oUFoiOEvkhLsoaOa zSr%S?%UJmI2QRZ=&LCr-r3@p1SwrxTnGuhjmXdo<vF-Un`YCLS*550UuJZdc+b>_} zm&2Io^Vlzl$L3)gG-)MY=>17rT#O$x@GuSK_|4^ud^m^r_a7&#sZm`qd+z)h)8=?) z%${2@uWI)Ed5O2O+4Cx6QP1@Gb7FJnmCc(rx1!2ZIcveRD&XvSGb$E)ilWg4v#*Fn zD*_9r&52b6W=*RKL}yh57A=@R@5(^c>}#>QOOJv1v1nla%)o+a^RBG$jIEkKFEBB> zAT~W3TTl@QEm$yr!8w7*?5e8S2sM8GjLy7FT2iUJcM``%f(j9#^bwnP^}P9u<^?L4 zMj(pto<QD$`SYWmz<B}B0MFcMmFJu@EqYEMaCOC!z`Xg<z|8rvc{9LZgBQ=8TQHcU zh89n+sEndyLawrt?gf(;Oq)FqR8OpkhGdxG7cZC{op!~X3b$_+U(hKpef-4e;IguU zVGAp!N9Qkqv7oGA&=u3FW=}7xLYdCHQlBpD3Z~DRwxBGEWTI92^iYVF!D(~m%%47u z;b23%VP*Qn;bnXesbm%XPJ*LQYi^2!yNjNy?0_ndioSyUva*@6dDEHwVe%EUmf`gZ zaDYA`lA#<%FDxBDad26|;N-+ZV<(hO98xv`!3zde&Y3p7V%GdQGb$ET4Jj+DoTZ0n z7fAZy?#kfAG04{Fg~*|kH9=u!`cQxsI@6c6mqLI$i+1@RG$W{&Oc@z;@Qk>)1@$lM zyI^=(*`kVRSC=iQsEW;rmXRa%P75(Z+IAl7_=ch$rY%_FRFbapp2V4`kMyV(+EKa7 za}esg3LIB4qpUKzpsZr9s3={O=de=I_Q7sR6*NfjT~cOYu<83j{4-&kV4wn(;KGV| z(a;ZMA5E~&go#7H5C2S1T%DADQgPY&J4i!dMo{wU8Tr2KW2g5$_$Oo9PA2U7IVAqc z6jd_&B!<!yM(A|hN%3bJJM-U}y&djg`0s{4So}ZKy)(N0Q}#ApoyBLne_#Ah$9J&w zQ`1W|+u^^j{lUW7?z6gkJe#L<E3(bo4Ea_Gdp^(LH!Z8H<38sWVeKj8^c|0hUq4S5 zTYMCD{MV-3IpxQb=I*DAi05z#Y3>2#{usnZH+?Hq`rA19#lxuyp0w~{b_j>g;`ej* zh$nhva{MEiAw2abNjx1fyVDO)49C+P5YTD-ZOVNn%E28ztisDJUQiDsnoQ*f8BRRA z@gL=%mcKp9{Q|gT3SY<xAD+(gU#i?W`^d5<B_f3USE<}NH^q~de)U1z>y^8zrnK;l z2MOP-+{boHF29FV`S}YZVW>VnY4HaR;-0VEJL8{H<*wRYTKwe)iNEq7?$rlLzu_S1 zH!AmkAoHmIB2fzXw?&mt!ysux1+|<1vTu|2l~ixw;W~=jJ*?cT&y()Wm~pz@Z&&Vx zD#bJ4EhGOZ_g7GI2#^2CPhqh%4+dlkU#;95(GR%OZ&vB&t2z3~DfHd?a~W^>c!_VM zxVI|z!V9JQh?M;M>!p45WQj9V!mm{BdpNblLk+u|zHgQLHqPepJd)x*=NHnxzDy!p zw!8io|5DmFluM*yAyfPIPm}J)%knLfCa76e`1~uR4T~#N_-5sPTuT0i{7Qz~hPfi2 z3-HSnKEFaZi+O)0_iE+NYRu%`rrbkt&s6_`nKJ&3fZj)BJNYYD^zBjZyfM=4ez$VB zHM7))X5_!CWc*woaEEVI;j6Ef?o1{V{d<)AZ3yqK|0%c2aMg1qs$mqqlAn6z-dX?L zpxg@)EK~VxQ|@ek!iz-bzki;5?JWI(a_=nteC2+sj3$l#a^-$PC+^kC{m4$->y`Th zaCevg{i^&5=gWXQJE_0?1=5|Hh%(i0WtDXQnWQ|8eh(KX@cbD+q@U*AsN5gyBz*ZI z5nSl1Gu2PMavuh7ncUlyyH7@wmi{*7-dX+ZQSRL1?&iNXRepgbGUCqaKVP|b7Js2~ zFYJW=YUSP;|1};Y{pN$D-=^G8?xcJ?*Gh-Z_%EQ`JLA86<^Cs>pIg4&ugY)RbuxY~ z54p=XN2ueml7FLgr?TDcK0~=zR!jGv0y6a<ZOVNU+%xe<!!jBEUZkJNy|7NY`(*m~ zpZt{GB+Z`#-1OBe`buw>?wz%t`sLF7C4jqqKBdA_Zse17ZE1LdCu_04$6XjnJ$`@B z9$qeX4uK&TzW_g!jfe9LKHlB$NsFRh{+qfKAKAUMrpK+_t!}qv{~S4mLL0x!@SDOD zOn9E5B_40_`_jS=r`L!u$4F<;A*jf*(`VYGahr<ARQ^16_~M%E+mIstmEfmcDx*I; z)t@rc-yHnPl|R*Pu<oGpq5Lu5eUX1VKF(kGcpo`%z8U|E__fWDbR5k<d{W}4Kh|lh z@^>IQ?gt%>${*)Be7r9lm=4naF2e1<M$*Cg4<GNMt<u7#Cz4!mq>BrAdlpD<2cnB( z@)qTf^CLdq;*|JP_=558Lj3+~W&DqcQ21xl<EqbN5dTW$Z+EIc#W#$PbW~m^<KsL^ zJQ?Df0e>s5KXAT8{^74$`Lo-HL*J+x!Qb@v82l|({(7op9e>J9fA7Ly`62krM$DS> z*ZTnRaj~fIAn}R%hrc}KkMl1+-mWR_FH`+9{$;Y96uTwrM@A#s+hdIX5d6Ihe}3if zK<yzr8}uoEYQB~+-80~CPxZm+n*@Jb4#6Myc{MA42cqwO_-j)BI-`&M9(O%8D1ZM@ z<>h_+T}f~XU$UNR;lEtvoAW$A-bYjXr_>X}J%w=lm&<55|KsD`aPV-SBV609G92fH zBHU{S4wnm0_aoetpUZH}r+DoAsCGg77nvXBkMqVPe<}H3yx+pV=NB^G!P0l4-c`KJ z??V`Sa+E*LC;52Cq|lwx-!R;V2v`3b89(Qle7x_ZgiE1|;rgO3mft1AasJ82yY=AV zxYIBHzhpShOGUWd2M>2E!VUj#8IJQ+5$=MNem(=88xgMZei_c*GUmNHC0vGb`4-{w zR?2Xk--`6^J8(GG?+}!I!-F!Mt<mx>O6ga|CdTD=kxunP(!aC7Zu5=m?^)irBHmWz zkMm(Z-h0#HO_DRnKO+&Y@nISNZ6Xx@Wr%+l{N?;v`r~|=kN3Ki_*2T4@!ySbo<<pt z^Jwv;#7}=4;V)15)0DSVI_Qsdlq!G42k>_cWRAtkUntd|t6gyKVT1CwQTg+}l2VUj zYP#R*NM};6`xfDb|3&7D^KU-h*A5(x_5TpU`Tr`zaqJb3T^=dr$9kOsAtLaY^lxwI z^WK?~&bVaySWd?vT;3`fZl+8nW4&&Kze?qg^LReqmX!EY=wkd)glk<b<5yyBB7PBz zlq>IszeeQ`ukx|;>+(lBRw#dk%HFAem)x++6<=CE>Wc4}BQV|^0(~Rlui+5rn*o2z zmA_L{>2sxfEBw_fe`;Qqv0NT=#n+jfAnLy->PN-*fJ(<(mC_%k)IZDR7=+uQ!cl)9 z9=qIA>XZIU;D4pML!a}Z1Nj&A5C2V1%KBIOg|vJ!-n-#1@RamNJ%e~`I#TFnyf4Ck zgYvKR4r%ey-{<g`_q2@nOc`s!pNn7mqHyz-Kk6aGW2f)(R|0?hMh_pQk4VI)f-&7W zuJ}6RXEFZuLVu~^qke*q_v5!^0(Sai)8`K_B7Xlm>Fq%6>T~$puj22F4$|8fbZk@p z3P}VXJAHTl;m?kb^(G$MpE8R4!=L96=(`>Mb{qnIPr+ZC@^`XI$Dz-a?uYQVMfp2W zyXuL`v*SY%$tNWr%->V+*QDa3{)3Nq{#(iQGg{8CS)aS$e|WQWrapv^w=BhfO1omX zTnM|R8)P`@N%(lHQo?26gV&MXl#MbR^(W%7^WmE3eG7l}%HO6`f3Er^9mAiM@ll^5 zo-T{j#JxyN%vdgA_-kyH{-{?GkDYD`oy=c0CR_E-N&lZK@7{G=q(vv;n9gHJXUg-^ z+rj!9rZWfW%z8okf5}d#CMBJe{^Sxv?7ACxA#fM=_>}<P1D*_=1LTKSh63LOz6*Q~ z_zAEPI2Skw_!V&L%@PZN55qhh$oTSsjPFPw<9qWavAuhs31mF;fsAJWknucIC-J6b zGW-p|ZLqHdUJ2Y(E$y!aGMzGIJ`c$FpM}1S@mvBVy<>q)Cjfj1m;+=uKkzf47l=9; z*cG@G_|6TO`vDgNq1qcb4M_WU@sIIe3}pPXulIP~2fhJMjPE7jF5nZu_kgv~8#3K0 z;H$v?z+Yiwa&O@Mxc+O?66ybDAjYh7FH(2`kl}_Y_dY<<{ROtgGW~0SbpHr?U8eVp z!pDFg!2A&KG2q?62NCZr%Kmy~KS$aBIws>Q18#-?AdvCq0;9mAs$@RbL4W=g%*O&j z%D_$6Nb^w&BbCzJHecc};KT5DCXn>`fTVlNJjFjirt=sOSs8dU@Ry+T8sL2>ms5cZ z_wihh=TER-t?&^b!~Gga_iKTl0v7;T-m?{!C_EFm1@@-^yJP2jFJ<2y_!jK9f+*rf z;NO7jfb_Qz$Z&I&c_#2}n5Qc9BxN3_%%hY!sLc7w++Ughezm0cP2k@V&&$gE1dw!F zz&{|LRltW}zFOgQ;69i&;C{GIxk}<OK=O5bwk(go0m)wmknv3d()~Cf`LlJFbhm)J zU|s^Gzx`-T4+HlAY5z8m_O}BW{&L_az>9#4f7?vy{|$vN0U7QIAjADy;T#~tmnpme zh^9GkIPj0iM{gj*y;~tRhM)T+kmf%F8P9xWo(|jw^Qp>wymCJZcn<7en<43W0m$%8 zK!(3tnHMYbzUh*l79jI;voiMwGG9+#q0(3Q8zAFZqOeloxj@o?Dv;%NB9Q4Grrh6~ zCd0j=@HXIiaGwukd6X+G05YB)!0oW_0%U*lb-Cn^e*zirTR_tBFz^rX|8w9&Fy9Ph z`ZoeU16~W<3tRyFJMaqN7r>ta&&A(FU>z_FtcHC7kn!~g?uPkzAk*&#WV!AwlYI9U zkbL(lkoKE^BY=+sAtMgFU%8t=(o+Lm3%mwMy33XM0);*x>Ffd|eP3Vh@w|cf_X0lx z{sR~Xz7Kp2?r#FSqdmR|B%K!n8UF>qr-A1Jp8}o+Tn9V_NdG4Q*Td{r_D3jt?!0IC z{ZnQ5zX9p*MIghs02%%k;A)r`EBpD%elqYq*hheCfg#}2z;l340M7!lo_heBf!|&x z<J|{jyz78#VZR#4a1Q{V0^SK^`nLh;?`9zVT?eGUIl!lY7Xj%n0;IpuK>9leNPnjT z*8qD1>8~4*{=U0Z9HJfg3Xt{G0wjOktZ=Hr0)_2AmF`a}tXDWg;c(y?2%ii58khzA z1o+h@vOTQ>(*74f+8fIL$G~jRvwn&=;?T!Z*bg`c{*D6bz`tKC>3kbVI{&QjB!zn~ zlJ+gYMz}Wuncj^+rnd;lc0E+tcUAV^OqTYGfGmgkK*s;XB<NLurou(Q4KV*^qO`wS z;l;pbVE^$1Y5%0cKLVeH{bLu(eANO;M*)!O3;;5n?@A>;sBqN<G944h^yetNMA?5Z zUY5ru;6LHM63BQj05aY&K*oD!M8?wx$auOc^X*|7ZVB)c*q;G>7?=xu4|o{x9N_+O z()=-y<~HCyU?Xrp+T(EL{>E6@A3p%x3U>=Q2Y4Eg@jrmdqxk|L&095bQfT0dz#}}K zA3p|Ux(y0{4g3n`T4inn6TA!ae*;T^7H~fBS|Gy@06qe97iGVDw6y;tkoHwT`Y%`Z zVIcEU2xPj$l{p_c59S=;*}(2Vru%6~%DJxsX}%D64e)&s!|<;FnZL<E=I=b<5@0@% z{+}+Ea^i1+EVm1Rm9Xyyi~&CzCF7}AcoUHMk1BIpk&I^wkp4#kSziMb`hcvL&kAMy z>wybkUJ3jO%I7!02as+INIHKEB%OabU)J00K-Sw5Al-9-bpP#nGQKJx)4LkD3pgG4 z0dR`44=FqyNIH4}na}smm2_+bl8#kC((y|m(>WK&bRHjx^LM~s0%<=2Nc$H?Nc#Q? zd=%!}fe#}5wLrR80O|j5WxfTK%5<*+lHMzTr1z&l(tCljAF1#sK+@X{$Z($orCjtr z@XxSc1!VkFflTkA;WEAz!1rJ-16Bh^0qJk&+0x&|K=R!nAno5CChbdrv_A<*`<9{7 zUI((i@_{U;en6JfS3{(~-vXKb0N^&@VZgrtcMg{2(FUaZZ-9*V9A$odkj&RFfGiIK zxEHtt$ojq*_yzC+;2TI!1AYWN2N(wq2EGRO(}CU5KlcOfhPiuzjPJXASsv{`md8A0 zzC@YN1cDU?o(N<)U3QlAuL0@57m)V)nX+7dJ5b^fAXsqVYiCIFX$ohZuIdwrDjPUj z;rpjadGT++U9f)&$oLI~OBEIZ|A>4AflJ|jDsU0-Xdv73zXsrdEXqF)+z0b3!2R(5 zN8rz3o&<a!I7Z<)z#Cvb7D#_D=gD~Q1Tx-oAmbebWci;4Wc~F4lFlQ6<jc4FOZ%6A zO!omG<1112-GB>V|J13nerEtbf%$_|q}c+}TnS|SdvaxaSqr57BS6;oJRte>M< ze=P7pU>6|s_r%E(qY5to{t50yz-!@t8n6WTB_g5!1qxs7C-c1o$b6p+WWGNM$b4)9 zg5?K34rDnz0wf<+0$F}zfoyMmfaJ#`fv+Ro?!bQl_n(BTFMyu{$&c+o^5a$@`LP<v zc;_lS4#@KT_C(1CZ3;Ikyao72#8(3(A4Gwqdm4~*j{!3L89?&Ur$3hR)OLk!3fBPX z?@=J@aT#zMa3Sy^;B4SpV7bB&kaV{9mGQ1pc)!B)fvo?NfUN%<Amjhn3DW;Y;3}A( z0y5skK=Q><;2hvP$IJRI1HK6J#lUsI2|$+Dxj_1h|491V0wle&fqw;_tL*cE44(&N z_>+MQ|0Cd&F!us(0)Cg{@w5Q91HlSEejP}@dKO5&x)0b2_uGIk0c(J5K-@4U;=2II zavupi4|pQ*9pIbCiQ}#VTY%5Qyb{<1ybnk^ehFkeQQ!-}Im%qF+%E*Od~}890^fsq z-?1|MPT(?_-v-j(W`#coJ_7T6AoD*R_#E&8Ak)==Pr-aPkm1f$xVw)G_a>0xo(D4A zY9PZs0%W*4Aj4g+a5nH|n5P2iUkB3vDBv2Hj|8%vtv^QM^$LFqWV?L%XvrT>0GYqv zD6|wV0~W&mBH)`q4aoTOl=*07-g=az-%xlVa3$g&0sKAcbs%s*%-w-!BcA7bOFn*F z;g!H$unz-ChhHIen>4rhWqVr%Tnh933U3B3f_c8eOMutFTnr>%9uH)^M*-Qsp7Tlj zyMg;)z8*-rPE__U_LA+P1~>=qrvpC${^dw%o(iOS43P0}=_&ikKLKgK0=N};DUkfE z1If>41If>qA0g|Zk3!yu!}{UvH>{7(4#Sm0FrNp!9=O?yr2^n3K$hn?Aj|VyAn869 zI27)0_mJ+-0C&OsCm_qsP*|-n0{kPwoe6vx?x!mIBNTpx%4N7Mz#D=00a@=WfcWb( z1OFKALWP4BKHW{F3uO3Z3M&<c74}hhn8MexB|R?!S+8q>tj|9KS&ugXSx+;8%x@X+ ze3(ZA9|0bvkaq>K9JhCo7*jYA$Z~x;OVI};eb+0jR5$}jJ`Vz!U+y<!et96BW^8^G zX0$bt?h=K?K-SBdz~7@@0zlHqweLFU8%trn3AaaRz}ta^z;@tp;OW48U@kBZI1m^B zUI5Gi!cQ--ttSXXHG67+ZOBhOuoZYeko#X4UnB4~;7Z`{fDOvN9(XUz%Yi$9)xcYT zyz=G$u=g$SaaGmcleV-03X>vW5Tt`tY{f^?Hf=^w6WXEYv@<0T!15@QkS4U!M`&hB z5eunFN)P8A&Alqti)eg(R`0_q7VE{*DJ@OG`$6D(5k;j6O2Z&jo>d<C{{OZ2K67R! z6G}_H+~4Q<WwOtHuf6u#Yp=cb+WXuFw;e9?FNS+7+$Ok8w*c-Xa2w!W3fF?$2Dc9G zm2hj}w!p1|dl}rxa4&}&fx8H9CEQlH6>$FnZV2uZaQ6d`-+;RhF6-S3cM04*a36&G z2;9YR2jG4Z?rykO!_C0`N4T5deh%(NxZi}^2bbma!u8;;hua6YQ-`<1{VM#6;j&## za2>b{;C=;e16<~>gZs~LYvD3o72J#9PKJ9i+z8xexRr1h!mWUN1>ADDpMV>Jy8!Nf z^ivY<KDbSAQ5Mgp9s3B}3*ipHJsa+BxF3a^feSi0b`#ugxEtYq8Ezk3X&2lW{OjSK z3%3(4-j8jE%k+!kZh+eam+2eeei5z(cQ4#JxaYvFg*yvw72KQPM&N!4ZY5l%tAP6? z+;X_Lz=b2_)sDv%Bq04NxGy0*0vAmk8`AFnqgDJqxQyQem+=|x_G!0MyG`0%0GH)9 zz-7KV9bT)$t8{oohga(G3LPHO;d{V0r9SQUX}43mP1>!~ZbZ8w?d~~J<$nY&;TeES zcrrS?PrIGkZPIR?b|cyiX?G70DDY^vPrDo7vix4SEWcBSH)*#{yAkb%w7Um<S<2IH zpLWU58Q!Gb1#ktQa0Q<_Jfhu79nage7$4H%d%)ya4*9*bAFi}thi}p0yb6xteLB2T zyG`1y({4n&m2g>J1zf35hwnK;*9TYXgDdsv@ILKs(DA)GzEg*<*5RC2n6F8PFVNu) zI=oJY*Xr;p9Ujr)l{&mahlh0d{xJ%!eQ;U+9=L)Z9X_DLGdg^W4(B~)Oy8%&JGI-S z-8${o!ezUw;4*zghga(G3LPHO;ro%8>G$EEzynv{(cuF+Jfp+=wA-oOChgW~H=^B; zcK3iUv%HLUx4=cz*iCSyJvzKoyG`1y({4n&A?@x#VN#xU`?TAs-PLeeKKU}sZ_?p) z+9m&GJo&HSM~9Q|GMs#u;UOKq2Yd>zV>8;_0$1RNEAZ>^PVF{nw@$m{i&7t4sZWQK zFG_tn9FEijahK^5r=9~KkieW%{!+d2FTI&5@o2v}C;aI;6@RuXv7!ACVwm5Y<9$)5 zH|KJHul?qn>BYJ}bFT6M9X|$>KA&!rU;D4nesfOp8y`S@81suZsPw<8Q}t(b`mbxh zIk&h(`^`DUS-O66F7c<jd~*)*8tpgd4(DmVIcHd_{pMU@zb@aL6TDda&AGq#>h$KE z-ErD)&ei?M!1wu(JhQaloO`R%eshlN-P&)?B^{;x=A2EHZl5_<^Ict^IY;v+o!*>V z`K<Pvb0{CeI*Ya%b;!r(RN$L_b3S~`Svr1}ieLI6<u~Vx+jV@q&i_TsC(Lio4_~VN z<~(o%Xov9?)vCO8qjdR`m7h1YF}_O2zaRXKesiAnnbWl&LJprc2%n5M=RrR|UB_cl z&F32*QGRotcbtaboZqGV&iv*)s&l6DoAdQsb@`cy6c-wNzlt~K;}bf)iiHfL)0^}0 zKhx<sKl0gpjLL7$k3Wq0ob}hC96sOCesezk-*o<gh(w1Tko=jDIbV6?(afI-^);#Z zp%azgoWEatyz-m-2p$F_V0v@@^%9gzzd0}39aesG{*|_EjISG~%70>_@|*MZSsicA zqqb>y%>4yBb^n_4#Mf$iXxIIFlj-lcD*p!EALe}fSvtKr&&_U?{?_=a()pWoc{_ni z!RPs^yl?6H&3WQ&I(?_kzfZ?^>ikFR@vuqzAu~&P?K=G#l0FkM=U2ZC`GEK_=QXE7 zAf>-)xvKw+Y07WTo4yD<GQMw_is!nP{>Z14|93h+m5zK?PF3-pT)5$(JjV2O+HcGF zKz?0cC(<z9oL@cSSmih8Wjl5Mbn5#5=`<B@&a1wx%ggBU-y`_Ugv@!wuj}%vbo?pf zRsM+ff9>7MZ_Xe7;XTUVx0cXDCno)w37PYod!#=yp*>hU^ZBTzzh3QsO_$%K{a@DQ zne(Yno~+6@=kbmLA7T5=`Mn>Wq5Qq;Rr$}oOZn@1l>fyKDZe?dJ!6XUoAaT+(*4)o zsnYMo1k3Wx`PP{B59s(WPg3#beC)j+R{pA1mH+jVl;51sr9PD9`R8#@Rep1R(tW3n zzftAi`d;NX=YP{!7%{&&FaDCwZ_aO5YkZmW>Qi-poAclEG(RxsIZr=bl~?ykRiDH8 z05nl|i}IgOe3f^G_F@srXWj>uzfb%3==d$#|3@qqnVySwK9`W5;jh#FT~XzKMEieO ztJ8l?r5`^-`S<Dg-^^703LXDzj8m3Z{#BKJj`mO1@fVQ)BR-<z&(ihP>G;gqD!y08 zf9~VTU#I<deN6eAbo%xWz&{T2&6iYtGuYm7ouR4?%3no%z~8Rpf2QNVrTwcus^T-+ zUq^f(eS^+_GvR~3;>)VM)x-zmZ&m(lYLvfSr$1+=@^AWQ75|THKl5w<Yorh6*Znby z_<%p7%YRyzPo)B%PZ1x8Z_@eCAU>F1r@xr^fWKG6^9kYu^kHuQJwfOp6I!7AYb@Ja zo(b*N<-bq*KNG6d@egypMtrCCe@FT|6WXZpKb`O(eu4J?1Nieq&^whHe7*%gSd{<V zAIbNpFdl>P(+m9ffUgJR{{Z-d{)q+gylXoc{{%ci|6<IyLI3yA|3UvC=I5aQG00Cr z|G0wsu6<{I{DlSWeQyCgGYj$`RZ!o{1@K*1;C}}5Zx9|{zaI2c-yZZIgT4>?7Zjvl z3;87&{{!&<pueRceole^D+T2pgZVd@fBEQq|F;YLXBXs;6yT$GLVo^p3(9|>ApO3h z^3x{@@ZWY^etcztzpJ3U+Y92kzY=U8FK7z-zkPbXf6MrM|K$bojRo*dEbw;~__r7M zG2P_V|4IRU9SwOU2p{)<g8rcb{5}JI5scqi;C~VGe=z<>1?9~sfM-Gh{-zYb^FTrU ziwnwozQBKdfq$?dKgc%^zRCiB`8oOV-zn(7Jq6{TRsb*C9&CRoxvX_rOZ#=9WHQ;Z zx*7LFrWUVUajo$h&!vs2XsUJPGF<wYYF&lcOBXF|5O@AOx$`o3?_&+FZ%kbmD-|8Z z#i)taWh+*iB>IZVgSxWuFkSgMb5Sd<LtXJ!KzNugl`Md;xEE%ivz9fl*4;3jH_BGe zl#6O@^dxU_<=w2&CCgh@w&Dujl<6-?StAK+nmg=V#4tD0PQP|>v!79QBX9Clm&+!3 zD{8W3#j<59mfP_wam^~@grbs5TbEyzTAY;YadpMTWYn^>wRxoht0;O#YK7dATZ+u8 zXLh8TmoI8wxoCFlswK^Gk#4E9Gh0?(*?QHI<)uKGkrzD-u3JXTUK5O+7esJgL{Sr` zFKcZ!Fa@*CXzn;?#fqgRQ8QCtuB;Q}I_6-mSe;s(Os-g-{8a1873PXo-Xv=(545JX zxdXQ=;|}4xxM7H{2G{SlwwYAL&E^HpCN@z1^k6u1>6>AL;YEc-m#<j4ta)jm#6ZsK zDqIkayQUk5kH+B0k1Q&EM!J0wIHCsjZOF)~Yc(fJE^5`+H@_9o9ww$X0<`nqj>xS} zHLtv?Rb8iS2=-9mJX~mftKmFcvo2(ir7M;j0zITIKTN2cSpZ@YN2tMcx_pr)hN9T% zfym-%WO~a8S*PXVf^$J2_|W)#HSUzo=kxhoE$ZLUEf<Nm;J*44^Q>&eG>wT~%`FFz zXKFIpylBw@r=LBw6f*r72&b*)vV1?V2=}wAec-C6E?Th+H|Q$?#E+0H`FHR8ae;Zr z4`X^g2l-)*sp_eiRFW&&lJeC7KZ1$#F246;4uxYJrjhuTz;>91U?FTppD)10=S5#H z2wok}j~5gaa<KQ$`^6OWuD<5{t^dqIUWL`cRoCpQ;5aFu;$U1p5t^8{BN4t8upKTU z%!lou>BkiFH=`e2;e{8IQ3bgm7xfp~#i7&>ENiDi;7YCmm~8$b&CG|1WzA5sSnL7- z7v=XY@EMu5w*cJ3L_h}s?yxg1zTQHKa}j1;EaQt?D_R^Q=_mbZk^M*gPTR`X*1S;Z z^W5~w?p=QEGU;W_5)O*LLNLGwYErR=c`eJ{+R_dkwC479%2EXFkPDlM5301TT-6#2 z7L{ZB!+c!lKxQX=>ts4Uts@_wnKf0)#^-sOTdq#FEWSF~*1Tk?04@@w7C>r26{56> zee#nM`M2UIfDc2iK8b&|$;NY&s`h}mv}ARxC~OAM#x?if7S#M&^Fdsa!)V^L8U<eU z_gGXC;x#Wt^;9U(R;+5xOBE=5R&|UyW%!A{Cy8$;wJbJ4AjLqyQhccj-la>EzPc3& zFIs*rK6{kB03YvJ)=EGX`wq&P5-RMwAT&TYSEZp1GxbU(>E*4f+wm!=Rt8@>KL9m) z4Fg0%gUgLT@FB5>W_)z(s^xwahgOz9o&{V?Vbx1lT!k-MiFy(AX&Mq}9y-N@{;dYe zv<`f%ONPpog~$dpDoo)4%rgZ(%`aXRf1K+8`A2g4($<a+#X|zzq`D?)zOIy9hA%-a zvF8FLVKl4_v8*|{M5~CIAM-Wp)Dg?^l{5*&cX*aUjBY>g!lcH!d{-<8ITXSCE}Ht- z)Do6bl~X|Gf7^+l;9>$ydH6J%&Ii?TJ3a|zF98sUR1I1Zi-|6|@N-boglc@#3%YHr zM$^leT$4uDSZvt^^WIh<V)@&~!Q6UHx_K!9yg(4F`#ebmi{{*J0E*FU>R+W#T2?IY zNWF2-$d}8|HL6(Cq2w~E?`(XLs&OvZb!n_Xai8}+xI-kl{1ywbz13}=jYf^o=5yKR zIU}|?k61~H2PO8zhWRet2$bD8Gl`kgr)_w1)LjDspdS9%bdrlLafHkCXl{ts4>v>+ zsD|iB9sTxgbaesI5HlkYO(|-RGvC{m)Js84dM$wZ;J%1>m=-TBOJj}mO7i`;n0<h! zD``PbSO>uq^-ze#R$Z8EwDSP>KZJSEBR(gpV_%L^jolzT4sb?Wm-CaH$t7*}g68Iq zmE`41I+ATGR$dE9EXT_)M1R-FWZAK@dInMmujhwKmmoXmTN(Lg$eZtSHqJ`MqS#5p zZrbveR<H_HMr>7VIv2n(#N$t<=f9PZ)7(fA=bXQ7rD_QhsFVu8)|RW|OP2BTrRJN1 zMI4=<NG#G67JugyWW&J-Zj8U6u=7^Zj%q_~u>6A?@`p*if+2q%=<skgAKxd{%W}wT z`Snc2o{I=TS2kmH)Y6)4Zi93R^#T^&DSUSnbK>yAlN#<dL71x{q)J(8$@V65*P2h# zj_|G5=^fWLx5xP5&j6|pPMA<*=`AP-%L^b?7gV%<r3wR!!Bz;HdEW+ZEBNMb8yHM1 zSc=v>9CZHtQHn1Ct6?@RiLdwuke9a_%9B|BCTogmFj~>yqfIVevOJ}i7D;@#If>oh z4toh!P$0tT?afP8+VhsEPrfRluUJ+ac{zn*MiBQK&r4Fq1uNpRtEwc9-rD*14cm{= zdPr-?H)yndV2#cr4Dy5`Za*BeFWeS79P;~AP=O&JwJgoi4y1ZTJyWaOm$bIDUb{q0 zrm)cC<eyA&0a%ktw?haZjwuBrD4w+Eaxe;!DY|2ei>YnomBEz<LQMaA@d}hE+yHHj zQDTnxvXi1#IsCY4SOoxrGe(K8J1b5xtm30_DgkFZlrD##ydGBhA*~yc&ZZ{k=J0`H z^;g?Rz(;hrRb?~@m}IG4Ogup~;WTJXW1j@YYA#h22jyE~>@bF6GnaJ4s3zg`rAsQB zzSJyPDprYAC1Yh`)Uo;6!TcKaRHr7=;`D%_Bz%AXn6Iu<Ca(#ocf>y}LG9bJ6^me- z24h*7?~2-n`rb_59Fzx`>q1{P9&WFx1W?t}RxA&Gp<HIa{BMo3H5Xnyj4nhX8cRhe zonW4FUBRFPlX!J>7$zwxP#LA=mes49uUxXKTDD`Cz?cXNGEqOuUf^&ktHq#a*ksZh z`TOXq1P%XiQMv`gL>0HWwr%B#Wn#h#3<ii#HMy7;xX*GR=}6PVr_0etsT6s*kHSpH zY-%7wV^ZhO$3lGyHlJ6fQ?2JTceJV~gN5R#Vk}h8T(R6wH)}DrKU!lV(@*n5{epw7 zQbQvuTV5A(u^S+*+E1)plH$TU2u^;Wk#$Szt2u(+HX?*?>@Aov3Sp(sRf<00AH(b( z<W1jy6M1<gSRwsFDOn2Ew^nXFFgPx3G}?ihD{;7C<#kDajn`02tQ=X5)EWf&pKei( zmmYFSZw@BV1VAbnE(ZtHh(#%Wo@YH29CX7(C_YdeacK4<?1O0qeGr>_K?C$~7s#k> zU)tQ#x_HG>SebV~dDy<#jxWLK13rk4YU79%EA2)Lvdp=wxLA+He9KNCp(=?*C&&@1 zH!6^YVBd~5FC}1}YhZpOhVVC+QAZk-TDBBq7tMabxyX#zyxqjy?4<e&5`k*{+e(XO z2F%+QG+!WuG-Ws;#sXitZsM@uZqx;dVVL8&t1xshG7DJIL5|HiGB%-Hz_2Av9Abwa zCa&>Tbm(CP?a(^(u!81KbNRF;d>33<Q&@1SHKb6YQ3sIIuM-Mqv15nw6ALkAqcA*C z69<KJei0yVO>sVS!(v1WB!$CE508;?GICzO-UDyOu%f~tpk<`;ih0d&(?OB6et_FM z!%sNXGkwFaj`P}PaV06zpQy--R|bbv*VL+@1=(9&U0`V``U^8J9tysEW_+-Q&-r}w z&`L3se`uu?iMJY0Ib%-r@xkJ3KISpoDBVokDdYr%<HKBEkuZLk>oYv%4Mc`vxhtjl zsc$UJi&$WK|8UoHfbAKcj~#{v9a=?mX3f%O;7QSxL_>ukwZ%a*i-Tqq2h|h@O)n0b zRvc7Y1VgkqXj*Yl&CH^V(~E<q6$eFU6lJU_4jCqBdQqzB!vsw$N;R!GX!_LRRK-En zMTw%tLDP$arWFTGEe@)##z;zDwR&~39ZTjF%S9!fTvb(6X>mxjIB0rt&@|i<6bc=M z=k)3iPpyjNp6Z(F>Z#Q;YNIugNKI8WB2;vBRn?5?(<71S%&9YHNb;tmz%J)3TlS%r z_I7^dPCXC&^-r(kx}-8(%Odw$;5wF2C;vt8!*ddT<@A?$tlz1KKAomY`%z|yKU{wz z5A=kst5ezoCz-r3w&22?-@N_u>*|f=vB-fxghEI1WlX43#i;*4cMA-Z<<ufaU}1T` z*5&LyR;B;+|B>$;g(}CEg>Z#T(UVMK8v&-TORIT<Nilo_n^YED2O>}VW(A-2s*8<{ z2W~Rin8KY2EjA8uFt`xDJ-WO)M&jwz<xK{B#9MKDuk7exxPFq!+4UFJ8z1gt)OhE8 zC+1<Fny1XXXcxMEn#1~`h2=$lprZ6OR-ufBuL<zs%9Wz0xV-%S&FJ!YpDmxJJM!_T zLUaF<N!$z29Q5b6w;lQU@P1o96?dxg_5!};Dk$$i;KQCU?pDyDh5fPqKUBmAG;vJc zmY2PVW?*N%0tRU4U0K_sfAitn@>7*xUn?0}uwCwb4J|mTOvV}SsR=&BAFQ>pXPs7O z6_WAU!T5|WFQe(XNtf4z^8QmL%p+@TnJ>m+rDhy=kf*S{oj+6In{eL^pU8lMFN2G4 zNh`QEX|Y7;f0N(}?T^O=M0i*kX>B*s&q0RT_m+kJ^<v2vYG499xLQko--Y`N{Mzw* zv(H7A^9Re>Z@INr&roWT<yz%d^e?FsEbshRtto%CUVg~x`u(d`*?pGNP`+@G#V_2^ z*7l+B#BQmI`5PN7=astf9WU)=kmVi0hFH#MYwZqRKYv$7ypO5auASwVp@d-m`cKqf zTz^shg^gC%)0MXKYTf$uFDw@qYoU~`Ooi=?nY4}fR7wH1v&-&3S5O7FToMJ-j*UCd zTU|RMmZK`Poy#YcC!ExziiDS%6p1@8D>#CAW>1RP{oRv#foJxO?R8J;!wbVUGJs)t zXPCS@-IF%pJ?`RiH$-*yS0tRDPTIsQ$eN*x<hxCByfaMFBI_2N?h&1CkBLJ%hM9B& zI^8~<Zoi2`I)<5ad+}bst9z2r3}4DfJbW1?FGxOyFL(%6Io`kXFW;NW_qsqhzYJi~ zR0ZDog#Z&C3B2=50Vce{yt_cQ<#oKv@)}RJyfwcNT;Ck~#rjz%?V43tX1Ukbk<Ly) z4^>#s!rhiT&T{LjEHAx#XuxLf&g)MKrRMa<cC$zn)r6uJp{U(blpEXa%({HntOaF~ z7|DnT%e#G(IG_KKI684Q=EuKbG00b{7}nYKuZZ8(wGscztgfAvm(^chzp(y_`sBhL z*=TlVwkA8xa$=dmUKWEFLuSUc+%*|RcZkgMB)or}q<Z=*lh~8C_fzR2No~77lCJiN z8Ge#T+<8{wb7c2ZMOKI>sY#@%+jc)ase)KPLP20a2~PwEd`rgf#f_HpyzRWM%2(sx zcE;M?T^#?K4Oq@^CH}JdD;DmsoE-){(>AaK4Ns0AtmS8>L$>oGxPsvbE)hIne40Nb z+;n-6NA%nMb2N{bQ;s4+dFjW+omVuEh&zgFX*K~&+1{tY4!krt$krx&G&}CJu2&7q zu?)-US&S$fqj{6`nHtpqtTW-ME-1wT63&lwSKYP+Srgt?c33?6O6v0P#5&MmV+8ck z3AilhL0#{>a;xXw)bSGUV9d~)eldG`cp}<0tHO#_rryaBCH|u=w;n+lhL=>N_r;_8 zf$Q`}+xv<pGsR>G-f)ZuEnBTyrl?Z!8Ycf=z<=s*?jiHrSY|o5wWAr~o-2ss=+mi_ zY<IIXXze{5Kp?uf^OT@B?oNxJwV90$ck`<;ac@~)fU`dzzCmW9w(yNT4M@}`k3av} z-W978&I@+e)19_^M<*%GOg#PT)|2w^B%HR@cK^Cg@sJi{>p?2Lac3DA#hSjh@CqsV z`S6XgjfmKSBES)QE$2B+0BbVw=(DMJa1d95Wezn=&Q_@Lg0lL+4Tc&bwmV<Q<lO|& zhtDdY7u!9zA|9<uz0>a6MS8K_V>P|Ry=y=()>*p$cZGW*Xs)G+9;5E8*g$%=wRR_4 z72to{IL-u4OwE>8bK>pfPiB^_VVf;iq#zTj6Yn(s?8UaTGkZS%4U&JujXOh<DCa(z z%jCb3j{-00@i`=9k0y@BDjZqv!u4_Qc5+qAyOZ;t6k@rz?_)pvFy1Z{;cg|x=oB)% zEvJj48|gVjvtt36?atun)Tx9&=y!CfyE?#T<Bo!}fL_RNg}+_cXgfZ3g^P`=zxgIb zz2R=&KAUjALyAp!KPG&M=nJXq+j=*Z)vvpWGrjFyKB>;oTCl&B*wdX!zhJv@%*Nmx z?+V7}_{Sva|Jjp35D^l@&Wg5P+Z_)fP#8$uYpzH?8;|ZoyVEz>GE+C8M}`KfGX@9= zoGgL1x6MZ}-eoRxe@sjZh7iQo*siojBP}4~-9%I)(H51+pT%tN#)vAwy;0D63~7%u zuLz^Yvm-ky3(DCw3>3lY%{wd8@22>!{_-5TDe?t=q`%(c`Ay_ysr|rY<=}Ys=||+{ zwNFpRV%El7ksGG@lOrav^?$)IcE$y#$DMXRx}8IlFXenOC721-c@lDM#9+j7Z(}iW z=XxNirNZ*A=k&N3L8=|Wsc}}s>hJ0Wg7Jre*VP9XAsgvsNWX;0tJAfCk-^+O4Fawj zd0rRk06BK&GBZSHCas_X(iP^db^_>qlY<30_LyY-T@2w9cfKh}y{>&K&Hh{(hVa3d zC*|(y5@~u@m&nq)x<r!h?=o^U$|tQ;jK-^xqVZ~kXuKL38n2U)RtoR$G7>aGjR1{T zBR^a2W#yJTI_@s61SdW2-ve9<Q-ZUre(1juK0X-kN-rQzcZBp4SeBpxJk9T-97+rx za+pD(_xxM1G6-mjj{vXbC}RB=E2LW<i@X0Ocy_-{dQf#bJ(ZFqg8y-EE7M!vZCm!! zw|O6&{0_DdADmV9AO$8fwVnjQS>9%rCuMhM!aaWm_Ix@NH0WwEN!Gj*g1LCX&J7Z5 z7c>pP7oZd+{6dl=P`(Tt_rBeW0Ptv3#$=ZBD^;j>Ti>hnLOd|b*{vCb#GOCtYMzB4 zn@cW{1|FS4F@DP}tkl_DCzU>nN^9j!&F_#O63#QWbC2yV3|T#ohI_h5iQZNP<4cw& z)2HQmlHcp;L}pc|+rxq^cQcb(W<A`Gk1~*y&&Ap~4VH`f5ani4<0zE7X$&|`C3lia zR7pcJVh|&hdf%3Q^R8cQJHN5J{?rMI>O`3;ZGYE#R)8n&T)i6f+bJG;zg;B_dl^lf zEN{P8S)3h~dlot%;k=msG@3>%$DL<#O_O|H&uU~+Iouu=fTl@@6gSOsrrB-`Z81&b z`?QgorYcpG3rGb7Z}TRBWb**K-R&W9f^-;2v5d3{v8-o{B>MJlChF>6jn)ZNzJRus z+2hfdQ(+R>JGG1!ZtF#ns)CmxqUqt_OCD;Fn4xB9d~iQ&$uV@wUB^N0BC8L`U4o^- zJ-~eSL$=dD_%U=PTqAenT!l}G%Dt*#JoqhSM@)7V{-IYgs9DO*j#dF|r3#qJ0N1oL z{SMtQWMcc!xa?Fm{e!yc?^XFpOo0N6hJ*qGg^=6=3B9dkAAtZp{~V|^XBNnSvO#)O z&nI_o0hY8tC#9oFiw%s>PUH!2s(umRe0kbmFRR=Kr0Xi0zl}U$M}M0-O&FJ28V|o< zjywBg%{<Kdxa;Y~nEY+$wE($b{!c_-40k8NHvRQbxaV5&uG0c$55GHPyH~uKMRUS= z6*6LkOj9rA6HaTn?XH3LYfS)gwzmfB=T#BGknL^VK*DtI5XZZP(twI_*Y)DP-sz!Z zZQmQg>lc_7olnQTLmclG&iIn0I#Ydb{W_16vAnP`_3L^#RoD0Tn8_JS>H#U{wnwCx z&2-G*vip0CWMDhDNxJ?XCg6iAC1mX`oh7aZcmjlvG|*Ue+R?|t-J@Bem+muYhtOm> zvGu`OO_rZnUwKKa4}mzY4}aW=O3ZM#`)^v$O7SF|tFS)2sZ%_Jbs5%%>5N_{%KDJS z$@&nH!><ot9$|e*=3~3(9nku44weJ8Tn_ZB^<mgw4qPYe!&oPVcDU#C;>F={ac3`- zV~Y!!RN)G-`P*!x60x(V6vjRbo@8PzcewRq7C0<YA4!lJv8J!Hrz6mkMdHigpt4dX zCQJ{2U!@@@JSMcImyFuy%OiR6KgMgg`xf+)Of-!Ug;gVL?*=T(JMe2XRDVMi0`P0B zRmASyU?Bj%#s(A6gaG^+7n=Y~D;=w~=PuDCy0<Im^V}vfF&hPd+m-YAO(rG_&D9O7 zp$1xQhNod1Mf@kAZ=Vd!n(ZpxPy)(p5`J6w6ZgiWJHp*@ctoR(0S5ZsgouY?)qi3< zewpXO6R7Eo?GET05O&cP{7XPX*R=`x5>QE6aOXK=o<YzS3Hs@zjVkEbHY>b5BQ1L_ zT#<kZxO>uSL_K#-c*2;y^W5>z*zOl5H6diKGybXh?)1G((F^~4XZl{GS}^{pM9-g| zn-#7Y^K5EdTlhn<%&Jp>#|Zj;lfWTR=4xoO!^?MBu2QL;1|5sP9*#rN3m`7qlKn_v zy{z<Weq8EQD%yha`TDl!!V3oMp?l)d3}`Rh^QYG-f-3Z8#}I#l*tO_1HiQkc-G7h< zRX;@i9sn3K@Lc$c?EsrE6=NQR?{4}Y#QcO2Jd`>)fN#rr-Eu!hN;dky4k-Ul4d?^U zvfOJC^fAjza{Lb69gps^oafVD#890a7^+I2WY(9B4Ny<iyEl<p+V1BX1kf+BBQ56v zYsxRI?L(s>Z(CDdUv&c3+>8($>nz#RJ5IB_<L|bj4?<(*U9;bs^04*t!&cWH_giK6 z+s==5feHbiTU@GK#=og@S(5F3i8KVTJ4=<z_%~H9OG3G%Je0ekRJn|QQ{}QGl)F)t zyJ@&`j|F}iFXbx4jsaq~6S3z5v3ILYIw1Bw+xZfUu-!T3ovTj@g}c{-&}O^sm(M<P z6L&BG`Xds5(;lhmZfnYY*7m=SqPBU;!>d>m<NccEdgFg!MR&8N25bl3=Whqzjha{l zGVFs>-?fdrB6Ju3)rV)lR3HBSOZ~AY;KMrRq9>$4+x?oFUHfHrg~t0*$j9FGbrNfa z<f-}cR$zR-DSbDHyBtyzH)vR3p8V$TFEm)rf7#B<*txLXk0so;inz1KnzG;8zJC<- z<{ejJSlL@K&+++q>Z8z|VsmsqH%BdC<1g0B4_aNn!{+FA+nHak+E}nPX{)7Jton&W z^x0Kc`4fgamepk!Bv53+x!a!dR~y}si2gP1?6<?`+>O;*xVs+ML{P%{OCo&EefH43 zmUB0DW5<QNpC(>k{uKtld$e<`)wOGkHMAQ;JH2o4=ZLD#*i)cG-NS}hKLHEkGZ7tm z?Me27uO_0eqP!=e6<>9X0Vq2<;XFOpI~y~z?ta@jw;anwP(UAAht1PDSg&F6^W-?o z*&cWPntHGGGE@?L4dU0G=2Tl<+X2sg)=+<X-&}9Z7Q1WzxbSD5N6BryjK}YqG5lA~ zf8+VDg8z=^ze@f)1w}-xuDkcA9~gw;0eH^qcGq9Vt(@A+_To2x4F8q$-+2D3;J@Sf zuaf_ee;4v+kRJ#PcioIK;?C>wDG%F24<x|7oPAc;9&7_`hmJjUvi0&K>J{*v<wSk> zGwFS{H)fOFH8gJJOvN7o-J64-cvQsb?-&9n+w5p2wbvFp+OFv+uIMQHU=W{%ADjJg z$ortzSL<(9+q@gg!aa+y+6Qn-f5HgL#~aJ2|26aazp7osXg2k!SoKT6@;Uy189hL| zWvZ6Rcb^%MBkw1?(f*S?v@0Ini@7lUMM$peZFkHhEFgv&ny{^w5k-w+RJ~9ITW%r~ z_kKbS)b$gt1i-+K8$$-x1P0be24*=wi#dPjk5MclXMvndHG<+G-ksz{U3ccOq8Gr5 zUI=86q;dClvZDA|>Gk366HxVRXD{?0R3c)e%y#y4?HL_+2H{@~zcmG9lGsv>DLvK+ z<OT5;>v<yFeIhJ@2)yO4?F9sJ*I^qh_o7aj&J*rk8Tf7Y78U#h0rMvUX1M!408-!e z>ge#gI=oq3Yqp@-HF%xpjsNa^Z_K}+=biHX`QGv0OGLL<W~}J_b(KSPk^V&Vmz5bi z`atEQ>lfaih(1{Ps1?1h^4|4{2jbD+R^FS4_Qxt8jYl7jRYK&rJ64&gd#NA9@@wGj zJ+b>I;q^hjE_|T#alGGy_t}wOcK#0UKf!w}a(8{_@5?y$LgAk8;{S8u<90&|!rJ3` zY)r<T2f(SI9}izz5x#Umd0Y6BU*h**_|mJ&!<T-zExh0<{2p%$U;1<We$y5{{#R|` z2@}JYP6%ImNg#C#QlD8O^~p5;fVKs{?fC7eu)8v^ray}%Jv*fb*j~6LJz?<6Kvj;v zS3imo`!(Ae|7D0D|7>~FzY0}=HRUlgKAsO(ls_N7^xo&fm+Z#-1iU{4ne9P{w9kbv zz3=((gd-7rR3OQT#Yw<%Gh>8HblnY?-1mX>w+H#%)mZhTvFc0?9;-{Xl|s)$LLGmT zUo3pbuPrQiR(QhrwdrH3AI*N$AJ4O$3<!9qlL1uYKjY^|_H~8Xk$c^p0D;t0mRd#n zo$||i@9dN7y~|H73s3As6qeh6ef}I2^-q3L@Ew0kVObEr$KT>Sa$uEq^^fY>F$(y2 zJ>6#yWnyKIC!%}9J!R-6vng3=@LxEezu|u5P^=R>kL$6u6YlvOG);qTXky&^x~#{& zFLPjFS-uJTr5i;vq4c<-Ooc+QCzD>{>loKS+DL4Qd$9qd&BdB<qvc|!wOGBVG^b;* z87BHg%!OknQFj`5)8JcoQG`)Ub7&o9WR!%`*ULDMK9D-mayJQRZtre#1hb!s%n9!< zj{jkR2A72LpD?!^9LyF~qCUvb_VOJ;rJyA{0t*pn6>I9<6M(j0EuUMc6Hu>a*B99e zvw99L)J-TigmnTVX!!awE2ld1?zB*=;^ENmQ*u+AdwTy(_RC79A0}TZdCxNTB-ko= zrP}ECYrgjd>5c&dE1GA!*Opt<o7Yvq_Na4c0QA-A$0J15>eX~Iue)YIL$Sm5u8kna zMjfBt7|3J-Yc2_9s&{`Z1myHfo`n13fRvnwz8>y|X>F+b(YW_-3oxPz<{#FLz8HrR zH3<D$Ifq?aXyGuqD^np14l_}jAdzRWEs(#S+-|vLq(QZw!~ljqs5)RT0Hj!0PnN~K zcC06dcEqE9v7P(FJu5j=y0FYCvJen*S+g;Ff_mx9j?Yez*R5=jfStu+lBybmM@3a; z|JB!5p#Nm(Y;Jgs);C!CV(w-KfDrR+f-rM0KoU4jaIoFePG5h|YB-XkzlR}w#ZJIt zye8a#--2<B(V3wWeJ!;Nn^=s=o9}J!q6oSa48)k{*lt4fYA1+(Hpt)9{(21fo1Ch& zyY5l?v;@G_`|C?&e|<lgRr))Yx3v?MVZVcI)8w<6L1yUK-nvcXG@i#caanefy>=IY zMkWG^gmFjjx2V!oF>VkSsE28hg$U3Id@P#12BJBj8<1qS^9u~<>~YG~@V;RUP)kWZ zU7;Bc^<6_{>1BS?oL$={qc2oxqyz<#=v7D8W0B;{f<e>uP;srQ&{dXTIN5guxQ?k! zvY5&&J<_DVeEC|ePwOCEgEa*B$IY_!3uzkWSm<>nC}Wpd#77P(EjrWmMK+r4=&o@0 zt!Rsx`regCKSBC9-AsP(vc37fJ<pMvJS@+~_)0{lPfCvwPCn$SiAFZ<%=To$yCH&x zK}@RCjZ}T=Hx?6$@YFhXC)dM6O?5d=4kiIbUU&+O68mEV91iv2JFvprVLh1LSZ0S~ zNuYh+Sa6tUK1b49llc$sElO2jb!GK0jbkb(m=KlQ6|L#lsdZn0VL*VU;hNh3jq635 z;N58T*Hy4axaG>_|IqDamYU0TUY`<(gz85NRl-jySe#wAmu1JZ>vPOkn_PB3nm#sr zyo$<5YVbnsD*bJszXS9D{!)Ll*)Zw83!nwO<jD#5|Bwv8GAIpTSsm_Phv2;aroGO( z5JuDA&Rz%nMC^572@P#`1C4bw1b4~I;(e9iVy}aa!d}0~Fn}GKfnSwG{p%PjAubCF zP)}a_e0*v9?FF=Ia?-o4o|nSiGthSdqo!}5xFVybaQ9~r?903VllD!J(lox5g_R2h z0YWAVOx$a-T?_|kiQT$WINjuolhw3^$xj<6Tkf4)p;B3U99AySGeJUyt(2GEG}KU) zfN)XYc?0a67pT&fqBPsPV-vF2-Yq|3PESvTD6`&K$E9!mu5}yX!0`F5JxqbJPXPb# z!#g&M3W`U>J|+UNmbWRxR}Ua)VXXQgvJ5RJU>UUuMhB^xn0~id(Z^C}po4vV85j#z z?`yUQo#+(lrzDRq%&7Ien@BO3hc{Z>JD31Z!uvjniBQD7J`1nCaj51+6w%Tb#E-c~ z)9?<=_j&x0es>mxjnek5SQ|jZ+L8XwU>_O@$;L27jCU;WH-@`Eg>b`*kL}GX|A6>! zIz;{(3)w@TBmcGCZEUAsjdumwljFYz#RyYFizXdsE!-IH8KvZ--Ilw7n239u8t6oy zPqhT_O*1<|5eN^|p|&YX*zX;f{qH`aXJf*Zu85zt3@Ayn9o|hebV7gi1-31V^c!v1 zSgk_3vQYidP26F%y@e4d`FjyIw7YA6S@<UE3lxE`>7#9ou~vzJ-nMhKr4T`JG**ZD zHh_$F`_$*`*cL$nI?XN^UBo({uMgh{F*CLS$}@-$S5#KR24)RN`~;)~>i;aMK{_YW zYN2Lez0U6=z3bDHYN5Bd2dPoaCfk`ksTLC)2N;LeCdr>Y74((x(se<2WMC*;DkIpP zk~bc5`$gFUlJ7{M5b(l1KZG7uBMxXwSD>dA!_k2dxsMdXN^%-3f)*6ZUogN>W3|SN z)pw0JKC|VtiR?FMF{{vEdxqiP4~vTNwL}jLqJIYU8@G4R+lJyrHGMb21B0!;Yb(b_ zD0LB$=0egqYtAX@6K!wKDV^7W&z<8s!otovZ)s{qPWqsn;nm!K6X{1u{Q0xH31vAy zz(ndPCcLoR4Z(amz<+zCL$L%e&3_?%kpFH0|Am>AI%d*X@6G}5MM(wcM{?!m9sF?b z+(QB)=f$ChKE68(3kpUAIj`;gI0Gl{wQe!eM)gBzPfqiIjNrP}=t(H`9!o_q1<q#2 z3%^xzijEV0%T0f2C5@gG>cJrr-nYqNWdeZ3xNuf&G)^hHP?@l07zIc#6d+rMQGk?E zCTz`#4MSo}ff2T4SEn$Ew*eg0q{I3lu?7KIl21XOdX^w*O($$i$n^jxP$Ap|7})|Q z1=Q&o$%(BWz8P`%ER2buZsxF{GmdE(#uwyDodzgOW;rg2QDZnZEJC2CzP=*v(D*>N zXU!I{OXrtDEaZ_GV*d_<LcQuSWCVTndaLU?vdP`R2s_bo>d7Uy0Au8mYR(`0DtyBs z#H|GV2DNL*kKtUPU~_(nl1r0Vb+Nt*LBo(3MoZU@I&d(9612nEd)B*RLPV}QL5~i| zaXQqnRXG?^z*cjd2wbu){A>n?JOFHetPgGGN@y&bq*p>$n3d2I5Lkhp-r!1T6;?uH zxe{8%l@O#1V@_JLRi~Ej5Y>s3fDB+(LK#^Yjj$2|`^aCVV@+&3<BAtTDwSdpvKpGm zC68trW(rWNAT7-SP)RNeBy22k?W96XohF-@)@MJ;Bv87OZ$%B?nvB^bAiumZ|1xDN ze&^3Wvi@$O(LwGM#ABEVe^6GP*;gOl^f~Tor7pGC_VdMGFVx>W4vX`@4E_j#w4bmY z5o;i<?FUsuSldV9)}k(jPiPTprPT%wgCe_Y8?%H`*C3aOMqT|XB_v$&YiX>cJkXVs zSHs;M6!*M&6@s3CJniPM?+520o$cO4E}rndL*APGNWQ390Dax?(5oWi(LLdASaPGu zJ7hj_T?#$eI(8e&yZ%zP%C>qQ%0CYRvyur2^zBFHLEb(oU_Sy&&$$SiV0o899}$oK z4tsFvjoEoDi1KtGKjc-(%;TTFJ_CkVI{yW<KZ!mP?m2~Rc0R{84_4q^#2&Hg<G~U& z$t&Tgu0T5hUiR3H9DWNkGM#E%tid@S&VK%)ra!h35=y8)CdaxlqPeJorXfZ#griqY zu;|$>00Kmnfx|<1S7F9pAEamZ`UXz;izq(0byb+Zp$yiPa2)Ix0`lO2$>aOcHQcLE z>jQA4CbPEQv8^1yNs}!17y*<!Uk-RhzOqYcinB)w!(Effl1=#q>JhK^d;IaG&x<U^ zR;7*eYK6K}C^6U_X5fpEw-F#fJKBp~7Z^Nu!V&&kV9}lK@Mlsnu!eq;IpSW=2Falm zWZ1Q10nh@{q_~v00Tjz_3yxahb@-hNRf*Ae@qj=V+9Z%E6MftJEQb*kq~V?qf-P9a z+FV6j-fbCxAj)q?fU?~ifaR_02^hLsACpxrHr&B-i{sf6)axJ9)0o%wY0`XKqA%{K zZt!lS@iq=i4$uiIUBzlWAZBO__{}3*z*CStM#;zOl;SbQOx$^l_U~_7VzP`}4$Q0u zE)w3qZ;;^teS$go@q6giEa!{)!vO*9NH3j@=@AEu6EG!$nE0uYMulPNZ#XJ!2j>k( zn^9poqvZhNZ3GcICX%^g7wYsz+?Bxrc2<X&M9&jkUTh|Omg#UUBYHx+I7xyyvmIo4 z?R7Xm=?Vg9K;tum+%AjRA0QhkT%YEoDd9^sGog9O4WE1trk64~0VVq$5iaC>0jMaA zQ>i%S3J^4#q^Yj&5!y07=F=ljX?crBs$fNrN3HQS`_T;&EdTQN1GGM~R+!~$c7Lpb z3>j{@cIiOCz?B8|nWs#$oyTmLM5ZpXwqQczGtrLruL8_!`^|s|XcJBvHeYGjcZ_)* ziX|ulrekNB7bi@49-`F^Fr&siruVVSe#_+0oK!+{vI*5s*40O}%S%E8jEH^a<&!E6 z9G}RC144(^dgKEVLFttmkjb{2LIHpzQWBB~AgKZ*TL4L&hM-ovRpKIhEg`8I0TL~L z>RwYQsRble8j?Cff@M02DhWv~Ah7^R29PY!5Hx7lGLSS75^DrVlo*hYlLkOyX-F0j z5{r;Dl!T-KkTe03-GHQBL$Fx8O$L(1gaqQPqLN{HXZKzv&4*+$AZgN&v=fphLbA9d zB#UwMVzuq1Cas3bwoeuK6Ge?fAGf`pUa0}P=Kh{Oyz;^82KB~QCg4NMF$UXbeq|EF z6x^fmt+MC?t4K=&#n5hMhJ>@3=>hXyw$syxS6*QuMd%_G@RkqO4HE<8o(r}~_);Xm z+JbWU;B}LF<LgHAijo;jU>RmRzqPl&J}UJ|w3vQ$%|<(Vzrd}x;C;&LPdHnd7Y>sG z?jHkg)<?LdG+nwz`Ux`Oo5A^*&JHQAHoy)!QHW)UT&nXS8)v`>2TVs{NLyq&>M?RJ zej%Q^VonH{l5+}j600S1GE#D)OH_YnCuZM;Lb7xC?;89YWE#4>a0xDo$MRE($Npn% zu`y_cA+a`Sg&{EvS`&+P!PpwiC2uI1TrpCV4t<zkdTq(%YGsAwn*zxrC6h-47@Rc{ z?Hd92EpdwgFPF4N>sGM-%9n@bzM=nyFf7JWf3}_fw70*CIrh{9L_!$2SyLW?4ee+< zx^vY^EYt_M@;#T=k%%SmBVq}RM88xPoC<Ncg~5<lDPv$vxzAX4>Vb)6`ipk-*Q-+g zghu1w8!ED`(7NnSxU0(TDZicXojn6Y4P{R&PItYK2%q~J3~#L|&)Lq;33AG>G#*V4 ztXi0u0{!iuuvp(6{w(fefO>}qx6w>}=SA7o<%8U$rlm0S!!&sw?OO_mX(@aTrZX5M zKM7OeS8?WPRgD2JdnRmxABWNqWJG)D-I(*d24F#3hXV_DTh7Jh*^hy1z@+#!RHKO$ zb~Vlwu%tQ_7O<~Sw+|CZ;Pjyz-T{;u>lDO2u8n4c*X#t=Gs+&wy>lZQ27!Hwg`*~X zA9jFQjx2#SHT(N=%v5@8AyaN_;S{XSeSH(_I~|)+CB}{A%roQWdds9OF=&w144Uh! zOxhA725HTRxxUh*Eiqh>Rt*<*;+E)v@r1Tp&mS#Fs*IDBy%pG)T+S6(|8l(G0Exc( ztF3o<zrRP1dj{mV2`*DmMKZm5%jtV8_eMF#GFC+t-6vL<K5$=xm@?$d!|Kfa40(I? zJ>4J%WAAwLI&BV(L94d5_31uryd9SF2m2uXrZ>uo%|eOz3(G;InmH7%>5C*{Gv0)O z`TMcLzb<YxI<mAnE|JqO-F%a7?n}c$aNI#ckXOGRe}PUP4Xv7{xx5}y^zsJj)!53< zmsg+V&Vez1e`MiMMCh-OK6svk=aqbOFj0|?4P4@raPI1aCcyUA_0duG*jBV(EmqZ9 zV=~kzvgWXI>tNei7g6~dRK9jNrShQ?s!&kLK05AQ6(c9^REhgkVk)3Ym7EXJK2SF* zX;AsvN63fs#8rqE1mnHZe|NtcVm8cX9|4@@QUo^sslUYjlkG^5%H~I>pTGc;Y?^}6 z-aZ9NhK@E%D1p?3a|7h$b0Nj5lZ_>k<+T)hzwQlnxTq+?ll3Q%?M0}D^N;onHBBz? zgHHT&KVfs9nA~reuTNWD2NQ1a&;HbS7E20%VH8V)6Dhc#aJc*p$X|7U`9YnQ^Gcv; zSjSu5tR}4BJAt{9z3!Q#QQq~Fr8DAgM@6FNrBoHB^Gf36<X)w3zrIopA{Cr|iV49# z$O7~&Ik<CeM0`|<vHgMJW7zSGTVGsU?pLZ`^M`kiUy+{;UmhEYnX|+g9jUyx9N!-} zKzyrCa31sVJ_7%PS&NHl|6tlD_%d~=Ia_*}`yVnt1ngxukZ)0+;M1S7mCac{f2Iv2 z=-gHd^8_<DVMPwBWZ^70zVDlfdYk!f<|U{(15q_|S&X}t#RzDsj1*Z5?v)6X!S_HJ zfvB1@ipxOey^=wzk-g2ztJOj(Rw{&L*=p1V<yR-1xU;napomf4SAYZDOS2DtoL<Hy z9KCF7j?2SJI8qccxhSNnD5Mf01?vm0z9Rs-4p9mZ2&h9qlL^pB!cNBAR$nmgpKT5? zaSwH?g(gGgp34Jr_imF=W3}ar5rT4*_UfYHN~3+u^SKxnE~e1lW*<WIItrK2qQVto zU_~u$?-8Wn5R^ru1uxNO;qZXyd$GwQx6&Pj6<r@r2=kP^+ankQa<S4ut9i5vn*$AW zkWcveyLCPoPg7_k3CUG>g+*kf{;k|Bibsc1Cy{BNrt_YJF7V|A<Yzx)m99Ww7omUK zRsKzk0^b}lf3M`1ivoiE=+5S4YME5wdAOXtys`(1^FFoHa`&n642CwCZ-Tvd{m?zu zSzZO|z-lwx^PlYLeEsT4XoHN#wL3X_19}BLuy&#oISRx(D2Md1t`Cf|!CDRk3G;{O z;3O3`c#0p#F3%pN(vh~LJlaq19L%CC=sv4lKolVcM<N7u4WH_`f@}CjB!o0Bm<aTF ziLChqAbIvlKe3++^9<YRk|)=<`FR2z9b{s@62Yf0Eq~)ANgwc7$X54)xil#9QGJCA zUS?t-Gt4ko%e#|&N*2)GMOu;O#xhQqFkIY&;&f@Y$!t<i9);`$rq}Ld^&;Y{1U$$L z+k83DjD7sAe%7v6{-^Ei$szObH=I26X5_Kq<pnUDgOopplNXGrg$)!XYUSBym5{e| zR}{|w{&{my&3+kBoR9N57AqDJ3cG|fc!98YJEt++t+gHwA6~O%UY&&lap!hP>(%VL zLbgA3c{mQ_>{9REnhpLmf5NRu1-b|c6HaU}2N!gZ&YT!<*6L}W3H@UHmt1+5s`4fm zm&YJo-ogQ&mUE#1OGm3FVlGksTw6`!0!{X6P7byc)1;XJ)m^;nzbNxdE|7;r*I(3$ zV^fRqhHd=~7@T`K5Z#3^^wIMT_Gd6YnO0!nb~1UN*|q@#FzDo~SM!~PdX|L<lZ#3B z$|RazZ!QdiJ(2Bx9J5q<B?lvl$CjVJBbb00bZoaq0xu5TEGhc+b>_kA+hCQQzx{`R zg#%nUfEH8<LqZ~K6<C)P<j%oxq6Jx9rPwPNam%nX)4IXeiH@~9NtA(UCY#94LjwS~ z-)Y$oXWyTlp#pu%$i6FkLiV&Q6qrm))CxfQ?l9fU$|o=vbazkyLmLC?gsuol-|MQQ z<KEdsC)$s@dSrc`&$-=q%izHAU|6()_P?Bg-}2USm29~`sTeUYGhEVy)V(UT(ju0s zDF>m{RF4|3!#Z#~r1%GN8<v{(A)qLI!eq0J>aV|q-#l+aUx5Yq0@yjQe;y}|xE;{a zzP$Gr@}8^CnT5U#c)J86p6~<Ur%$yJM-5OZ%ymQ(J6a|Og|WD@AK{h17+E1E_qwX+ zxOX<_%p%4WXhM*<Pq5iFAo#gckXmZV5`=J80~WaLC|(d-Dn~$Rlv^^1K%F;V<oGA_ z^_Gh>7*H<)cj4|o5iBQ-UR;w2-!TePp#9)8lgi@Z*h*OI%`NNBSm79~k6?0_9WVH2 zN+{^!-qn%W;X7Ke|M{f-;Is9ePcYN<lM_)Kp?eNDaQuSiP4B@q;AOGyCr}9Qa?;nz zLk2wZy7y&|lJamsv*ToCXbTpQ?#r&ohad4!)T6+MS>S278VKc~s;jHWd7wm>A%h~v zu0Aq*Mq4ic=$L4ExafyUTigQDGgpWKdqPfS_7uzcSQfVniVpx~vJ|)(Mg9Xde*V?; z(C7H;LEblfKMwEnCiSiz<=Zx)-=%Ij*vyY4)bHY*uyP^v`9N6%T0FsWuffhj`($_{ zR)2j3@QsP6zFfH|f-9@l5zAX$CxuBFWw?5T>_l!~L7$ibkZ{kQWcQDm#9U%s{t8~| zJ8|baEOej5dw|Go2RtlCQ84Qx&EwEQCmna2rujGG3AXb!k~{K|+>uX{`>^?txDQYu zG0B~_gM_Ih<M9V1V1;gL4s=`FG`SC7yt&EP;KQ)xBKZi1e!p;TWw?6<U>0)9$xjx} z<91$G39H=;5Gh9m-3r|N05f0E*V&z)stl#xm7VU-Z*t%cF&}13ddjYPe1svoKm3Kd z%3bHkD<-k@_Xdw(VL0YnYdQC+8&}}D$a2pI9Zt1yQwz>>agS*}cpmtkbB=PO<*6Ee z7zB4el2$P2aQjQClnW#!2=cz{v6h2Ej<OsOntM(KLD^MTiRPd>REbD{JVsU1fRs!I zH##bXJadttzC3%r6o3~?3S($tY50~2zyf?Fi-YCd-101rNTOU^|6x_A>w<Fl_Q#L5 z2bpX;*e~Q2EH)0AkZ^CLh6ShYZI8EY<CvrEjE6l3J$k_Kj%67+e379OciYRM$cu+( z?}G#LbZRJYAquWY!DVVedcfCAaC1<&`(=`^oGs_g%Vz%_8bSoBp=TskTvId_R+g!l z`8-NC9FV_d=MwA&6Z|eFl!M++<=TtuVX_|%rdPs9_Bg$t63C{DN<WP|>^Ff8ZHc?J zGOW3C7QSOv#Kw)b5B^Em@zs-Mb{^U;9C=<9H&e4?!Ji;Iz|MLO((be$e0ow@A{@I4 zTo`3O1*Z9PcH9S~-9x*&GdyWp1-7RaO=!i0>n3K8%fnY9`iG9Ad58)P`)2mEUK>|o z@%>8}pyk=)dr@EZ#6bJ7_ZfGAcz4-utACc}YcOtNe_RjBgFOr{L_d<(sN+Hfz9Z<< z?CIYM$Fqmfxo8|PP|uo*^aDHeF${A*+a;jmqiJ8eU45^i%yJhX2pVCF=Y4x{o#$iW zo-vT7vhSyTDe}+4c))$`B8>hPJU(!3n<)NZbr#3nK9^B{ug=#AXvR!6|9t;$j<PrL z{fNB)0oNGh)e7NT+n@^e1Nbb4S3ptlI6Jian08emL3+;{Zw)eEy&jya`V-z&5rqgT z!}e~3th)naLU#x5G!@a{8`6d80Zm<s5<y)nCaZf)PwUQ*)~fI!g<$=FUy-gaNpyf5 zpHbu}bNB~|VvFP`Vu6vV(ev-P?zHUjEG>W!T*cY}n>sm&^Udr@y?R<tf64M@mE*v& z2XLK7vN&@62yPaEWzL*(5})0V%YNZFNl0w9GAEM+v1&`fHWp%96}Cpo6$XazMF*Ms zap9SN#}wLOAR~K&N6V#pfn?S{g70DWCk!_^sP(Vz-M~7yq&$ZS=am8*ZwNkJ`$wft z#(9p^WYGN#EW2hjV16=I+u7*|S)3R09)#57h2R`UO<OPo{^dbGTNrn*u0-#KyT1fv zV~N<;t6=GarT8Xxz;I_kM*j!-18LB!IUOZRYjF-=9RYDyRoLO#kRq{gRAxfqJ1**T z1}0&g<CLzK__`II{b%dJr-Xhk+UU2+bQjM4yb~-x;k+L1Sx(u{tJ!{Dp!F}sGB_c> za670E3qgYu&<}=a&<F{go;@}T@fbQ^V+@u{twx~QpAh+)@*!BytHqO*5!rZMFewo= zP1$Wt`B}L82H-*LW48Uv_tX;)e}BKVMf;9|1>{OBXr46mpxu7k0Ry$2vnRpc>PE{O zg8(p57|u!+upyr8%P&Sx0jy}g%NOQ{wSM|{zL=>#{@|W6iEAoYT#-YgAY25;{Y?0z zZWEr~Ycr`H3q}qz`zMXyJN|Zw(acaH@2D^>0j`Y|LjHK?cq-hVmhy(lY3j>c57w4g z50*N+;xC+Jy(jzQZ>BsgI~X(Dz}{6}d0eaprEy#%f7gBpEnIQJN^M;TL&BKf<eQk- z&Sx2^(SO&TK&HKX*ETyvnHXs@?G9ub2xKa}gz>YC)S14zNisc}`Z&PbBAFgZo!M)7 zTez2jEp7>OJLwz3Mzcwi{tdRdC9kFqw3KRi(^47`7@&*lXQTnTGmwebsg%sbNXe9k z;dNZM<cCC%5F7t>blkg|q|6fAqdBbzE_BF<?06tn2}s<e68F+^@8T-4<Q`>^Al6l= zd{ru6!wC5>+<c-frdLcj!|Ox5SrGlyj&Mmu2S&7CG+4-N^?frL4@Co7YvDyHRfv8I z8}zx>;hP{4wx>`bHLUeWzOE%h4vFuL&~fi1j!Iz@M>w01vR9?#<WnkT9%K*=iIlD# zRb+Sa^?~D|^dT0MJ%f6S(18U&P9LDxGZw86!S%hL%2(&Gv``ueSXg4}h+(`e+yE^I zgcLPnAUpy?be!zBwhu;}#E<I36|u><2pZ=UTYD3(`VO7>2pY5*sWm8~*XQT9dt(EJ zlDga!fbvWgWH)~N?>vg7sW-U)74kf`*Gk_{E}tvvPj9FPoP?eCsNMl&)(`!Id<Bv1 z+SSSaz%_Y4l}|p73isglEL>D#Zq5vg0U7-vj4>Q9T+O6%y?lBZ&#I|}+bWSuQI4}? z%lYugW!B*du+nTnx0vI&14YMiCtAhFam|Gvn5^}l5TN&UP6qv$cdUSvx2@a<;Xn?I zP0SvP^^aczuX5@)C1;P2y8;lYwDU$_l<6(EKFpWTg?O}JnHw**GY*E!?I8Ag=O#Mp za{rsStA(#wb;9B0_i*^|;(Ps?aDL1^4com<oVE8bf-9S59F1fU)<gI{9wZ8!0yg(= znN?2l{aXii9?xIj1jT1r<_e^~_>$MYz!-#TirfKOqdI|oTN9kpS|eXw4Q*3~&G&91 zH9~i!xx?_fBPZE}l;jRbsky_jDf1wkgNg0N2FOlT*fr0osQoiFITf`&7NhvFZ$BdT z(f?^V12*P=Y*s>i-EBJ=A$rh`?M{TamHuRIfyR{vRIAW!nsZa2FYZOCFGu`Q4Hv2` z^B3EeGpoXOCQ>6ICjh|`xX^)^F*9$Wqr}{xT`+peY-ez*!9NRRgu0RF7vG!3`r~J~ zkO~ca5xfrv`k^ksQ4ZW$8}9BTw!K&civUQg{|WsB?nlL<v8g;3z9S9Q@ynt*{v*TI zV3i1}{JmBk$H600AG5vHW!?8eYq7clhpV7TehKesXnvPvZ0G-?o{fSJ7@y;2)lJYr zWO%D-Y-4K7b+y?eV7t<R*$|vHI$3U>bh6=YUT+|GE6HaFaE-C(2dH>RzaSRf$fXp{ zqC2Uwa37~s8>_Mbf<V(=f#o~2!MgH4vvMq7$6Pmql|I?=VSY_h^iovH;wu7y^{mt< ztJxP}yuEwyX{4YEI__Yf<IF*Rsu*8^$nguK+;ARAy`UD>{Xm-Ngsz`ljM#kWac4cW zT|@n{RD!V-?BN5Az&Dc;&OMr<U@7nH#m9xvj`Fbc5TME)iME8h`UxOZl3>W7Iw;Da z{Fb|de5kX7|A;iW6a*8?nQT-F_p!zN^UG+S*3Z<*`Q`sgT~gGLyuMFidD;;P_I*HE zuq<O>2E3}rf%x~T-aZvb=RHgc(Bc&xFKB|2AnxEA@Zefclt8*YxM#3@@O_YJ1M&~Y z^M(AnGR9bLG(UpT47x8E&EXz0nQcw@r%=nwFk!>uK%a+Il^CkyGQ*uf)|0TKkr}*V z2$-GKkUbTnx&awO+2b*QafA?E*3qESR3eQVd*qPDeTBc=8*ZTc@}3Oh=)TnWgj*hW zFOJ}L<c{}R(V1}<)8BKcYZ4GM=ER+Q)qMf?*)DX)P>8*dou7!_7w+1E2E=i+Awk*U zPI{c}zWl<kAGi>+@cq@n4B{;3&*U(^ek1OlUtvd&iaQUcUP!pO6z-fz#{^cmFzy^@ zcioNU@Blu4>jIB2r7o9^EN6dqe4zaMq2iC&(cK-8<Bml|xT`!p$h(R<Q5|N(?H$Kh z9u8ip&wZw`r!$q`(}k9PpLVNpD4nmPSP_mkM`!Zf(R`>I>p;vnzI7eK!s>oO3YlZ$ zXPp=6I0o%aeZq1+f_)@r6rA8-21*IE5ADUC5a9bW;iIx2l>xr@`|#aQ_@D~q&QZ@x zgzqQ?SJy7ER)O)T!An7)et!k`_a^^czi!m>f7h>*;Qy{)&*Lv@z7OsP2$wdjTDxkk zW|Z_n{**7jYyEnIub^@Mu3tY4`gJ2uH`op?SHsm4Fkyh2a!$fq0X{i4drWTrpg8Kz zi{Mxt`76F=d@nx02>v=z^H+TLrQ<}1*vL0eIQ0G5akiI)eEOS&+bU=N$5lTx$OUa~ z4(H~Yi+0VPggG2vrh?M0()Mut4$L2?ML#{M0egj29BtVM^}lKk$5Gcmat^nh6iz?O zM2|__-^29P!mu5{7vNeULFwx|kdJ$1SOoIplQ)`eia8ZOq-B7pPJ<g2Y7<DePxPld za`+Ix$TvB8M)axMA^=yBd%@CoUL`hiVJ8CoxQ!Lq{>2YF!J@I<!SVu2B+J2qV-7N$ ziwqF`-Sdzbo80(l2h}CYo*omRKfezLkJvMEuX%N)HF|Z$OWVt^RZe8Y%ZC;Y{Vs3( zs`_z86ecYApu}0~SW0+yfAD;UT59I&Yp9=BHt^`p+`1pDFtbv(-LoedKEQXQIwz^2 zMTRFBJr34ZH&oc8Zz$g=;KB-bHg4>PaH*Dp)fr#d;-b!Z8ONiFw~_MKi=gkHV~Ur> zB8_tH7I6H9Vv3acPw2L7KEpwgHVmr)-Yo2B@rHfbM4vZV<jtaeb3=1nV`6RaR;?<3 zh^>EapA={S%(~Lx&Y-3wKZS%1GWxrHl3u{PDf^_HJ`yYvD#@T#Jg>*?x{<~fZKC@I z$AhxaNo=s4u;>kaLyI{TATOwt=9JToyG@YdVQw{h51erKWaQ>(49K%_2Oq1z*D}Sv zf;vN4=d5WUk31dAK&VywxiOeJBe2woWwP%x{J1}sk*bgerU<>X;?TTOOfRt%tjej7 z_`Uik@x37w9ziPHEu5{)hX-q<KBVW>CvFQ4dp*I=PGR{4gO1rg>&+hPuNOFaFb`x> zabfaENlid@ui4+lm#4DTf%cja1XxA>4(2jt@xIB#2K5;LSnH(D=Zussm-NsDS!Y?1 z4j7?92ze;|Z1#hB_=KGfz<DVB3z##Yi|*DN;y(Z6C#;}5F4X>zPoLyZAXNQ;eIft{ zh0VtP5S3Xt_K&va-G_^%iqc2u`&eZeAGmKHdTh0Tk9&)8{sJh)Tp8{eO#_Q}_vXt} zw9*xxm0b~cvb>x3D(Rja|L4-)FkC$a7kocq_nWk@*ar|`U!m2D(0=iboiMmjP|>UT zx;DDVlNZqbSw<f8;n(TkguR962Qb%j4>$mf6MIB%gu#sjIEDFm>K#<+pOt{j0F#|7 zB7@sO{0st(jHbOYcqMeRROcgwkT^t+bCDLZ$6zlKi;9nS$=D*tRce@o{A3hQoO7X9 zTQn(>z1kFrJF`(}eu<bEA{=!(x2jk+5&Y8n&y^HX7zWiQNrS6@F)NBDViPpoxQrXM ztpWhbmQRrXNctEczsjHe@=))K)Mk8fKIi(CG6`%eUk?gh{b&Mg15vy>-%s5WWUj{o zY7<05Z32F!M6Tljof5gO4M<$PW&u<`3#=}Zolw9pipFE4^mwGGh_amRhC%vfCfHPQ zqS7@`mSq5iXkW3w2ZoLO7BDjr%g$lMfq*@M=I7X}FT7u4RN?&^qei@61DmY+ehu@b zJu@FeXw~dq8P5A3+r#m%-2ECK=X7#__iNxoh{N8mF{<Exjmr~(`!#+DLPQrsvy*?n z#y=xGaKA>um-y=K2XQ*F#Pu5Aq-AjMdJP~U@bSgq^%`4IOHNbgU$1c|Mp8wI>ovZK zILgC8HF_aE%lGCW&w(Ah#`}^J_{=k{jHbwiDA;A|xY~9v3RzSB%i8|R=y(}E3Wk`y zA59^Zy77w9%w<pc1vAP8BhdQr;RPd9x_8XxB_p_9BpyBo_olT1g^%kJtM7#=AvJNK z^vrB*t~dQfzMG!M9U&NOvGPHF*w5Z3h2qAo{37!19*H}DvAk0riF;@7E-Y-mH~o1U z71~o?jZb+T^MhPRq7<$Au0zH;3q!b$soZ?)`W^Z5qEf-;i;!mh;On<a;S*n*+}H8R z96m?+`25%i_yj?jh8uj&0#OZz&QV3^++2Xp+l$fp@jP^n0y=ZFrqGEKHD|8}I`awx zI&VKr=rsHJW<5=L+lE4xocA><_HzphD2UNpA@myT+HrRqHj>n*Qq*px?cLyCE$XE+ zipTR>dPrvK{zvA*a&>RPIDx#xP1#&JBMfl!X(w&~BVM5~R*NVj`Q_vXGhdkRIa*>& z{95iq?cKfDLa{yhG`UQsYS9O-tnTgS$0+2B=dilPw;k}6aL%}Yl@^FFcQ!;oFu-M- zQpek#eA?W?eQgPE^BxqOP5XzC)@<Nz9`ENjLJy|N49I@NFt>Bs&U9G5Vut7Rkb<=$ zE=j_zb-D6`mp1FVY;!$0YU=8*69^$nXY%GJX@y*io@>NC`ktqBlDpB|N${`g7I<}U zjR0&K3^^ZIhRD@a3Q<E?_6NY?u`hnV3L7$;aA~;O>OTtNCVKK&{Y?--I;bHimKDr* zn6pK*gO56b2ylJ0owI;mjsq$4)qxc17ZL+X{*HSsJcx2V<dD~KcBQ`aNghNgv^kx^ zW98UC95N?Sd<*FCb;o5d49NFb%&eS^f9e#=e=Gaxp`FNzVq2;}kYsFv1a#zt)yLz| z2_9cQhczS=PZ&y;i)G5A;hxKYmg-FQh%KO=P(IHqvL^w5!<TgN-PkUu`bn^l2pX{K zqBl<gLtA+qrjp(F;+0oyQB4rsUnsI0&$k8Vsz0zJh$+`Jh399m{u29d%e@TsKbrm_ z4jRbf0N3;nq;JWN;n_J#^|OYl<_~K3R#0{-#r&X+ui_fO*qG~%;$Gd;9We5cIWM2( z_r`H|SkI&Us%%8&Z)EvE5WigixTAoa^ow!#QmjrNO^4&&+zNa&5}%Ib0p90$BErUg zc>N}PV{I-LJ=n3qp^X9T(>RxuXWtQbPO_qZ<<>n8KO9jFY3(s`mB!gOUr=d9pG(zS z?iDBidvhQ(9OHoArcur~;Aj}EH}$CtUQ;IfUOZ=Ue#Oo6E7#9O_LpIu`qx<ZL*efG zX<tT5oqO;S>&~Pq>vzqnEE~Loi)f!-04zvF&bNo}XsAqm99erDbUV&-l;N}qhF#tn z5>y7L+-oodRw_4oY-+X$H1(V>nVr*qF8hSQxsqXXcS!Db%Q?|+9Be-yKtuM6O}-0S zxHol_oSKpSJiSIm5YEJeyMLgn1Eg%mU&7s=MSx1Z7H?<(03C%XHr#U@2E*Wy_$QSC zeRAXk3tdwkjC_N&eOdC$irCb~BGp+JsV#MN_>THYV7Db$&-bu6C1wY|&KKu_U2}l= zk75KG(8tO_pHJ~Pk1A~BQ!^LKF_%UrAAE^0<q*Qgveeue91sXvgcQIw&iW854$jc2 zPENI<&E?q^EFv(tNKDx3!?_uu>-vhD7gVmlq*6MM$BSHQMMpk?gG;Q5$Fl4~DXlCE zTE07bjO8HPD5bpJ&Jn?qFI6S;3=`1&1}B9;_Wscx1><E4cjW6UAwOWh@dbCz0t`r= z40JB~d8&=3!3i1=Q^>*EWBXr5TXz`)XDj^uKU>jVDZB7)uRpv8cr;4ZoUIUM$`Uty znOba*8XU1Xc_sBe&cRSrOvcw0>tw%HF2*y*iouvGA>XA3<+QJd4?jSi1P;N;nb$fh z`{Z4-%FEo?&$~0}cfsheQ~H~C9OZqh1gv~=z>;j34fSF7XCZGrEb<n<iu@~lIzAsY z4=3FB*|5+9b;PIqPB0h#{{1+fMrl91j<iPo%T{eIepG4!RXl7&#OTw+Ufb*$sL1qF zDAtHlSi0uv`1BGMx^&(p==W1R`c!z`uTUT4Gjy@c65P)~BHM-1a8AYGU5Ld?d3?&A zxc7n4vO)=ee;2wUV@2<l%NN6QUd-mNr#XRY9g%bfR#A5Jx9PniJ4Isyt1e?t;3I&T z*23L#jRqQ#<Co@^Lzrp6o*n8fF=r<Zvgya=<Q=EuTzbUswVgtIh!(y2UfSVvT}7yW za^Xet905jk?fa}UXd0gi-?AO^280l-ub%2SuKV8fv4W1D3px_cAMEXa7=50%Xc@3% zjPzj`bYr>geB3U3HQ`(Z0(&0T_yKr=jSs+2Bs^XqD;KYS{y&zF0`@oi)CS2TV06+E zxebyr)emKp+v-4=5&;^Lu??9=`TJ+pA`blepbcrvR>#PuG`apRT(A6nf8!9&UmyPc zJKJ4_JzBH;Jg_~yJbshc-wl5sue6sNdAzpeS-*0;a!r?GsAB%AhVNTEY)u`*+P#8J z4Bh&2XJ~Z#eR$<I^F9dfp-b>9$M3)BY1f|n=y??4Wi{N_=s5%bj)cpTH=#!D*+tJX z?b%7sKWoq3^n4TlxZsm#=+-HtS#jw7%CBBn^GpUz#jlbte1>lAS=$LnKT~!Vd<6B> zG5EI(zoYRRO^=Ho=lxe;suCIlP{VM)!kDX2Et9>(m?Q9yF;f_GJUssbSDtM;W{}D5 z$G;QdN}ea+`IAaSSiTQP-Zvk90(%*1Dr?f7h4f_Lc^7_{(1RbIH`mrZWut#n_7P-b zL!)EyZv}p=>{NQF(HxK8iS!Jjf*aw^re`r4%4EmWvj!fvAWY95c!=j0=s60_A%Kt5 zb1pn5!If`SCE+;^p6@c|8hD7QCG>Q{b1d8i^gIR65Zp$3)?sIa$v#ET7vVV<t~`&z zLvW<h$Km;$!UpjnbjMVmk)-;Cy>t=^4|({}oL`<J06c5>5Mz#q=igL#D70P2jAhJ# z_DCc@48=TS81oD~*GVw``F*j00Q2Ds({5$JckpitL-_>YJWYj!LVO|J-a_y!{MZ*B zJqz)R;3qL_@WPmG#?Yi;B7PFH2QRGQyNo#!|Jdpc^c;_W--RoWq4_i|b%^>Mh#ftM zmv`Xj((@`_I3PYx&rJOLH9YdX11$!^L(|}fD)En$@F9Bm&mULk!oy@7zemi&KM|Y} zfTxTEgooo~=++&e`FeWKKsEC4<wJNQ1%@ufKj!VH=L`5Z4etH)Fyv!!<r%tlAT*jI zC$yPyeE32-znXB|4bQh!wNN3TW}cAwI%95xhe-GuJsv#oGX)IY`n9#8(O(g7CnDwP z#D8|_ubKRFe8Eqit95-JWM`AaE->}o2U1~ulNs|kJgn~wdj1U0$4z}zD3a|yiZNHf z!*>5S>-j4Fk!?Lo&j9{?53W49cE?R^d|}6blmyDtgv`Xj7}^X^J6w6*ixBqRS&ZSo zQ&l+o<f%?{%3}JX1~|U3-OmC;!hkrMe@_qF{U^BcEI<`Z_C3asJx;(+p4A9p%x#Rh z3IBRkIP2TB7WM5YYd{D|@L?ut!7q)UJml@i<99z}p2lw#e)3$2+8J{%V^+cA$2_fL zb~1*isr;B#@GuX*BpSLIo{usGpMH3bg!@~@OafAvj1&^8h38vv<@vRai7{p$JikL- z^7uT!?;*ah-48JSC-`xM%HyX!+l26iX`2}^55GX#pU6CQhg9@o#`EFJ2k?_g>oUAB z_fdq3jb(0$`5ImrBXiDw;N`t0<}n@fdo&`{gTl#K=CJ^B6nbXS^9^{W!)>JJVR+d4 zQ|Z|U&ny!|rofmp7!!kM0*mD{bn9O`NmJxigoKCQkKj-~9Y2CM`eOY1B7X8@@t<US zG)fQc!|z1=#?r%oK9@Na9ws{z?zq$OuL2(Zl&vXar{f_oL%04H#_|A?ghEaH$EOLu zlkxjK(_N1rhYcsR&^r7$k^PpQKKzJ@|4Yx$@ME%{(ep5VOm;6l1e3{lxHn{>CK)00 zTnZ1TE2=L;yjX`Gel;-E2M=e@(Zthz@UXNO88Zt1y5K%R&lmBJc_i6w@GM7Cd3+lB zqz(x2g*aKufED=F<kH%s>%V{yBJ-W7v5d6I;^diw5N3=Mmh-gdawfYF|9s4<(uQum zgZ)XG5MrV$FT~A7OjC;=VJ0R*b@)xr!4Vr>&z$V?Pa?EzCtf~`-!=5`>)jlKL{!;S z{A1OU>>POF@W^wc{FnA$iC6NC-3;o(kM-V%UuYwKi}=DPFy|5r^6-U?emAi&59M>l zIGLU$@Q`UAOV4NEA=7>xuFR+eP{`}+2#L|d=a29Zxvw%A|J5**kKa$-%8%(AFD&v& z2K*C#yi8S|Aa2jqVIunwx6~YkF2|2;r21Iew~Q}*{Ce7yACnzk&cN>%4EP89uHXxw zp<CZB^ze;N&=N^saY^$+%%29Vlqt*vWQEh2gb!bc2{tTrCVsQ|!iS{K0tDgL;DuAG zJU)&-V?y}CQhv#RoAKiyl1FevG?P3(z`?KwFW0hQKA%7c$%n%vL>ZT!rA)R6|BA+p z3m)_tndVsAhuO3Rc!}UA&uaYlV>;nEO@i_7>-dr8D4fW!B_oyRUi@dR5_3OZ{1{Hk zex8@$smD(q6oSXcgFpT8g|zYtqg(L%7ryWb(&Wcg5F{785ZqfCZ~=a-trNe{W%|eW zTs<7`^6({$UnK!)#cvmW^7t@WCWJ3+-!~YLz;7{M_>4pky-YxQ@XP6dhuyXwKM^bf z^pN9aesaE)<97#>e*!<k@LhU1`26w4fKm_j8CL%hoD=xqb&PuBD?WZVB%z-02+NgD z&?mRmEgm}Y|Cr;GZwUzIPg}ig*|a%{L`)?Re@$Y=qSmGM{KjPU^u{I2uUgtVYiV;w z2U8(TQpaK;Nm~1fl}l31S1xTe`5RNylF90+Rmo(>;^vjDi<0fBmC4p+?Ms_mT5ZWv zJ)==#8k$!&FKbP;uIyl`(dMN~SF|*zR;;uerzT@~1R%)~txu&^F1a$DYPCP9!%cHk ziPQW9=QMX1P=?LFXt?}=^5-k~XRK;%At>`3tI?P%n>&`YBs&1Z@~i9?39D{F8<MG& z%}el6vz8cIP#tUnLKrq9X*bqNV@$P$?YYuK=mzQb%v!O$ZOK*XmCdOoE0(h(@{pbf zZ*pqYoaS^#$CBpdvzHJ?;0c+kr_Wlks(B?sTUyzjfQMD+^5=G}SRPy5(%R0Xy6bZI zs-7NO)w(=2r*(NNAP_VptEXLv#x4g2Bu*C>()g;Ld1dpWWLtW93kyuPpfh#<DSTFg z9!%^E^~zS^^~xp77ugpi1TLTMrVU4U(+m>MU3I~{`He_Z2-4gO8X9LNFF?W7Q-$Cb zuUNVW^ff)1Y+r20msA64JO$J?4;_ReRY&P=@Ey~>eE2~Stv2##Y!+fBfKWqEB^nCq zDjs3g`3*&y;Tl@=#tmhEYy8(Hlh?L3U!7dp+L2zGN~W%BZ?y}Mevq)_6R@eT2L0N+ z@;blM?S}jw9=S61Z*j9%p{hcDR_OOT?tjV4!NOlEU#ai|MaTd4{Dtj2-0eBk@(bZD z^cR+2=r2tFKjkk4*IN~C+EuE&W#DQ{Qj1r%HZQ^y6%wxqE#P=pf$4Q{T59b`Em_71 zEwre$t(knV-IqZ^EfjJ7A9vpZ7iE?HKX{$e0K2kf+f-DzD+MSBT|q==6qVG>ECWOk z5`hqu?qi5KO%&T@v+P1!ZFc9kTdkGWn6BDoTguwpE*tIErrCwAx@GzQe$RQ%@Xk9k zfMvV&e?Q`Pp7T8CInQ~{^*!(Vo?{KDES_Cj>EKA|np#&|Us6|JTk6WIt*x#-(KWFG z8ms2ICShcaA~FqKtQL<VFul04K18CvYF<_KqAFJ@({QnicDRyitE=lAu2WrD2+A$4 zs;aJYl~mVUaH4BLb$x9~scSxGYOaa}E@Z8;(!~i0$7qLk1!Su*C4lWvSXNw7SvtpI zre&6#TPGV1rEx)MVs*u}b4%-@CN{0S)TO43G$d$(a=**rnp0i6z(vDL8!$g{1gC1Q zg~|ct#fSq1i)yRk&;=D2mO92%%rC8Ci7jwdmnmjd=^~dIWnEKY%A9JY5~W#Et`)O5 z#CAuBLB*A<6&G|FX6lj^<tAU>R9P6=@|#bcV$4mfh3}Q$7vWa%r5XK$cV}<jAq=@) zh!#Iv_~Rjdq@zzT{tR`igauaNzXY`EUn2Y(-mc+#5S9-a)Gru6{!Sh4;(7xvyZ$l4 zuMs|%@gn7~P589~L({L3_$geo!4)ljjqp!`4DtsnL$5aB&$an)+Fe@Cb%@6GfJpH> zg?}h+3*nzI{qbr=LO-u8j_Di5?;NW2^SMH#_^n51e*1vX{I`pJHN4fvm5jeg{%aLJ z>sKUxhw#_HGHdzn68)`7)Q+2RZC{S2@ND94`NjKVTzm><E&qPM*WvLr3>Ozx!4J!S zw%kEK(myo)e2K4Cj1iyD@2vK<3g3I8Qtvnm<!4QQ%so21L)Ik@vFTqf{P<ig_mYk8 zT&cr5c@K~4aqXWl``cKtam@iIl7C&Y))=eB!s4g&z|R)GD@yz#;qM!TUnBg3qVQXK zh~FxFR?|rN3kd(8;9L8TSHyp9Ty4Qshd(RdJV{KMq}Xa<Et38s;b%ZB62DdWTnSPl z8iW702|t>D0>bBVZKU?uQJ__^|HKtmey-CsBO1R*_<o2*>_2*lpTZ?ETzUA5lz(pz z{C44Ajrft$FPcj2(e<|pKU(>>3xB$;{R~&jTn<OdSz7-Hc+Oh>9}2%_rshZUUz_lw z<zKB5LIoG3Bj%5*h`0vz3++ED@6+Kmg&L34_Jx&iYmw&j<>g5Ib4Rh}-vxe1|8u_% zZz<8p#eZD-e;uU$ca>^_OTE_qt;WPJ*ZgwCwDMOA->fp1K`c`KYtGa0ueQbCY2sIE z{$TJ!?0-Oq$IB{Z8pufXuR!?G+E<bAqtzd;@FzomB>UTY;Jd1{orP$>k>Y!6G@sQd z62C+E`yv04_?_qL_^Hru^?!}{Cxsmwu7BA4`=RmQLd|~(V2z*fpbqa8{s&q=w1i$A z@@B{f2)35bG>PASp_ad2#|(?_y;$?@^~-D0zfAM(_3H)U7cJKOVbE-~-}#UZZ@F9} zhG$-3>9-0$TK#AfezuAn6BfTy_`|6^f__({W<*OrMflOu&ldjCT1{B`HNrnE3cp48 z`$gfm3jcQSt>u>@{>xsXBYpv}`nSRGn>0UK|KnY%`E`9m<KHFm)srZQ@ckQW`kh9< zU&oIHALCz+rtk#jVg0M%Dvhhahkf`z^oqY)(|qt4iC=V$=JT;=Bz{|q=JOGWHUAGt z`Zd4Ne7>y{DSq~Kn*XhiA7)=RAI{>6ixR)!2F<@6{)^PVbuQO@z8zq-Z>!knx>@s2 z?i1O*qFXdSntesLYW|}DYxx}5ro&ygX^d9>MXXr3?!=!pezwGqZzUIRMdB}#|KjgZ zY{#<zYy4#rze6xvi-r03KppOgxp0ajrXfBie(*pizW_}{IQ#sfk$6UhD_!IqIkE9e z`{eE??N!N*0k1*iWFCO$j3PI>5hbH_5o0ba$X6*1T!9hY5pU8P34&?Xh#uY#^Kw4< zsy4vro7gz;ssYXYukLq^l3<+m_**qfi$zPH{m&BowTs+%{O09+&89!MvES9uOnV-| zU#H0P{+X9^vrWDr)E>tB5P!>0*7oqenwRsqzlG*wT;qVNg1OKy@FYSu{!}d%wC`wJ zJh6}YUJdyaksqN_!GFe2;&<9}G34AL$NO+z&K=$7gZhV}O|;}`d!p&5+!)BM6gl3f ztIOD7@n=8C1w@Yb>%5#(ZTX8(zPz{I>DG3v*U`H2Df(HyFF>x<qvd!%uP$Rp1iiZ; z(=tKJZ??;iZB(U0y@{~ZJxR;amJq$;Ba}a6Ht`@tT)gk+<$T}f?+Er>g>;I})bWya zw61(gdD7pHK(1Wm!rG;!+&QLrMULwOyqtcU9TDp91BmB5OWVP90~PPDJ;!?&@lyD` zE-tPosCf4JJ0ZN@FX@N$X6blbXHb_ZH(NVlea@%+xmup<4!oRwyRS!#$8=gsbUgJw zG2<Q4bG+4vx1~bI<2nT|r{5OOmM^CF1>!m8>v&wh;N`r>7B7PTheLMf`8pogHB`K} zZSidNN7aAGwl31~xZa^I<42o(BAB}%pK^hg=lVy8yrsS+q7FA)sO4fsEZENoO?~;0 zE9!+@9pv01=juk^Es)C=Ihp@;wFgVO>mipUatC#z??cGBdZF(?^pQ@H;~1ze<45re z{rw8`IYjQCS}MFATKcDc&>Il>IwQZ^)~+o5`z?@<zexN2c##kK-BLd5A(tR>TxU_2 z&0dzzhmcDVxi}FE>JyrB2Rgg-b?5h!A?FZ%>UBBlFzHJFNquu5xAS71kFfEXad1)Y zD#*oO(zDznkV_Idnf`XAYw_QkkZb9MzJ6E(Unz2V${PG<@?r7waLBdyLT(!5c8Z)# zue<bF?7J9pMVIRQc9-s5kXt5l(dr}nn>mp4iX7K-csZZntP?Q#vGq5s$G0Hf%0?~5 zbsk>Msjq~_8?Wa@ET@sE6swkKc6a4@4&>TJuDkp#f!t1!3%;0W>=l18e`6q*(xlVn zdJr$?uWfeP@<)5$MLefZ$2-#A&xwBeVelZ-zbmyI=j-Y+cG&t)+VcwZy8K$6>qoqt z3vBk-#xL4ahjf--rQ^xEQdj*@TJ-#LB;*`dYq>dQ+&RsrKZ0GAh?n^r9gph*ydsom z*gSghV9dX-)$z)7v@W|W<?sUZuM#<~OYw4^(6e3rpg;b4t)J^vDqgNFUIc&Lg?L*f z9@nwdWy;0UK3{;G;|8rCMWZhxCnWv<g+*Vq_C&d%SQO}xbSF#vV838#$73Mplytk3 ztAt#N$Z@?(UB*6(zUv`ZexuHZET4vz1MOQ4xmJ<m`d1`<tfv=4ZrO6JkLzH(oI76D z0Ve$j_2?1AYq?pAaeYk1JIU6cM4JC1Ugj-29@ouOyc2BkZ0QY$&{ddRbVxj|r>UzO z`=&v@^>&@k2O{q5YfHyAFH_}@cr#jcJXv?^@~`Nj-yWeocWAj_`}=Fpe)|yd67JUV zg6;2Lws;ZzmWV;Q;P*Nn*XwvW-|s#i^RpiD-1q2soRX-^_)SR4eF(V}k?XE~92gJ# zMJ`+72kX71y`2m>qmSjMt_bPQfm~)U?7Iqbu3p&p2;`h1cXT)Dz6rT_k(2emuyUqf z`VHyQhpMYDTRvDH)<a*Xl#eXiIGoilX~!FRTmQv)yAW@N*ztv^cV1?TXR8nN=Pj_y zwNk6^&3H5i@+tRfdEWc+a^~97v9&we$8;JV(DAs=$jf=AEuO6%(Y{v@&-<W`$Mr{E z&WCOBEcels`(wWIke26qq`HjXY<8*qL%#E2Eg$?a!pKMP*9(x3|359y^~w<aHhJdz zddR2zLCbUfl9%%^oBa{&8hHT5KZ(b6O?4T&BFN8y{ESC*I$XyKk+<2!d|wawq(`+p z*FC$FSM4A2&d0Po*Fn|QXOS$x<){TX=64C?ys~E>*F$+Z=eFyJ-PoUaAnL~xT8!(Y z>gq;*8swL)*77~&mv#+>{ERhP{!vly{N}Hrc15Uvs}Zk5;`OF|EP;IIQ(EnvCY`5k z>DbyY%OeptmE}+Cc)iKbhe#(gpyi)6>D+Eh$Ce+K<5ftfUBt2_Ua;R4`qewsS3Jpo z0pcvC<N)vh;O#&>3Q8^qz6U%9xIe-@Kzu)yoC3TO;Tv1g1%mbo?nX!U8p3w~sqgQC zj|e^hJQ(4(1IGeefO)_xfCm9D22y`D@K9hMAoV|tb#LMjAocG9r2eh9YCG=*(!QI3 zjPC{h26Bf08Sn46XdDTo+#n$3cC5g=D!_Yz%y%7-{82!B;GDb_>-pqA2xNLU0V#I~ zkaolYvp~1sgxv!`-v|6VupW34!si3`iE*4#20Rux1Bh>QPB|So5PT2$$ogr(k)Vg& zpzVC-dW}1-)A+bxAK*98|Jk)V-;V;DK(7Si7VYq>ftQ1x2iy)U0A2=k0x9<eoI<&0 zft0%oI3GA0$o$L%GM{-s=JOOFzNkq)NN^zVACUXJMf>R$ApN);$apot(ZET-5x^0` zj}iL!*JyuwfRsNHNcr7YYx#G9)b|IWrvvH#kD9gIMj-jkK!#6|@MK^v=ufWF;j4hu zKOV?@jTZVCApJ4jul0-o{tfi61&;=vig->SKB7J)0hOHC>C<vsfz;Ol%!J$);EBM^ zKonte8!!X(N+9+4fsCIC{4Mwg04aC(GHpls73wRb<Xe|&xubxruYW~h5mSInFA2!} zxPUB|Z<px!8-N|)Uj(FI3V|%wlYopj0?2p=34YP2=?{Tyhi?Pf4%>lwz>Pq*!_`3Q zdl<-ecq0&f=_!kWoAAw429SDpAhFE|-yrxjknw&GB)<tr|CR#j_jeX+{xl%%%Lh{K zG$8Z!OCaU$_Uil(2Qq&{f%}8MFOd2>AVj@efYj3tWO-}?vOLxS;o{^KK$b@)5H3hQ zQo?V&RHt(YkbXY)5`1tC{x5)R_Zu$MdY=N)zT1I_ntV8r>GuPoi6(EjK=*?Sfz<O1 zKDQ%&yGWx~@U4Yf->X3C+XQ5O?*US84e(vyEFkka0myVRfT%Lb`vRHI9rYSt0lo~s z*8*Pxo(OyqI2@Ra`gRNuO)mMVI<=!faz5}`@biHGM)=`C>N^NXJNg4@*Ukla?*X_K z$o{JXh^(ISci<m@&jVipt_QNex*y2+cLEOw{uapi%|I7$36Od(1|9~i2kwI^b{=pH z=yQN@*(o_d=686l&i{eHp`af-U*~fgkog=6WIkho%;!KL^Z8MY&fnjFOz$G#M+iR^ zNI(6(TF1Ww$oSU)8Gjj&@>2zWDY&^xhu<bxA(#vtj(7(Py)TgY?*q()$_?{%yeEJR z{{xWzXpr#pfJcFzE_kYhrvTY63<W+9`<y_Q4?Abt_d%uBcNdWLqY6lWl>ylgemze; z(@*{k$aJ>}t`~d=h`C?#-9Y;PY6)Koj7NB(;20q0-pQu{DfiWRI^IV>(*Fhy0sk$b zUlICwp`Q`@aiQCUzDMZUK;~yUkbamXbQX|y?+1Ji`TwFq=l??><=+O9{}hnzB@f7U z_CmRCH>-j4%Y8ul#S8o!<QjnVV-1k~LphNBLkX}2;U@vvKWv$+zV}UD3uO2yK&JDj zGM&zbQniO!^5a1E58e{3w*g4|YJjxwWFYI?YqNEIyB+u<=oTRBTRD(&6M*j_=(}QV z@8v+|=LEs#BCU5Zkn$6O)VsA%>%AXHy|)0VcP^0moF<qIr2M*bwY(ol`AdM5UkGGA zX92$eP6jfaOreh!{Ld_GNCW<-K+0_cQtm0>WuPwxHUq1H{m}(X1zrg{8`uYO>A<f* zrvUds{W%u+8R)}+yMTj$-vT$EgAd_>PXS{P?~lN~!25xWcLk94E&|eyD!~~*2judB zyAhrRq<k9ibI`{DDgR4BCy?^H&ernVfRz6ykn*nq{{?&=$n@6<|8n57@ZUwi_raeD zRP`6g^3MX&FZ%&me?Oh6!&d|8_X`CJfvlHj0$E;@fvlI~ft*K<22yVtkp1tkfa!>T zH1KZVP~Zy0ivcp79cSr&_yZv8@ms(V;I9L6{&6pm^N-(2_~k%9_*KBIz?r}kfMbA^ zI|@j<4h7P0u|Sot8Jd3YOpPxIt`U3)$n>rNQqM6!#{0!|Ek6YKCG_n+0~^!;w*gr% z-UZVCuLF00{;PyPC*iAswBr%rm%!fvzXo0fr2Jwa^;`_3o+_XkM}h1Q(tvCSF5pYR zSRl(|*EB?eog0AE{{-+$;Qc`AzX?da%|Pm13j6}}g+R*91G2uH0i>J<NV(C#FF<Di zDR&%@azlWW>jR|RH&b!%2>K%+{j~|mdh`Tv1j6qSx)Rt9duIwgNiYkj{3{qQ_|_D) z-@z$sfz)>ukoi7e=#zmjgZ}z-t@ocm$~_CDzIz2*1?L0*3i)3FUjlwmpyOW)q+O$c zj6W2}_@7SJ_@3ZOAmbklWc+_j((&7Y$0Og50U7^V!6m?7fW8=*1wT{*Uq!r`5}q&N zCrh{s_!{IA7>;=R0oiW)0|!I@cN5hnA*bvB4np`RK>GhZAm=Z)0U7_dK*sk28NU(8 z_!k3{fb~GepATgG5+LLE2fm5;tMYX|?gLJzKEca?36LuTjzIW1z?*>MfX^deCjys& z{uS^#;66b5W6K1M4+we%rwJwj>F*<i{$RY8zZy6i;pIS%gU16oKlsd}!~X*0ebO~R zhR*;py|>)j53d4A-z#{b-~_>;f-j8I>8}G)-Y1v|WcvRZtJD7!$aJm*GCW7Zvn2e@ zJl#&$0m;7(NV~CBy^5D5;rmE<jD$ZtM$2CYr2HZv(>X@Mzs%L)9|0M@0!aOp5<W-5 z2Lg{qcpo79&(B9|KWqomzi$Ise$N6qzk5pfZGv|SE&;OsTmWSKIUmUSa~_cOrv%9Q zb2e}v)SuIVtUu#`>^F}CvLA2(w<4W^z^j3u=D>c8tIq&A-d+f70?v|fH}G=M#{jE< zgMpl%e3q@{{|`v{>w(mBIgs+Xz#D-_0#OAf#sW8^KE8XJj&~=J@s<J^uMWs~X9MY% z$w2yJ9B?Tx9Y{YV0{;Q}AmAaOKR#8L?_YseAbd6O8{pl*%Ybu$OlKUB>7)ah&H=#r zz;92{et8whcKR0})Bh8YetsBuA?#iW`~&c2;48rEfb{RhK+1o8vc}Cojtc?ce!xEf zSsv?8()D;Xkn)cJnZJ903xO`+5eOduWPShcL@oCf@JP_xfRtMZq@7hj%AEzIzM~}k zP$28c{u1sG+=0%Ha@&E7|1TirUIMayz5rx?*8}%OJy`=h4)`E21^9cQ6a4dloaYw< znXj2Z&hK-8oY#+#@V-F$CxA?Ti1Z!>ZUL?UvRuvvvRuXhRk;9JE{6k|-!Dh${CxyG z4D`Q&Oz#aK@9X{oT!eCX0to#R9|p3W{tmbWdaeL6o$)}XlL2Hpi9n{aAMje>w;4J- z0Hk~)kn+_MJ_|_sOyPf%uKDi+sqa-F`40hE9ybB$=Q`jlgwF-8044z60B#zo@eUyU zeG`!F_*x*_u^-5G+z4cTF96byqk-relaB{h13S^#zXse2WV+7+neIJ6mggZr`h75v z{@9VG{rVD6$ph)v^+2ZcCm{X$FmMt4>I2fB7Xul;6nHK03?TFE1k&&4q-uTBfJ{Fh zh$2ir8MqMmYKm@`7XfMasX(Sb3`qI!PSAe(6i7ea0;HeZf{z@p+w<>$+YufETn1c{ ztix-8DjZ0E{AakX*PjBZ|82p)39bXu?@t0*&mRG@p5F;%J--FWdR_!%JwFpj{}cdO z&qo1S&xc9)H^0{9^Cpn_dIiXIUjWh%tAX@GE|C3GDv;&4<5zl~{t1wFzYokrynh1O zE?);81$+)jd!GTK3Z3#K@NVEEK>F(@;B%m_0kWQ44&*pf2fPXV9N=`|aX^j(1A!a| z9KwHlnC5Q=-T=9KfM)`i15XE@3S18SYm%N%tOYXuO+ecH8{ikfM!}uOX}S~mCBokW z{s;Is;7;HRz^{NCf&0L(&A?AUUn=3;eV5@?K<X_8QqNhyGN1>@_}M_pWdSLd0;F8L z@cRk>+hg@S_$46AXC09KcoKLP@B!cpsLwY^xL?9Amheg-^En5|aybjg@;DvHb~_%( zcAE=iyFCd=yHbHHj|AZDh`;?9-M>5pYyy2Vus_mW24w$n9*}aU0ND?Hov7vh4W!&= zAmu)DVP{R?MnNa=Ezk%3Qn%N>K+Z>M57#&W$b2^q)$_=?K*m29*b02$FzluWoF=&I zP)*+@m@l|BL67@Of!WZv<q%oN1k&yY1h19wCg3dyuM;d0oFbSbcmVJ<$n_W8d9bFp z0BLtS@E5>8OZXZf%b^X(a##suIottcIou3nIa~{5IV=OR94?mdItf2d!i#`x7ui78 z>%c*J-m(zL_H#PWgMKatxEby2C}1PP`OIt?@Lu2zz=c3R@EqV);A9}@D_Ov8pk2UM z5q|)X{pxcE==5#}&II2FJQFwrI0F0}AnWCcK(@nQ0_mrNfz;~+jsU%De{JU*K-$A+ z%GUwc0DlR&+kjtyZU(Ynx)8|tbAXu$Pn7Tjgzg-o(|J$uEg;L`RUpgZNg(~T0!V*d z1N<0zt^hKf1|ZYP0p1Au?RZ_EZvZxdz8uK<Tmoc$P65)-{eZ0ZPsC}tdw`Vl0x35a zNV}&4Y4;=`(-|xDiNK`@9}esQ9uDL@Y!L8m(4WQX`C>b;55oTp{0iX#AnVCvz|TP6 z58MS@0sIzt5s>9y4&03LI}P|9!iNI6jx+?=7q}0QdfwYlm&5bG;~~d)p2+9BN#x%p z^esYPF<AGj9^kXkKN|Qx;vEhA0LXXTSZ_K9>3XvT_!rR60qOtcK-QPVz!%`J3xTI2 zUKx<}<y_!&;3VJ-U^<X;#{;K;{sr)Fz#+hTV1Hm5aM!+S=kerDpcgdXNn8xv0%W~f z4P<%z9>{ulE0E=Q8Sr`7*8pUFECsSYP60CBD{#U$pq~M52QCIOKeK?e_Y5HQ<^rjA z6p(s{0IBagr`Gogkoq14GTwcHzXP(q-V9`Y^#a*n)B{;>Yk=%G%7N@Rih=AmW&+u7 zOaUUPgWN#&8%G1_=hlI`K2HbIo@0O>)QevLSuegDp!)^x$h;i<<AL<UaljPN{eatm z+xzMA<o7x32c85n{|^G0&Qc)rb19JJRt03aodIOIO#-sqh67pd2T6D=a4N!g^wse{ z2GWmj1L?=tfVBGw;4<KS!0UiF1L?;LfJ~SBKoU!U^yAq;`tb<h8wmfbkH#&6_X`#Q zUk4v~Q29m~tNM&SLDlECfFFRr5y<-dAdvZA0c8Fwfy~btK$TA*^K$}_cJN*6yW#Id z<db+Z!qX9+0X!Lgqud?PlLSnLpD^qZ+3hJB#iXzWxDr!1_`vZ5&<p%^j3c%Ncp~U> z;CNsWa2yc6cOb3U0^mtNH*gX#8#ob|37h~#8FRbS*d!oiV_iV#icJ9K0^@;WfKK2& zq>+z5k_K)9I)Jo;8#DhO=&isFzz!h8+kxvrZvy@bbO87;=vBaVz&0S|T7l1iUJj&O z3$Oz8GT?bYFR%{S0IUJl0M7@O1LpyYfGCUD8Nga#0dN7(4QvBu0tY~E3h)BZNx%z% zF5n-4@j$!_80!T78MFgPyLO^}JPw+ND$uU2K$Kl<2XGXS_38J(O~ARp0B|Ib8xyAk zxhFWvJ+>7{{mX%?K(_#?-wV7GbOUe=utvg*fM<iA0Xzp-0K5;F4NOG5OyHkDrvRxZ z3HVRYE+G2v*aTo1Fdmo+bOO_W4&YtDPSkg%yA}8}umeav?Z6_?n}Ef@0Pq1|8<6rV zflmQjfs}6no(p;zun_14-Vdw+QobA*02To$UjUp9+6^oLW&<AtrT{6Q1Y8Sr0Vy93 zd<?V`NdG&4b3pGzeJllb0v`f)0FMEG3veUob|B-Ujyf&|9RT(N4c~M3=~&bW$0fj( zz)OLxz(;^BK(?c0K(-?<a5As~m=CN0vK^HJ*^Y{UY)3PIV}S)g{HgW^8P(pV0W%Sf zK0>uOq^a83y}$&7KM9Nn(q1QUHE4j&FK{^MR)nCb4Ok9D5e{ep;$5s*FAy#nP$W1* z_yxkxmT;F~g7D*o?~w40{j{Ed;3^=~X#+ByRtfhC771nxx&#w|j291NJcopL3>N)@ zt%A#eDnCG#9|>=e@EQp(lJFT4ULfJw67CXA5PrPy9TL8CkWPp55vJ1tq~8L9t%6>` zBEf7ym!LziV_%6cxC*HJ1yuf$@Z}QTBH>;M=RAY*H4<JV;n{+j!cP&tOTrz3JNJ?N z09Af~%+D4HZ<p|Zgs+nDHVJQ)aIavIV78!3&>`4?imCi1*ebXjsLBth%1^=@B%JdW zh8IbAwqU04Q-tr5@B|5umvD!KcMO#L0hwMqka`0W&Up^)^9nWqm4AUMeF@JNbO|~H zcMcGL0x91CRQ{B3eqXB6lkiqSuV9g2wxCPUA=uGh{3qBd=oKsy%ocPBIs|v3@iRZ2 zKxH3L*(c%c5+0E7Rza^|kzlr<OVA<M(O2vfY!&2qtjZV2biESJaaj3R!iyxF<1fQG z{!%_$!a4pjoZ~OUT@s!k;T(S%?vU^f2&?=78Lu7xkspxoRTADN;jI$BT*6x<+$-Tl zg4u!`Kk;us3jR~}NH_zTZU_D&1_WCLmjfBE1;}__2`>`N7R&@vj^morFX0Zso#@xe z?*x+H0R(Hn771^c@PLG`lJGVOZ<X-n65b-=UI{M}oB?Dy1wf{gE#WRffJzr*BKZ>^ z<{*U#Z{9%;#xkMJK6lS?Fav+d?==4`q0K&aUt{u1zS*~K-ASO)#x`Km$g4#7W?#DZ zMZeicE=}|W_ie+?1ofGH*1i^bv#;7KLYsZm>V-D@q8%i(*$3@UqTlR$c7)JopR=`M zpV`;!A)(DaU9-d<voBX4(Qo!~x=Zw#eVfLMyxB)-naGd1U;E<|kvIDo{YGfBZ_)db zzS)Oph0tRj(D7dp+U&ElOlY&O&L~OW?4z?*(l`6!%of`Fpw{=Mr2m4@mkMq6vElQ5 zmWSDwWw6j@AC`Ja|E`C$z8fWdvyaMtLYsY4PL}k|J|>OAH~WUH5Wd;xBS~npZ%3Y_ zZ}#CR#f=m1Db0Qy@3H=&4^4ST+f#B1*T)0F{kCSFs_CM$HGe%O%Zgv8=`Z6oZT9y% z0rLs+i}E#pAjU`1W`88E<B;Y}3$KrbZ}#7MR`~JrHUCA7=akPDea~aOBW?C;nkTf` zf9)M~5?J4NnEe#b7252d_!RVzZ}vm{i^?DJe}GQ!X51{2&-o0m>k~B1ae&uJB3~o? zVIt3QgVz+1&sG$&Dfuz`Css>-%zldpN_?}wWZy|lFM!FeR!|JRq|N?>Ug4YlY__WS zUWeIVYVkxZZ}uxZ4Rw+6&HjlCls^KFfcWzglt1~|$LsX|qx^&PM{0Vg&}RR=+oXP& z{T#2B`q3u-_%uc9Gy8p(D1X3yt<G`S5Y2Cu^v@V9@<Jy|eK7lht`>b}f6aQSe`deM zty2DG|HNa3Z}!{#M*MH~f8#nC^K15td;JhioBeri6Z_15cboUq{G!u!1|AlDX1}{f zq&z!?e}nMNetI_x-zEHugm3oa^9tYW5BO&(FS8%sS}8BH|JtX*H~VdFMB8P4S{k)| zzd`#}`4c*0jO6cf&A$@!E%MENS(hB4>Fnz?zx9`zj&IfUB$uYm{zKnMeM}MkD1N2S zWoYRSS|z;(@pp^R(|;xDi9GKYl)X~^6(?xg?59*RoV3?r_9y!G*P3pX_-^rMk@Oe) zia!g4E*z-!wW8hd;@&1I|3c?Wc^3)&rPRk1p$`{(%>H}hq&}GaHpj$jeJ-(o@-dpu zZqn(^PSUj5KkeCHXu9(<%^!2PrrTOHeMpAHU!v);M+<$urnhEmx?S?u?$Wf`|LxR7 zO}7?l`ANrV+UyT_x3tHWa?OA1FwO5M)^r=%J^d4Zho%q3qKKjwYPx^6rp<nb(~i}& z*<Wfb7JVpRbgPzsI!Du9vG<6hG;Q{qJ8ziqmumTU4%KwFU(>(M)O68eO<yoV(`G-r z{&^C=M)TuT{lNHev!*8|Yd#mhc$FTnX|o^et^+k~_8(hykno3U`3EJw*}v?0kvIF1 zEtUGBrLhJm^@T69@)~#=^f|qb1}sMLI&8eATUTj%<;j{>r?DaEsIi(Z!lD|lFBu<g zw)Ous-74|Dk7@cY(O)C<5#x0H4$=P+`W>bpFZAK;4?q_P{c^6R+r_>sgl-Xf@C40w zKB3e5i(At!p*u%wI#cNW93P;+M(qEC#4iy3>H^Kr7X2MlL|*tGay%L6b$I`v)BDP! z>4HCMx|#k0zfI^*S^l8gg?^9z80c^W#9uY^7x_Y8qxfFOH$uNfe}i8m@h_pjKnEoK ze)JdU6yZOftLawZR|#Dtbi1V2@rbtf5c&)8T|)cmFVOK)UhhhNxVXm4O@D#k`lzPo z(O;Ao{j;WsKH<Ma|2PAVaw*SRRi6Tm1o3}>{sBK*=vSpaxg`JDsy+oA%f+4*s{REW zt3=;^^atW^mGau2tLY@+w+g*d_-6<`L+D~vA2HrY`s>8LWkMgS>O;Wc6#385{*FNZ zq0aGx3l2M2-G6Ck@c+r7^tR!l^o=Q@bghlXJ)8sog4d$_P<krzZ{@#>`fQ~yI5Cv| zJS&tw3jVdqA8U*MacU^PAI2}M{Bj%rT+D~8e2<NPs?DDFVngL`>laF&jQO5b-|fy& z`Wtx0%Abnzu+mkw{8ie@qu6GT*A{>HzM=Xaw#mP3EAL8M{L^f7U7t{WH`?f5+48@| zMsKv0pBsILHNW@T_;|Ju!q4d&O7q^z8vjdMe$GB1l)u}iZ>5dC>yS|SwKji0X{#UE zHvc|li_hn@R{K&ho>}RC+3cHPi+`z2ez1+t_rI+A+6ITx9Vdj+d|q#rUtzQFOIvxY zwbA2j_4gPX{kYBl+>gMT-b@?4)RsP<gIVQ2x6x<W{C%Y@{bOwH={`@WzCYXQ|A_rV z`IBw-du)8ZZ(_A?0{T}geWZ<k+}3^@ZT9rF$scY@FUw|6hAn?@+U!|oi+{6?A7|rV zZ)@KTw)F0?@gK42L-B>=Kfy--+NSTw>7nw;HvOeG`68RWUK>r{TmAomP2V7!zPoJn zH8$E&IKOm$NzDb0!otFmhGLuogA-Az7a7tJGpE*N;RL$*IIOC!bRoDi=TsIbGzVFQ z9{j~K%zlywmyMc(!)<D-FUZrzkL0m6siV{pGah7+hu-jLysV0<lG;+7u2Lt06O?4S z5=<{%;0ZE#E};EvvUD7zQ)*(Gg9F0?gQvJfI@?T+HVcU~0fkU%4x<~nsJz%DF+mwI zBIK|-E8m!qI-<U24hnFJI^1l5$y(P@g!(kULLS>zSW-QIKF-w3pN-Stcub+H3Wb%W zRdegg3)Rs(5}(?8m6wvr(&Ac^s504hrdvi`waSAo8=b54T%I@7bp~SBA%BsiM?^Ug zFoJAvOb(4EM;_`UgGQcLT~TE+W33#sOXmg|I!5|@oXFUaQD23F8|O(BD`#X__+B^` zGA*^R5Jx#(SXx_cPMGAub|J}U=&WSSDXl9mDUXnu%;E(&(g`O986Hb5Ez5G&WkGHA z?BdxKl{m4eqC}l-l$uhpz#Ks&(Ry1$Qq$<v2$6eAa%2gQZ>+S%)NM9G>rTgEhoxm9 zuK2keyqKCP9a!O<QaK5<)D(`cQ$L%Wr0UbM)ESFE&n%3>m|0m}6)XTtH!z~KYEDQ6 z+Y3!P6~};vHtCQQQnP|*$*LnPORDRu>KLcC6df;mbbX>(FXE&X78cK$6HQ)s8ihQC zwz3ezNpa5_$E1mj>h;6UwGFbZ16(k$7ky5MtbH^NVUCiquWJ|yVW&nLKtiN?GjxPR zNR2*<<r>#mM}#q{p*~Gl!!J%}<KenErOv`nO`B6aABWlLA=%0pQH%1&32`=#DuU3t zf+ZFYC5~`NZBW8e#e-o}>r&II>+1@u%L;3YtLBzk7*r>tOfZxN@R;6^0LxLm=jBD? z%!$gG9m?s|!Mwp#OuuPP{Hw!x#*r&(UT88Fqj6SlZ_gJFOZVq-<ZsYyU4f!Zv_hnM z)lNdIx;ap~EcEc<G8{)7R4wHdcHA^-Zi)T0Y5QT*HYIzZSGH*!F~7KmolE#>*u60? zPggwKyqG63kF3PuoF1H%&2yPY7BY#EHN_RRo(Tvuhi3<EVHt(gPIcP2aqiwbtvi^Y zE|VXcd7N~uN0**+JW3xIZZja&-c#n9>J_;`hqAlrr9;%%de4;5&N}>v?=eP#MyRgO z8el0WbbV1c==!2?(Dhk4z3cj{F)Zn$QuVqQGb&8)`7`OojM?4yVpgeM^<pN1_Qu}m zR*c5~T2s~us#PGY5j0fPahYe@bdK)UDTWI5L=6p{bvO!38)^_^T>j+IIr*5M*3T~V z6rvT3n?L{fk{YnM{4}2;g|m6DO6`-d(4pobKa(}341FV$H-!r{JdU`qqN*%3ClROS z$Rkb*#*JKMDVCnXqwAum<V3p;vpBQzLtk;JuB^5+G<4=P6ie3%5nWleXuk5OIP`lB znYe?%S;=*I1rti<?_F&_+_d7F8s2EpG>bAb&PA9+Wa8FF$B7hS4m!Xrxvj3Q^~}Mn zBQyf$-^C^K3QNl874n#9m8NA%T+xtso;@rBi-9<-Ih+CE3cE1IBZjH+RSQXlDEpFf z6NJ1517^y~Yd4wAz{*+0+^W3!Qzn$DmNvh7VX4wpiFrCSRaO=TS9KkQHF9T%l}}VS z$emHOr~)bSmTA6<H)lb0VR>=YoJvyCH&|!>Dpd6iwor@T=GGV2&QV674l5JttI$c5 zmeiFZ*w}#e(*+2tD61&x3Pfw^3PeBA)!D-G>P3YME?7`kI$stiD^MwD&!o`uF`?E4 zU6h0g{y_~z+`V^n1#7m-1p3?5%IdilB|3MwYwSuTHMGw~9WuQC*4QzE%iZYyatdcF zYt1|dW_AViW*iNPz?l*<qc!M)L0?pdZck6J3k%iB=xPD!2T!>p%>6QD5gxq&`UNhp zU~VsIVs*TxxVF?YbyVTh+(J&q_57UEQnh4`DCvbB@DQ7`($e`gmBl5ch4bqx>nc3s zr%YfRnZQHGXg!@}I-J6?Yp;;!5mZt@23B+xqY7u)tH6bMd6l>?s+o-4^;pw?Y#-Tg zOM382PB(tZ>7`$?y7Nm;B)=eVPyJG`5bn+7Gpo7^Jn|U3aEiVS8_~6(%qKzWVnIZ% z32B8>vn)AIgXN|sSO*md^`c5ZS!Q=x&x(}wtiq{G^}kvte$;k@=3Y`=rPsU)Rkha* zCoQ$6qO_!RQH6R=Wd!QjOw;S?Ybr}U<0qqK!q1bYPAc?_?<%^K`l^ca>q{}tV38+E zn?iURmOz7T4Kp-t0;UAIRiB}Y=I7k>et>Jy(Ti{M_rSNhUH0tTX<@#V+ku~H-#?Od z7%Q=by5@1j$m5Jm`s^P)b9=qh{vH{^17*xy(1`FT(Nm(@U5_huY|QpWFSY!Yml|dP zSH-$q`eP4+KWdkUj;D;1?$Yz?iz{_ynW9F2ss5@PR8QzV9Ou}c%)CH#l|4@zrsl(2 z7$dY=Guz;;g`QYU0(<J@!e9;U$({d;(bMK7j(X9&q=v-q+|<KR8qG};=%)PMyNR{_ zd)<FWSrh)DldqAiX1apWG*b_{W}V&7u6kWPerUdbO06wgU0{>>uQ_C|cj&gp#PKOw zV`7&R%?a#Q{u@r{dPvYi6R^(4nJF_H=Y5%;gzu%Cvn%*-<Xo*;|ETQ&BdcD-ko(l` z`pxd|O7rp-PAi;x`p@*nbWi-yeLt!FFu8Yr_+JdAdy>^2hDx2+N!GmnT;4`1sm#Nj zqIDHTzYF<8)|L2}R?k>vA=XnM&u<H}N~?-zS7ME)%rm37ctI`aa1{#*%c^S^VRf`? z4#%6JbhXO0pf)uF62aTy3Ph)NHFldp8~3cm6?J$_jAf@RyyAw}-0)r;?tZn7yoGrq z`FtV|eEhTImQ!k3{jI63Zn%KiHh0n!)nZ6+^)4;a>#AvHsch`Rg?T!cNVQ-g*0uI1 zl^$O7%Nx58b75GJYF1{ZV&O4QhuOzPtiP%I{w^z2|A}`5N=xSDSInoQWXUXiVwM`| zX??179j8Po&s)fj9}A!OXUVBql>Y&fpRU@2MN!;xXGYQ=;R#2uuHl^tB)^wx8WT!Q z536SwR=cfdSlJvE$?gabT7q`tsmtE8n+fd&yVLNhpIQ%^U5rO3SjH_b!|E)ai!CUv zt@Ctqf2O;{bgK_i@!U`8!VBhj9<ztBd$UYAa>1hFn!G7!0G28lUdJO<aeECfp31tn z7ZhP3ze`bgLp%?TQY~pj;nWe@>~Nvkk%fX?Q>30rIwqYDi{{=$(hbiNDg5n0tvAhL zafJC<hz%CmaCJIGi%9ox4#J~W*=R2>?vYkiPNKD^TYomLA97C{!B>0jq00!oJzyTX zlvf1T-wNlIUQk$EI~RlGsKUMZ7zV!RW+i6ov_dYqV65QdniOlpjJ~e<KbQ{o?6owT z*M8uWitgNo=NYGe54Zi4Yh{|{QJ_4E2(OU6c)Wp@&s$oIlp)VI^b<uoAbdTi`};NY zt$SEIf2f=7^R*uC=6iga*pq8vuXYbSr|<unqDQ?-8NprM-`4$C-L>~tJbLnxdMv$1 z)o+6J5m0y4FUq~6JgnVwfBp|T$8NocezB{DSv$q3H7trp%ro3@mssCf8G)B!_?`zk z0vS!Be(p4?VnH6CCU62KvTAN+Yk+zxV-eu{7ZC&Xe8M7`8um$tp6-c=<qe#W@JLpK z3CLR@UA9}a!8*y&wBW5=q*v|o)I6BU^=8_anqF=B2#rtvRkKL7y$%r6*~3k1I&aFW zc#~?oZw)HwjZxie(G#`&)T{{4#k(?}pE|0l9`Ag~XP#x1)%b*zR!o~7?Slv5av7(j zp#fj|ElgD}w^rcGC#)2zcW>0|jz*7FGF5#b6;VtTedv4CTEkR%^&;eBR?U*HG9tyA zZf@kmU%obKwTmKr+hUY=FQCneFkzL+eP&s0^?YSCDvPCxD(#Y|DBn!<9JMzUq-QPm z52Mi3jN4MI-@c%phP7u*HKOH9HBc^5>|wT5FA_OUZ}Qts^kA0}rhS^JUO9Dm7(E-` z<??H9Qv-CR3}^LJ_Nk+)tAep|@q*;sQr+A~1Ve+#SWQv|P?)7YDxb!6In~;<iJ52C zR@8Bg&}y75P+G06AJ-8ykDjn<?V@#K3erFNyJHbr&R)CK8)ZJ~*L|$z)gAMioa$<S z?7LZeIsDKGZFkwyZ`1tP+1h&(&+hVqc@Q2eO5K-UIDIy@ny9^?F!)klfog=ojsfel zc6aluCRLwRR|Ud8V4FmOQ-vQh5#9bQ-_~G-%hJ3fFm#KIzz9=?71GG63?odHVT7r| zBr~!q!w6F)jGx;_8o_V1(MO~dV$Fq{TzK%Fi*`Vd{onuKcBA_?qiz#a+37;<)rVi! z!rp@jx)St0f*vq!4RjBu8<wnD+5{%iz5PPXn%5tqA*==Lu?@l5>CfbYCgVBji+@&D z2RrwlmDSROBTSOakfxf0w8NgnL|e4S0j7BMbT`UPi58LsyVs<X3l7bZM&^)Q=m~D` z<+TyLm!BHEs|oogRdx8?yxT7xj#%k?6*rhJz8O<HaNx@?eC?sXPq95k?|%LQEAf3u z_zVVjVWC$3*eQihy1FUZjIxSK{Sl)XN#*?sJUAX{eW=JU`Bf$&juG9d33>V+s)p0P z?-{i>)hg=R3rk6Vsv7nbEF;p>)eNgA)C&YG&R#n?H3QqSs7;o}R@bV1vDC^`6bnX1 zvLK`^zJ~>=`l0pzCUN^VPu;kGPct9#MoH=@EUp%m*J6gaU~*ZHc||)7-*_UVwstw% zvNEJrI-}N~Jy9C|abP!|Nr_}_O2mqZWkFrN_rmw=X3*Ko3e9l8*DTb7S;&0xN7_5X zc!b07e=ofVv)Laxf4anZ$Hf=Ur|g}9aQu`4yp=MAYwBt0!^-mNO6=;k0PnHYlzZ|k zuxX(gXo8Oh{zoQ^%gvRK_Y2j6UX~*)Bs^$Tcu+=o(1`G$wD6!&nPDkrga?fZ6Uqt? zN(&E4jSv(eEF)Zfcu;0|P)2xAdU#M;cu;y+f|=n#8R0?c;X!HPL8++`!cxM+MuuAv z9+VaylrbVKVrpu5SX!7=W_VCqcu;D1P+Dr3uGExN%ufpEHZ&C0plwxG6<1c&T~N3% zB}_6iJSZbPXk>U$T6j=uYJ{*9?EAbguA@^=NXv9}U8(7*scEShnOPYwS9(e+7-=cw zrlzE1j2sDSMAoP@C0?|z-gcyGD^YGha(p#5)W!AJuRr>ZTR&s_WwpO9w%K;HkZ|D- z*DvtLv(lnno3L*>uQrh}G<5QaJ09bwF04(LHq;3LC@h?oH)C2CZGPQ~b5eLwA8lz! zSLfT3@G{(7g@q^*>|0xznxTU1`gq<7FSt)#1xIOpLh|^@kPD?<f;|S*UL)+T?E2b8 zAJ2*7<%K?MiSF29+xJ~D@t=IaYe>*za;D`3Nk{vU`u7Y8@?t}4=C=d-jL*8Hl|KC$ zp#<9POM*STUe(~(!VR)57j3m(;r7|e<7h2?jO4fN*iipjb@6wh+7YoU)SllI#OJkB zHgWD4ru8LZU+j^Z74kpr!%hPw{Crex#!;9*#ww7MBov*7YYWaNp{bj2F2M0BL=}(z zh5zwRTsd}*DaL*t>I(B8&O6}M+F#=q?59qBnX<3<Aay*k=JEeT{KfOfU~E*5i~i-F z*x8Vu2kgwl8CTfD9r1WBtGY~^fC$fQb=ZnX3-$2-8E)TuIcMff&zUyW-S}a)+xLyz zuS|CP9d2LV7I$-hn&tNO-H_{y*_hW#^ETurIP(4Q49?(g+!&wlyC~k>yuh_F*TvFs zH&0F6n47p8mwRKbGS=OEN$XaM`}10TxkDM>z3QR^9~$@0g-cFDGOZhO%b`(az|*)M z8cT|xvBB+o-QD<sH!i9F7l-3Kiy^rU?v0IYRD>(2)D5j}Uv3SRxL57E_tTdr&Mweu z8#hrh-*;y~Mfl?u1=n=|p!9a7v{40aY~&HWyli?K+Yz=wD?<K3I8;_PH1dpJhugm& zgWQd4<J~?#9pG;MBTq}**vS7CulYJ0W$y4b@_%HYNW$}*>s#}EJA#gB91ez2+q@tp z-&Y?9aq}gutB!=iGIv~6AZ|$BO1E#;Dx<*dza)^KwWDr7chl~=Shs)R?t-N40~ESo zQ48WJeZC){r1J+WiEe^>@w#keAK7vH{-IpbZH~Gs=}CE8>i2UuuFpO@=bW5#a|&mz zQ?Wh14esVfs&xCGq{rP^8|$6gAKT;Uq(S1Oz7P%8kVfVaF<2QGW0>3Tbo(~$KHar_ zm{w^MFe(R8rS^A{uD*@*IaIX~BC4_pL{^2i<-e%F-MB8ro%MG832uL1x9{!U1uj$Y zw8|o&i$2H=u}W99GF->U9kB#v;Vfsgf46UENG*mP4cYF-fD2aF4L0>@*6yMtcnsj0 zwXUqE_%JvCgTHtDJxPDoHs%B-p+`6U8GEx#dvDee+MB6vNGeie0L?cy-amFI`X{%4 ztjm|{a<APANHm>TxOh=q(%71~VYxMK|J7cYfDS-GS0AOiBwu3y%($eb?Sx^fLvj0; zc7SsG8WnW)KGM^eZoq0@qYIVNzm&a%PxTd0!al~QdKzV|y^Aqwn%=0JfDSbUT}~U? zV0&n{(iYOKtU|Z4$<!`1!gh8mQ&<hAN{g9bTw?8wrOh<$j$6_PM!6U7?qqhGK4CWf z{f;5^H2*{0-PWN3(MMVOruKZ_CB3jDN(V>HDretYN%Yte`zGZUWz1RPmeUowwtF-U z=dc&yWx62v@JKj@y;A-DbP9hx&HvyD>8+D2BZOrvJ}IxGeh|93%(E?>Tv-e2d!+iG za|TEB#UHLj>K@-$_Lk5d+7d9Xb&c!C&|(>ddoixNeUD~ysQ2CA1_TGQ=%YMNYNP%? zW0ap)#8KYkd)w3aiMI?R^5HmEqb$NWk3<TfJ>U0rzVGe^lTI%N{`&(+4C9|=;Ac9I z;<yi_6KUv2QZsaZid2g8m&s_9he^hsOa>-;_k2Q7+M4fs9~P8r3u;VGId2M|9+YBw zVDaYsh|`1j#e7Z=-tT^T0DZn6phP#pZj`uv^)0=zh7BU$XIF&sGE<)SJ-#n{p(uSU zX3W8!%(qcR!EBQ=Jhxw0TYrRV8>0qPG}go1&AAvCnlf1&{()|Pc8a_CQBu3ng3>=l zZMCcaJZ@&-GgxX8k!mZ}vJR<<Dw5C>14*R_sicIYLQ17_XD?DwHP(LvYpf+DOKoL( zYEFan5->4R&BB+rJeaHc<tnjB5fY<V^Cb|~)zW{1rCKhxR!b&QgtFsU!9-mAO@ABL z)wd!M>(s3s-QeQ&E73+ddz)qH+V*VzhQwI=kXXyMTks>&R4s1FZQyLXBgk%HjNtq% zu4$E`IVf%8&(MigT+?5IY*Xgj`)%*DUCZTp(K)F6Y8T{ZeNsOt-}i|c3S8T*vqSV+ z%OD(3>U5!;bV*D7U<|b_QN?r7Q`#q#n82F3X{i3D2G%4@XRH&$Az?Ge2y??8#*@Ym z-EQCK9^bc?LiFXed$Qh&TQUQ;w>cZ~oH1ACCgd#3OYr9==J@gw-TvI69$((jiOrX! zm}Yelnw6Ry9<1_<7M2&-p5We?N1r&h$GUN2guWu6xCwHbl<)gas<!1u=Kv*=1po3L z5X~BecV%ul(l2-W8@<rx@ih_Rl5%Tu;)dnbOl-c}TJBO)RS;&YR)Y=+8nhp8TaZ$| z@2lMf2`K%1-@mQ4VB*rEd)A2dsC&npWlfu42dwG<z$!vql4_zbtf?L3#O5`f09#X4 zL3?6bh@a4pF7M7Z-o(N-f?v%Zb9_zeKGm<r8yL#@CcMT@Ii!8-8#dgOd{3`Mw@SMk zH|I#PaUH71EZfM2VTw1tZhy#l68Yv=DeFeVa%)LO93Q*Y5V2a??!S9b5K@;ST3~5z zC*`5f%=c}@RM2hjGvki1-2a%l-wu!OyVS3ACY#eo##@K1bvgb;L*315f-^UaZv2fq zOo?D+rN@Lu{wyaheq0Tr2gd_M=Wk1N3oHHgxRA6N{fc&$F$Nb&u6}t}++bk(<Dn6A z{C{GdM6`g37O+Iqf%(49;K-s@1>C-MjIsR){bTv|gVhgZ{PunI@1P&H<0gBZ>E?~@ zxFfPd{M$eyYzt-`bjNpQ6oxzS+r$sfxtmm|_0}%0#oe6Oh7q8h_sr_90`~`M4QF4s ze`1?nf^hpSZQ|Axdb+uZV?H8!gAossi2J$y&5Eg(FWkOc+i6R4lS4&V<06>EtZ@`y z$FZ8&<kitz3H~(!LZs-59}*oaiM)G>MS0L=)*Bd)?=>}4_eafwFMDuIaQ!B9xa;02 zkt0R%Mr7fh-4Kj-fLSh4%Wpb+IgPtx>gSu<g#138gxu<?i%MzL-Z#fT*6GW2x|=VG z_cSkz*Ft_gw19j3xM`u6blZfU?FZ0#rmYI9C?+w~8%2k#*W^r}%4!>2*$uHkPh#vV zXAyg)d~KJfaRYAU{urQbG7Sr^pGA)6TTm1>n~5kHVp+&^rY??-J`hzM)k&77^e-1- zoppUm@*CpkeE)*@iA`VCrD9H!zy%JMUO#d-ZrtkjU6de>SG@WUDBb1Kx0!-ob80D2 zg6hBE`qPGS&X^5joenIMsrl5;*Wa9`ac$AGbKAIvsuy%c+!0<>0M$QEEwJ>8YGJLf zyBW)A{)@7^(S!lbdA7JUbbT_izMd@GQ+?mxzOLsdDOhUp_;#6Us~@3w{O2UPCi*XR z<!Ak??tqD?YbQ<gU7YCh_|A20TMM5t2x~`uaeJ8nmvWZb?(suHb>uD&RwF&WF^R5i zEfDtjvB;b)lTgZC8We+w$2ZnB(Kjd2wSAsZh!sC54b`|2qR<6pDz;AeA0gT{j#Uy$ z879{ln_yh?C2g4R@E#5UATZmW=vxQ_`coSp8JX4il+e|9(+?Sp)F17=_Ng1MrE-SW zCskf*eN3+r$DJ9#ok0N8ea=Q4{#<9{&OUXAHSUb5OKJ+#XW&kM9G<mt_MkLxABm6) zLPCy0$k>pOc!VsnhJe1zN~=D_KQCco*2i&6ZbZ8I&84j^+Ll(>(necy;vO5osmV** zSH^ha^3KJ;Frn`ge2~a>B24F?QQ0)H`O=u2uLi_;{0rkfabs|Yf@P%Fb-(o38Lhtd zMBJRCCNxjH!yPx~Q};_BED5;d^3GTp%oSoNaXisGWMbAQ6Mf&sHC3r8M*7PGEV=(G zFA(Eyp0yUSXSD}oyM0^q;$-kH9%gTk-Hzdk)2>#f+9IvTFzFxl^GDrwJgA$T3^@41 zseklKROmm~>G8)hrD2=g!=8^@aw&q{Yj^hbJbnLt`pS=cc&B@nQ2TnaHr6^#zPiTA zjUF^Vr^k14;)LdYm${q!ApnU^^q=Zs61bsB3f50Ey@yv4*e0DAAQDvk{H$;4-wD=o zwG80#4^4Dqsr`5@2}MIWo+xqcTcrVyakeT^8L`dCV&<0^H$tAz*w=SefB3Wunb%&m zK7quun+fPd+zCMZo{F2N0{ppQH@nw$>Uoc~rJ*+&hX`X4VH_e%hVUf(jdgMi)$`q+ z>`~8;kb=J<!QHnZ{;Rbybs(@>mhZ$&F=N*5cS7^y_D`Z4ov8u$N&B&6Q6o1pIeC5~ z-N~$VU>!aB+QE0+vhgHTL|mU-W~Uk5dhK4(?&v$I3_<(g?-{m~Cxuu<;s8uQ$r(-} z9Rz!>ek3jifkV(8f9Iq3WgzC6cN})FxOTDE(f68|DsZr(=$ODroAGxj{*EPaD&!9X z4kS@4YQN|QVhsq2Jxk&>5WKlo*C3=?h+hjB=R6R!`g{`YAm#(BNt}X+rNH?leh1=K zqhR-nro~<ucDV{rvtWog_~R)2c^J%h1911`$Rsfne~I{095x<ucq`?&34cM(8W8lv z(d4|0zo51+gmWl44*Yixk=O1OU(=NGBk`MYkB9U6b8VVQOok*6EO(4BF0CdT0oO2~ z4*y}<(QzdS{+9q$*Y7}3>|x-*d+?v?88k2Ek{Ed<qaOlxukbIXCkpVJy~YVhGG+#T zxbUa02K*o7ctOxqb=`sgStpKTocr+O2o;R~p2Z*2SDY8|Bgpv(L@>@*Aad}hE-1mZ zdqrN~9KMJ$9e?Lh@p}9?0e|O{7=r&8y_!TC{$s|J*k};>Ak=l4`hWL|VSSIAjh{F} z-LZ*5t@vYJp2MGGCI05{$KJRs4h~T_x40f>;1pLaaNrcw;<}23r8o|CZhd8OZN-Hk ztE(KvvlmoX;zMwIcuDm_2&v89=HtK(2fyuiO;yKl*4LK0@@i|VYfp4dtbqEexvojk zMfhd67LTGsegAEhsIQt=RlTUnrB2y)amPl7E2*}+y3XM`)#Vt*4C=2Z>{}spWnJ^T z`%p+pSUxE4iW}4)@>cR5e0SGnpY8kit~6BY7XAD{)q2_a{Cd`UnfK;<^_5qoP1Hu1 zPm<J@k|Xf3aHy?$e8V`S=QoV;2D0VEC~PN`hfON=*&RLGE1wnVZ=1s`ux45EYkP$` zQpSQGL92}M8=?pq8`*Qltk$Ex$#*W%KREhcwgj_i^hfz5yIbY>qBlI7{Mg%aMe84; zg<GPA{EQ|aEj%Q0H^l!semAE5AXc<|?X7TQTr_=#|2d{6Lk9KBF?8@fRu00rMrptx z7J6m(!1wmR4+x*HDc}mz-!A-*F-a(n=^Mrm;6{m8)cC?b4YxWk&FCM@U!sio@v+^< zcM1PN_y_UB(r+K4<DUZ#><j8&E&5Y9w&VJfwm-;syHv2FQ?32!8UK+EzF-r2b#MZO z>s<Ur;umn<ic8E4i(e%CZIFo=U*=@&3}PHHVewmg;CJ@G&*qEaxJE&<wSH}KsbGhf zb7)+gBS*5YQ}|aSzP0>j9I2u?yhAk(w&}l1_$@MhM)C84ROr<z{Al&3P59Y}7Rf)I z!XK{HhUs_xQZu5ZpCbHd>1PZ7*eLpIgwLB4Tw&?A2w&ZgMc|A395ELb<WF(LG{g^F z!4?-EKX{<C1=={(O~hZ@W__o|eu9^?`ZFDn6C1y@PwsvLCNvJXs{hsft`Yu$S`2!X z))=FYx|n9sYdX60E0|}C9*IY}G5Blfg<K`%T6!UOJ>*u3ocKFpx~nbv*zc&z*ym|f zxukvX;%~<5Iv>&W(SLK`$83>fKg7$~_-UyB3K|DqHJ~}@L6v{Rb9Z#FpY^U1aw#Im zeo9@&-ie`lDgOoJ+y15Xvftw6^xN#o*ZHJ;B7D&Cu9jy%#>@GBWO>@X3p#7w*YaDH zH2yR8<Tm!Z8a7gndNa3bxpTXb%ZHp-<fNbL(kJn#kN2D9BFFwtT@li~1#&6dbh^Pw zkdYhRs60r0>mfIz7jhrcz8>UQ4=SN~rO2^A<mEiV=0{sQq8<5&*Y<(7w@k&tf5u+% zC-uJoxt$`%{*sq-vQ59OJ}_Rte)#s_L#?0vC@*J;E#A1$_D#FqMS4je>3CADyX;b0 zbU6=({&<m#)=sEzB;<CA9oZ5;m`_W&oMX|)`l&AC4<V^<3FH!bVc!FgbM(T#S0J}l z?34aDVt#i)u2bZsUydl3*uP7k^v_{(H=_Se!(!25;Hh||kO3@mIFff@+!=%L4T4Vt zixK{NAo<IHV}V|w&jVtaC^->$7Vu+q!j%6va2oJJ;2dBrka87*V+4-}V#y=<7$D3( zC|1G;0MA7D+sG(!J@5?R(?H5C1Tx-yq04|XK+h6-n$Q!39xZg1&?!P6C-grtA7K9e z20R=1qR@{6XM%19o(8`x0HSRt&l4;GR)BT`&jWu3<|V{bAocCSJSG?PJ3!J807rxV zjnL-+b3o?_Jp@SkhcUmR+#(?P^MTn|s~ZPA2YN;WOMoW=Y47ns>i-3BCh#N7?`ZEG zK<YaUNPPo=)b}msht&5kAoKGEkmb4=SPFa*SO(kxr2fZ%bAb;5v66JkJ-{SjEASYE zHvyU6MZnphtAMocI3Uyi^MN}3-vXKbG9c5x2uS}G0_iswkn(Mq-_qVofRwKWQobCB zf5~UzKlItjV}Xp91f=~g;3VJyg0Jqc=@)>L5gq_e1U?8X0NxGkkNR{QknwH+QqBj= z2i5^8R|%wCDUfn!0Vy{gNV#+%<&uGvI~GW}LxGeV1Z289F|VgwCy;X6fD=GJ3#1?J z1u{QNfyaW*6YMAWOuP=i1;}<<BlO?mbohya55)=%q`rfJ_?J8g|Itr7(J>IS1aBCu z)2|0o{zTw7@Lj;ufeFB=z<40--aH6%2+)57P66HzB>zqz`4z&SDEvI(pCWuG&;$98 z_tpCU4P^X(02%*DAoE`<I85-}eRTLUK<58WAniOI$a<0s91r>!Ann_M%Gw9|9tV=X zM(8>q>(}W(55f-wvfh1z`#RRMkAUZa-T;J4lb--q0Pm3S5kT6veSpT_3l0_h8kwMd zzXQ^)G$7OK3uHQ<_S5P73#ifoq9~KE1d=}<Ncnw%jQ>erU0!brJ|*~SA8pqYK<c>> zNV_Hr?ko7`7#)5ma17*@0LMXY3@`_D29SPB0J?$SI<(&cK+-FPz8W|h^7DZ7+sQ!M zdo(Z`enWFtc5p73geqSE`d6rW(BVi2LWU19VpD)9qFBiA9y`_rL{}V(?$3d$9t&SM z&}3qrz+u2n=t~7|1!BC4?Eq3wI}o~JHvvxp1|+-<2-{*;0?!4u0*?nS2c87vJqY7_ zfhPj_q7mh4fEapW%YhiuVvB%@z!^XnumE@@&<(_p8Ji6}0+<Or3YY?fFJhB`Cjb+G z7#d>Zfv7UEP9X9W>i{C}v7N}@aloy>EMNyv<qHU3#BKs&D2WXKlYwnO%C7`w0$YKU zZvmofk6i}D5D@DH4hPl%DPIm81uOzmz5qA^=ms+1*+6u?vC!#28LIO6HP8h*1ITir zTs&|V&<Pv~1SowSsE^3ffPi4DpjWU+Fk8?i=n(8cJ!SkYKm-kF2g2sqfP}A-@HPo= zm2j_MgYavFUnJq#f-XUaU<VRY_6oKNdIeb@Xb0;9?I@CP)&qvK9xyyx!d-$6!JY66 z<vM|s>i~i^ARyQ(=oKsy%ocPB((lwmzf%uD={Z2t6KArpAz;?k{=-TD+N?ueCVaDQ zlq$5_MNPPO5PFkKk&a&qZPq~s32oLrGSI)p#RP)uE0fVbkv8i|U%|pSWYnx59U`<@ zuewrbvpzNg;}7M{dRwg04;p%TO%wU{ftnsD@@D<+IF-KU@&7u=(H^rtbqD%e(q=vE z4UAt*&jr1_mP&pK=xAJjl>9g({Yv4R^{ShMpDp|;!Z+(xmkHl1{Bx0(N*|p7ucs7^ z@<J!a>t57H^38h6En>e}e|ZfBui~RK;#GvQC2iJ^J{0{a=!|$Bhd=Vo`p~n+eu@8; z*k{(S{)o<(@@74#7~?W&v;GyQ`~^NbAzp8=JO+9l4aaJF7s~^*`M&-EbRuy`BmOAO zZ@}P5zFXvfiB6q#i_lLof1uliULbTlGlDA)oe}vfg?<DTpL9Uz_eK8}q3;v<PN5g0 zJy1SAN$U&H{sCS`>(QEihxUVJr_HO0_76b)5W0l=!5=O3n<zKZMMB?AdqD?;o+)&P z(3_P$ucIwd>))65Gd-c3MSuG-nm>W|gI^=`KC~Znr^s(m{th^jB!B0Mzs-IQH`Bg> z0mlsS=T*v|0mn+AbA;Y1bdf5LfTKY4E!zj<Sq#b>?VeXFXjHM_wHEcmN<W7BVWod# zqqiWYl|LH!wbHNK^cUFZd8kWP`9kF1N`GvV{}q^4ey)w~hx%^iUuxsu=?vx1waI^K z;~!?@yKVV@7X6Pkz5Q+ZVK-#uUun~SyDh)<HX3t}kodRQ;?K0vb8P-vXQLO{XwH+Z z_VKrs9)o&frBAiRZ?n<Z2m=Qi6!Xx->O~-CPOZzrJ}UFE>vUb|LI%vKEKq2kO#XzQ zGzT{d)&_@dDAwyo_o?Y~O3R9|XQetGabj^pp4MnRcqF}efd@xogfm7JFBq#%ln|EQ zUNqz!hmniQapHvVyLN(;^C<W<oZFquudec_vwFFyn<}8f%F?R2b>)TXg$NU0>5u+~ zLq=V-N?WHUkFS5ig_xQtyVw`bDJ`z7tS&)CG+F%_Sf5&lL)A+4W~V<NvxB>Wn_7~k zw?4v)L1WS+8$Hys+z`3YH*&_LiVn-RkHIioGd(Xa8fQ*a&K~SU9aR3)uS-Ewd+>Zv zPO=oX2WzCAF0F6ta9hrxk{%MnZk@W0C^=g(r&xHFmzq$dQ8*~lD4abhQlsK$P^8Ax z9=sg%%7mYOo-%Zghb?$Hcfd<}>Kr69u`pe@?4`yx4Q0wvR$E#c5;}952O5GM4<{d0 zi{=x|+~a%IY`iO0QB|Q137fwcv=!IXlvd5*kz-U=xS+1MWL{xO`Mkoi;)+UTtfiAf zYpI|Vr&zN~=T=k|VmK=)H$hNj3BZZEb3x)@s^AO^f@kRc&Zb}wZERK+lH%NY9FlEx zsfhJer42QuC3U3?o@qN{CoHU@f!R=!)|rhZ_=of;a*%N_i65pb=yhf8Prp^*Aoa<S z&#G2?wPKD}QG&`-i<f3SB@7DRI@#Vu<CLo4N$MDF(ca`NY}J|A&hzf|TvyH;PA?2S z-Pn4*a<um{_u~1=Y7=N<L3n<8bu2R8osD>Qa`d?|&dq}ttw#q(m(?EcrL6VvU`uy^ z^vpSZ(<fO^i2DhiCD+rN)4e!ntp{gXyC=(5_}#>!Tf<`g|8<sG@bHAa`UWrtgW&eh zse4^>*k0j3g)^S^>|mxyFINBfuf_*&yFw3R%9q2K<Ty&pOnMJy#Zk9a@BPTYp%&GK z-SH2x!R(&T4$quphDjNJV%vIk29;$;^#4ss7;pXbCl=aLv)}(u-=}g2PxM~hxW0#5 zB9rf4i3NMn&??vCcP1hI<oAdhOn2{p9};5PkE7mL|KI$&#+t4FX1eyX2f}ynPm8e4 zeE4?pslDAAK72FxNPE7gU_HOv{oO}J-rqeVB_k8tyyG(ayHCZPMP+F&Pbao)@E&P@ zcNd<CI9&L{#m9;(@k}Jzwekkd$z~i}EkX~(Z~n<+T#OvO+uuF6hFTmB>SMC)H)B84 zKKK!~zkB!lv5yfwZFv5}Ye~KA!Tqp$Uatc!{|EPr&(wkT{l9l!sKZ?nC(|3M$L^w_ zzL7eDU0=dQIvkI0)HTDa?Gw_`*ZdF+>Wi|Uy-W0Ei+qt+`%lPVIT*UIaB3aC^DOaT zC4^yi`-*J(TD@9d3jD`%4KI(`3l=b3F8luOre4Tnd?jVgqxBgTnc@4-hwhKxD)u!< zdL3SEUpeeEbxv3cps(Bg@e?lA(jSN+GZtH8hn5XF;r4~@j~{=jj(?2kD`*TYk5KK@ zH>bF+xGU7|zwFC2Z>8w-F46k7AiuxriWdA;Scs2v)jF4&S3!TM|F(LysHuNROLcut z`ak`=5RU~zF6Otp{q{S(T0C16rii{2=o1!Oaq#MCzx@=S7A?Z_T3$6*Yx`0j)%M{r zce&>1{}TatbRM?fekSBUK=77zcwcK+=zjZ0A)J3_;g8j+8h?9w1^3&|<o-q29TEE` zWc{ZOJ0hOG%RTIC_l}p{jsM)`j(HCIHaPXh57>SobpHhIC)D^MHfg|K{n#BOufy%X z6dOTavXv_PZ>34tL9rva;e|hxBYSOOPo5|Fs8`D`Ugw3spK4)Tv!N6=;#YeqSvHy4 zKA417SdXnW^p4_6g(0}Tc&NSh{VS~duV60??3nYd7_CghZjla8^BUUbX?`qdqGw~% zN~sd~+1mAUdDqXDuAj@gellmgpp>thK`8+a+oY29G&gNhG&Zu_*u)psl<>x;_O724 zP@(?Y80z`;Z4B}F-t?^9)u*mF-`9cdw@<Cxhda3GyoeJ$zKs)oYZwQ>IM{OJ9&D<} zWIX=IloqYiJ?wMr9dhYG`95qIr+04g#Jnw$VVG08Km0VkJ$~+l9%b0Zrp~UPTf2UC z$j==AqeJ0QH}<@W^EBVeU`s(KShf;G348o&sF?L>n8&Zub7$@3p04hl?qUCN?|8}G z_|8su%vz7Hna1cW`%hv7Y<|+j^rJ=~Q$^U$o%gYo5VjLit$|6=Qzj-Fgd~Lq!KBEP zr1Cbo{R!M_B@dBSsYqMuhL^Rtn^zTKXF88>jSBR8N$rmB5~_a-DXPd)LdptccsZ3w zhFQC!T0y3=0+GCyNXxp5M5dUoW<J;+KOWV9wcG5Tq(fW~M2*ZQ_}3IEom~ePMA`Vx z<GVGWnoCnB!M`THn|Kf|(!woTxD9}fxq^Gxg(hM(H(tj}(eVmw@gkh6@QKQ^=^A8z z%I^Aua*ywC9<%_}u?3`K+Z58V1<*qBeV>UpF9~5v2QqMC^F4H}+55-S{4`6-(|r3T zfa>LR^yc)&g%s2MnA$XHgW`Dfmc>X4yInP>ms_NA{5PtW<l7iLslvydkkY4Egt+aI z=|_Eet;?{{QWx2_?2J{ZZ>W83n@ijBn;+zUy?XySm|`}UT@t9z?Xv6>x6fGibQ??8 z-|q-_%-eb|u#b1QW3OSIrN!%7RnB#mwm*a{Xh!4ua!V`Ue%kg^(EPStO24Q+osNuK zvJkYAH%V_l80_unr*WRf8XBs&(spNI1G1+rUBwmb4NS|icNNzJy9z|=U><aHyMjGJ z)JSCN4Cwv^y~GvW^%B<vdkK&KcI7Gb65|oc^b#4?@hR9}JZ<YQjClQ9Mvdvw{ZCuE ziYr<zw%a?bYsgf#Bg3qKCd2FvOoqcEktrFrw7n}>pF_HeD_jutG+&WT@IPIobVh5% z>UB|Wrt9(D9)Kpq>m>M}j_)QOgp0IrixzGJ^s1}4B3{Q!(eVnpiDxRPsc>QQ2hMkN zQRe&q#A3?N`n>K?*{{*GDqZb8S^ud2P)%CU02{xKsh@0`-P4@y>9Sx=PX8tDK1_=4 zkPSA2q1eD|5Y!l2mx)PFHr9-I{=)RBnAKo<20P=H+>3N!1a|e)3iPbYI<xWnRe$1d zRPDfjT?b19z00uI+-rAZBia|;!@gUHO|hROLn+yQ^nxSZ&4ZtFXKmu3T!5DLoSr&j zP=3bkyH06pesU8c1ZNq)4K@s@V#5GO!*A(S$=(*_z2N?5QS!(6r_Q5_hOX*Fck@A< zh*-1g&vkhle&N9ER^^}D;%`;*pT))JaR*~Pzw9a+wOL&H>hqNvZBR(jn8IXdBn4qg z$Fl!q*M5w!5u*uqK;9*0#x)H?O)QH$^NpOw)roYwBW}sZ_@6<kZ<Muo{MZ_iMwi76 zo7G<D^7s$-_(yq8n(nMi#PHzzyHd3MD6_vPm<-nQwe5pix(JVdNg@jjx$d_GXHLv& z|156C7WZ!Kxx7TBoVBj@H%)=M1s?xZO0aQf--Y9S8yf$OB7ep`?6bO4K8xEQo9A7C znf_*zURhlH<WBr|NLk#uoAB3;QxO<2<Phwr=0XGCRsUwwSM|>ALsMVo{%!Ddzn4CX zJ9iz;c*(u{8F$t*wI8U=VgKbJw<OlUL>R5I6_<p$m?{-HNy%O^M`4x3I6kz|n9v9% z6W*S=-=FNii2dZb*ZViY@(J`q5~w(1{59vGo_b;47=P;nD55;yj=W*-%O>&e<}(6j zZ$5~r9@#gmt?|j>h@jre$KHu!cI3o8yu%VhrIMHRZ<KZbKIq!>u`Xp&^YAr@318@O z)Z<&vBPb>`4_%G@$1%LVpYQuv#pm%j+xzCFzRO)O8&^psdJzNP#OCVVV|@Q<e5WsV zPjvexF82(3QPD9txCHb{HdEgjs}MKex6QqFn+t(0A^!1HyvgC)?O(;FsRnrX2btBT zbA;w+-rUPEABPT6#=lfmv(YH&j(mS!pz$f?gSaJLrRZwq8~;-3%lBWOz%QFn9XEXz zch<AqnK*7K-|2QYUa|^J;V<}!JCw)AH;;ULLi5S1JXxP6yzI_eoA8EfvnT662`_uH z0(l8<;FdKZ;K}ODPWbApbun>GzeTh$uGhW)#P2KdJKNQn81p24;QSvhl%OJ`_V539 zcx)B=vwYuc`M&4#eb1D&#LYaaEbgp-#?Ab7S=@{d%i?CfR~C1`(Wv0ZA^2Z$Gmp0f zAM0*>1{(*i<K}_!?#2zkz<2d)pmb$Z!0n&4s{Vj&Cm@&B@jdko?C*G!r+M(}p5_CA zBbQ^iaSwajw5QMG;t$4=9WTQh?f88te!qcs`g+`%2%5S1^SB}VqX`WG`z5dw!r3q+ z&=04-!I)=&8~V9-|F!<!ZTG;-Y=6enZvSsB<>2-|qRIh2c_}aT<-F84j6Gv~TTo{= zex4f_KXkcH?W`@N5^n<aE=>CudMcRqCIW{Hy$L1QH*P5wPaN3IIBv-$_~BbSCT3gh zLX>EW<7v>2`bu<?W7vmeJA8kKZ->5!|K_|H4;R0#y+8cQxS4fVI^pc?`1^m{eG7P0 z)w%YB1Q->WL9xbL88vF6q8T8-h?fL1vNz0N6i`%f5<&vekfg~B#tSu&gffm}<Iz?u zUeaUFDQ&gV<E1E~;hLbW2I~c_6}*#<)p#W+n*V**T6<>Co(ZV!Isf_p{bcg)wbr-3 zb^F%0?rVRBa`+p5s3%7re>46qxY^#k8L8{sA9@Pck*{jq4vwLtdj1RCDZYvEzMB;w zZy)Y})WZ9Mxfy-Pz2mnb`(8!%<t(?R0ZCY{MK8+GJzobG`S2aGyso0?@rM>gZ#*<Z z+y@zcl?<LU7~GtO!Oh`)2d8P?JgB*IkPw&$^#0A>j4%D3uN<vWjurd2uqGEzYG+k; zEWd6)J~R}m=<v6`6Fe0zT|UolPS9xkeR*%np)bdysJi${mQ<Wjn&!*+6KYfRnhRoA ze~Z3`(U8T4u@#Ig?LcP{Lo%bk!9gpA;36JL<6_1`=_Pfks<}MaezQH~j1lKr*ei+R zlU~N4fDLo}dlB92pPq~)?;J3wokmdc{*0+>W5m_K<}H|4h+n?X%k95Ce-V!9epuCB zV0`$69`4s8Q(anl;atpqt-+1RI&TyWKd<F=qQ^AI9}&Y4^xONW^VpcarfvKZ&FVK= z-pfml!f22VA_V1GcBsaE1)Ubm)<uWv6V;*eWo**Jcgk_i#$c%)xs#r?yp7t%eS_Rz z_@ellOLShh>VKd^-A%O{UP^V6wHET)frj?-pVYyY9iWx`dgJqzj<X;@yL89YJ}q*A z7C!eAt$&;5d9MEHqUNVni*gZzfo^j=)PZEKLYuYS{a4X+ENzeX&(MlR`HcmPZ$yI; zeKOmHkibPW0%)t+@D(F<voTtYHL=r@>Z|++gNWPZgD<O;am0iSKEx26EvK^lkw22P z(PpkSK8u3<Wv=LFh-}uwf73U9of*8G-=^5O=RC}X;eu#GT4Y{_JMpCye7IxjTC_13 z(4zf~c-yteT9KoXRU(t+G#EZ{VV(w~KWO+iJ>w136U=TZ&XJ{SAydA{(sm)Y>kPR~ z9(tmRtP?RPiu^>>@yj|s)f}gHpo9)@uCUoYMPEvf{FJ@rPbWJ@4ErUz2Pn9WP~IYQ zp>?~cCFB^R$g{<<yakG*wZqZ!TWCP#wYhKTk|6tULskE6A^i71#cz!F;R<bzD=zAD zTya^i<BEXYaRnMV_TWTMZZ{D9#4EPr_d=y(<PPAo_`QyIDD4rKv6nYW_44{ckF|aQ z_J0lykDcy*A)$XMbhinib6m9%%>>dhBI`EQ?|Tb+DrpV?a!OUhJp5MqXK15Dc!qwF zUz=+aqK^**ePfJN<rV0dsB^SjARMKRYUyyao((haHusg6&Mk^O#)9!hH<Tb_4eiwF z?Sdt0Fht=EQGnjat)%m}Zg;f24JU8wJC2su@WPK|_+=-@8-C9py|mvOe!r;s{Y>{4 zXk8QW)vLtxh`$vz=1JRH_za$@g+Fn3sQMd5lkd!8Tid}NbEnqdfy~22(xG=_gE4>Q z?$DdR%&foCXs@;C$RSog(JL~{Oo}`0(JKZe+c=vyWtxg=L~&;}`w_ZlTj)VFPri)z z{GMkW%V(fwW7dUvB5RVmxmjJb?!*^0nC0<Xs3j4~)a*xTV>w=qmzVlJ;7aBlKk4)h zCsWb%808b>hq>r#nlr*TL>38Mb0L(k2Ibp@I@~S(cND2^C%$#FwkWcKr4+o<>;9s( z!xve+*3p7>CmWR4dTJ*YGx)GSg1Jhgqubd^OOT;3@rBCpmm)P@HE*rzUjG)a=d=3l zv2w+_Vr_5^lt@QWxU(2{e|z2k5Fy0%BT6|ZH2}1ETJ&cOPKEJ^7?Bwjynn0L^Lagc z1>NY3ZNnh#WboHFzMpAGrWO|MKSt?B^BEh0>#W1*ETB4hG0A>1hAZ$f$nYV?6Bt9t z#+FoS46%V(DxyKAoDGj=Z56o?7T@v0D5SmT6sRWAAHt3Oxq>*n5ud?fF1ud{ckTTm z>}_iO0=<@YM+=W6i@2-__qt!ecw<%AzfykGu(HkboZ~0gfdB!m(HsvUw6J%bpl%cV z83E|EThEd-t5C1nilb*{h?WQP&+v=G9~Ot-60u-CftPi9G%E|F7*x#3g4!98wK35G z-BXGL1}{wUc{z1#htY6V`PaySPm7%*^2uay+KvAsvUc|@M|P<C>2>!fwO=V*N3_c3 zP(@P;5vrO{<exe&?^3!QvBozInuKgv!$#2AOhmTc-^uZYZ_?848-FJHi6Svt<~^JU z^-Ze4hg6rYb=>kEDkvDXL0RAnbd$VIj^z)-N;NkumWY34M0{5=GP?;HcU8tK=prC@ zm#!(w82O}zaKcO1csd=+uY^BnMY{&6I|Az&l!*)&LZ8P@7WqHJ>GQaQNAs&I!i)>t zHK*pu@I~vKp<W%cMUjL^L7_NWyS|P`1<_jtX1++M%h9p}(~G{y?CzrGxA5(Wr5$?s zD}UZ!io$(G&AT)7@IHUuMtnsH6%Dc*yA%x>`n&k+!31@@eqkW-12kM{tVRHxBh>o{ zjD#>U!Z)!wM0?GPAj4gbRxHZedMJKz{}|BTx(F7?$8NvlA+#Ibc9i<*Sty*@_$_Av z=~d5BHhhr>glsfFA^JAK28>>poQ1X^h_5uy?wS_O`cjYjzQzP)m!sK_0@5@3g{5b! zqxn3Th5n}aB-#V^e}-+r1W6aCL+}Q(Z!3Cg(gLq+0igb0?%9aQw=oy=sNd=Sf=x!D zZCZ5XMC2U=-#PLX_`)!E#K>0=oo+M}ON#tZs^|K`f7QazNd1dEx&#fm6VsQ>w5!;% z(_+N27(c4{8*l3izVNQlkl2LEHaGPD$O(FM?n|h$vpcXvY>B_ad87*VNHH|-e<l=T zlry8^BY>G9bmlOY@bo!^de!^4`7*^9RDF{|s~pR3l#;v3kckcG(V;9l^ypMHy52R# z;lAeGP<xoZXq|&B)bcRBD84g^lIn&N>_wZ9*XfT|I)x@#iLpU!i59)w3FYStzh%yE zBz-c|e<;SC9r&TQ<D5y0<0>6<yYXX&&|<`KDnpPd7<P7Q5fKgr3CrI8b&l3wQ<&a` zc$oP!R@7gAhCNFG=9R2Nj)!(YN4<<BvHGE!ijP=A)gBFNOeW$3TnTy8s<xYTk&-tM zt#h<IgHSQ%UUDkB5crrcVxmp*w>g>*XXZq+_Guo}{^ovUtNX99p>3FdAPHKiyq#+> zCVq`WN}-~(jGYv=EDny**KiKQNOvyeXvDBrwdl+Y%`<O}qh*Ll2Kvc)Xcl}s@cECC zFH-}?zYhVASzjs+zI_;N3l`$dS^TBl;EfTo<h>8MISA4a+Sc=1R;g&Av*>ZW*bvch zXUvHP6cO$~9<A$P2g?`1+?V4aq(VkInw9B~j>M|1zoU5{W*(jdjn=$@Djw5EzlRAm zZWn6BF<SK8SMWKQHqIX{ZOY#6+Trtba{}qh><&y1gns7Qg!!VP4e)}Jl0k+VkR?Z; z&D?}UiuS0I^>KeMVdQ?u3+6m8hnP68pv++Ei1IS`Er<&(Mx2DyVVYu-OZW7L(0&V% zrD#9M2*yJ>yytcVD)=M4;jZGmJ!>-j;SYmumdGHLRy|rgm@<Sixjbu=KO+Xc<Q%q3 z<RnK4yZq5mhR?HjO;E#d2J`bHJ1g4+0}x)G^#zJ%no%HlA!j-ie}PhQ9;yoDQ0Q?? zOKfubJRgTPVRqP;DO>$aKRyNbtWeag*UCyN1i2sWfuPVcwrClUT=v0MLIzQp`!REY zl51yoUhV@ClR{&^V3%612lku_17{^7n8ZBIco|{(k}1CZjrNL@ANKh42DF&n=o%WF zWceibC&e7YH~z?fQfvDoPpu<(_B&d-jQmFHYo2%2BlpTN<h>jM8e_=W<}sw4`7}c3 zfCclf_;o<gVn{nyARnV=f8_UqRo>_R)_?r?2zc;?|1LTyz6{XuljithPDrt%4p4)h z_`FKWpi%7)S+<4R!0&nA(aKf?gDCTMi5U9N#(a$!L>-KukrW|+*8FQ!o$+`-+|ioD zdWu1>8UkVM>b1*+jYyo1g`()g9J*q>y;4{ql~BQ|PnobRSe4?<2G)sTy7)GH+?yI< zM+<H+d5b*EE~oJoCzMz7dRo|mb?BIJ{lp*sObpNqyznJs6Yf+ohqURDM=2W9B3bAA zGSJu;I<=@!9$diQ>x(|hdTLB98Isn&Szp%4A}E@44@2{Z->biq-*;@@(r6l;SZCcr zrg$eWRv3&?aEaGlBDRP>i_@68h@Bp{ka-(B1{Sdqf<{DK_)?#XRFi?K?9!HRu2_yT zKFFy@uC?oDOwcxd2%RS@C}y_o`lO*jKQ{<qb3k}+JomO@QvwH#oEJtjC_}?~g|T74 zu!0s5T+SGZk0U|ZZ?1n_=2osLxA2u+b2`zEr{o3uH->!jTk^S_?cr)#^5}lI$O0?@ z-o(*7`U4$ML->+XE{2O;)JSISf#U9_UGz~>8G}3v$)hAOGDP{1vSc3r?hX}Vh{{N* zNydZ#h@=$+XH!&Vxh4yMVJnzY2`Z`{>>frE<u@rsL}l^fJBz~3oRa?qUv)%(mgSSO zpGJP)QRS8V0N;P-_YUR!GQKw}R0Dcva@#@#neW|Q9BCFRBNFMRj*8qaR2AoHxw;Lp z-^SH#Olyn9YLVT_3+H6fkyx&Ic5spVN7yLwvbOhSt@%AnzdxsiA11?M%<e|S!nhWZ z>*wg~VcXcoeURvvwY=v9Yc7ykS);vvMe}qUo7#3HHnnNt$R2p`vXz|Tij>TatmOJ5 zqQ!BC7F|sh=6I~`7+-WlA)4m6t`$?^ahaBmB3M(F7+*qVW+}OqB&>~soia+fHR_*O zFD=o-FB<dTqfo`MFpR{$io_1qp4d9$gDw0+SN9ooCLGN_MVwKw^bPmy4D-(xoJX~w zd3FZ#(0F4*FbSe+zuZmuWLJE%oS+K5tw%-~HAC;5$_*6wD%(`MM6s(I{rz~r{E*!W z?sh<aV8vP`<260vU{rf<6D}C#MQZJO9w&<jqhtAZzvpu(C*3i5E5@b%@cY4WZ2b3j zL(S@YU&PXj&oOm3hTdxYkN6mKC~CF_ZlNB3-sg_yClCVqHR$u-U@v-#4Mt^KoEUb# z3^bxQ*!BLcp*=kvAa-x(m*h6~4Mv`A(jNEA4CMIn+8iyTg9-ZiMxO_R>aBjq<PRGh zE!+7~ciBYx!=LL_e`6>{9-&#(!#COW@CE4G>*1-+^&$=&u*Li9hOX8l$ncC^g1-N` z(4N>>f7KU)89UsWV`Ikt7Fj-wcf5Qcm3G7`^fnqmyGf-d>1)Ue7fRF=MC%KU=Xtsv zD^@a#$~PI4-Dpgfsi{uvBChIV1oTX?zszWa(fRf6j%l3z$BaZF(LA4u@rrjhvIOMV z1o30E-ss%=cXP%ZPJD5CcVo}Pr2D7^>bqr>#hQ>+UH|YRQ&uJ^uk^~>q_>T>BC%dH zQ>7oGC$@7qTB1lgvZ3JnBwuH;jg^_;BxC^0qJ94trvJ(r=JXdJx{zjLPmQQeX;K{5 z53|Ic@c4e0_&yd#3){5T?TzPX<r}%xM67a{3w~$3;N?^)s*JI{l7+uBc9BfI+Ak9< zl*yO<f2MyYIv&y!w#QtfL|~^O0(fzHcTxoI7L%;?e}W8P<IezFOlJGPM=m7lS3EyB zzg+?~Bs(m6<a~dm67vzewY)xlGScViYnYD_fW86o<ufXHo|tx1Ypls*0X;m!E=!>E zLZt@reP29!=MVxWw(-f#B~^wTVpWmB#jfyUCeI(<r00F9V*%3d`4Vf~&~=-j>l`g* zs1dO8W2Vh9`5C=`JJ*ex-x}&@*$<xD-q*Nb8Nn8`;bOBxe-~CFLLc_L1xGAH<Y9jb zcAfWSYLBB0;^Uy=I+i=qG3Elx_x+v^mK<)xDTYlcA54p$`z|A_#OXpPt0B{(!*(Nq zPCur6sJffq#{w2+{=UTVguT1uYofh~jMc(!vEQNp8BAM-KEyDrPsiGqWBG~Hh0>k> ze*}$1a7xIQ;F6FlAz#8oFf7C<xG(f{&tIAL@Hcw%zM=J#F)Jg|&;MBB6##xTfgb_< z2;fHmKLYq|1HTUNLk2sVSp_Jec`xhz&->By;NW5RP#>Dl@F&3&w7n2vzGA)=n@q!= zc=|d*A7Xx}S8whgTJNQP74gMKqrZ3h@P%G%6-m<D$iaT>s|oJW#rFD*swd*(p7$B{ z*ba01ktE;fldnO_bdFiDxSm)OZ#RYl7#$j~nCZYWRxpV9TvL05b|_Z}Ls1yR3$*)C z^2eFn*^|bXiB0p*0Zdg);{0=`oPWl5KIdTmInx(y#Qd{21I@V_2YEJo!yoFH$@~Rd zWi@m(?IA9Xh`}Q!(y+#{%F)91dq#BJ*8r5391e*U7VKK^$^~5PZ(8Rs|6Hv`6jR>B zo@6aDY?Kx$9)(#7toA>{)qb={T<!lMT3L}m&I}eu#C9!mi4_R_-EbDf|6^2~;3;YL zQO+7=XX|askLjIRyBR+&1~hNZ_F{5lIVW1VnA71yG%<OCEk?#j5R*0Yx|!o>FQ6*L zd{oR~;zxHq{Jh}<C4@~p=w8Olg^J>6T9l*9>t7RD&2|(W7qR;!g#OLaj&LhS&0Jy~ zE@~iFcCZxVi=LZ-V6nOA9Ylb0p_E@lg461gMWe`RNqn_6H|W8NTbIlwmbbJ`*m37Z z_zh%jark3F6?4V=k8zKJXj^f7W4@TA!a(1JNv{!Em<V&uUW;uHgAcusr8c`ei1mV8 zOy|uyJQp@_IefPlJ%k@<kLM4*^_{c&&p2aRco@A6?uI>DlkUjPOnXuPHXSoCMOevN zeiqX0{wo#$PF9m*m{?>1gpOy5m#&LV6m8WDJ$F&0;Lx)YFIvROsXWe`UbRWY?n@FQ zh@r@yp<F++HSfy^&chG^)7V+vN#&K|7yh#L!eiE6EmD$g<qX&2y_oSEf&b7-nCt7v z=SGjmumLWD^20<F@?n$6RwOpcNp|>Q?@7F~D7F5L5mCl0b<ak}awjytY=4U~FsCA` z?MR`YpvTmDQBOP8eRO=$*XKd`Vuwo0?X*C>HKj+Kb5QF?tiL_ApedF+lHJ>}wgPFu ztamX-JP_d`$LU+ONQ8ZeBFz6TxzZc%!fFvJ+jG9WZ9yNGM>Hq`O#Y)PLZ4!mmKztG zqY~>K+}&^mdQeBs?884y^NW3}PN@I=p>C`cF|MJZu~F_XFup~W4C@uEG1wV_y$r+t zfQ>Rf<llSl?OyHz;4C)c*v?6RUh=I)9_H{2>n7Mu7RDN1m6$rhD;T#7;fg=1!?ez< zUc5og$eP;eT|;9J_doLE&4y0w^kR~*-dDbOjlS{SO!r^WJ_xx+sjS5YY#paCx_lXX z5X&s|b4GZvjRc;<Zy41;cCMXV7`?m;(S(wgOO9f~yT#7vKw{<~jhs^M#ner)=d1d= ziZhmCUy~1?n}%?srHk(`;(Tv}wp<TnCl96TqI>Wt)C!z)8kVC)ilC3}zG#^<^bwZs zAls{ic<I=<()vTlm&zkq(Pf?pvF$~&uvRg9EixRthFNcWxnMLY)XvJ|xMeHk4(!&V z;g=%fdET-7c38$vEs9>;@7`V<eh&Lzf_C@z{*9jJLSHt2Ikeu6&5^~P?e%@d;q7XF zuA}8%6cvlFSZw!|#g{GKBck}A@_SKcU0T&PImF^>ZA*p=-Z0aM;_G91C5o?u#-2Cu z&s==luoCZRSq57aVTUZjcnKLx!(s(HQ7}}Gw>Via2++v@kr8vVu!2HDxvGXm0qBNH z(CX~)W%Q^*<^s;;qM+en4pbLQv`>`ir}g3Dj1bnkRf+yUmMGh=f3`fux>H1C8p<=C zNeJAT)rYb~d4>?FtFk^}e9%?v@5FMpD$hqmd4`~1woMW<yK-Yw&+k!#SUUg7n$&@E zK#L;FXf|!O7jc!@+m0O<y@-FfwNMCEGfNIP-in3%X_1y(W}X&~a(z(j`h9ewcnh^n zjt(2Im7@`hYP9Lh>OywMOA}qr&ek9tXc@CJuPA<4+BV9Y%i1loz}>VRg7N(f9<*}d zSKBDoCfPE&{~C_YVmR@-yT+)yTBgve=KA|%R9~N5LN8W(P@s3b*lvy0{_w|C+B$ad zGp$Ucs=>%?)_+LIb?}cC-OvE&M`O;`&y9fFvF77PH^3>Dl(3(eyB`crw+K!~uA!{v zW_=8K!t9pFBQ`Q9#t~U4tIZLS9M7{D?Kzg8ij-wUnO(-V0Vk)0j7H!o6fw3(LQSC8 zDl^j2@&{UCg&yOSq}>BOtAs#^f;6I{MIL1#F^hVYepn;*1Jwhht4;GfN&yIt)WRQQ zCdJ>5#b=heitaW|=nql&j$6J)`+_tHnZR1sB!9c(mIs9$gbeY99YxB!W|BA+<5<2N zjxiUtONXIcI{G`XQA#M6q0Jq3PgniE#2k##+rx&z_%fIl5gRr*%{&K!+r&ArsajOq zg9fz;J)k`#Jq=mWYaGVL_)i_i#)%pp#_km=6d3@|uOf;e6t!fk=8lm;a)o@^7Pcj( zc^M4bV-sVi#7>T#7#kHkA$DBsnAp*=qhd$KM#LPk!()fV4&lh2{S|e*I(^jV8&SVF zG2Z<bC&K7<$H#jdZxly<%8r-VboVN&wA?DGM}LHldlv>$nL#w~m=}7XvJJ96jQbBE z>vK?;n=r!~ieYaQ+WgBpwB~Oz>-|anX)}En48^x)Np(7BBTT;A?24Ck8)mqnvykQU zJX4Rp(`DE~aMni03Z6j_Jpz9EMnw^Ql%b9lyXYeNDH!oR<ICIRX!#SYWM74+YhF&| zC-!Dye`WytGZ$ii=Gk(GhS;gmgZDS(-c0shMq=mu6))n40}CU$03F~0^l7p;vkm(* z(US@NsE6~RB3A8qQL#dlKh+(lqdVgqY@Z~ypJKbzzM)Iz%jOf2<nf<b=pH+^ZO0TX z+Vk)$vcKmTq4hdOpeNbkLQs97k8s#$QtU!E4*N7A1Z-uE=RbC^s6G?-e=@h;ik*Oh zu;jno9!lp==WT9F8ef(SIDaxIW&Y%X<oOfpsm5<Lf3naJKV$x6PSX4drZtl0Pl_m% zY3ENqU}lT?lgMFW_9RP_vnRbhFT%+*don0Kdoqf%C&%bJ_8(~S<Ug3lvNMHoyqr8~ zPd|BbN@DWF)ZdPb6|*OZkC;8_#n^wHoIUvzoGaVtj^B^6_|MLN!}!n1e<S%XoBxi- z1O>_;^Ci#s@R*G;UoxhR>BVnG7XR7#Zy5hM`EMluW%D2WZ-al#k328tM{Wj>f#*k# zGtG}gCW+Y*8UGIKH;ZPi6|*A~q<kWF-!1;>=R=-0=0hMyYCdHD!1Ezuy$kxcxekr8 zD4j_2ub3^7$Vvd)p^ed!jPUKkGWu}4a9b|`qlArnT%IpOhiq%6-p+^}p+yB@(|Ve1 znxps=_X~UXD&L*WjR=Gf+Rj$$pN?RT)P7?8<>_8>1{-S}x*H)#g%aFU|K2Cqan6ny zw?_&GanRB_3I2qKrD?QbgBcFW3H3ko+fRa<=POvBIS(oi*nzW{dy*@Lj4$0eQi>cd zgW8Co(Bo<>6dDHeMZ?%M4%Z?>=k=H7N^s#u5@Y;7kpB|+$2j+U`~NQCi}Y#9D+bXi zE-V8TG6shmDd;cBjiJ9Yw7<laoDrt_8PBg2e)-^6@-O7~{o{wzJY0j1s>=>=`sFEZ zfMGImIDUmVMKQo_9k<d^)DU>$s;J?K3!XeYk?x9*Tj^+c;?Upl)NS%)Rrt5kQF*$T zon>~urXYIjgr}Xsv&H;deEm`E6^bu$CFpqmUiw$H0uf&&*vZtk3wAQ%DRH2q5%DII zr<DitL`UJtBm#PPg-vuT;x!UBE)eR`6@`SzQ>B9E0OA%oK~^uGzrVKwoZzpQ5P8aZ z0DmAZmBifU58}0e0c9{z0}wf<^p`LFl^nny8eOWQ9>!3%|NrX!12Q+myW+tl`dh4T z;=Hyx-!&1c3M$pSM+~c-&3%J{$2Iq51ar};8jl@N4~<1WM3;65&arW@c{9o8B-s2u z$p%wW1-r~PFu!j$bBBa4a!oc@eOvBCUSRu8dz*|)JI*|DpocTXj}76J_>S0`4Bg?q z3L7$~XFh>C#lb5$-VKf-PX6eRGm5?#lA%YIICUIErn5RF?s#l=d$>C%14AdwA^Cra z2IgaJ$KP8zG=~@0gczxck9C_nkH+E>P82&@YcQ%pDCd~t{e`z90|(Hs#np?YZ^O41 z-U&@V(KHG{v}42NX0_<jc3C6|YT4o>)=#l|CKizQ>z$ZmV$%6ymoHg40wY)1^$4~R z?c^$Y-m{Jt-eJZSDgEi+{Z>9$;qTMdDbt~t-L6k;Dl}R-uA1MNgU-~sIoL;e6DC|? zfk6F{^RbJ_u6uR`bK~s|dMP66n8wWJOb&X&c%grv=c~}0@nyvrRz)x~dVCJm4z463 zB^aUO)44~GOD@Vjv`3Jt7#Y1#qkZJ*Np3oh*L~3%uWw?VqRz$6la-==rBk2SOhQMQ z-;wpK&W5K&2l7Nm!xN8e8=eXe<cW@kCzr`n?twhfQF$_@u(_Ls8Ex(*MAlQC46Jz8 zvvL?QT*vpcO$qXXjv_Fhyx4)W5Wa9jsgTz_O$e!7cu%iKLFp9DaPww#E_MYS409x! zbZQpaKap=P!e+HUYJl<^s3?+K5yaVC6e9aop=+jGP4Ps>)LcccB)Xm%jwx8G=Cl-M zLHiEHkd&hjH!&Nd%_27=>pN%~pf7|>&DWw+N|3R21JS_E$-F)!uEIqID}9l!eni*X zWilx_smVll)+}s7exfq5k@Z6628!+ffZSO6gK6dGe_#5dQx4WejThcP?eDS=ve}v8 zX5+ZN6WjQ@-Nx-T1y7#|Q3~I)hBJjmmn^&uhtX^-@8|}uP08|(KFW7Pn<hII{Df>G z8^}gbLtTSMmgF(fu+^fE^4-M4<Wx|e$^)VB#y6vxfPZOJtI5(;1c;p&zQ{Tuq=SWa z3%9O>Pq6~)K`!80E*=o%f$Qj_Ha5IwiEWiLr6w6}ZHI3y(a}R5wZTSAw<Pjgk6sHE zuwgA+WU`~z7Q)<Zm{pdbk-zH<quzu&i^K29EESssJ2+h$eKg?*qq^ul!dC4SHVP)e zZF*X6*g9S?IpM+`h<haScmz38iryn^Q<%$42)8mOm|PbbU>vZCVj9@<d_qHW@HLG4 zE4=MEsm~!;MC1>$DPLsn2A<pVc|JlL4Ml@hER54~W5-+a55cfhu<Kcj;_lfkg5KZ~ ze)k52lFC+oxjzB)EISAg>CG9hR!x5>0*LR=GfkbV^LAqWG<m;+X}z=v`v4|Ih2Vsr zceI`$q9dgO6=#ySJ9G@9AS%nUEv#Io9+{GR6oQahVeB~+H9+j?-w>Ddo-d%irJd7| z6R`^jc0I4f-B?DkLnR%BLGX)V>vE@<g(N<xh$9CtxzMmgQN@yP1WaFUAxBc#B>M?l z3Q7<s3MQG@R7z$IVQjo)fyK+q7(a;p=~NyT#kCuiw*#4GXb@Zw7CaY~hj#H=V(9V^ zHcjy4v2nMcw<Fvvv>IlJ!p+o8u`E&~YXZS4x)e*l<7FjH(i6fp$%b;SMZKsBSV%Qm zxg(U!9*Px)Hf(z7zZexHK4?TGp@eI=7m|Q`Aqj@xqm<vnv92QArT6eXqFzQ@dxcPL za1P{0xT_#dqPsgZocrsMYP1_gfq9#iymBXe&vQbO#HRS9#2J~P;RyHl$&CRnp*(0# zr1v*K7NjNq-?N`z^fx}$F~uX-tHx4z-xdYmfZ@~LJ+Fv&Q`<A8Fi9k3r#;#%nzhJ! zb~Gt0M^LdIsf6V)(SZ{NS8~s>9Yu?tV+R3S>j{RWaURe#i-w+K33`roAZt4SnHIgl zC1t@h1)$a|2AV(ozd8Sxn2%WY0k;{*{!pqkXCjwG{{eeTe9?zRZg)0kBe(fzog)9m ztGGbyVL=-$c<^M-7N|aw+%+Y6N0+XOce9R~11dBOHWqc%k1b_#+^eiqWc=OXWvbgn z!Z@4wOM>6gl3#8rKUyh%^SY&)LnsMbL`yl#Bx1*sG$+#P3(Lfrk{m7Ad6Fre=(xnk z`>kC3T`3RXCM>y&ZsqJIbi3$`$(L17-Ft-Unulq2bzT7tKeRV#MI3mKNDNtQ+}b9l zS>!#bazbVSA|WVIZ;TsMaYY4GEV?y3CMR`08b=-X@ZiR!dZe8_3~qQ+HyTF$ZMfw} z?T_Pm;>e?dqEqex*5n>wEqoy+_a<<+BwBuKqr^l}CawqMsyiwOr9)<0zYq~vcR-N~ zMv<uy_fFK|!fc!m5J%xuoaOE$BXvFBFguoQp-`Io5ix&kx@`92g%&$Ic6w~Qw2Vte z>{u*1V+mSXGiyaCyvh}Q5LL?3B;sr-ZnK{MHp92HTGrgCMR3G5d^v{xSVQK}|M7OD z3%X_ikG!j5juUGW#@YhfCo!2HuS`&Ha(+M8uu5Lf<Q-UAB)~Z%Y@xz_$$v1wFdB61 zqI5hqh*L&8KFrDRIlT3l*_)Oj=H#Y1x$Q1COwLz>5;JMO=ryil$7AI#oLJF!d{or* z4n5tF>-S)$?-T6seno42A$XFG6T;q>cQ7@FA$COFHxAJ_<hs*hhYEgv&o>Rn$sM*3 z$xwT&Hn~3vckCbm!<WhMM4Vj#KLmA6K5K%p`I6Gscu4G2oWJz!Z5RcGi#41nNF%Dp zGzv3!o`thx$7|v9V@E3!BGeH>e?vI2K42Lr`Dm*#f5Q73IUk4}sA!h<^PYjHIT0en zM-OM^=;66J_M&Z^Dddb`<YHu52~s>li(nUcxGon)m)6OT)l)GR*(C~1iG9Q9m^T&* zW`YN9OWYlw$U~VJh3Su+o1=Hi$wzD&cC>5;o1&&05vsgj#?%Pn_zmh)youDqKjEZ; z9+mgfMxIt};sBx+?{44%+;-`&gMe#`0RxGs9uAb~(W!MHQ_W#o_ImUtmq@IUE~9U1 z%r|PDZya}AnC)n(MFt6RNc49#Y~^XXE*tkMUIIt4)i2`IJkJDwK>0Yg>H2J2@YvY6 zxW2@eREWU~!L#WS%G*|yjhhAf9Cs9EZ<{P$p%g>E?HNpFxK;$y@6X5;Wf*3oAR$L% z#8!S>X@ioSf%;d3!ksM9V-FUfXzj5vqO4JAu(~}E<s3nY2LBnJJq43PwJ-!FGTF(f zY%9!0au6JXgd?JyC4(seCCPxEK|%PL27)4c>|((HFPdORTPrtwTLB`7_zlPoI(nL& zr+2{@w=-x?ery3x%J{;#uQXQ=za);7?AM#6;N65logP6Qh;nluZW`0W!*b+KKPB*~ zQ|P`(ogGK>eU9Q@aYBC*c<{DSUwCm>a`?XRr<nYAwCqIz$+?3YT-@w01PJxK5SFs) z7$-b&jAaP-H+gl{J|*opH};63!NBx5SFo{>^zVuEVsC8hY*YHx0hibjs=sFPrdWkO z;Dv5bBiQ;rQB=!Ss3VTYrnqoyPT%nlp-!*K#ki&$o4bTYot}?;>W&S8enHcNHI=EL z-J<XKASc7`@GgWF1<$`j>AlE;J5!{)e_KljR$Q*lhuV^<hteBy-Kf|RN#*7DyxVXX zH#H++_s34eRz0yfI&>#0rad;Y4dKOpU`n5u1wzJ07I$f#Q<PrHL;_GAnDPu`k%2pE z58*!Cp)6T^c0jHssM!#`A6gHILk<*C;Ra7giVxa~r1KM6<Z{UIVL@EiyHU<hU>yjp zng^Xp4g0Sl4mdI4Xw5?F96KHJCG<Z9^`Rq#gY{TLdILJzbdFoB+TltRpC=Z?rDW(b zHn@zHBP}u=G1_i9&(W3GKP=`)z}%C~_-vN(IZV`W58A)W5g(st526rSlN>5KbDcs0 zW$v5uGc~?~PKs+-4k6LjD6?cTV0|kQ?aeplwg$J%EMx+a5rPMlDf&*EQ74ocD@LMe z|94S@Aza`kq)SR7q^ma9A4c8Xa$-vdWi3C3-SElrm!cc*2{b?)Ka}Dq+ThX5Vr-Zd zlH7o1SoYCS@<(2GVr(S2nfT#&YXfproS?Zsc1)XUmP2=H(J6Lp_lqLB;hnLe_=laP z_yEaNJB3g06vu1PqF{AoqG(eof*1t^hv?YR6v@ZVSG&xC{tH3FrrUfL6y;#VjOq;r z)yG$PZ}g{)`IGOp-q(bf^7yR&v~l=YuJ_%m4jdnJy-!!0^E3KVR{Z1v-Zo?0qi%o@ zRS)NQ<12nxQ&tBFlUDq&(EzKJRD<s1@`&#@;DTV{z_TO{y_s$qFsVG_`6bR5iY3yo z^~gNCKeAMmLf%e!y0Ew58a*=Grse%b+xS(cFXK}#aPeA9P^k;1;Y?q89xg)`XA-r? z(N*KagM7HRt-GOE#}RoffchMhzw$>aF!+C4apc*I{&f_U(1e&5*EN66ccW%uR~b5L zUV9HWcIi(Gra0o5%mQZtzosW4MZWMpEqeS;92&wsTFK0CB<oWuT|EyM;J%HEVSaoh zdy9}(-0dVh3)k>Gn?D@FX~(5v5*D{nnFUhlsbniG&n51cFxpqF<)VE>pSMTL`&bYE ziKiL$$PfLIA0y+iDVN!c9NDs@o=pfRNG{ZI5StgKp|I8MxUVK|>D75`P{}+RM9~2? z8pinHP0S8{sI6DIbOHH!USAS4x@BTB;*XuN3XB`O{E;PgJ@1Vf(R0V^8^6Kz1r^<X z&u4zeg<qqaj$NBPq0dhO#RK(uLfuQ|`t!cVtuz?(bvbV3rO8-NLt!GB#tk*s*u~uw z+?j|IdlU!D&cq^pM?bEh!LiQ$5QrrOM(ko|-~ikG90_P56S~lCi<V$HQhg8rcO~G) zu1oE)^U<!L$T!4`99lsSV|_jRLx{_I?88Gdh6}S=Ul8SM+;$GP`{9N$Q_`(BDf&b0 z-^dm!8#fHSj9fwv4c5%MVXr@O8d_wus~dTjGVd*LJoLQo!N3B?(^f<gH^`Ui#)2!^ ze)In2(^UT>UVm>gS6@LBdK=sgr8n?>1@ZWZ`wGN~k??*)J;J+jU%@s+MueV+Ipi}l zspk+`6b^QN<6sJoARv)`$JEbbIVOD%21Zk4+)p5{58{_8-a;>_3m1fSESbw$0a!U& zz7)aSq%JIIGqPP@wzZvIK3o$Z)E&SR3%%L%EXd96%K`JF=N?d-FFEM^9+w>WtKMZy zjEqfOa-e7I_lFl^&kW8*c-{_<Q&%on^sTXIB=7Gur3ZB^^rl6sO#4p`q+hZ7xVPcz zgnk_q*RSUvK)<3w8H&)*uTxN|(y7-$DeCo6<fK`>KAfsvFGy0agOci+RIixPI(H@1 zYZ5c4*N6X`)GN*x8ST|f)t4GT2Z}BeKaG*ttiyYQpree1)2zRV9EhGPM;oZYRITib zM6<5M4@M}E=oCzxy@o^VnZbN)z()Ty{h(i5*xkGl+8*k;|5+Yve@Vj!FdWOdMb}iH z2J{b&6xF2v&ca*~x6VSB!fc{w6#gYNh@%l#d|<=Tx)5?C+cL2(f-wb}D7Hm&jfQBt zp&xlZLnQJ$95NA^qYjynv1+~y9cAlZotJsqX-MHP{FX7Pm*B^_4)JMDTzh4kj-Pn? zSI^75l5YjlEMG|bcaCz{KR5)xJ1_vX@tnj+{D#x;DSkXPE1p{*8Fswg547EZe^n&m z)4%$@Wwy+_GxG87z^|1QSK&wUr8HFHC&~k8;|{T@`2C75Tk-n=e*aFxU-6@#8)*2u zGVrQU8)r^W0zN@QG5#_3zoB6c{?U(cnXe3j+to1qCK1P2lP&W~7br=M9oDwYT>Lu= zKk;0O|BQSSO%?btRyWYVf1=MoLj*sD&GGGE&hW%tux*@&w((@)C(4J0GXCSk7Y49` zhC2N6_`)YndnIBl9=?dk(1PhO(QZaMib&<ABOktS>vj$!c0LS`h`}oipCBsab2MEt z@NYg)Jn=9`88&=548Nby;&lA(;0vGr)$uUb8)5Q=ax#xWJrBbaQt~+hnLwco(B+3P z@I<b7;$bdO7B;>x%-cy)i{GRK?Ovoa1S{K*3_HG%dhnt6cOwjpfOy(qU^<7>WeW^L zfk)H8L(5*^aWuRL!%4ssXxNST(a$k7d<4UlL-4|<fAwQc2z*=s?+juP7}^@}n~0xy zeuw`|V-{Whh+hkS;^|-gZ_D8Kr*yE5k#_Qh0sj}RXW>WBzoelGzqm_8xiC4lcKlAj zPx$G^%Q^UU(S_RsjsX6V2A;|~7bqT92Bt|=x`i+Vm4mqq<FdpTRt8bU3-NLye!sy_ z$SQMsH4WAHmGFg6|LXP(mAbecUszj)BEU@M6Qe-gk+~fICg3NY$MK&oZ`0I;AG><u znGKH+PFo0Qy8{2nt&Rr%iz|+mFp%tL#3=qbVNg%nx;G3o;^E71yy>(!7XL1k_NKbG z&amMNqZy+`Cw}n+#N{`IR<w(xjpuEgmW$-#;fs+mHhM78{&G15?%qKp+{1r-_`>3O zgeB37pBF#z6d(o6h*#)x4-7{FAE)6(7>F<N-v^59FEm^R<`)BZ({K@dll9XyEK-K; zH2en)tPneB$VZK!q&`c-aMUUK*+9c-%CMD&sW8yb^E8l#emZG*9R}ih{`*Q9Hq&tA zA+nNgq+tOJ6rw-Vkd1#VSdpGw82HTq@x=4=&&tBa7v?F~KW(q$XDTaiX3;p<P_I*i zW^BRB+4xb5WQ@Q+1Zv~#dd3+1V~B!mG7LT##B-DQFT$OVS7vh;t=jQJYHZKoXIq2c z0>1F+U;X$pmgQq$Bf}$#fX@W-YGvD%_%YVMp<xMrlmy{&A71G4GrBy1-zoSBmtA<F z%QCtI!JK(4n(r26c#AI798C2mG*A&zPwb%K4H%{vE+;}5=(3eAV`1RI2=Vl<{*uvO zbRtX)kGVCN{f1NVqs|pQiPH`8R=hxBZ2v)voAHk|x19$5i`QJ9_aNC;;Lr{D$Lv;5 z29y<S@MPiFzxpreOLQY3o2``p_>|&z9DZ++j?FRUWH${f@H-a2H)v?bkJ-X|pKZ_L zN3v&Wco{#EZKt6ZKaw$0__~(N3Bj7GhsF9BT__qfJVFCUKc@pTnPJbsKyIJYWf1-~ z1K*+HXZS}yg6tj`C|cr)%kI_6!p0Zo$ue5h;`cRQ`1G&VGmGxP3p4X*gqZPLypWxE zrox6EeT>UR$}pE?v+ysTvod6(Eu+s<_>T`?m^akBqETa<nG?1`{BosFr5oqNhI0Q5 zeztb}Nc$)Jgxs?*#M8g}Zd>ND7vTMP{1%V}#XR2j<6S+wNrb2OCgYA5Y3BbXxbb)3 zM~&caGSEuR@s8Fxm}Sfduaqo4c*U)v{o*w$dc#`eJYkZTtjPl~wD|9Q;zeW$q^_*K zY;i@fqQ1elxT-N2s;|HY)GI108*KcJdTmWbO|Zc>Yf*)(s%Ak&qpP;k6@+1GS*W3* zs;tK4mwsGR3}RPRgR3?aB;owpP|bn{o4<BJMK!H!YJ;x%RruU{S@l`2*$owfQ)Q^8 zJXlp*<2tQ&enUxp?flbh{<2_wRU-mif>_b1qQ1Vi{v6kmvU&trUV)YBhKitTai{_O zz@@g<)v&m%x>`gN>}6=d`m(B;s+xtiX$@d8Ggu!gXX;#D$;@Ac1k@~a%>exXB(tuo zQ{)2>Tv}EgN}>qWTvJnft%|TK2>&)$ZhdWS(B?Yd1&zBnR2{4eE~>96TfmqJ<CN;M zhK4|W#lrdu#Hh9=P|*;qT3i;at+y?xs4RnzfT@hi1+~edx@>+$wQWjOeR-(5tbTH+ zva$kMr3x#l9Fhxu#@NQii``?HIo`(diaM5o*F+-S$IV1Mt1Cntr~3US0^#l{3Zkgy zhk_OQjG2Kk`G!~&S2aj`Fm;ccQfrhPMZxP8TvYgR29wJgDopHcR{jg5w|ES#?pLRC zcaNP?TT@xJFjQa0^f8j-r~50)Y8q55;_OnwtF-VNsQx54q<<U8-$3^1xun|u-}avx zqwi+(KNWv9{a`dN@kkb`w|@toXd6^yI26~(w_as&sKgZiqW1^4uhIPNm@_!;zfSoV zttH$C^6wlh86Sye!tB3W`Ojxh5l=gQ=J*Bijaok4%6%aIyOlc!2=Jd0|Fz2FK>j<F z1IKCR@ZVA4m$EI#!%_5z!?NP(ch*aLF*$(Oa-`FozH^m(9lL^fp2DvzBQx&5MY-p* z{m1ijOa87^?%nLC;Q6g3{66L0r22u=kPdVBIStZZ_el~t_&2+^D|cs(bpNZx{dMKu zdx~^_5@7ZpRHNUu?7QOONXeYOCzX3iu5=$L|4WrSr?k?QU$=5EweT+$(-#;<oi6$F z=4iwZRLM{2nbQ0Xz#P9@l>gGv(w+6d?7mL9m#9gsA>eE-|91@kXG{N_{zw;o;TY+@ z5IrVy{yCRO`?cpw{7A+;CI0P&(*0Kh@GqGn-H(J%v;0oHR@&DUOJvV6!<Lc4zfHNT z!Ci`b_d(p9UdewT|0T+ukS_f8gSht|#J%uB8GZoylTLoxHR)anNaya<rTeW&xw(86 zsQhc6Cfzy9VJ`o*%6;v0>AnH(>G;?ArTbL_xOdNx?k@q-`CogHbmu55oqJn}bbmN2 zIsUJ!_?66-?i{z7<@@eNY44gNu?LWjzw>hGK4AGO_W{dSxj%2wZ^vIJ`PR*oc%ICE z{7-(?QZeAEhKo7>KU4l)rNY^^T>4D)UnbobSi*N*FYR3w5*NXzx%{h@dm9A@&&hB% zhrdR-cPy0dKItF-lOJc5G_M=Lz58nEK4XCT?OH6|rw`!2u13251@7kZeNn})RE;7F zC0R=RMoN2I#`TxjG8&y3&S69Coao4bJ$1&~C2}NKpy+Hx!<{PzO*wpsGLwc+#`PsW z!C~lXNTSVY@S*x8uQiI#zvG>cef4{ivB7U@bJndWBhqqso_noyR_zA%p(ckr4m3C7 z=Tvm;pYXBQTKM{#hu$(II{4PCp9%`{{|vvK*B_k!>!9mUbnL(IIT(MYcO>#}&5tGj zc6!2N|EnclQxfUrEK~MP2aXTp{Qyf((XqcH9wT2&{5Vm$<{<nS&nH3Grs(cc?Ckej z;;G7o`TYUIZ<6s8s|qmM@3YWPZys_>Jh$b9Sq@}-(K6|e{Ukp2+b#Yq<;3{Sg}?R{ z(%)0U7yMb{r#Fkx7{6OUpZ^m{&;Asjl=xY~p}#Hgx9Vo;kNqq@_J=I-n~|EX{qX0! zMfzj^OZc<KuOwOi7~VL<E%)crpRp)of8P>bns`>jU;draANy+}yx770{R;keu9E(q zl-_Li>F-MmLw+pbG5=qOztX!T8T)s9>{nX+`DFf6K7FVo-M^6Z1Jzs71wpq?(JA$w zsNYJCMfroywp#LI|BsLTru5;H{!gIKzgyCaFBsB;k-llk<v{u;Nq?`T|Aw@9Qu5_O znLg5g!1&xJ>Dgc8W1nh?kD_Ne9}ijYQ1t9S^07~`&|B&Y!?^?gR<+A;*sm1N0O?>j zEuh!#m-Oss^05!KgkzDz9MJ5Czov(zKh^(C<d@)LvoSt7Q1;p%Bpv&q;u#=5q#p_T zu7@Q(`=xyB_gUg&(pN2@U-yWlH`<eUxlL|{6v}qt0nn{gbgDm+5?`k4MTY+^==Otd z_qU+S!5U1TqVqB`e2ny);^zaM>rt7G1JMORr+o{$yFpi{=-9s%j}fjZ|F(c`%^zjB zm5MALKSf75c>r|1ijMtVKK8K(*B|dNzG`pJFvH(ei@&MK`jO=@*N*&nLdJ{zWAUVk ze+%f=sqKO6Cl5sT0O)$3l>FFV9*FKm(5=}Z>DX^hN5}kl5_F|cNjmnQ`Pf&#D=mz8 zTIvnu`!o34vq_SP^$_|y*^(b7y~riFm0Kk}``O|#_?yb{7SNS!lXM4???*tlNYM=> zXH4JSpleff?0@sIe|7NmjfC>feMZKE{c`ab@wK!Q3?~cp6Q7mz)rNdrW66&+@^K^l z)%{8OQ~mcuy;8xF{{qnM{IjHEKc0_$f`xyYc-;+u&K=Sp`}e}%bc;VryTI^Xgg@;C z>5u(>;qM}gKTCQj7e34t75+u~^I7xF5)SEa1byj?lAhxO@eGj9q<;YPy)Q|6ju#F_ z|2pWMJ0(5G4@vZC;`1la=f5iHIiBESZ??#bYTsDD&mD&NDCa^F^D*KtO|}a#&xaw% z=n24AfG&kwFmBli^TWXPz&Sv==L7cuhXY>)ev0uA={5pst^|_)vud$lX!Hgk-G2w9 zeU7q!{~ECeV)SYt?H2&a|G}#z|DOQq&kv;g5z77_Rk-FH=7)f^Zv@iczC{vu02#lB zfQ-)_K=PTd%tL_m_s~L_?q37xe;hCZ{00h|^j`o;*8;o&cq5Q>wZN^w8Nf?`FICuV z?*r!oTY)~{7T`HR@^Jz&)EjLFk`K36y#ef7fVK_zDeyAjvp|ezMlS+lN?`QG%Kp#g zGMuSEhI8qB=qjKN+y=}pm3*B*#?KDi3jB4zX1mU2JFgbl2rLEu1vn8%_v3&ofX|_W z$9P@>B>#Sl_leg48Q(byGlAsy>|Duj1Cab412X>i0Ph9<6iEJ!%3Q9{1H2RVZe`8` zlJ1);W%`~3UJCO=z+<ub=XT&sn45r)14F=eU>)!fo9(Dd;A)t!1U?L$4txZ7B=Aw- zH&>v|0)7g70vH3*Unh|9{Uea^{k_6fz(2x#3-B@EbwJYB1Mh)(A&~S}Db#?ZKNm>) zJRs>$0+Rk{U<>dt;1j@1Al)}zF1Ayhw;uQt*xv?x1vnSTaynMwU}e8=j?AZ3!0X_C zC6IJJAoKqi;Pvo70(b-P5a1iYEZ{ESek67~@B`qRz;}ST@b@=h1@L7ciemJ7U=Zd% z0AGXoSHRbS6M+nO2(S_O848Kv{sRcB(JuiTVBP?H2j*V_--Y=sApP}0nCb65ApPwE z(q9*l{(cRd1#=saa(yE(2UrOtp9_FY*90K*{|w+(U^P6^T&yr(;qeL&2QohI&6Ipv zf%MmjN=tuF1MdSq2>b=`P9Wv$-+(NqmB3%Zyj0mYD*LN}^gka+|0Td*1J41H{%j!m zoDL+P<AJR(4+CxizJ+~A%$IH;^W`ZZ^JN8)e6I(R?=?X3y&On>ejxc>2qfJ(K+>H7 zq`VykB;6rE(hUNV?u!yh_dbwxJAkCy1SH*h;9W332z(duSPpyz<{Tj7`2prP8P7L> zjOQyrmfr?o1I)!h(hUQW?wc8sZZD8@e*=<kE3gaZtAM0G6-fG{f#mB1lKykQr2i1e zcs#CfDexuG4Fl5uU}b-wPi!MPZxxXA<qFSIxNo|&-vE3O{?-5~PwmS7X5dzsi-9bk z;lQ21A;9&(Ure)c!`kS71ClPRaDl=Zz>To?0-2v@Df?4_n_%CsOMC~|0rM^(>3$BR zzo;^=0B(kPsWJzZ`5I-OugsS#bBQufRpvoJrvD2~*7pyAG`|XDydMMxk^a@d+hM*6 z$b8&4)n>aExDmJn_z>^~;2I$PHz+(`;YSxr`zI8(D)a+G(A#ch-tU$C-vpA+13-pz zn=;P@GQ4AfjK^!m()|}e+OGuC-}S&kU;xN+y9~Gs=mWk9ECy}>{dvGY1J4G&49o>S z33nIp5ajm{fYfW{Q*5^PfLn`XIX?_!IiIBPD+I=Hoxm*kyZ?L{?rI?In-q>#`0{zu ze!aqag$saVKtC6F7VsaFu$vY52ZghMe}H*1@P42R_#Z&+9BGbvB>f^F=`I1%y>X&+ zk4=#7zX8(yb|Br4886c}t^hl+5dY&9jsy;dd5|){Gfr%Y9Q_jT_wcs~h$=jKEpRRH zZs0?}(LnM)4#;@+jFsUm0bT|3B;c#SGl8r(cHou3_mOzg{|rd~OO*K<Amh0*U(zoD zu7~-pvn8$vGM_I2-T<5iWO-izWO+{jK8^Ct2R;YP13m@&6M-z}qk$~v-y+k02lN5S zrx-{+9w7O+f#h>K@HybgK=L^bNIoNg<nzF2tnC7?0FuuoK=PRiB%cd_8{mH;@XzE2 zr2L%>r2HKR6#RhX_u!cr`vS9o5#Y`<WIk*IG9Q9K+D`>Wfw9x2{Ubo;%b7sNBL_Gc zcogs*;J!Smzdr%e{ypFv;7;Hzz#D)pFBh<k?zxh_6Zj0wn}BTZp8#$L{vOEi?gDNF zE(QjXu1kTek2>&rU=fh<@c`cdjsr4(&IFRr@j&L&NFe^sI~@NifJ1<DVIMn9@_iG? z{CN?`cx(f90sjDGc)tLW?@xhD@6AB+T@GY9-T-7d27xTcYTzL#N9^Mge2akZ!u=c| z`JDwU0*(SQoFjne0{5RPHa?Gj3HSia+ky1A2FP@_1MdaiuCP?$9N>Mh_XF<+jtBk{ zcmi-0@KE4g!1qs)e0BlJ=LLmND*T<oyMYYv4j|JV1~R?NfK2c8K&H0=$n;(VWO~bh z%*T8n`R4)|uf7}^pAUiUF!umSza7Z<tylIBEBgn4^nX8){_h0-C$I%b|2G2ZKLjLQ zHIQ_rz>|P}AnCk7(wz@{5au(0%-5knrmz2GDQ6EUYzBs5UkBU+JQqm4G7h*NxDCwd z?<pYV^A8GdRCtYn$BXr+(e=kkJ$a?V!3v)}R@!@k)KA&KrNB%e_1Wjg$Z%f*(!5!j zZv)PQd9=d&vvHUQ<|RPJs|Gj)7y!NlECRkuxl{I&j>b+|*yjO%4$K77f9wa6ZWEAv zo&Yj^w;d(hq3eM(PXjW4@`22szL7GXy}<P_KLlj_?g3^Z-)}im*89_e<a-j3eD)k6 z+o#<?sJhWRfl%F}{|tl*9lZ%ix}O8xzzFc)fdL@-T&CQ|Df173yI_ALkaBt$@M)ww z3rIQrdW4kI&w-SO81OaFy#Qo5=L{FeFGfFoxXkbW0PckSO~3%KMBy<&%Fjo`WIWyn zGThgJ4EIGK!~HXm;cf%6emn(axQ_rC?p;8r*wODDhHq{HUj<$a+yuM`cpdNo;A|k% z>jyHN$v}p44v^uD1u~p7fea@H$Z(DYGMqs`sOZsq4i#J7NB<3&g?`ctK=OYK_*39& z;N`$&z*693;8j2;a5?a6Fueo#GLU-ePr&PeTY!w;lfXBCe*`j~zXmd%_W>EtRY1n` zHX!2}2IB9ioA8hE3;|yU&H~;H90erbqk*>r->}Pm+I7Hd!KVng1b8;^1z;|a<@o7P ziBBn9q;P`5K?=7Fk$U6zK!)?5z%Jkt;22;v@J`@7;Jv`}fvbUIfe!;u13m)$X0ROZ ze*|0y^E<#NfUg4)^`mwGe+=`}%Knea{#U@8V1JjgzfIZS415*#^}uDoQeX(>bvcmn zn-07UcrLILI0Seea32bl>G&AP{NjA|b#R&iWPbes$o$FzGQYSU&iv|9$hCEvCo8lo zd}WZdZv$Qh_dMVpAlG_XKi&bZ2mTaz1&|+qY66Y|GTzz1e}nl88xEKO-vBb6F9VsL z9m)(IBHq6SGW|${NPi2Ee4rZzeJ!vJ?&UzHAG$)sn{)aVIK7^Y{2<<qaGwW4R(Z5> z^myP~NH^){19O4MiW5$d7(GInAs)iM4)`Y=yjcXS0hR(0*Wq)3w*pImqk$UmOkg1p zVGN%LEC8Zg$-^MS8O{Wt3kW~Mvw`OWoxlr#c3>s29q~n)hOYwt2*^Da46g}@Forh* zbzmK^3Rnt!7B~l34J-kYz7W_9oCrJ_m=E*;d9dIVpbK~^FdMi4Xb1X%HsEQ%KEwxc z9^MN?J`UdvWW06)>w(=shSLF@23!Z64qOYo8rTjL=>XQj+y)fs0A2`lBXBAZZnj0h zQXuK)0BeCIK#>mMH84*Eb_4T)#X!W3XR$<nE(AJZejaECE(QXGf8vRxg9EDSkZd4C zcZd`CHtB#!@{rvqaAJqTc7;s}8-es!2c*AJWj{yRmni!}Wj|5b=PP@cvbQPhLuAOW z7f61)fg*f`>y-Oi<=(FBn-rEREL1oVNPavnMt&}3pRMej%HF2zcMn$KDQs8Rq_7bv z(hC&nRrYg~eTlL!RQ4`~Hif%UsYH4dwkvE>SgNp4p-UmZJ<4#MK!$5m_Pa9`KZWan zq+1Jo8+7f;zDZ#tP{bejHrz{<{TyXqqU;Nm{X}J-uk2mQ-lnh*%*d}7|K0|_-9V8( zh3yJg0r5A4dXjWa%Dz$A*D3o_Wj{yRmni!}Wj|5b=PP@cvd>obPGxUX_I-#9UWfDo zMf`w_-%e%Ut?WCL{W@j8R@t{J`&G)mP1!do`$lD7r|e6W{TyXqqU;Nmy-T4@;cnDJ zybjq3WIR!qMLau{{W@j8R@t{J`zD2rK>Di#GJU1WzEC0c1Ksn1bayFxfCzUc5cd8X za^VO<V_*9T%53aYzw0#VZtOdsq0GiU^S6$JJL+)T&&U~J=1F>EA9z&pGxmKiQf6bH z_iSZ0_H`es%*H<Mr&M^xzU>vtZ0ysXq|EINGW?^I+1Q8u`l&KL#=h&16n|r%^<G6^ zipG>rgEAZYoO6}g*w;KrnT>tSuPc7WzU0ZuZ0sXGTbYf0vF|AV#y(h%W10WPzSHfB z-q>f_!Td#Ea~wKFe0C`R#y-$eWj6M8ex&%h&<W-9m@*stG9Od?jeVHEQ~r&8k33f} ze2C3fdV};|3IC3a4x6!`J&2A0&Bp%N%u&+Zj!rV4`|Q$e?7#gxc#+=Nugms^W@CTx zc;#M-c=7rCD7qv3!=yQMiZt5}m*zsa(cRd;{nKNm**GsS9{ELgWB>Sl@J6$-pZ`ya z-Z&q?^R;w0_LIMqBhAM70`A|UyK&wkr1%@>2l^F%<GjRKD!#_~2p#%bgs;*!NaP>F zL%#BP@g(WqD~+}XeyHeC4t(aQ__7`0bBm%c6eg@mDthC*NZ&EiKPx$(aVo#-ilzA` zmEXqsf)~M;<zegx|F!bJTZLbz+>QO(bCucHpWUVS8~fFd94h&>sqk8ryRl!r+mHw4 zevRQ@$<JfT-Pk{Uv2r)|v)^sFdu4i7q3$sL#(r*>D6bBiu|GXyn9L93yuzi*Y@AOh z7XGo`pCkF5ZP1@7&BZ^E{9UEe{OSm4Huhit107_BzqU-eYYs(UA<eZ;<$jek*SM7X z9BJ-9TAGdX7+IJfAU|V&bG~vn_ESFyT|jqZ|MK4yy|LeZD0+HyFFjlG=Ux$-I~Gdw zYa)H9e}&R~o~UoguPSMtuIP>Z)0YmF{-rDAjrIMoCR^i8(x&5NX>Mzh<|i?~L-#`E zeu)cal%d#k4B&he-P@G=@swwnyOnvziOSprVmvF9+1VtFwsS_o{ZRP-u{5t@_%Qb> z^Dh}b%uZz<@1hy?SD8;|_;4>#=1hhU^IBzI$M9fwsrW2b=5FQA`7g&|(0?jED@1xb zY`MyOEW<;3+m-&@qv+=-et#F~>A*f?n|SUs%*y{PW!|IQZ-Cw##q!IQ^tZ#DAz#J+ zty#(DqReFTFQ7-w^#29@V>Z8*oowz!d7IsDvbficN_HP-;rBZW{Z<RVkD))z{7WqK z8&64gUu;R=G0=x*|GO>mDS`enyB}il|2%Td>|TKKH=94Qq^HZmZ;d7X*IL{UNBdyr z_YX_{&$EQT%;NsEB|RffP3Bi<Nxx@!vim)#-{$Zyfxa}Gue12~Tl|MD{&}B(+5fLC z`FXx2Jttb^uhZgxp~XDeBF}Bmx90GMS=_fkADZ3ou!P5(e$4LkE%|$%#eB5I{IP}K zm(U$%e$QImb1dcmrX_!dSlm}w@{2bTnfY^^W;T~w%I5_*n%$3ZB%3QO<$b2b{dkM} zTD0?Ke%mbJePeOI-r|0Pr97G}_5FQId7f#hKYf<`y4~Uqb&wRl3r|iqzXJVhj(?{` zUXHQE|4xhfJd6J$E#}|nB=bMs68-`UJrDnw<MRhgd@vW5<o+8=e6F&X7h24RS<HX1 z)Yo21cv~#)%Pjt3Oo|WGagzCd3%_=>L+12x{@iT-n}z-*OZb;s!lz%e|9XpmTVQd; z;_|xdY=J<ays-=yA>e+5+G`D?VYp&u(1S}V7FX4j1uK@o^@;`6B?4zm7dIKWXQ}%h zW>y3XDi+rTuk%XhalGQdJwe>npo0Z(R^Vj=o~oMi`ijN4-$D^i7nB8pu%N6#k2?td zmYWdVp0WiC5*Hg>B(9`Tj7UGmW4bwk*IJa#ud2qa2vz0cI*bBb_E2F2oQ{7IflOiY zT@B-|T~u};2JW$;x&_FqODY<0g+zlXYHmwX#*C?{t;hWtRo7Rj+dQU-3qTI!Wt?QL ziz_-R68T_+Gks=oY#`tslOG5ysVGN|2j(NoakI$c#khvSH{b2`(oK|Zpt_=FVQ^7E z-11?R#ka`A@xfYgdxcpFEJ;g8QZR*AXq3dSJxRJ0BAtf=+#!*UJRSeBygS32j@m4? z?g<USvYG{D^$UtCmQ;xwE6my9Hq(wTpI@=Cs>WPKX6FL4Ym#6O<S?<U0e7U}whwcV z2a#fTepQ1}?F?@NRkwl#74;RB1{I5Ue95AE2*tPt2%ae&2MKdbe#PRV>V>uSxJPC2 zEJGuh{9DC)B5sDMEk{i-(WJkrWQ?jZDN=2Yby6veE3c?oVB(wPI5y#CE&-FZtR!wv zAkeU=tiEDF;M$6^Yfwo-H9`0I090Xh1#69TRKXm`&zL{}S}B=c<g~o=q<D-es_C;J zP6BmXVO$FnxBM2BGKtn&6v>Y1DoXrzmMKPDX9nG4>yaT<iz}ptD0Z7tVY$F2?q*Wu zaXWAtgPVy0wUvSTvYLezaR(+VC9397OxN68?M?D#a;Y59WkIsbfi9&Pi1~N8T_?^$ zO3HYtfAvbR@TjU#Td(7Kn?$UXOpSq#t||}k>Ykc~dO19}-Q^I>0IyOCHt6MEZ!!~D zB$$X?JaCzs^VFS=RO-noNp#80UU9y;^eyT>$<b6aC^WM-lM4!M02dUR+2w$RW+pT- z|1O0lS%@AGR8?bDkX@WvdW!VJdaCcD$wfZsjL`gm9)RplUA)-T**L2lQ~RP*wHO!( z%)h>(zLqcST^YJC5U<>ZOJ#ipDwt8_VJkvUC;{5kT)UVs<DZci=rvr+74()&FJJsG z;8s>wM>R`srl=i2=qEx)N<Zm5EJzk`Tsq}Fu!k8l^8<PsU#KbWfIf3<034vp7#1p4 zSvl1EqH6+`WmVN8x}s;N8p4SSD}ti)>Am{u6i4?2xR%sb)u0C(fEKF@1-)sg#+#_B zY6c+6PY@{{CUrR;JySNwlDVkV?yJ#*9%JYcuXo8M(`T4`crQ@`VdVO(z>Jv%W@R&T z0<*!yQmJ`VbW<9vD%d?%-3SMPVM<D-S5_tR#Y#Ov5g&xiU0^U(H_?%P=9qxwY)VyC zqc_D4@ui)pNunPWK)<4VkzoZvG%TuX7mBDJR0oeoU$kmrjd$@S(<>8+OW!!V$5&Tf zQ&C;DsJ3=NB2NzLD?j0ji50qGaqW@{5$$TUgot!?bs#>vg8l58YjJ~IfMbWnf^I=W zZD0}lrqwiEG3!!mTPkd+t&&<;hL8~Yg(388X+=dOf(+GEG}d8wP(f=$tr$|2rc#+Q zOZqUC7s@8Z4rK_%Ab6X5U?%H-N|ULgGlKZ%c*XUY$_lp|GKAJxjEbN^5}{c7Lr8eS zje{;|*dUZS$2D&B2$%4Z!T|3gls4a|k@w2m`qDJn6HOQDiS7Y=vy02>RIt255<OcT z8erxWsD;3|YTR;2qt`1&fzXo$(34ZBAlwCk07mZBW#ttCaW$eo4Vngi>dLC>_37j> zStt^ALrBbI2CCGUo=i&U;8qSbxNJ~ZF7bM+(NU?pXjZ^1XaCP;6AHMzwg%la+-MmP zsg(IN#$8ucQC@Lvl^AIo1VQFjK`>NTU7=6ANUGu)GiL<!Y1GNG%<@AuRX>81)CKE> zkfh5(a2W$}5_!%*0}F6bC8L1eq%6eQvT*)C%4wvxl8Uh6N1?K6DYcgf8B=vk<i42N z&`Tg?(#;S|HV0A$XCPxPng0KY^o>IYO0-$3j#4fRc@bjyt!pHD60-s`FHWkIs+S@3 zP5M@l;%pkopzVebtCm485k^u})RfJyhIXjb=aiK-)H8}z4S~wq`fJe&C89VBz6*qk zY^ZmS2SvPQRl&Osc3|c%FqDij6q@M?cs-cUz?=pyq(uZI5APE1IBHri-0^4DHb%mz zl)s+}o;ePRay(Ou=HQa)GjXCgwbe{B%!}s@#(e*}oMAv|@&$_hfcXL)K0(Gi-Kg7b z?yFGui&;dYM}Q#R=A!2q)@!hnq+=#14K=?EJsY$mWtHqOSJgCB)CctgR9z{H1u|-) zSDs$_-1&){dQk}9CWe=wg)^1Z_bdLgnJn@oMn<-L*SaF5CyCYfixYYti8vi7&n6~% zpn>FWw<%w~Z*okXLey5l@ZeJsGCL1OE~g{D9c^OfO61D7V=Z$~(VDxcV=+Wyw+{K6 zuVhm6b<?b4OsHz`vUy@zC|agJz4*$sn8^;jPLV=y9d@M<9Ax@d3ZE$gR)#4A=@TMz zPVq?|1|;W03V%^NsUDFKbM{%ixv{1cpLW*81O^qLdCuLNkUh)1lpAYJRY7s@^ktZ~ zRyR<~&Z;qgj%BL^10_raoOrA89)K_<niEXXoGliBzKi!UBBG|{oIqu$y860{=0klh zslYT#`ZP=3>vMb3^gk1c^0_C}fSa)(R9Rh%1uW*-tV@LoGis2sa$|j{ys;7MW=q66 zQbSdsTwH$61{NB<vexiyrgWnL7=UcxT468}dLwzhQ98|(<DYa+`oWwIQXxbDl7~fV zCRWzhE*2|Xmid;1oTV9%CB|dl!v6u5w!Ve$bfHU?d2r7M$rWe;W0o;rt&JFClkqdf zT1jF751oJkGsu#q|6Od||C-nypg4qDOqz8Q)x;1?%QgC}REA)tI!S3uS9(Sj^tvb1 z*2Fzd!OYLX3R(Hb#%(8;@xp%gK$F!kyO?4ca~3<oaakQujnBXOYEGi2d?rAoPih9M zmP@LXmLisJD)H&uj4s>%tHb{ZV%%MOol?f85xFthVahqvY6L%!K)H}2lg2^jSsDjf z2qp(~ywkHX98y>r4k@hoS%<W-G8|G^DF-3M|5`1=h@{oT-%)K0%;&r536U|X1{|=q zCdvG_pj12$pl-~Ca-gNJq>vBFFQxRME7I$Q6m2k&n0#jrDf0B4IUJxwWa}p~C9NQh z8Ox4fqUoAdTP#2E!WQgX40Z>Utnrmq)fnjhvuwV{=r$gu0Sc1iWqz54Yf6?RVun9y zJkQlOnRm%8N<42;hpFy#OVmkBxkha&5VxF%8N($lE`pmIuhiV*O4eBOlmkZKg5T6B zQ`BN<Ajo;90*}pVH7?c4ooZDuF~#GUR4aF?)tCt>9^I){<5P$VQmw|MTDeoL3Q|~& zPqlKVS`~~-@i;EkYD}t?JJo7zDyvkhv8h(>G*)9$c)3$;+z{`;!p6ox9X>@>TZ2t< z!RrFJI>%br<5R5)Qmw|OT8&Aya`Q-^?PT}aV<x&1kGsI_9^)SG$<KGW3i91>7=t&L z%blM;e%v^qd%~Ep<7rcRD2D%96?Qt-moKWqLYuaDF*gOARZG6lfBBDZxP=$nkj1`C zY|pj1uqW5%!VeF&GuzhCa)77r7`dCXkbdy&R%Y<zQD1ow8Hj#KMPm>z>Inp9dFRYB zObNWdTfUQ@hzkzTZ{SOottml8ehbU78YVU<u+CZe{Yvqfh4VOk-g!x!kF?pn89dUO z@&p1XOXN}YMCoMZ*SA~RyCm2qz9;VWP$n7IxB)M5e&eLAm0$Lo(%#70IpBw_?D5AM z$2dP!MLt%3F2zqJ*H#LC25-`18+XzZ2+Ry(OJO<ZF6dz8m#_F0DqnSqp9}fNa!oCd z`3>qwrtlF66c^1ZQl0^ZTyVd!@tD(?VOT0uYg%zzE5AAwzm<w&t%~0q#LvisxM#e8 zpWMi#EUoG7Q~dm@5GKBF_MKcdbV-e0vOJf(BmL*AdePRCTpr2X$q&18%M!NM^ftji zpH-?*J3f^Bb|Srv(kbabR$axefT|$oY-+gZom?K-@XrTFm&7yYQz_4@@OfI61^0=Y zAEp;;w^(5e$;|)(-u#w$T#8=@&dc#BRs7n)PdS;z8}X@F6sY941|_|<Ja+d>d-0J= zyt)R<dh5Jc#t+9h7AXn=IruNieHb>V<6&TwwQSJyQ>Alov2hdf7yjZO5*~|p{yOpd z62I&5`>v1p&SSVwi%is7`-3@JM6+w2eZix&=*9cByf3xAFW@8e`?ZW`v~Y=Ce%f)~ zX47}&>3?R47XGTx@z@u87`hf6%!Fv+Of9;e$3vbv1o4+noy}`i`D>lchFZpJd&1Tb z5ZJaQY*!ku&0FkOA_8X_--T!RMVA#_S~R<8)=aJWgIqnlzi?&f6)hqJS8MKY>fx-M zr+bm1A`W_Zo8Eb$$ZDWn#Mn$b#25ZlYu@ZKz80^C=jPb`;b4x_9}VWXeBr%<jZc2_ zQg7~b`olNoxb)7JoDPIR+0&yfIo)`t-A)!H?eI=J@g8o;>B74&GFlj$w}Qt5IlJiv zUKv%A_Zj4Pr=8(-kD}w%E~IlRJ;Zm~8FXwX$j_zdat$}o(axaD#(UAWmK<K4AYR<Y z%NX$ja(>A|kmH><E&Td-za7Ki>P+^FOz)+p_c^Bb64Se8dM`BIBgkwm+HkBEoq3!V zUHXd1>zlo=tekSpwkg>eTI7a8%IQ%kA*U9e*QG^<YLUWxEgI_T@7C$N>4sx$!Ks~I zW-w&2p%knZfK``Z74de3r_9|pWln}51{n)Xi$1(o!0nF+P{c8B-2I?z;BO!{472$G zxNmD-gZ~*?^OoEzi{=*1E4r#EFmH3r6Ppk#h>g|4-j1G!$ObQQF;n8EMV5Am1kf?b zz!J70`{1xnkKUcb($u3*ieeHz^vENkxZ?s1GsOg4)(L`y>^+$yWD5k8H|0p-20!K} zSy70EixEXVa$}B@g)&%J$0Jwi7*&k(xBvU}!)MS|GOBS+<&&C9i#AV$qG49zwM4#l z;B}FF?ZzuL5eT|`(ce*P`J<2IG$J>j;srduaKB{yPwP2fc<EYj^M$2O^?BY7-pJf% z^z_IbIfaacQGj${Wa%(RI!Ixm1EWrdI_c0YB1i`&gbviQU?uAZ9hfXStO5GM9|;fJ znwwy<Swxq*G_usj!q3wpLZNG(zF@W%)%vu&ecIj~TJxKITE<2#93eNEIj9e+xuGW! z{6L=QXn5-OMJD<Y(tLPgVtnv4qYXjr0e4zxk;XlY%IRptdW}X5@lcHz;=x9&SMd{G ze4c$;xGVI87V(mOy!;}pWTHi66h)p66h%53QCw&8BuZ!?PjpnCmadgA;aviaT9v+i zTlT?9l!6}q9Ic$DTCE7hvD+}I_Rb#(+0AWUr`|bLwRuzRV1djswU0x6;jdJiXGolC z_E5F;sL%i*mloboijM~P!WAoJloKqpaO)yC>1f!DR*aei5o=-vIZ%t{4?m)`&OP+v zk8U8f&+}Dqu47aobm~kOq_YX}(!x7bxYO-g>-OMC;U0!C(HQzXcCup>(ly1Yd9s5? zvxN}m!?Z{dtkA4n?hN%pYP9g?&>E^rs!gg-YQupVQlzX=rOY6ADe_z(A9|&oct;LU z1OG2+Pm6ADWn;c3Lkr(ihh#Wf`P~)2=Y!xedgM`&pk-S{V-Viu3;$hYuP-vzH|bF( z+R-wcN-es$-PGIp)bV2>IhBr^T1!AwDV}(LOpjjG=nsFUH-FHiM;>cJp2XXo&J`;~ z9w7qZ%0|6&1zq`|_N|1dwE4pShrM@!kE*)%fF~qMRP+prHnvvBN-NYp5(Q<7)dUhb z2WBveShOM_f>3!$W)QV#FbQxxJ(_#HT3V~6?QKij+iO~@rL{l;NTS|qu-2khrD~Np zRuNRFBKiLRwf8=AW-^0ly^rtvdVar|v)_-k*Is+Awb$NfE*8Eet7cmBrRZJO4Rxy# zu?9t8g>SXpof-j_v?t=Pr;g%muK)|sTR$WdRqGAPS_PujTOV`0@q#9wWCMftVY=tw zi{qUWO~flxA9I>E6JH$f2#qfZ|0>{%JyMVVW~(KJ?%LT|H?pofU28Ah#9oEg^Yxr( z(oT>^+aLbTKLLipGCo{&7`IqtLv`X!CROG_$K8}U4}U#RAsOC=FlFB_XEOy(F1>(D zdO#KknZpR9gB6TyZ}N(Se-H5!toaDMq!8P?hv;i+hgY!&Yl$&Bg-mbTZQ|@k0#4D) z!DyJ{ozB^*Qw1c&_L3OUnwahXhJ1tV{UTr+Y)`0&&VhmV7KgZpgsXak!E7dogny{H zaDwgba@>7R{8_8{c7)pAX|^|^+%(zouLl}5;5Q*A1tXvm0r*WAVFGLf;5VV(1WZK$ zeiLSyfW@}ouvmN6wMsSjsMoD4;WII-Rg8Mw+Gb)hpp@4y2H9C`yU$A6guCObHJ4Ic z%Hm%juUs&}aRY1;s@=clrsZn3TFu`^sY&n0oS{ko*Bp;z{LR#LGh5qAYL+c0r|$Td z46ZhFD_gz^X>L!y>39in)1Z_e565Tmf3V<t?O;rR7$?A{=*(8f8vr3t2xh{c7EQmN zi0{BSr<XgzY1ab-d%LUJO(P_5hy*(R`T(WiCYCwguZdY2aO;KMc+wjQGIL3Kzg#UG z>$wOZA2Celn-a@OI0o$KdSVq)WwA;xpN@BfVAJ88kYuk#?O;3`GyO7{PMZrfHQYwy zW{b4@hM00Rbpq+sq%g>rOaC~&s!~Odg7MDEr*Av%ds3Q~lpVJYqq%l52iads4ln8d zupTeRZz1;v3fL_&wC!q+-RW#;Lj)f<$ysS9SvT!mnRT{ioh!7n#=AF)`s|jsL2yBI zXLO~4j)7)9i>n(=|7yJ3B&pk(aQ8{OYdoJJj@LrA%kgegt=w!6eZub8S8A{S*-zDD zTX*lX-AC-9`xappUZQx<%w-g&1~|5V+(UMJYidF+eFi`0xIPR1ApD%;sVwm)g`cbO zTG+ytcB{Dq@TjYLG2wsNLZ_;pmf;G`2QLZUDeiXI-k=i_UhN40L%Th++wRy?Dox+K zXn<X!c(cr@Gg}+JfVMy6#Jf_TcKm8^mtFSmZo6sQo<vEz?IL?#`GBGUo9%Yix-Tg_ z^6nLwl{}k;t_H0%98{#Drgu|Ke3NzK#h}7~alL@r7hcqT)E@dLyQ3E^1km>_IwIlC z=rW`;b25DmC)$4520PwCZu~s7bAwXlkPCL)+oTwOc>nIg<E&bl$L;H>b0=}g@zxU8 zu(%|+=%B*XP~gLAh81LbF{X@Ec<+tms>BRL&7v6?sWXtlt*~33PF=3Cj+j$V{_Z2e z7xMqCAfO^=4mK?mNEPc6BlUouZ88*R`~ib7<FBM|BVn28mWMyN^keC(t8qVt<AQ_) zYexb8zkitZ-{f?H#4D;$JGh*V9C}(dIN`paxqsCccM23<S7152AqJj*`>ucs$gb~h zOBaG27sR-8c{}JN7)8*l<s`@m$!fhML@IZeD^?&}NVgQCN&j-vd}Pk*y(C0umUY2j z&NT!)`5t6U`akBvh#Z{jlB{z%L--_JSv=7su0TjLB%6jId>nT<SE-uKvY_&<HDAlM z;%j+U@3ow3n^Jo%UtscgE}xZkPR%+eWu5g|r=4|H8>cs=-1bTn-Ym@0;rIMLI~&RJ zx|?fy|A_FPhr>M?5X5P`ljRgl6(OR6vhXlK$bto>%?*`?wb0-lfZB*6R@}A%|D;;p z&x0Zn*D7%<8Ry^2gtmWYrTBh0iM||JupJ>`Ibi`4x@&jHYq#y+%hIH=&FxmpQyBJa zE7)y`A_V;56aGujFpxJB<9K7r(WI>?MAmzE?KU_$|C9<U;jfLp$r{nfdzs31pHfBo zcW(PTy%2UZiSyS+-eFR;vSBiUdCMl3NYfg5o7Eo>&#Tn^;TlxM68wAH#Pz)7NV=~( z?gNfD8PxLW^w(|ExP7)SQh@FIlF@G|N266`UJFaGu}CAxHfrk5gNe1adk$3EX^>#3 zK2c_Ss=wp*cf2&F^_>K<?cL8=pi1g(;^aV#l;mHx*m0k6n*P=ZCcY7csYIPkD_Am~ zgnQ*;Xx<yeL+=k)OIHZVRiREnhPH)@C*Aj?PlRj2eJ$H3$>+C3LVaQZ=#vaV-#*#y zX^vNirkXy{4K}}cpVmsHp2jQj0V{XN2;UjSu-aZrJL_~?7)Y^l0lW|^TlPqE*OoI; zQzsaI)v7?iTr1h*&!sG))yK4qY0Yd!k*b2{AYz&&SI-5rd>CZzvEE}F6v0EcC@>xg zfsr&kBrwVt^l-l}^94-Eo=ZSWWnwB($W&rV4b53P)imw-8M4EhS%g2J7?E1a&6KJD zf=UIP$^g%FFnyHi5fm>-gI;A$WuHH<`}}E@pXd`Run+dDW+c>LpaGKr=umopZDme? z<A0Z=H-`~d!h!)JxO-x;Ssu~KZj=C$T|`bmf?!E1ARj2QDJ?QGf+iMPG`CI=q%X+7 z=g6O{0cnhd5%L^=-D1u#{~o?n1^&7b<ZHZp)a%w@)kk9Tafnf`TeA#=zfL$p?;iEK zbwR*d`0G}vJnD68z!sr2VZyw7)a%yOCQr@gWsPv7omv77^dGtWMANIYgqe6Rgr$%+ zlJU2!W`2n{&>vYXSBrO<7EoK3ajo_){UA!lq`Ma~CMS)7UDBOV4h1rHzm|k_0FJ*T z=J<<Z8kTF7taqQh{M!SO&+(R#@u+cI__8~;$Kd2A-XTi~v*6vQc!t}_S4d%1?Ntxf zEc3a#i-Vo1S=Lg?S7(b^>>-3j5aRfE5&@wnQ+TM*8S)khDj&zaQ_^*|FoA@4_esdo z%{og$6O^PUMPkRQ(TP82HJ6HBExpQs9TKqZ)~(1{Gcgw_pZimwPXpknPy2NvY6&Jt z=kgU&E18`upif)QSU%9BL6??p*LpS4r%{(9`ZPoq)~D^>k3Ma;=+n+UAbr{xs1rs| zozSWDX;z?4xJLA8b&ZbOX|<e$2AS>~+L&;+L*|&3PaE?!YQNkhGf;*!b6kGx$)Q-= zE2MAB0EQb4IW^#vAT`EjjnAAU%N&(zyFs``vq(q;Sz3D2U__pihG-R=_T}oYxIayO z&%T<Q%miv)hk*)te*|yR`w`J6>8~UDB;$Ln=4A-Zk&mhWSw@8YpVR;B(fS|kjHCDU zRQ~7|tW)#kE;bk1UcLkt(Cua?$z5uaEMqJm$5RDWJKoKtkC?}#k2XYVFv0Z@RUZmO z)eVk&J0l(ME|NtgC0V5Gm(=uH$$vLX@CVrcLEWk(r7wWDUX@RRT(l{S40K5${SMcM zcW-J^v@w-M3IBff9V%D$9Yj9>5Lhe&poDu56CuO^2m%3+ikidTsnv#FPpIEz4Xk^y zMnpfy`>p_WX(#h=uVkvxm)iby)wS;1yR2y4iyAN0ZpksKz4`j@1KlsdyevnPxM7`x zkEVUV?^<s?J2lh#N_$;PuXXe7By!$zj&Z`fh2xj>ztUUl?rGZAABi5UgE9tbGjpJx zp_cLjSY9NCzA)BLJYN~ipP5#4b~pa6+BVa=^i}-coM{bY$UuffXYasYRX7R(1FP(& zj%tXsd(xP?Z$rWW+V$+lANaSH_MM}x=%B6R`~hEeyg?79K8Z#=UG=ucr=8ZM<96D; zo9+0H^sY?*)~dG|?KHj9f8m+jZ<2WYU9z)W{-g3=A^$P?A0q#i@;}0E+Fb5{dUVaS zzVPIttL>(JrHc|=a+_Y-n;N~-I`ReEzjUwdK52LK^s}wszR=IQ@o)Rct42SI-@<69 zYX}&)Fk16F05a0^FcPsnbyaVV^#|<4)<|OLPOKL@t>}q6txI3nX$?FPP$;*1A4+G? zmJLqtMkl_@YIzqKF+8a`wi+6zskd}dZLPbn>7~+y`;I+yXX<pcs|yngYto<4i1P^J zW6_W;_&te6Fks-ZC_M(=d2jm9&?2V$XFgH&n5ut3HyY4|1`O!7dp9KF?<{;Jm^7`# z7qJ&o$O##bh@~{9>`w@vV9hfXdXA7*{5dS-zbL6{-%(?=-NIEob+NOwla2siYHsSk zx+MMgo?js;%hNKx(|gMhBy+s=F}w`_k?<R^MRA?lBFJA5oTl~65=mW!Tx3?!S-qLy z3G-@uYGxgW2@&vD;rZ1Bc<A|MH8*g*^T$Q=^gFh9NU%TYV14Wvhjfl7dJe7N$b1Q{ z=gdMoIN$SHUoDXA(|T1zBEHRP{yBPql}zk0JdYa|y$@pFqrB<wC5s%p<+0rTfi1Q- z5P`vd>Nsqk9vj+Eg}^WtK?807Vzf6A|BLNDoL-$7$AXT)9$hFuAS9V-&I3%QJ&5gL zA=UZMCqEG1YPB54KD)P&ru9VOmi-0c(zww;vI=1rt8#CBH3)_^6ua}Cbx>WRIDdHe z@A#VBUiFw+ilNfRK35t%P{5^k){!@kbk-p;l6Th8(1&l@<siGZt^r{co^fd>c}5b} zD-!;U72)yquB)ebbUD_0S{^}>&<oX}!h|D1U-I@B50t(J<JYulYA{>Ym!ol-iXScw zZR)_Jgvuz))<CZ;X)=e9T|rke2MaT!4Al%!Lh=pw)0$p|5@BDBcb`HmS%RHYmXTPC z>N~#KYF>>hA!9IXr)_<9Gib}<o7TXirgw6??N8h;Rh!mhomLBzVu0hjQdi{TJJzQv zZ7BGD^XI_!^LL=L>D3@3QM1_=o{yv_?5y`|cGO<lnbVtnzs~k%4|=ml0UKpunG5Wf z!uEv~ph$Jz-2yd#J(-5&^uO9`zWpsezd0LRJdA`Ub{qW?Ht!VUBI_UKwQwEo1~NGv z@8oWkyn{^C<{xUHnVHmZ;W&Q~tk;g)LY~JVJrRBPEmF(};&)UQy+2ad^0(`qoi)~H zAK;ks1N3H0yQ-c}_)EG2dg^#*VfzEA>PXRHCF8z?RYHSlV};ZEd(i);O%)-Yog*I5 zL!svvlK1V48()?F{P*C4-~!4I))Vf()!XhL9Cx=g=B%VQGn#O>*+cgb;b9lja2Y1H zvljG+&k3n7!!`iMuzP3>n`h7DxZ}$O2KlC>j?&SAqe;eJUo_i{BzRs{m$^8JB9rb0 zXXrZ)hCdm{nD23{Q5(RPSk2SGFd-=E{yk}pddLBh2BI`Q-`{H9OCq)VDcjv=dxzQX z5o9au-YzV!>DPLmM`TsIGZa<=+hp$k21`623ykd5A9p(T_Jb^eB438#$D+ecn=++I z_tmlfnSUi=QJrzmDR<n1!B1>M2Vw6z1}Z)1$6oGlyB!#Hm<R8EPB{bopo-2VzeP^N z?(Iy!Hr6lO<23E*Z{2tz`lI8S>MGDJzM|@d-Fo_B>NP~YD%A^o6B)P-d(!KBo@U>H zK23k`zi<@vZ_<DM!@NUYD33mr#}~@u3+3^J^7tYjhVt4`9sq1LaeEy)-^9=-oZd&1 z*h_PFU=I&V3@p`lrao!!-m09`_l>mOc+kK0^lOe^wgXI4|AlqrFQmOys?{H=e-41I znCrkI6cFrn;_a#Jj^JH~wxdgwbP(?{Tk_}E0r69^|Gf0oA<!W^u+JeT1&T?ke0&k+ zjOZ))xLTm}!)~Yrp&)G+l_@YnskOP*hz2;_5GZ}M3f5<igx|7NawyF@)N?H0ebm23 zqYcv%IH3;~NmwCgugH|tyR)38PQ~|d1EC3&9St`$*YR%_HYwg^wR|4SIJA+>Vxpm} zrFK*%H*`mcalGrXs;=!~xmen@9jofGSw2y3pLkU&)XUl|$!G#pebQ<u(El%jFX1YE zcb>LfA%rNSM9XdTQCW@oz3;CvKb$Z;T5FFFH`--a>C695LIcQT8|(mN)&LKZ{(n;6 z2<>w=;(6#nZ1=X@@kBry(rfy;8HSWe?<|<9rmx-KtS~J6`_2l-g?&}2-V*^^S1JZq zce05Ewt1j_Cr&~ps^(JC@?r{<>0Y+aHUn<9oCJ4$LH|I-?k}j$z)nK|0D>6{h(VT8 zm@N#Fk<gMa-OnoGgby7);uj>`Mmv_vv8qsRE$9T9PtlXzmVgx=%=*v-&BapH7I?(s z&-lWH3{r*U&s2emo{y@$VExMB55Oqe;P0{$XG;yHL=HcLI0`0^G2cphcazyo`nQnW zP)(4G|K4gIPLktN;{VFikj@isvORMwc&%v5HYDr086y+ok7im!C$FmU?vza*Y@3k( zHnNTTEQAkmT#DdAtu0(%C^j3jA}^ngscBj}0F?rd(<@W86z{zo$pDY_u!ecsm;|RP zMwK@%J{CfjGU^Zm?aJQ@3(<T(vJ2>X?t`lpC9<i|=*;M{nm>&+RqSN|Pwvf{a!Q_4 zrM9d=mAgh+(XzH(*2V4QBiA_Iu)$J8>ToGNa~O)K)m4GrOs?5!UDO3*4?<+;C@2%4 zbQsbBI8G8c!ZA=B4s<n3H<BN(8+k9AhGdghSvOMN&J1mp!c8&OMc{J>V$H@9D4A#4 z*1UGf;CM-Dw-X)!bxLS_Lh@X~!$?*W8$$8evV^{S2;)+N9h~Ip6Q4wV+MaGU?CGG3 z*@`wN;$7Gkwp#XLi_jnvvFA6y9;ja+tTzM7P!W4RJB6lM%@Yv^OCUm|>F;F?WmWB& z`Wm;ZrfC}#hFyuF?Wr?ue<7B#(D^8+ZpH(0QK<he1xj8D&VC>R1|Gv14jmcvH+3!T zqQ7YezYNe1*Z^VRVd`%-*uCvAAxghu%&VIAlrBmtu5@pz*7g@bb+yax$WV3l5>!`2 z5ma^ve&<C)H6mc(dC?l;L8Ry3B$4hPrFJnK^9O7pKZW`a(bXTKxUNUi8B{L_-n6Hz z;fSiodQJvJv^;AXGoo)}ZaIL)WEP;ftw>l`)lTywNC;0PhHf6~U(!)2_=uj21I(fm zwuQRGkbw+|jsqy8M}?yhFz_hA73}6_=pXHPx7BhiaIxnM{OMXQ4%L!}FCRgDsmc(3 z(v%IL4d!QG_;wM#g8ZpG{e`j*75q+B5VwIJNSce!29YNKkzql@ZAYGPvO}vw{=)EO zY*rh(pRda3voIJkAJ$)l&il>6%0^rDz;w2SUntAUp8>h19v4%6Xk8oVYdc09-4HE$ z!v7}eH>h<Y{s*g>A8>@BWjEBL#JMU6VNZqN>9|k3589n&T`a--rJ9>>Tg@%-CcK+S zp%eZ&SZ{Z;zN)7oJ(WVm9LU2YU}aBYa+N`P+i1t1OaBeRQt3k59{Ma!T0B{ihYuhZ zW423jx^@JvJ;v2vmDSXV$-H@Q`cd1v7KE%fg$XbEHZuBWAt3!$!hJduvpo=q_%U#& z20_4r>;!$B1ld0IalIXh_!Ho0t(GGJRe{La{Rt}?$ThACAY$lK0br!Q4nPogeE~73 z_5VHn|5VU_@H*_j*C;9^-^S?DyuGfgX&Vk!)U}$0e&WiRtz6D)y&ni(bhdEUm52hZ zTpJik+rKTasc*VpR_4?^@NuN*u**q!UN>C3z$=ufh4P~QFt2RmS_g5ct_#*IR`k=; zeh6&6nfu^&(~?$cTEbf?0QVY45bj><EWB*5mE&c#>;$>2YVSE3Ia=#lUSt`cWEsut zB~@KpLY;Ba^>ddx;r(noSRZcD$dkoiF5_Ek-6y$YQX7f553#ue{>2*dI2@N;aBpOn zb?HNB{ex)rMFW7alRCJ3mu<zSN{v5YfD?Z+{SeLvbYVri`DiX}suRgZ+jF@<kWm=$ zEtY^(K)PS3p8X4ZW_#aa&l28m*t7JJRlS)n=d}+@9b|q~dC{OZxYKjoPB!EOwBspo z6qtFFHmdflN8PM^1pwjGi8k@jnxEQ-vqFPzfY$8~n326=(VOkR6}@ne?Hwf*?9>%l z7fr!@3@X^l3Xa<fQj4ZcsK_QQ+leM%!cM{pdr?QWDVVuYEE$y$MDXs|m;M%ZYm)I7 ztQH@t9NU}Ri0#24=rJES$w=}6iFptMN`}Yw(pYHzgA3zV9_t}$q1(~J9Iqd%$2f4) z3!`z-k*IcyG=W&f&xji!@Qa}+20(xX(Ip$o9sh!jfJ9j}G#(qwd`G9oqW|SmssLC@ zoxuLH*lr^0$B^n!oWhf?50F%4th*Em*zFBW)E_-YZ$W~Z+R^jP`_ezCY1#`W;wH2M zY!2}csM-&P1Zc(8P?BsYbD(FUwQBFfrai>ILx_CVCEZMI4f!*iTY-cR3ldrv9f8Uw zS*+1w;*0ho?kNBX(SJajE>taNtEDDt)^ts%CjDK&H{oWi=34=&8ozch6dPwgfHeX< zwb5+cFH}G46@)e3f&*tptgZ?y!QX(v0e+Ew*wj0E_Y=hvCB5XKAt!Q?v%SjH5yCYK zTbmg$vo-4jfoS8Xlx-(2*lI`H_SAt@?^XdPr`AtZ-?t!b^td+w0nQ7BvRG)MpL}PP zFx;19<7`h3OCrO-<9Yz(qn|?(KzR$$4^Vsv`MYdSY?+v5z$+|zP!Ikm4MLHVZYAns znNn}Ifhi^pkQ4)$!Xri_g}j9yM<Ceb2O!D{Yajosb>m+!7c#^1=uz>BfywchfipNt zAm_kaE71_MS@UVVKBDR5{INcI6IW)=&M#k`CuCgeBw}oz_}ue_!rFI(1-Dw>5FuSQ zL}VTPxn}KILNMN*7qIu|kfJLvlD$6&?EQJI?jzWjr4TZ7N2=O!x7z--!r&YH2fuhO zdC-rAcu)om!~saM1my2|$YW#rpv<vV?X4K$0{p!mVLP9{Ukv_!pWX2q`TLhKHSY!9 zqp~9WJ(rV6&#g=o^zVT9dsNRkgX$H3|1pv=Wshh0`!j4mzcKsg@1-%q-am*2RY9}& zcItfa-PmEV{jdKW+<ha$*_(5_@%NQ&VE`gzAVc;8+v-C6y{cwhsG5(U{14908x+su z=MQW@O(E~)V!FDdjjZHJAT4VOZ-jsoS|hXwEPvQ;E6egzBjXPr`&|-Dt;@;Ty$nLL zCRv#y#6rsk>qEvhYfp0k&Cu$kK;EH#X96aG_f6_*5=vKNt=NO1PsSgznm;R(?#RUS z%~fJgf&GrovUi9XH34^@x_%s2L9clO8MTCeDHy<A!rnh<H@!giK8x?5TV-8j$=|Vi zJM8$w>DQd5cS~tI(#%3Z<V-wVwO!?sRGiVQvqBZn)KO-~-&puxjyF~;?~a1}71Bq@ zd1uEP6-~sWw71)!<TEV1THSCS`T0%}&^A~t<Y#+EVrEIdPlW@#KQuS;1oIWgtUJqg zvZXcNZxw06Ibdx1VoAPHb$<-@>fcq}ci8>o!}KiZ-%j-3QT>N_)3^U%g-rjIQ~Ix* z(*K>{gwX%Lv;Q}8g{^u}^b;C>ET6HjA(q60v9%%ihT;|Uj?Sm|2L?Z-sR8_+$MVCg zXL8{s_*HMa`bLTOv1b7Vhe^V_A$+;1Nvjiay!|=DQY8Ez2)4Q}n-G~rVj<>mXZ{Wu z4|Trz<7`kcemVGI4mW??@yAECJeX&1l8g@<oGx?RvcYz*C-RLtJz(wuNcz`P2^;LU z7@cr1ZN*p(v%lI{Ex>3kJo`80S!~o;_hCD6qrD}wy2P>SaQ?*~cQ7c#S?CkQr1sxJ z+S1#R{?#QlZ}(@atD}s{p34~iF`Zh`9*?F<$u(Tay?T&~iEZ$%wmYlk*c0C5*T6XQ zKXOlr?Wb28t9r8wCTCE~218)aqfW{QAMn4YBr`yUVaaM$t1%jBemZ?bMl{bR#1w9T z6dE6+Z=O((EjTHs#*>XLm>@QSLOI^;Vosia#P4VrVgv@}I!opxp7I-nQ+``$I(ZdL zC!er)KVdh$gj0TxIPQJAz*Z^u=9PHah00}oxGC>jE=xi~SF3W{ij~Xw4^%EoLb>g# z+^%BfGX4XV%aTy;R#on{LggL-_%dF~RRAb{eDZb{!3{+6=2kN)yEo~QQ&!TL2;*1| za^zrC@gn;orXKyU<%8i_#CjMXs%OBrjKL{x+|stMxN(cNuPg!?VtCawt@{pWc4Qs@ ztlC}H-Mc#LUW6O7W}-6n%wke2^Le)mQ&nih8S#N2s0*Y>f)1|6s}ClzXN(W^Y(EfW z5$2SFwhYmB&$POl7OdYek#@O6!)$0p(>92NQoLbs2DawVJFbt4Uk}-<<?`p|{tva~ zUc{bN>{YVH*)7ckx#AZQYW9En8nj#tdjT{wr-@u0L-YTGw|57qWqP&Pvt;QiDX2gE z&D%H*2e`wQB}U=)7<wf4r_~p=kLlOPKIZIP`xv0EzV8R9D|QM3h5g&dTw&T|>|-Y7 z*vG(ZCC5IdMwpjE_A#$=8i;+2cbHhmlxgdj9X*dDDr6ng&o<UEC(t_PSZB-L{TatV zO{P(fb{fh!W>sP1m``VoV?yKYohH^XXpdOO?0{{@8f6``3nkBNWjuaYmGQ5fe*^dz z<=-IwRq*dP@InygU=Q<X&;7_}>|suAWq<J-U&g<3{te(?lz)TxSHVBz=VlM=Umg|v z7pho_+rNAwWdGug6zdn&{`T|^=z`kB`sEBv(OS^G58D31_Acv<y$kS2+q>*7YVQ)Z z$D1X_EboO5DqRD0b(SAOgqg23jcZ9tBB|ryY6SfO=~jk7!6ttXCKL#qoa@0cpmLCT zkRz*^sxj<xlD=Sm8<PNRD=tO~>O9JJ7?Si4&Ueut?BSHZEpu4N{6IGfS3<B+&^lvh zX=Cc*R+uoOJxZ`LZ_|`Q^1}PkM;uaYXYD^WRslROgiTJp)Ey4)411(&U>^}dJ8Hef zm(-rJMy-1|;5u@0dn%9Kh2Uk{^@-5@_@MMKXrJTXRn9e}X&ujeVJHuSug=}uS=R_J z7sW>5sMR^&LW^jPRlB>!x_fshhtRB~I>nV3nQph5kHeBv>uyt;{x&(h05f^mJd19h z$O=vqdxz?psF~2OLtOd{hsYyCx|F<1!utuEYJ0a)i3bf#S$ERAc?V*!Myr@#aEWjF zjjZri^PfQIYG9XdEla`$9rbGTZxo#4{KO9<<NdN9o$DX>z488_?<eCAQ~(nmsjld) zj&&yE&s4NK@dqoOUNQNRWc-g6PuuZ_Djr;sd^8b%w&KBLyrZrHyIfDyRXmo6Z>Xzi zuYS9;#A;!$KUMe0U^t(lbMm8&FTjoKG9tCHCma6)_XBX(#WvJ5K3_umgG~jhf_P3K z;qi_pEK*wpTOXF;&(1&V;-jpKzgj*Ms(1XhSQlSWZe9GvnbxFN@OxpVb@Ai)Ju}l9 z^b}MsCs-E`v@X6VlzJ*s4=IwmLMf0%Wlkk>)M;wpo4y&kQf{)ev_o&cIz6!GTYy`( zJylPGf_=;J6L$hd27TN1huy^ki9?^$>pRq&<yvvv1@}O>AA_VyRp(BqI&lc+5Ck6@ zN^(r!B(TqHFB9<<nq-h(P|ruxKkTv466~m86FA!*3~pOw7nJh@mIh_QcR>pjthqIh zwgx6zBIzTr=W$jxf34dN9PV`6(W(JA21P*sx-7o{Xl9qmrUy`~B(+G{zG6#eWR3sz zktK$|!G;bswEr3uMP2Ug`DIbfd%OECEB$tm5()3hPl$APHFflB>g)%Y>`Sk5dfV$t z-c90ILQ4ro$z0M^Ve}*U^uUO)&~FsJpQ~4C#zD3qoLMbj-wQ3r6#z82NzO3dCkA<M zCCC_d;6Uh=?J{gH<ghs`AFd1xwU#v6esWd9=Usqlq&8;ibt|D!#}<sfEjIrcK5o}C zN7fJKF?`a;f|iSQD1QYT1-(!TTSIN)_FDHaNV9Q@xc-Rbz%(6r+$N;VG`*8Y|IzYk z1zMi9EZa}3&&anaJEM4eNuQkfe@S~4t!kxIVnp1cdOyXXp6_M5mMdAC4pXEyeb?() zQT`P6SwnF1q2ql=?(R$KyZg8emWXe(niCjzUg#%qb?e%wq=G7~uAQ4K*bb0{*tZR> zKZu^#jXx4=*;h;A228H%<J_{>5VRf6r1!hQlnoK|x>yX!G66b15m(MO4_=KZ;Q_Xf z^9Dd2g)21?GS(gN%6M<scBbGWFy0-uU3NrXNw)lryK!Z&r*I7J3w7;_j<b0Vi5tDT zF?H?P8fH4yJQ&8Q112Z7hUNz-FEov?l*)W5OAqw=9>k@NmraYTehBu^N<XOXLj-N> z!ahqP&Q;%P;n_0--b@)`CV*WEV$Y7SV~+O?=};ApdsSlzz-or=73^pZq$65}jh0KX z$v3bJ2Z62=Q-s|0KCnm7_cb=a9^v?qyf)JIpzevEW&2ZjK8PpCfFZlmw*l3Lgse&w z|CuAd*unjnwBQKwgd>0$Dt(9_#JuX3dG(q=8}ii4%R<=dZgl*6Wz*R=7u@-v0!G}* z1`fZE+06A;=4LH@C<pd(Q2;HHx&nKB3IB(aK=iPw9vTmrn)t&TP=soQ+o^Al!^FVZ z^I4p0CHu^D1B++4PZNZ5eNCMeH6!n2JqzzfVO8PwU|5}{57eU=sL-JHGM&YdnQT|I zMvF!s?|Yx&4a+(E4^WjK)FCI6R%ebzbI^{)%z(^5ajqpmq~{rIbHSus-x6jr79L+J zQOzkLfB1DWY%-V{h8rCZ8^#_eb2T-GjX0uJWbDq%hn0VIjDXT8Q3y)@@Xv-b)##%| zdcc$3ugMu><C2VeGQQ7h{t?EX$7+7gzUJ{q>@bFGYfFLg--KHbs<V7Jl)-B7Ob|6t zSO-$M^9whbm2h=X_n~5e#r{B5=zdE81?tjxNy1;i{eg|R1J`jMv04_QaWr%3iveoP zKE&WbUdkOmq2D}zqX&<}<eYK_b{N4_E0hug(vkgB4k0!JtMKk%K48g)@dV6I4C>2* zt{8k11fwb`;gtUB7~95$YjFui9_h#&p}M55-W9|%)f>Ds{D`z4=jE2Z+RZ8CzH1c5 zSo7Vw?dH&T`U1^Ah4lIU+St1qw{8Dkx=rDBI4W#hy*+&vz|Wcr>U+wXL-Z*}Pi;yT zv<)q(J>LNCiB<=@aM||ogdk2rZEkwEBt6%39sc!0klf56(^GKPFg&jTvbm$7t-lTz zgDr}xL<QS`axzDS+K|&WQ<*umNci@-FHz3Z=T@Ka8lp*T;liN(x(eLKkcugKj*W@! zwtHQLZjZ#JUt#KOO>&lAE`prdS}zIZPxKe8|G>}BG`%_r_TjYd#&)vRd^&`~tg(3W z_W`^<mv&msHzF8~#n|Eb-@LyQdpG+22D$LeoT(imZBnOfc^z3@msfq9oMYrgjdFQ@ zw*U;pL0_J4d-u1ZGu#|L68uFyOvc)HAl6T}_10G=F{^7Dug5+7lT>MQP@3c4$CJm7 zf4jb8KPa=tT}A~0w85+K!o~dSw&BgPk9L-BUIjPI*Yk=;#11B+sk-0RPNy$ivNW{n zF${i|6Gj9~d%^TB!7lc5sn3M@ONBrBUQL}M{fcI}r7&~Zf-iT=VbZUL=EZ6rC^Cke z0AMQ;{wf<G)W^g?ivr;R<aw;&-ae#01`9RxF+Ho$Ng;SjEWreWhGMnVd@aI_7{&9~ zfjvv+BqKcScmFRP;r<`4Ak8^sZaU!jm!dz}{Xa9A&FqqU%|=dMZMF1M>j$b|Nk}C8 zwtBvB26%di-=^pyAOb1^I}}@6<bK)%vsc(b@T}H0^ofyk0g^N-c6_<q5977U9Am<j z)pd<|>+eil{8NeKC6St5x$e*LC&y|$xzn(>t7%V(wfr~4E<tdJlGw#D*S5iu7{?+Z zEh;p@WypSAHR^-3xTGt<K6m5#7z)s7Hscbqx<=Tc-GF7dZY7kVIEH;`Mb+EjIe_9v zBP9m;4M`2uImYb-bFg%Y&L051>Fa|>KnFvu42o%U+}gn-VAjkDMmDca@@J06`kVCA z)#3KY#MrD_qpiM+-d}J)_TNy*t(KDvzl7+Z0SB<9qlUcH>p-w1hseQxQW`AClR~__ zhEAu<JIvMLX0CpGzw<Lw&O1pv4Oq<Hba;N}^B<t!PskDA_i#wdYJM0?EiNGwgf;R$ zkK%4XcxbW(T>M0u%6qt5c;uMl(#JUdnBy9+0i7G=xkAE5o;xRXdj2lWU0)~u?01(2 z<@}-qH&ZDhJh|M9z^oYa#L(YX0gzYMTAcnuekJ`~1Nw_OSuUSJnNZ`60qsRedEYn5 zmY4Hk67T+PL?BXLoT*tww>vqnU__AeI{vTQ@dAss#;{&;0fUiFFp_IXb+KM!;~rEu zXT3HbGf{CuZ+R(|M$0-4dQb@5giLN)767@?0hHC8wuG=yN=A2jFe5?V{bZXcaLoOV zfEkoGYYHfD<i0_eJp{@dx^d)GwEn6kz3MVvm>q3y6e96|pdD2pR-jdKTN%)jcb`Ey zOuHWFiyCoAtU|#Hpb%;Th^zrbS`9%5fm%_x8wqbD4=(<9gA*3**a7P#RcbViBI_AL zM+EGk=Z0eA;3))y>%hzLa(CUIC2K$~-6th2X(TA*l*O<_SGQmoG=lzph23-w$z&IR z12PE=t09%7F%zkzGF<Dq3%)`Ck^6?zvjZ>!xhT8l;TLZ1*&m8kIbJ@BA*cX~VYcAR z5Ga@d3Ho8~JH>6*9A;A0fz(=pFoBQLp@yu=haU3CYL*g#O3t)iZ|4fw3J|P9pChou zffx{2;#_Jhaej5RfTuNViL(fnI0w@bXHgW81D9bgR2}Z?)N1IIC62Hl$`Yqt40Ae* zTjGFxDEZ&kf)K<F$L-(O5J#m_6H}~lP6){uW(i=B8Cf<|l8b>3HVPS~LQI_|n_O+3 z`7)Dex)nEcYltumS$&Pj8~dYQrp&B<O5_W$%&P%(5?6jxhD)`%_&Rs*9AC3xq=sj} zXEW2v{bgdL%7j~9b?)n?vOd^vj-FM_eskO`lh!tA>x-tXH)$(P+7U(5jxcF)Z?|eg ztZ3SpPOI((M{|qZyJ5Rv7_%2fDQDmBD~SDut-kJrJ$pzLtFWH48Mt$N*=o9r+~_T) zEz%fdS`o_By1z_})S2X-Ixc)yqNW9sX=~~$A$_0R-|~;&SEuR;mP~c6sO})mG>dkS zk*0&9-PD<?_m_#0DpSY`4Tw%Hg%Yfdd~5V2Sw)FbAN)h|yHpK=n5{0DkNN!F2&icC zEDnK9O?&#KJ^}if8Uk{8Iu?xMuL6jSxn5=%Lh5ruK827^=7fOm4Idv4f&ap=Uvv)M zl@-bOYgY3&F&V)dt-{$b-dDBCFz1D6Zs~8aVuPr^j1mt+iPBrxT`H36Es8qWsAjY# zy4HOYSGnDTacmn>v7h{&ZPmVEZ+WG;-L~o`t`2%-*fOlOAH!udNq3*sGLJHvKl~>P zLcM>xt{oPUlRJ<bDpUg#8%GVAHjN1J=vXR@VYa_yl^T+4YQ?+Fl>6PpK7;pN;+p!s zPM_Q7ozAks=rDxVOL0^js<^HEio(!`m6-+Ac24jGiG+3c9(#@cp2VR}ymKMW|0t8p zV4-(A9ejbY+;Ptw3_ER{+bTl<uDr)Z3{nM{Pi!G;{Yzj_3!OQ?TnBOj2lK<wBmEa+ z#JW*d1jjoL-vM|!^#zp@1;LP}bGsy0(?LqWAx>=bAgP{?W(DB>2=Nme8v4_j3O;@P z&?8|)WTxPtAGSYm=1EN~=GW^-C{ZcC-?JJlf$iPXhL@QiA<}62tLnc&_F)cIMbd^j zXZ{3JxHj~?zJg_j?&s6@$*iF;=iVE`wky=SW(^nRXt(i6zgmVM3Ctua@xnexHGQ2e zHeS;A&K8Eyi7Qh^z?t;^lUK2E8<(&6d#Sm$e<x$OAP4Pt{E0EZorf#+=fTWj=Dzmc z2PDtJ&<)~j`p34vwjPz)p7c$l`@IY@!|V9Vws8!6pM9bY=dn;rvC+uHh9aT4yg`?y zit)m*Kn&9&3jv@LsG$ZF&3zjLb7(F~GROTB7?#YD>V2R!;4?*%PgiJgmNo(Z%c|f& zAB+3x%yI6tGN;OpclJDYK@IuybBK<L7=7sd=7RI>x|kZ991DLnpWi2ap?m@Us`)tv z#(ABw$-Ob5pZW8V^i=G{LlX*YO(OgW+I5Y<J7DB0zPxpm7wmXvN-pD3cc~14(qHaW z$th)7Oy#Rr`4;RaU(#LI4M_@>?BL5=7u|p2MwNJ#O5Bdufwf4f7naqld<*uI4^~~3 zh*q<~Usn;haSb7}fpmWf?JSofp!lWzp3rXzQrUv&^oum;Wm1hl=<h1fBlNeOFRhj? z0@S2?eZAwKvjE9jk@|po3f-S~eKibQV%*R;n*3>uTAbjj-QKA~^8CP);2z#!zS!;_ z+snNla&a|QlNehufW;C6aGNko!z(728#beviryE>UyuBi2bf>J&lYTqDSprPM^A;w z(}*gH!ooME(*AWrWH1bqSZOwSKGDkYD!RWD@Pk4N_6v_nSzQkd9tG#~XbjDD)kXV~ zOBS;9s_6PXnw^BCRb-Ctue^^O-k&=_cpFL<z<odTZ*&xe3I-LVLHq3==^b`lc>@>N zc|)&+so0jlRw~XW28(d~+0@xOO!xq8v}O3CG<If|bQ`lT=xW;CCelcLFTid3cepZT zOkpZfyb5aoD~$Vx&QORM*gJ$)=56UCuvyDS0v@~=TZ4xitC=dj>6%q)fcG)Qf^+Xy ziLob(s>J=jzZYxx)vSFrzBdKN1B`tBFmz|FFRr?rqjYCEL1tE7cO!0=6)^j2R|IU0 ze=prZqMWGVaTWv3m;ndG4V1wF0%y|}DueD&8KJ1*f0*8<3}oJl41rb+9|X$HPp=;1 z9SN^(H7h)*jsI>-1dWmNb`F*WvETVQd9_^rb5RU+L`}14vH^dk@#`)@=vs`%X$--4 z;MCbK2RF+3Yp1eB{=GpS5e4s*P;L7V^j850rG2(QY1mUo%!%2UjnEXL;Gl6RCf|l6 zr>)_BXxow#ME#YeXV~)kK=vgyy`A<*UjRuXliy>L$V@fO-X05sT|pjv7^k!^mkT^V z8-r2G%vJ%xuxBQzfB?-hV-S!Tr9wGenM0ME0F?pA9L^Mj`1c7F6@VU9WucXWjf$tt z%C}nn*@^{D9qLqL8=miw(wYRH_(6AU!4RoBo7UjP2Tq3Y!8ZUToj-iwH2PFCF<M3g z3|h1@m~lt<PDO4|4iV;)Fm2TrQK%qkhbD5N5Eh}Dm{ZmURhHeiEC%Va^ehZQvSlgx z)5boIDm&Xf)2D1NftxARX1WI|X^1#>nXq9hX4@;oMm`%+*SKOLF7y65O}e3_SP9Xw z98QpIY_+Gmv8@3NPd7^K_~z-g@T-=DfCr~P{7_UaF``LPJD~XPWh>iG=~3;LByjhx zyF-`I3Ff03CS>@58a&&JWh7ViU@Gfb#MUj{L}Um_X_={92`<AQMvK7949pzEpmS9a z2T-cgA8FD9l&NHzQ~388m5@Cylu*9y<N<d1!;q(l2+7OjM+))}VZ?2kN>ufm7VrgA z559^qDmnS0Dqp3_SAW3yL^$wq$U^Fi9B@7n4*aH8m9LGjBJE5lQzcrF12dyc={HrY zd{g(A&(&L}P1`WI07hhgiNlp(^Oica?TyH^ig}B*%!LIkSwUU^1QnBfacmGcb#hsX zXIHKmUxm(}%Xsc`pnieCGXk5KoIWoQCA|iy%XV-76Wsb+2i1BGX#35OPE|_J(zgrr z9r6E#!yPQzPjAIxR>_UcB*!~}mG#H%c`o|4ejA2N;y_Q;mKTp?kE;xhWKS3ZZ>-3X z?1Vo(W(U%MSGU#f99@oLK_jsu;N^~n*5U-55>&gjn2af05e&sX4A-wOSB>gDC;CfV z$3?XzZh}`||J{iB(|6LUzGwGmviwfdtJr3Q4HT~&YI)jf{+m>e+jQ`eT<gAmD9zdO z+TfCeRkskkWn)W3=ZdcxxXG@}0FghK5->>kSH^0s`=-Z|?#s@W*J~PIWTxweB;!yC z?Zl1Wf8ys7KIQo7lDg&>p?YlqsFrj|Pq3$X$TcTt4wdp?K-%yLwb70BAiXLxUl!y* ze}H%}w<z!l7I-2|xltafy0Vg#5w|&+A`f1CNaiy$ThV}q69DUS*<^vKL(5n}6xe;b z6`A8~_pA)Qb|*ekMy#FMLwdRgunphzuI)Q*7`gu2ITcp(e9Vn}egXEUjn`CQ7xsLa zY&F33C{86|+ZOFTv+>%BNb2L6VS#>D4)7!9i;PJR-CR>qf~^ee->NG%j}j-A#Pm;l z4w6||1#EX8QYRu|<2upy&O^UWm8-^KD_D-3zfm2kbVsRoyd0(_ZhbjEafgpwco;;S z&McM^j0IAHU_L~9Q4|6`;yjcyD$1s8uC4$%Ky|1Rk!W(6s-_+(nGElEzZCM|`U$tD zJae8D0EaDwF*Lt48^ysa8dn$;D-IjBW6No<igJPMHosHAC%^~N_d@dgKdKM-pUnS1 zBY($0bU#XY{==6Srawa*_m5(qgipSG9iQ#Bnr{GUB}v7ZHSAX4nhVDrFj#%sy|X4t z^4NEaCE+b7hqY|Ns@;JX%tKHHm>n=Wb8+}3j4ugy7dD5i=G~Z3j@Z6m7vtdxAseL0 z2-Itaw!p<_5f0|pDC%&wyPVZ$tPuV=T5cFeT8V_%Z+k2AN)|tHiZ=7baC&u`Ds!Z^ zpAKcyMWtVbVM`mx(3*rdLX5V!({0^1I>tj>TmB~G_{t%$_rT|dI)ox)-EouMnS()} zuvTHu4WB87dES;+2bUzRx+_41QRXWknvZj$eNOt_yScfYH;q(+?5W;^4iCKMgv^mS z@Jh!2+JIa2<owkSGAFju*qojGCTzjVGlN=DU*?!l|L}bWT$S9O@aA^qEo!uD0nK&1 z0kAtd1UHcJJFax=eJNx1-ixg)bPf=xVNJYkC{#Y>7i9*e?EP);BG8?~c%G(%_W@B@ z^Clq(!iWuff1rcoK4-O*K@iJ)7WWk}KXf(d!kfYwKMNWkI%XrgySUXn5znO5_d3MB zRiTGA-^@LK&_$}q`_%OL9uyw02%YcAJ%5ylZ$}ew%p#}OjmA7&K|jC0Iqj9EsP?!< z1@oNtE0drwyoCQX_s7=TF4?9m_kz(&`d7phAfyb(zX7CgBj&`j%8yM;VGX_yB!t;e zx5h4oiNLP;L)3RJPi$@{u2p8_#<+k!qq7Qi15Tm===hpKM_I!^54*n@F3S{5Zoo3G zWDbn{QP-T98N|^K!2_S_Yyd>X5bg(=V_WsIp8lrok1ofBH9nf_Zq4Azovk=p*zI(V zDd(JZI&n%KFLw&q;St=06%>RhNyZ937!igTD_}7Os5~UwpdY4XT#n#T5(=0Ufm3+@ zu^>Gs2htFgv=nr+Mjg5R<9Oxohe&w^at8V<o*y_sepp$lWaZ7QjX{VX{s842Fn=xI zqv2tKtN;bGC&ydA8Y)I@s<OO|Zf&ZPYbAuwWie8qfJ`ewnOZ}ca3zqwmIGG;;aZMc z7-=#s2xVHlzf6oYnI?rYP2FE6Mw(33p-lGvGBHvz;TY8rxMlU?RD%_MCHycax0-o- zg~2Z{+S`-v-4f?b-_CCyOu-!3fe)Xh#*qHO-UgD#4qJaL>13RK+JSq+_)(wp0G)S& zZ%sY~#!E~7-Z<pP8UL<yd(xYMX|ARqY|L2?rW|erO}FSK8r(q(qll$gG~e--SI~`R z@~gS{%=TayB=&=SzeyEnzE`R0(vuBU?<rGNUyiCHy6Sq}e|}nxK_9F>RZ38wR1nm+ zew)-M235<q(_O@%>J~;CH0TOt;vuJ^nHXs@wS_XR*<U6`noO;sOe;f~`b;85noNsB znHu+(iIF<fcc)6Gr&BfnKT9%gO%2QPJGQ@O2lS4PyIvx_M*4cO@n;gJpTX!!Az9$s zQl<iKy_C6!7kt@$W-}vA>nlT<M(i&WBTc4?P^Q@aGBMI*ii9$i?=KT0O{OkL@`kK+ z(_M_LG16pe3uO{ZlVX_|sWSQNsi6@!)}-83OPHD5`6&EAn7+ecy`cUC>uIH^X`seA zk{!W!5b=eQA(_Kup%4$agzWl}r(X!^Q@TZ;GI1-6x8Q77?KV0UtA+c=>!;#RBCxiK zLd6BY3u_}Wyu@Yvn{cZ0<rH-1uotS1_I5)>QlB{<EM`42MyT8dBe%KIb{pzdnhK=( z@S2qZdKI(M8~T^+uMJih-%m{qNP6W7@4{FzzNO*QcKnQlcZ7q_Yh9HDuRA8;;=;yi za3Bxq>n+o7X2$bs%BD5wKmuY!k_Rz(+X%kJmDLa6Ix`O{GVqr@?TEA8H#ndHf0gjg zi#l<9LT^jz&7=ofJu22PkQGi&xJTlSOz6Y9Cxhh$9N$h|B8nb&4=z$R>xu0?VteCb zPQ0rDI=CZH5%gc_9-gIXM0HqzIvNhQeO}Nk*Dt0YvE5TqpbM?T4*ka7Ul*PISP?!g z6+eTscRbkfY7pT=Z0{O`S+>vbeNroUaAM@Sv4+FZ-_%!Z_e&7pnNgVNqokBj|IlCC zy9(`lgYBd8g3DA-=CeWj9%1_+DtP$b8a~X5_8qF))wCI`ptSMOo{K?*g8lNa{AtVi zn72ZViEO)eJ54uG7@aA?Xn)5)7iA?^I<Dn-a0Y_t7%h;FDHmXQQ!$EAN7Zh_%W58i z+%o+_<K?~}Uz->C)2qV_BAzd)=L|au2dXLoAR1DpJ`+Oqy7tV;y1y{2Y?rE#2Esxs zrCg2h(CP!{{VWSjg%)ScCs=q4sW^Sr2NweT!5mqI^`4&|@}}d&>5IJP3?}?o$!jTR zOTRKl1o+~32%}hruljD1l$4}0+YLV9OMscG(D)hSN3>PoAI@dU;(3_lO0~@f?NjPJ zoRf=X%C&y6+a77h8la?u(DqpR^~~pU@E>|7H0QDOpRinDh&E_}A=^J(NQf=GeEsT# zsO=t0u@<9^&ZzINApnMhM)2t!gH@|e`kHfI52z~A$6Fa?UpE<)>6Fm-Lh69?B7i3R zS@`}9K#ETtSS_U#KtI_E@)nXmv9YVftjv6{SUfw}_xqugKeep!k;tDr&;-bznhn>R zk`@*YJ0$LCQmo|3%;8!5Ez*8Ny7l`2<WX54DwWM_s4;HcR>!+!a4hNJ9@h8^siUC4 zO^r;#U==EjOJhA9Kz;@RM@q30RDddDue-OKYlT8_Os8{@wsvr=hbxOH(W@&!wPk)l z%nOnsiQ}FFmG$L=W0@;WfjHBPLUT*RM2K<L>D;PfY><UY>pVwNNMV>%ZIVVlgRxIm zBA6~O!C_(4h7I&E@VBN92k<Kc6@Curjb0#_e@33COenJaR5VMnIM@yMutNshIvS#2 z%2z;;2jzV(v}__8%O<2^y=+1N=CbLyS7(<^qtY4;QWwh%6ap5SPx<pPR(w8YKsd2- zxE+1O@G%g><1#dye_9O3ZU+tv6%xb6+ytl>%mmFl=GkBG%idwxd>i1B^nS$Cbo!!A z+<Tb1hG)N*RU**wFBx2I*7PubE8NB2>YGaGh_y6l{&xlX9yR}=u1dsXyl`SubY`nk zZ$SkgFHiW>F#pBAc2jyeItv`s=h3AF!H5HZ0esE)%Ken;`)pX8_B#IW29H3ip{i6n z96T3g%TdS4E3vBrAggvGJcgTqNb@>+Vs7$R_yk1V5PpG-o4>r-XFC?9r2nhIJNU*- zT7qrn)&Rdi0=X7h&Afb4Ei9EFQbcvEdw|9J-1i6lAiyz#;OL}2&H?kn9SMTt8m#|` z_zoaydSwmQKJ0Ik=iyhhYI?shco>HT{o35P10lE(?stRR(a3&Q3qPS%b5rwRb+w@- z7nIV^fyAfj7BeYxN78e7<W?nIUx5HanAV&Jk6dPC4J=K#)1%qrb+GNpJ6;#5>3h5m zHdCsstYb3PEIk|s{CQ+_eR<G?JcGsIhyZ-m5kGyDFLOc$3?pn>bX7EU?ldK54wAFK zfhmHS3Nk&5;7`5d0(rExL|E^Foy3+^04=T};ETp#aMJ7nbEOS0r*oOH+klfHd|)9; zyA9mUD6gdtFoK%WX-WS_41#{upMdoWr&jkF`*d^Yy{~=xft`2XuGXtQ>Nv-{Ppa3- z3d5Egcxiqqe?H;t19o`3l|%w=DcRLWB1wNOs~{!K!PX}B7O{G0T!Qkh6IQI75UPW? zWth)l9M}%7k~6}4jMxw`W){j!LQibdzx|Cj=mj<iAGTdw)aAYfT7g5c5KUZM*AU-s zH8)}i!D7as!Yv0Fus?vi4xzN2T3%<}m&VGpTefarV%QRBX)%h=>#f@aXiDlV$6s91 z{2+D>7DsJ=0d{iVhC2<F?c8?9{XObgEg(v`J-CkxUs;;l&RYrVR;S9Y8Id^%^tS=h zCMZ#Sh};{;&&=?6FW7dg`F1o8?7HGF$aSUP?70JB$fY)XW$&UAU+7cS)>S%ag0yBq z6w4&;^wE{S!OFqZm0fc>D}A})i%Bod?IElAWfX|(aYFP~>Qnrj?M>|Jd6mt;cqZH- z3HOwqF=$@G-JYFaW^=*antD?ywmShd*^{|$NMFF_wjOtUVYjKbQ&inpqj9fFs1r%| zwWRxiLNaV*CtWD|-a<dhE%!0BDsu?>Vl{QLfso}uz<_lw*Z6X|D<f!irsrRf28ZIw zn6gtT+=o#Y+=q|u>HU#vk;nd!x~NY_a>hP|<6;f5@Ysix^>f=zo6%l1;sE@o)o33N zpz|IQ)le~2$T?xf3re7*Pk=|yIeR5~3*8@lhp)WnWQcD{e#oECL;kscNHz-7<*k42 z9|G-ht;;|65A*5UXo$|iey0!^MP)wh{$cdstjzJx{lkxZ|1i)`fq%p0Ex4c(CR*5L z8I$zqL(g?^t~~xQwIw)>NB!7g;LxFMfPU-*qc4K~?ijEz$TyDsd-@RyWmB;JKf|pa zDtu_vMg}{pgB2wWbRv*?A&)6p5|SLa_)e@Pkj3j^3sK40mWfeGq=d<%!4D~6GBr3P zO&TSV(F8f}B{-|<&cF(#)i20LTL5eZrV)5Uxge(l{mU;)cxi7w=ckksA^r|FK{@hM z!Tr<FeH(eK_&6vLY}mm8J|6W#G-!e@iPcWt$o0mE>vC2CLh2Y~I0qTPT6yOpF^sNo zS^i{v!&sdceZTgIy%KGo7FXD%i=%IMl)!Y0z(|z$PVW6njy$dEhw2q3dboCbq&oIw z)poMFT78~LvGxqf-ap9m$cppFXlCUQNEAkLaJ(}I8#+KYcy{Fls-Z_lhhyYQ$PCv< zozm;eS4(pt*45%hV=Ugvys)Z0kY~v>ySp>IY{S%Lip$ztiaj~(4`uy^O<#{a^bInl z9eYb1?|7(xqTGZZx>e3c$2TonND~*%f^#U;(CP*%N^EL!ljuo%_ZGY9FKWvdurji6 z=Q&X#sWIGfl<f@<Hn^|Z_k*Y4gKIV3a^inplrlZRddliEGhpt}mGl;sJ42rx@1J?P z)3Fbd<BaZP{LQ3w&U@fW?V&pz_i;9vws#6piFmqu(d6V%+_&^MT&~e&-Fy$40F?|h z@#y9&0^&r;mF2?S@=FaEkUesFqxn*Uh1q=dD5s+rAB1>0X^q<J#GhL<+%zw9%2<EE z3p90<?<V3H?nK+K2Nd+DQ~(92JTENIoaMOBjrGrbk01!f*~J-j_jr7j;avxJae+Go zOdq=*YWLuz1ma#m94A0nE(y)IfIdOqC@_Bg^2e{Av%m4f7Ns6P^Cb-f%Az0B$Qi%0 zKfw6)D>8ol^2YCy@c8|*$oTPF3Ze1K`_e{@v!%D_@ckfv_yB~^mvF+vx3=)`-M^pV z`$56sYi2=N`jDM}I8{v*Q)1{VcE>xV_Bwt0z)x-K?k9N6pK5y0gAR^U$KOj4{0IzM zDP&s9evBe9DV=pcRnMWR#Y(G>$vIZ`e`NokmVA0Qe#ikBBq+sOT=wGEg>M?@Yx!qZ zl`8CX;ES-!)CVq<{Q`Ay()b?SUkfpAPm<RcI76R1*H3*pg85a7>lXGU;_rxrY@M?s zb4V-14T@B})dD)K_%kV7aLrX|Vlcroe-_Ckz6T(&mi-nbOOKsXuxo<59PHnQ;D?VP zb%-|PZOUPpCHT5_HhO56q_^(gVE^WViSiu8nLpGnfz&*)I}zV$-Hva*L6+Z~utx1{ zh&Df%9$<_!#JZ{DrP6W!af^ZpgB2Uo8x1Mh%GDbr6f!)Ft=<u9!JG*#GFEu36n=o9 zZg<>&WW4g|#{Tpb;BRm_F21=5eMS6FRx>`D2w+|^xIDX_L$4w<JWs!p^yZf*Px&H5 zW>V!;l6T&AZ2xj-8tZd0j{88uy%MzdlyQFTThK5-FXNrT8#|q$Z$mu2{z%d7s5{n@ zC9rh4vYhuzOEZWFWLI!k#u9vOSkC0+aw8ZT+ml;-P7+Hr?APlxDP)EOdmP2n7!n@h z&vWEiz~gb~Ktwr3Bm6?g5B?P}S|2drSYidk(XUGG#;KX(jvImiVa@ac2)sZ(tc2<+ z66&<X*!82)VwrOYVS~Al9?PI-w)@%f&FMealYgE^_`v58g7p~q18dj!cpqZYTM}ZR zpmlG+1x*tp_Rv4r9q*PVN_J86$QgrF>I501nadgar+^_*98xbC5>C>FS~4ZzMnI0< zh4_GJ^@1+3>Oq()(~=>QJ|j~%)*tp3-Dc#$Q(&{IuDnOSb-i8}dqQpzIlKxErs0F+ zTk-MfuKdEr`@?q8XxSNxHR}aPFv7klMbh(%(P6AR8TxAI{oEyxerdjvGjo-SDJLl4 z-^1_(ecGok?g6(Htbxv2L*yOn?%(4^@rLW2-<c(l)}=!qCYTZVOriv~#4jwe4Duru z+-sCq0P*G@>+T2a-zwri5!AoiY8pa~C{}>@R@)kd*$so%Y-!l4Xo0SElR(;PISgrg zK8`=f9|NZ7?_h#Up>W%cZ_nuae~QpgDORW(_`%*sVMw0-BR)r5YTfu6)%e-@Su{Tw zMBfH=1iRf?Jwyh(vpS~V+<5^d|ESUc1g5P`oqMg8D}X>fb+QwY10A5*U!?{9nbm>_ zlt}#nU&RlK)*Aq!ckuz+{;4n8yPt-kf$%4tqxAYRN+_h=iDEGTO&cl%E*sO&(BAhU zd^l&3-PGIPx{)7?4a28!{?1VvCZl3fUgs!*iQPG>TKh-nccp$$((iixw)J~~e$UeH zsp@^>3cm5!oi{d$gU(Tlb<nCH=*E><XKU8EChKg=I#(O#(hco!VkO*TwNwDy=>HDK zqYMbat21?J7QbrtFb_;(cIfwZzOCq(?bg7W?I7o1lrGw1caG8N#^`ioB%STwupOrR z+hHD;zDI7bItS-{Af-a9;y{XV+(l4h?@66)^cnsnl(~32r!<z__qA;Wu>z%o9EbGB zKpK62Dj*C?pif9Z7Ht8t?4$t=@EQ8}&mlz+&ktUD{Y3wo@GizK!_#Ri;g5~tqeuAk zQRYbG<OwPVd`C?izCkb+><28OaLB70c2Mp`<(Z=r?y+|KofH%cI4p&)peNktxGGMl zz3Kc4JH9hjV|$mP0NB1k(ST!LkgF%inJ8G~;h+{yMx6&ij$$v)SYd}2=d#X=-ZZ{q z#aLwDjoZ@RscU}BYJLQWEjzmpz){!So~o$XJi4N!=RSBt{qaVX>klSa_tjUV&PLW2 z7Xym(UnMx521z#O%o!>}tGuf~92cs0{D@So2rxCAU(8Na%Vr-KI)_#;cZ1|!V7tcz zodeE2ijM4&Ga;Vz@=!TtC-!pM1}JqX&(K-TzfjeorTp&0->v4G5uj2pg$o@(L;GP# zvs#WMAvuKT&C1LXHK=AxbvR5CuI*crU!7OewXsNbHco0wU1{A{Qvv8s57+ZkxdvcV zdC&Lga39?~27v!E=(cJ4!E!M0S|0yXh3)^8-Gy>2ZUU3{yv;UY*fl`dS(chTvj+r0 zj}&6?I3n8V;tZ!irzABK*ixREj<qeLkO`)AIA<q#T@$@&QpJjkDrE3@9MPlJYX2wp z4pDF{$xK#<_IRLh18*QeHhdJ8%C!#82$p=YDw$^<0p|BPSr|SFsM-kiT&_N;UYJK7 zWPJ!wz;&<S{>_Q0d04N;m&nc=^>xW^wV%YJxH!0a9d<wW;jC*-<I6m_ntw)RsN<&w zW52W4oLmh~Oj*|)nYkcD4`AH4uvRSQdFu6#>bzC&CS*mi(<>p6kx>!S2U0R{@gN*h z4bv0IolxXrPtW#Xw)eEv@>O7GReR>3HNX}uOF4&9!umdaz5>h&zT4Tf83PW>imd_$ z5K_I_i#E)JA;$ICH-(cbHi{YH`|<jmGs`_YMyVmRgK1QT=nBu<!X8o1i`m{+QUBBF zUjn7XSPmB+bf<66ltCc|v36H#bb)IAs&<<NWXE&IF?=Sd*Fdc7nnSs__-X@Gal*sq zLgb(LfR#h|*O2}74kb`-?JH20RXvuOnPctXc*6#BP8c-<ICz>nsI~gT+fy3}vEWJd zf_4r?^o_Qt3_{;OZRTYNjxV1uMPm&{3i|WA2sHR=p`8#;Rd(T2f4d|ypO%9O>zTOn z5}e`Ow$vae_}VBw_<3&>nKJ3@eb_5$EyByzjnO9bK<${#D+^q<?zqEnva!@$wr;yn zY7fJaR`WH}HQ`IKbzP3RetpTx0OT+QZqK0)(hGL;C1`bIR7m5zC0yFmQ)nH8)&*@= z?KOi}ys>F48M%#R2yPJf)Oj(d7u-pxS<N^{&+jK;!@muevMbZ8LutDOX;Ry`3D7~X z!e*r*dp%9B3d*bfD6f7kE3fto<khqGBd<aMize~mr;bHl9StRHA#t@|A93|wP|C2l zdQV?*_3RvRwI9UQtZr6`tGKP@%oPw<a|(mFde488xT^Pm0(n*G;~y2v(D%5AWEDkF z$3Pm6Kq@Y;*<2TeaCQc++{H9kl-2RCuQt~RV~%Ky!Gr<Ze31B<3)^vE)^oN6AdAun zE}PDj$Vt7)>8vAMffZ_#$WWCmznQQ98G`Q{dt)YH`toK8cjDuznN$Fa=9WO#I_R*H z`VBk2Ipt*Ue#e4_`)}SlHang<8+gF;;cSy_jPJ|_m#)R}YkBURHdF7WPUakkA@`7k zzo1&=McF6`KFUC`6xZSQU}0;=(g;!I<rFx4PJVo;$BPQ+HjgeZ@#-FjN$JOJeMKO^ z3T|sMCRl&aB!0vKa2*mdz@}o+>?mpA1^az@<Nbt;cdtG4slNLAq<1ncGQo2thW@3G z_MW^V?bFv9)kSI&_g~qGn31>S{z$VYt0L2{pjb1MFzt;JoOvd`*sJ8;QZP=5_$$`3 zr;rZ#fgu*SP&!8<n255CJ?mHsHdPZtap~RXO0{wvU;vekZ;;J6Ys_1jSROsZJ<-aB zUUUS&PAC3sdb`l(cwP6RuW}@CsTr`sYR*U%H-z-d=6*2h{l)xWu16*eGU*rOrVUn? z#aB?~?T(udj~;4eq1+Et`kQlA`X@u7LkMVf{sYjTz0z<b)cHpUI35>pB;CI{9e*u7 z*S~x&prp1i#IWs#a>qT}DcPHJuK<GW!tKtX_Jli+;X(VLltB&v;f1`pO8m{4Z~uSh zmk*dfnzFtcgDWE>+IGxs@W9I7IeG-*xKw_mSNP=5{LpykjNd=?<sa()9?c(vE0$5j zI`!XXAK`e5a1hZfe+OnG5$U~ScVnb9eKIhM<{mq!k-P}Ma{T^4&jRgvh@Pjx<W}MR z9zCDI-ywK+(KA7NHq$d#dp6PYZSC1W&kyjo8*h1f?-*LjiX*>Pe&uL|XEFs)+QVK& z2cO<MT9!7Vr8kz0gpW-<z6^hJ@jDE^QhGf6xIVl~>-;k0wDA58W3E88O!hWo4#FQ} zhB9UlJU_!*p7lDWhshqn-!XVgo)_UcD%+O3(UOzLBa&chM0m+m?YWVjc6dIH-}UsU zT)lT}M4lQ1W~*bpSK#+BA=8O;v+({sJv<6{p^5n&Jd`fv>AhoHN$E2sr^7=a90}{V z$d&l9A-fO4-wpT;!0&Z>dXQ}~-k)T$X()%u{>GR^@DK>w>FI{&vv@zwWbeSk#&4vD z+%}k-$gT7w;W-lT8|j$>4+|JY&pddJz`Kf`E%5BY`*ZZnMEOiMfu1xxXX7o;ui#;G zq|)EP^Yd&U1t*#6MoFq2hv9uJ3Xk~sEjFnS(mnYCV+O(VbG+s0&@l%yhJ9p1<athe z${534h--8N@T@yh%8`vE5G)TJtoqAL+y)QY8aaoad*R{ykmu6~A-;@c4F8T-;l$ln z8Zr1B-ALRtn+~?;bz<Q~@DQ@k({m*}f5TgzNvML!e##i4@j(3K;fZ?2+{u{b_~XQp zCzw}Pv88<IVA|Um(1^dG4CSNxOTFw-@V&%-J_t{oh4SgwKN6|Hdpl!34$rqu%&!o_ zGM{A3M*Lllw>%+S|BUG_9bZ5!F*0%i{y0&I^O1kU-)VS1LJvdE!dsr8A3rrAbg<4x z8SoqYLjBOR<Ui0xdFWu;EeyCHf1$Mhx)kGa3oDF_<sTn9K84?J7>uj#Wft+;!^l$n zPQXuM+Tr*je*eXo*YRWb@27`ft^5q$lI#q4I1PWyn9=zA9NzNqA~&{+{T2#wnF{Av z1bBa<38Uj={BCDz8$TB6(=!>r7=9A71P;bDGlmQz+bc2K;9$>x!k9zw$M&wIXAu5= zg10=OF$>^C2WRMQOi_*BC-M6seo{Bf;ip)HYSq)hr}vKAG@bqud~DKI{0=$?f9&)o z{7NU{PsAd;BRAp47=F1l@-6&Gz~teT^TgK?Z0slT$JuonJ^Uk5$}<igCYywJ|9bop zv-DH4q$C1t#zU;l&h2}VOddK&N3UcF8{px&Bza~c$I)<ok1;pEL;ChzdVF|JHU;$F z@!h47((j135s~sV;-7u`Gn3y!2Y&K!ZnM76lN>IF=X_J&L!cO}ZwO;vfQR*chMqUz zIos67OHw$G4rR=x@UXXkWIcD`?^L{n@OQ(*$s$kh9d)HO!{FqS@->uHvI&ka;>YE+ zgm`-hJVeZrQ}M?lCD|x=67a~Q#zp4jWe6a-=wiew{D>tF;TKtr-{o}hF>7|37QgJy zMwD0D0|zsE^z4O$3;M0}aLxpfItqYcw@xE~D)7hA{{lVy3r7DOc$kd*$3f%pmoxhC z<H2~LEt)=@DM9$7gM&1U0psus@V@tscN!Z(uTMlEQ*_{W5D}Is9>lNoQv5xEpFG3R zY&PKnyoJ8ArRUPazo4a8=wvCp`_I8&PD^v~^fxkx?n5FqPJGLNeGYHos=f*b+jbAT zxClSCO=7+a2V=g^nBU^}Y5XMSIXD>eFN|TUIXyG<)N0R5^l%OlTZ9)RLE*~uN5<R* z&)FvC8F)woxLicG!^7c|r}vIOU`}+4_Yxfzp@VG2*O;6QX5Ja}EX9v8U!jM`u-Gh) zYh(j{OjbkB@9|@@v*~#mKPD6G;0GGnMkzW857ALjWv2Fgj(J+)ISKEZ>A43Umexqm z7I+BR`Scu)KNcX#j)rFyJn{rML~1J!9US^c>AMlXS#<E}y~8Q3A>I=iK86`w!s&P? zE8sH*A<US-J94h}T*71*;4i=ov<pw~9rqC*IVLige2asynaDIF@MD{8daCiGVTU|H zn`i2P2pyln?@tW)27W|ld8EzU(flHQpJQXT!Ev=|^H)O66!woDn8Re37izNy9JsNh z9%<OJFQP#uli-NqC(mO12QiKCoG8Kg`yPIW;71}WU^~IYaPqNMiFpK$AchQ6kmqf9 zYVeZ>h2RO`@MZDhj}F4&T?S0Y?`L%I39Z8%L3!w4&7UMRxa5$Ee}bOb@Q`pHK@Zt~ zQo4PtbtV4TCRu{M2TvV6d|rZwh_RQ+_($p@PteY06G8`zB+ARuel;C@!gz6x3c|#J zgLtuy0i1M%F$Y!X@?1Lj{NKUP?-RE<71b;<4np%pK&FHsVtY3tSq+^h@sAH3>>ZIf zateO6bnuyv9}5s5UIoV&@RO(aj_;thsc>@*l6l(z2U#Y00{Gu(Lg-*EPcneq%Gc=N z6NbO7f)tO&<o7Y)EBFy>enJliBLx5KoF++?hYsc?5saLVAF-zqzX-`afAR!vywHTu zVc}OnV9mg9Gk)>}X>%ILHhrJ*N&IHf!DoLkZe;?(I4Fl;BaBzz7fIt6z?cD8K6JMV zy&HortF-E$`X;;cAkuX{aF!_-oxIvhLVcMlw)#MmR;;U2I6CqF*ef8@c{MIrID7uW zNNVA<c@48uv**u?%vd}-H6`R9+c1A#Y(i>bdU`6oa7L_d;llX~zZ6T(ZfKZ2?~2&? z`Ipa#6i#x%H4Aj|A_*>>HYc5vB0cZQdGoKH7n{L4VkzX0#D*-KKR*?TofQMqaQTdx z)6#QNQx;5HIBo8X)Qp7<k-6~CPR&|4W7_3tj`EJ4Gp(Uv%EB2}ES!Nx&Yw4BMnh`$ z+-WKFbGk%@^3R!e*^D`n(bMM5o1cnJpTFRmFU1<>rx#A25u1yi&56x!h#~WwIWa(F z_B>XhDnr_N4FVLjbmp|#b7ou~X_z%_;f%|}twW-jv#&@moF<T!5*u<WOHEsN#f((Z z$|4ucnh{HymQ0(&eqNJpOHORiLg{}j61#l<jD{Hdg&}Q7MQT#1g|jb9r)I<!3E*c< zYlx*#{M8HRV;~!5UppgGJA3X7-~qZ8n?F+`=gqh}c7g7CYyw((`Ftr7;G8~76-+eH zT?^sX_|q28om+JpQKN40^cf2XfnZ5NIu$?Mo;_pXw1v}W&7MAOj-5<qQ%L-9>AEw1 z!j!6E6Hw2b8PYc<MA&J3*VU<_Mto)A?9{Z&=FHGVjGvG?ZOW9YQ!A%TG2@b2IAzA% z1#_lNpW&$5PoE$oRv(}fON~#PGiUyEVv953)F~)m6(~940Suk5>2T9!RpMzuf>F~N zOj9IDe*Vh~<qwsw+kg6^8PnO6@e``hnaid%%$`04cn4TG(<Q8GI{Lu*Iy=?iOs_)^ zs={4B2*XaF;!GGJoiWwsx92hwp*y7eGdhgH90&t+({J<6FHa|}ik~0M!#Xn!3DaWf zhXLC(DdONWsXPVJpISL)S{gHa+Pqrex8OFAtZLZk`HQA4MCkMxp%PSohSe>aF)uY{ z#ynu10_&8j(+qw~oT*U5zv_(3rd>W|W_sRqBJdPo=^Tv@3csp=Uncf+<s_8gylnQo z%boL+Qg49Arxilv(+p70S#<um@e`0Hze!`yub*(nl=D$=)v1EOv*ypa9OQ4<lqm~l zIf>a-Xf+<hhp~4Y1{_7Ifj8r1-ll)K?FWL*aF9nqE58|LELeuY&mtWKw)UN|Rk<BS zn*18r(c$mk(QN%yBc@Ebdd9RXLGBy4G;q;y@__y!+Y;_=(BG=z7}seFuL%a-sm~qZ z{a42E?c41|sH)id{6WLb`2K(GT?`KI*Uw`4iiN*lc_#j!`3)pK-1~nEe#Po77XIOS z_tE7l)~=5#+_bb<c_!YxweYV5T@#3RwRSJUyTk~>I*hM&?fy2@FIy%ZB*HO+{=Hj8 zOx5C3vHaU~Ja69$=Z|es`B(K<@7+ijj!&3)EvaonvJ)fy`m}!mbtHHmL(IU#%7XT7 z)%oiwvf?>Zz53*zs^hEj>L2i!%CL$eJf7KTXSjVA==kU-RD7}WV>+I~a-sI`(D7H~ z!FR+TRJl`6Q17Qy|N6AQ`b3?sNcpRD{H=(eR#MtG|EE;`FJgQEzdrE`2CMkv@G68K ztvdc9v_B00U+MPmI9cWY3tol#zio($|B`z3sXsPUMQ}R?@b42p^|LCTTGE2$>-fhN z{`JY<{&|(ZSpT-^_>UcwJO1U5t9-Jp2<K1o;uq`qHmXhWoD4h;<IlhA_-(Z+{yem= z5PYl0sQ6;-o2uivLmh_y9$o$dN9Dg2<5Ot-qtwpec^*H&uSPuhtNx>QjaTn~F9N@| zdKLd--u#%O^RJ>l7SG3v<Zr)N#cxyN8`Qtj<fldp&)U5B$|qF#RIOQF18*3<|Doe! zQ*=7y5BKj)9p5-r#TT2utva676v8jHwG)XH8=u%TRX!~d!tHAn)p#VbZKjI9_Tb$3 z7j^v9xhnp0w7(F3bk9@qSF8TvKliC$p!}?+Q2X0;{LRQ2Zr_TnDqsCV^&WuuFn&F* z<EJ*L_#@P-PyGwtC%#d~$BN`%rQ=5+zEJ<S>G-3I<d39OM6vOW>iA;gSE=K_s_?f) zm4<&&)ndbk3m+aP3**-}bbM56(y6#C)c$H6e|nMlMjfx0sXp*+)$zspw@Sxz8==tr zZ@&f=<2ggU`jj8JRz(zxuh#J%k`=<Q?)S+by-t-+>AVnproK;nn~uM^Nd47c-+%e7 zI{xeEIp7nF?;10H*Q@*|<gd?9sqo6B>P<79@ch}M<99Tv_zsj`2tMsCD*jx&3dKj4 zsrXm$3eUgpr&V}lxq5#Y<)eQ5=RVb<I#-)Ui0KpG?W**}#y5J?{^RT4C%#q37aQMg z?-O51#KKc7f1{4)_Fx$Pdo_G^5Haw~Qt+u!J}CbGtXxxD)%#Su3gO=>9e=1w)(3uV zI=&eF=+^PY#y9pas^DVr3v~RA2NfP)WgZiWT#RB0;m_1>s`6jKD~vzQy8rbnRs7FX z&-(N)@@*BL%7bs4&fj>ais#0Bxct33zWpv0e+1&g^XnVWsPOLZs`n<mkiSp;t5&J_ zs=WENM(5x5eHBluqwx3-dsc<-_<?#;90<ox)$!f`uHs)&<@c$-{l_XkAHTk%^H=^% z#pmPKb{)U!KUDnCy!H)#PK9^>T)naU^XXInHXUCK|90s3YRO#ECx7LCve>{htWW$@ z9bc^e1v<W1{f#>QBvnnH^4oO$CyK;(>-fWq#BbB_M3XRnB{cjR?^YRU5Lb}?{X)gB zDH0#KN5x-NWc(ZNRq>>(Vf^_wU4QF+D*jEp!tuW{@xNB_#prYQ8Wo=?(!SVlReZm) z!u_jUr{ceh`B{j5b$6)v_wXtNpY9DR-YQc6wvGGGzl{?Y&x81d$7h@Ff7=5REtZ#s z>Tm2+@iccR6yM#Y;tA$3e2?3v!dqD}o>Nr*8s&qf-ZtfGe@MO0EHb`g@`EJB;1hX7 z<tG}1``5fpg}3YYV&fa>R_T6_m%mNtul$ROuU0SgBKH}jy(QP4A1PTJEr|~3Urr;V z!3gJ?gB^8whKn12HAh63^&5S-p3jo57Qq!don}|F=|(jHb4*#lp=;|CQd9psfN_zi zsc#rOtg~L1LwyjR@{_t%15CZirvBeJ*gxpzvRfnt^K8OzO{q#&tbUf?j9;`&r8Bp+ zm!G}=@|o{<_^mux<)a>nPx)zi`Re<&>k`0m>R~D$+bECe$LOZAo6!T7e;m@44^Zi- zXW~;nC9nK3{||fb17CGj|M6c0asGp;sF<i1#l&K^0ppK<H(_um11Ccz6}K@4O!v>R z!SGK_2g;mNN=-_unPy~`_%A6n=Rcq_n`K35HOu;<ppuqSR{ox^bKalr-p{=oBk7O7 z-|zE)J@5OR_j#Z9`SUrS^Esb;&!>6tb={@*b@eE^>-P8QZ2au0cW=ho*W7cB>1iEG zN0R@cdX--flCJ##Z(r+EI?|?u{7O;oIh+fdwFwGGZ+?x!*5&ARnBE3woj)n+N9We! z!@NDMW9dlya>$R6|6|a3iFEBFd^)Xfxg)TjqCWS-cHxm;zr@tT{>X3rpkS5h-5A!J z*6dnI`RluIk)ymlt$(?rkNmHb{z$Ly&pqTo-_9eoO96U2qFztyVmi|H4b{ht<o>b^ z-RLNv?q#2>$NqHRA633#^pP#5cVbx2WR>q^^diT4ds;tpN8oR$J!H2M{q&D|{VPnp zyL@&&$nH((EjB%^tGOevdq(nk_B8s#kN0-_s<#!&-}JQJrX%gRANz!X{ZM~)=RfIo zWOy~L!?|?Dp>(10D&3z+S3Az9)B2oCSJZd9Q7GL+9*a-&>9lU=j=;ZMKb}fYKR9X6 z^?H4k`*QTwn4Z@0bfg^>@*_om8Nnc5JH^}A`kp%iKjQkiz9PP5n%DcCsio}|vLDyJ z_1IlI-Ro=JFTrl8eN~Sqqd!`&q36&#ppLYkKIa1he?s-Ie)JOQy3X=yS|4;rFZ#;o zPV_sAyndJU=d@cw`K0I{%BS&cpHAzDI?~?VdAeaL%eg+CP17Q2Cxz-QMY#${x60C$ z1o_Pfr8}eNd{&*UpX>AKYdqdBjs9eM7rIjLC#WxLKlQuu=xs5*zWUvt$+ye&v_7dL z?X-}eq4KF6#$bQ(h2CGSTk1$VzwdPN>sivRTj0}aJ<}b5|2BR~@6YJ%DEE3=*G$lh zE9Z#4xgKcmG>(O)7OoHZ`x5rnn4Z=-b)=oyx4%j^4Ex&`d;41d)R9&eN|)j~^&sgs zRrqv6e6pT)GFjz(3B7gw&>KXjSYvw8KJ1M_Z?)-Zz0@5k>UR!$YfaDAO;h@JIeP7; z$Hzo_CaN5F61mFs`s!~B&}%Y1t*7cpJFV~YP~*gHq+5Hjug`jyigY)I(#7?Q@%z$$ zO#cMa@9r0I{p<qtB9-3mgg*3Epf}v~hKBV_Rz2JkXRojNdI7yH=AZj|w`>IMWaGB% z{T;ooD(|1I&-Lgj4TtnbaqZgC54{5P(yP6_R+pMTLB4VISC3w!>GhTGZRo8wy}Yo! zxO#pXz4iUj+lF43>0KYT7w6wF77JoEz8t;fJBIWxV6WEnG{@GFcFnUsVNmV@KOfZj zJ_x%VwLV(wy*ko<5z<d_eL0zQYnS+RS_gLNihq=tPbi(*?IqG>F7;|p^fAs2Vi4K9 z%<E~L&>eyQRxk4ZY3xNBz20kHE0T6^$dAxGLiMx&`|B;8?ql5%*bj~W^7|(AH!b)1 z=*I{N`X);6QS>q|^Ll;tqgT+2^+RtzPQH?U=#59O(e!%jAM)=4^xFHOw*tLQJJD19 zPepIL>1n-CN80(J{u8QCrMsMTqd)EIN$ZF@(rQBKLh~;9KO&v_X!7Z_e(jE+-Qv!_ zspvJDUSH!<Wt_d<#&OsF=*=~IXNL2QJ5L`)uW2WG>VL1Gx7PHu&h3t%94X2@>;UTL zYF}=xdnf3}oewWyH^=n4&xfKP`h<b~(D|V9)nk8$rL%SMo^jH$Q@f2vuW6Mxr}c3i zX-9?Zr)cj=(rs$>>9lU{(v1tH3;Csbx|4LB*ZFi>Pj~5BL+Rq?{U;yD{G!e4Kke0f z$`P8ks62zvFTCFCYrS1Z+PNY7DaxaK=C1bXv<~mm-5N?4YDeW)PrA&{_;k<vWRbKR zLg_;JsUC(M#CT}wv~KT?pglwS%I78WS#y)mr~AAt>pLH%Q$C%y_;lUp<+4z^6y+)) zUE1e;I<5QbNV}}>bn188NEi8nPiNEWp7xRv4(SaW#{9wT_jNv>j9#bd<tVX^pq}E! zhXrx=RKM;B^h{K~*P*xF?Dgf}gXnGUhkq}j*I|0cSU%nU#pOGQN$Mukv*!ps<%rW8 zgI-`ymqK@h$}yh6ZRESw?0wnP(gyy(SA3u!IzLn|*I_^1+Q<C>UugsVP`{J@qv*Ha z>dor;gFE`r--dqX7rnloNA#tyay*EB)0e$|@Z>kG`TIT~$R|brR6cXtz1p8Go3xAj zPUp&h2<ua~`*b^-C%E#XpZOK9ujd=?=*2JTZ$rQE4zI809ewGmKaMyQ`(N|=dj8># zJ(k%5xL=5o-KprUz1!<)o!=dO_)(93<2Ss%o{Q{E|4#Jh-qSz(YPU-CM}O1nf8Wff z9lFT}1b(F$|MweC|F(3`h5bs=|4v4~<X&%9&sW?L*iX?f2BF`y&g*|W@avI{iGGFh zQF)Y4+I?P4&tY_=J>GXZwaZJSi`?(iX${#Ofq$WVq`%)`oPQ5`{hhU={CWZVU8et# zw;o9=3i*|yp6khH@k2hJo%M59e)Jo^?e*^n@;Nk=PiQ<*|9y#cwWgM1>AJ@glfT@_ zZaM7ba0|R}KqO<iagMP7P9gj>xCCaxI(QsB9gcv-a44J(zw%>t(t&3h?|aVM|2mZY zRd5aY<wG`v$e0Y3J__$9{NW$@^vjJeJnQwo0i|~fWPgW@e3%1=S^O`4$WV#A3Mzgk zRDP48^dA0!_v2p3FX}UDA$>684ET3=FytDXu|J$JAacrJSOj-)0$l+A1levN<5jpf zKbHP2EJeNws{Ss8%C8(Mzj-hZW*d)#dm$eLRqj7;^5t0%m2Nexfz_}C7FqmAlQ(Si z<vJbm%khk{Q1$qi4Qy!uw?L-0M?42_Mg9gHCc992F(|$9P<neq>AmtyByu(UDpWbX z2%SGr<*0#5KM67?%oqdZ|6x$=5rOo{j9Z@e?e<CIcb@X{Y~wXgdO6=Xl;_IIXWL_* zuRY@JUGZIC&b^`HU;d7-m&c*%<xZ%4>r6fbs=e#hd;3Qjn;!P%X@s&<3ss((P~|xU zGMCKwA)P?>?uDw4E1~LPIaIpCpxR{{C%E)pfy(bJsQ7*01L*(qK_CANRQ#zB*D|&c zDfzol`nMZ@eZRN+FqGXZp!80+@FQR?@^A0+;cKDN9|`5pj&(lW_n^{U1r<IID&0{Q zzU5w@?lP!yEiw6Q<9Op3sPp_NsPjA>*1^4?&hx*2%jfqd)Or33_yQXcJON+jH`q&| z{F?~hA$+j${crkoe}syE2L2U4z6#Y2BQ5@>d%S<wLFs)Os=Y3R()+_VeEU{Hwc7>o zG<XJ7{Y9bd4u>jdIxHtV4K9KM;q8RKcsCm*AUDD<B9}si|N84bpL3zcuZ3&*PCxu4 z)VOlj*L*)e2P*z6cX|H$tDYss$L{p`KLk~dwNT}_2C5u|aDU`ep#1+hl>djouMqzS zPA2*PYj_I$8N{WGYKSWte@E#xqW%JhlI}-P`p-b+^AL3T!db{`pvJY;@J7<LK<<T3 zxeUGw>!HT6^P$og!871AsPv~mwj;?H4`p`@jKO2!-i(7Ef$YGOu^;>l_Wnd=syr{X z`|>>v^N~kEjavsojY~gZVl2O(gtGfpsQURigOt)g0M(w~Fx~+#CVUmFWISF&<B7FU zdW)g#l|Z%oT&Q+0f}BbjnNaOM8p_VTQ0dp-7KzZsGj4>^I~K~1EnncZQSb;Ty=er> z{;5#@9tEZM#aq0;D<EAt;~c2?H$KPi7;rN@h45#g!f!FoH)a@j-0b6@GG1>y(YU9v z^Cqu%t8t+*%XpCS2^w4Z-C>+&9BoWD-t<|oS8V*4@h>!{(svkFz)w;S3r#)`s=v&J zCsV#dEPNje-vg@uY+CK@d>5XHe3$Wh3vYs|_e!{ps+t2;&jl8L8dN?<Le=+IZ}8{a z7^w4T1k`!74^+SDy59GP%}{naq58unsQ&O2)cJHPRDYNRIdwBeTKE^+d_IRlo#!9D zj_>8b!=T22OIm$-PKIyd??{ukUCX^I^7Byjb{qT?@_A5tAF=pfwfOMgUE}TFV0?#* zu>5@kD*Yd!%KZ#fxvz&qkPD#7nF$#ZG6qBG|81q$e+#O=6~e#paq9}6cfkjs{J0Ft z&nZy;?F-+A|7hkrp0w}FP=5Rp%Fgpp^|c-zNj`T&`E`TIR~mESp@dI1ISWef5O^2q z_l0{h@A&IgY_dW48!!rAg&IeG3lB$r0gi^7AZr^LUw|KjSHcXq6n+9$L!~<d%D)q# z{L3;P1;-#C1i5F((9TBE|Lc`Ff&2!P{vV7#h0@;$rT-w5{x_lYzXJDzw?O58gT>E= zuTfPqU^?L+hpNA0pzI$CRS)|@)#vsmAO4*2G2=bPFG7t^OQFV{VNmJQpwj>S(?0#5 z;ZcOY3VESb#xJ1i^CwV#Z-OI{AG7fF7JfIBUtfVrzZ!lNUJ9jO17+tTC_5KGoo5B` zG&mS4{og+2({F`J|4XQJKY~iP0ZQ+?Q2BfVsvd8K(rbazy9!EgDU{wKD7~|w^iGG; zI|&|!oB>rYX;9;S1ggGwT;b32x1r|uTj81TMX2lFPvK;$@LBjId<H&Dy1U_4<aSt! z-i=V>!qxB;;xC0?hx4J@c_vi*WI_4yF?b5`M?>lD3#Iqk<*cV7{}gKccob$M-vyQK zN_ZjR1yJYTi6)<5JPhU#|JTbrw;LaWZ=ruXRQgJ&^ZP85M?jtTzq-`heG*FV>rnPu zj7`RwQ1<qLvh#!GK7AdOUxz}a|9hiP|Ge=T<0`21?=17_zXz57I(R<i{2WyJI^zO3 z4fz5%m-;AxJJ3JT!pB(n2n&zEzoEBdsc+ZUq1y8ga5DCP1KB?8lwZI}g#Q?-zdQrg zp4Y&?lK#_Bc9ub159*-$$wg58<UA<5v*Bd?nE};Lrox9wcRW--ISR_|fl&Qq5WJuG z=NsInN*NDB^^aSi+Iclpe2vAI!EYf?gcrlnupB;D?{>J#D2BQYo&}YDG*tb41YU&R zVB?!h{Qcz%Q2lQMRR6mNs{h>vmG3oB_AZ6DBVPpXfpekiqY%peiBSFH&vpJh{~jzx z{x;P8#Tk(ARAihEr8n6)%=phsm<JI47pVIG4V2!`;VJN5<4usg?lNwG(whdA?i7<J zz*CVkOde(O;U*tw^4=y#On$f4+q)mCJa<90>z7P!f%0b_R69<As?UkA5`G*i-8(g& zPZ;koo?$%L`0Hx7!R-;>fl9Z^c!4p~ILNrU%IE)MDE%)O&w*-(Std`0@^cRh{~OM! zpS}eZ-evrS@rO|9pMui64;I3Ep!)NjkY_-rd=bupZEzmE8fFuJ22}m$Lbb<<Q0+Am zs+|t9@ZZx})$iNk!SH7I9{FAd*T9qDm*6O<>-@p+R^)$B$(jfL4658ef-$%OD!)gd z?jODhSCjP@Aoge80M-Alg34zRR6ZYr%I6TMd<H?~^LmBb{4V3yP~q)R`eji1XIl6v zQ2N6y{>8;Uej`-6hoIuGhw^thRK3rEoO&74p~iz9i`XC!t~Fi>Ro}~@#-%!_ap_{H zaj6XMP0>CHRgXu*^GQDhu7aHleLHS~%J=I~`CbFnp6{0Xdfx`$L;n|0^?Dz4`cU<H zCsaPSK-KFFQ1w~?Ri76?rO$)kfZ1?Q%DrWQulJLo?2U)Ye+)bsy%F#R_)u9S(hkpu z^7}|A{k@^|e>30L)ALaEbU9Q#jW*s?>hA-ug1QeJ4wZf%cn*5+miY3%1vS3D26Z0) z21@VyQ2BfjZlzpTL#4YMYMif!Iv*;b#`#51=S4A;oim}@X*$$6p97zSlcD@Q63Xr{ zsCL>5%8$2-eLgQj+3SQF=YI%g?<uHue-x_SAA)N4Z$h=l9Z>dGK#l8HK>2+MJQvP~ zXTk9nKMblI`@thg_x^>R&l;bGnlF6^j(~T;k+2O8hnGUlmp%z)=PW2YQ;h59d3ha_ zov*@U;pgDd@H!ZU*FgC{6Uy$X7M^Y4CqUUf7Rt_H@Cx$V8!ElFSyuYLUf}h%L+N!w z#Xk)d{}`0Nw?X-P6O`Snjb#>oK2-e|Le+Z=s@`*<>itBhdLIjAcQjPJr$JYboOH_n zZ8(m6ehuZv3sCysgVOspl-@U>^gahwzt=(OUjwCo0aU%rwD74GehQSG@lbX~L)keP zD*gUY=?B9r319O`e}6dvRuR8?uCIqxQ02V>s=N(Q<*kM)?;@!37DL%P8>+k~!$+|@ z6t00U(8<08JD|?@Z^2uUuY=MnhSEC{N^dZf-rICi=?yJnhj94&*`AAGgnW*GQwZ;* z^X`GX2@ZsJ!d${9!NJJ;z^TZ`p6SP-gP>ctoaK2wyb!%NX8Lmf5vtrTLY4ccQ00CW zs@%^&mHRQMaz6l7?z7>Z@cshNBKTeMeQ$>6Ca7{OhmXMnEc`oX`1n%e-p2d#efXy! zLqSF<RR8=Wlz(Tz9C(^>g7FwAzYmAH{tkn>{tkq?{{B7YufH8o*WZWX-jrh<)b;lk zsOxWwg`W>yyF%5|c&L2Gz?1Q31l0I^$8<kFe+Hh9JQtE>#u<>VmGM&=LH_>`%FbGo zS3{L&C6wP+K-KqBsQRvfs_#Wme$IpPXDXDP>>Rg8^}z?ify8e(jqef=z8)R}FMuU* zrtwtcyC?Z{4;UNZdi?w9B=6@Jq5S$Rlwa3E`PB^N*X2-t)kFDp5tLsqkN5e1#<&8? zkB=IE#mTsyd^(JG8Q&i3^W6$nzrTff@cU5p{5^|bXS~C>0?N<jP<~zl<>y6EewIP` zc|Me%XF>Tn9qKxA9Mp9o3U$A@7yKIe{VB_zhfl&a$d^K$pYtp{25&_^7G4AQgSn)C zE7R-W2c>@#)cJfBl>QXB4vvHj(KCm@cj$Vre8Q)@11jCsQ0eNS(wz@gFK0s4$8`8* zm<?4=qu^ffU^o@Nae}{}_%Uop?@@Rh;a`O+&jP4?rbFeE4VBM9@M`#v3|}vsq5AO; z;Ds=4j2}nd`M4iH<{M9f>W|lajD7_tLbdZCsDAnT<9+-Z_z>aeL&c{X|2f+0ErUvb z2AoFx=}>x^7XOFid_Va$RDEoOYWK(Cjnw0M_&mHDz6<YwYVYfy^!G9T{-eHrI^l_g zKMD87&lisMem)DO|1?y6KMZe>AFzP%L!in#1WIo()V%PoqrBcKn2-LY@I3hIkqq0! z*TLJ7=fVr%+fi@lEU54oj`HpFB-A{u2x{EOGfpxNhsr-4PJ??|_&<*H=fifWdf5VX zKD-QdKKu&meE11ec{f4T&!ZOppoQOU;q6f8NfXq0qBoPM|9<-jf1mpqsD6AUR6m{% zZzFyTRC!(<;qSY@4evz04eC6*0jl3FhX=wExP$c5U@`JOQ2G7jaQ{4Sz41%%LF}wB z`66Q>tRnmrcriQ#o(1=Ws=t4H#OL=WJO%mp@aymyct5-o%HNyeJ@9Hc13#+ak#HVV zJ5Pb~I|H7K-s^|?a6R*v{2ll=_$}jIQ0??3sCHTbRi6u>$~PAtid+blPcBqG2SC;H zy~F+aS`NR2JR9!G`8p2XimZ18$p04)^?ILy()$#Y-i1(lc~E|jhw^g_R6e6j9uB`u z_&#uN!rwc@pC7NnG~`aGab+FUI`UUx6t+Y4qtC&^kz3(tcp20>@;o??{&5C;hpHb5 zwXVD;)VlKD4)*K1Z$a644yqj<fm|{&?y>kgE&e8xuQPecFu%@n0(=eo$3d+J4}}N8 z9S8Y-^%7LS`XPJ+y~m*HzYVIrR>F(m6$*#-Q0+Fwc!2Tk1AX}I##-ZW_&(_d!%vXz zp9ffZ;CBgcg^I6(nZz%G(i?5@ThqP%Q&9O<!-vq%gi3cLl>Q-5^)wX9?tMf3_5IWE zb=tcTmJ@ysoDENfe}xm^_3&eGA{+@%f(OIT!@c1b;6H}=e*ZF5fB7NQ`SKLh`LY(O zp1%n1NB%V2hTI6%Zskzt&upmk=Y{=kJcAm~u7q!(KNsqHISoFF{utwd7QQF^4&i^^ z&-3@jpBSGo-U!uxtx*0hhw`@y%HLT~{!WMTcO;abL*PB|{e8Wk&p_GvuJL}TcDNhr zyj=}7&sYiFcnCGVHbRZBmq3lL7eS4$^P$>lF4Xus4ywPc+sB{R3!(hUhB`lvhdMuo zz}pDFH_fk0o(i`SJ`qkJd>GVt`QBc>U%w1pzlN&U$Ds1L393BT!HeJug~Q9B$~Db+ zfbs3YKKu@2wec9JcG%bW7K6%z$iIXN?=XG^Rw17SOR)d`Am1N%z=edjK!rD0cr{!^ z_&HF1&V*{eQ=!^#0#y5rfU2kWnMA1F-hgVi-$3=R??9!$$9M-+`EG@3w_^BD;>Q|? z8};fEg}1|hz)uhG^~~Jg^_THb<H!+E;|OyrcYS(2;_LfGsQRveD%aVNxFcpkmFp8w zeypYwu+A~_71~YQLOqI%!IAmI)24b0#3|DM9`;7VvDi7nv+Y2WX(kum1fSuNWF!0~ ztc7z2M20MedB`R3bT}6lz(P0!#^8LI154o~cm~Xbr$XgB6GmYZ<gyZ(0~ux_lx;{F zd>XE%J$?dL!B=4uRQ|QF6L~TGKUiYnh42r^F?cR|Iq*5;N$?ez36(wye~&yIN-rH= zg`5VPVFb3p9kgEy+zzjWTi^=V1y{n&uoZT~>)<B%W4IoU!|poxS>(0wM%WIYhpXW^ z#IJ&XL~eqvTyQh;Vko~#;EBj{A>-$eLiiNSfgNxXd<kYkS1wqMJRH`*bhr^lp!9d_ z5sCa7>V-Md?}D|+o8cv}6K;YXQ2N?G;Wuy{l)n0J9r7Bu1g?hPhfVM-;v3=5k!zv! z7sD%%OW?l9bK!X8LihyCfvy~|3po?Ia=>NC!(k&#hd+c7=*q$Q@mu8W(3Jx=Aa90C zVJG|n?0~Ku@MYw6Q2Om~Ir18KDO?Sog-uZUjqrD{7D}IUF7h*EKD%})gqI=5;N>s} z{s?Bm+2}JT(YsNHM4{5B!<&)QU>0%&-h{j(!n@Dlc6bXUP2{JLKA`)bA@p(0=ZDZH zdhyGU4p;)$!})L>EQM=fF>HsQglpgexEfvwSHZ=w30A;HsPmdIJz90=@gz7Gc`_`7 zPr@9y0TLJa70iSxPZTmHx%1YYKgjCOY48_>1E(iuA-6N{7|g#lkR}|w8eW8c6Qn8z zml)?-e4)kXSa{SJG44qBcD6&=>4LJe*}^+5yu-rVjZMZzC_ieU(wA6xjxlPC7`ujg z`yIx1W0O(yAZHIcdlo*|!nJ>_!gDM<YK$1Ws4?e1l$}l}{SFInH#Qkdj5)@rF=Fi6 z-~2VU8`nTr|4{auEWFXewGXcI-@-L-l769u=U8~uINajXEk0u5JNEPGwnN$Lg06fP z-f7_-7T#`LWAUpkzRAKHExgvkODue@g%?_Qj)g~!!!17D;v*K`wXfBWvEA5YEHUO7 zqsHM-^^p!$u84*2*vHBXU3sC(+hJ@sHW^EdImW0lV(i-6>I=I50A;ts!rP5a#zrW; zS}45|3!iJ@g%+M;;gc*p)54<`9x--tB0K+$?Zzf!i803*HAakGOdwo(W4p1**a)4! z(D`fOb1l5k!gDM<YK$1W7)+dfW4p1*SYn(Dl}{m5J~<XX$-*-&JZj+)W7nQ$-?$#i z&N?VN?H0bq!dF{(lZBTUbBs~ra40+JP<A2~u6e7%w?l<@L6vW_g?CzbhlQ`V@O2j6 zZsASFMvJet_!0}xF;24hOpA|Nc*MAa`GWHYI)9+6Z)3Z04V0edGtz6a@J0)-weS)P zpKIZT7M^3_QDel|g;AHEvEA5Y)I5WKgEh}kz9kl(V~iT5Bs*RFarTVsAyI?ZL8WiE z@Fru4QP+Fv>3T1{91EXh;kw={JZj+);|{KSO1B*<z6%mHxWl*}y8NNb-@?~e_-YGp zvhWh)T<H9P&L0bp8iC7)xryRu-dw`PmjuB+>wnWE0Xh1-G+9eFIoK!tMNK-05B5EO zZl0HeeasIz9hosI^N&9L+)^JO>|<VC;^ko9@glPq?BiW;`33u4A7pZ{&-H_*AM9)W zJF^$;Lp|N(U|;FSEq$<0w3`Isf3WZK?Pf37=Xs3D_b^G-k!St~`#9fY_JVztXPO-B zqdeC1gME!3De>hE_Ax%p><9b$9%cH$KEC^zey}g>=gs~kCRaL6G&$J!b+Fm%WU{5> zdXs~FN#C~i3HBj<-Qt6NIlC-A*k|)%^C#F>^Diad|6m`@D@_je#T;jHun*=R&A(vZ z%a58I>|?pn^560soaNB-Y4xX3zxDD$lY@O1&nxlq!9IvbnH=nU_%)M*eE@%A`Hkp` zxTD16xh9`x_E(tvT#2{8&g2UZMrMr9d^zHdN$SsBQ@Rct;N)y3+d~I*M1uXmU!CIR zV1M7&r+PW_N}vAP30@BN5B(MMFQpImoBjp!Rms8r*~c>fki5FYr@xXLZkL}<cn+;c zNp9liO2_Xw*CYq~x1P*=L-O`!AAbas{h_!X?C-8|RdTQ&{$(HWa{EZHU&T$f;`NYP z$584*a_uNDPou3Q2m7txa<-R){pU|-08)HMhSy&^$ji~=z5I1cpL4XAUo<(`UthmR zRr+8*|K;Xy@P2~ph;#nr`}6~Y{0qIj+_eYe7wxX2B+u&y?@#E;@pAY38jkdG34ZE$ z!nGgin0M=#pX1}ZEdG%ryiBk=4z~8uO_q+kto@owoEXu@cWRGd|MZ+3pFVhB!&Md^ z?4O-?uGbIt+n?;}pZ+k)+k4XDgZ(boS$wd+?Mb;x-xO(Y_xewr<Lz}>duSa>{^X4G z@!xXw*%1l$=kIjsJ0j6iAAeGiexa8Sbo~Q=mU?-VtFMkouz&eTSKsvSgM9q2vVDH- zdwKbnuKqeA9bR<5F_%BV{^+{jksR!&zQFo(@cxajn!VtC7Drfouz&qfJKx%A2OS^5 z57`U$ckZ(DC)iK=RcpVlYrX!x7N2hN0~R0bFTLF2gZ-?hSb2i|L2nu6^9%M1|5Un{ zb1wDv7n!|azwjN_UxNM1XIgx)ANg-AUW*Vq##wx@pSkwDQTc-X)${15u0B8I_5W_| z8|=To#m<*5+D*sXu0L?TGOp>k#L~B4;N{=!<?RLg=YH;BF9-YW{^JZUXMW4;-_HDA z`3L(2fBqOt|Adc!^k^>!`@LQ?%FDt2s0UkqwPx>BlF43)$@8o|gZ+w+vGFw6-?;7s zuis?)Q?0$amiYW<kN5Gxezu>^l-%SN3#D<G$z7KIZ5yB0t@i12t-jk$UdsKD{A*g~ z<4@ev%fWv6dDb6tEWX|Pce=@g&7YiAKK)x3AH2`t&2(?C#QeXQaa8%Oe%R}OYK)hI z{i6$x@^Y|Wbje6BcW(0fQ%<(@-}dtS<1GG3FW)=e%hAtxd7HIQuz&S=qkX)-WT4}s zk9#@TAAPhNPig<_ef&}ui{x*xzx+!ldb#UqAKzu?Yp{Rzv(tQhuwQ-c$4q|C>(`y) zWi8t3xH{(LPHT^oKI-LQzwxUxO#cgBe?ipC9bfYDlXNio*M5(ePn+cBl3Tp|><mk9 za_6C54)$xV$g=ncy#B`FUXFg(%OC%QmxKL*Cye!S@V<-t5BG8x<<v22oR@?Brax!) zg8iFc{D_Z_%<}r5GkZDrd0Ee8U4Pu@<*Z;l^<reT^|xR@^{;8X-nS{T`8BU_z-%vX z-|FS}PWN)tt6qM!z{^{<dHG(oR~qw)m%aQsOTW(arz#%%YfL`)OfRpq^re(T@wF!F zdtH(<O`gj*<l@brS2W%bzs}^(o1AI#ER(ledG;vs`fFbI{ykM_=}mq(-^-g!o;$_M zdU&E^t)=fW`MC3ae7o77G0*hh@cP%OKKE&g<ov<Q+s^WG`X9aArTQek@D(qwFYt1g z#eY`ywGZ<xi(jbvM1Qr(pK$R_kw;Aa=`0`LZt1g3t~L3VnLa+p<Sp_adrjuw4^>~t z+f8mVxy0mblcOeYFn_lHpZ9-%)hFpQO`fg#M2=c}PgH#(r(67~s!!x~TYUPTpXcRH zE6*mix9nN`M%CZG9g$7ezR$S+h-~(+QT-|2`b&fAhyGY={c(cpkBmpA|Cw1{f0gME zFga%OeAO5B(oAl2?cEWHS^oE{K8Rms@*<PdOdetK`qzB<&UO8r`PS=RKE(B}j>vG6 zSE~HjD=~e2Pvocp_*>%jPemT!Kf1s7%}tc|Wc-PbZ(@EFFP|ThV}~Wi&tN_fuYVTf zOT0W{k3{)Byois#E2Ph}=!E!3=OoG>nVBeGG&NCvJSR~;DkMLdml%H!^%?KagIrJI z<$DiElrId$-@I>P{Mb<ZictP~E)j2k>EJ~9hTKH?+xsNSd<P{V{U<{0F@*jbZ~q$Z z-{R%3h5UIX)ISajwMW^0iRt$U`4=0J7{5K_&*35Y){y-DklZ;i(cYnh66MW%CdzMy z>hJB-661^aPLzKZisxBcLjAlM%1?VE$JgJ5q4Ew2)mO<OiTdfG^87xO-~LA=>c8~K zMER{y|5_GmkK;n=_YK8QV7?LW|CW${PlU?T9MW$H#UB_N56&N&X#e}n590Hy4fXe* zgvzsDsDEz`wbzBA_>)8O(INki4z*WWNPaAo|Ib71eS1h>&xzv8b9*TNV<U<2?Pn#* z!*dhmF$X8gb)oa`^icedL+$k?u3z!~)Q99xhR*-xA%D&Z=^qlx?}Cs&3}*@Xy&UqV zEtLMtq4=~=yuN1`@Bgi#{BlC^-wD~HdnBZ1x|$%*3fbGcG%<ef(0H>dr2ol~zbiws ze2@2k|4{l9Lh}Bh{<$L*A1SUXuPUou9w{y^E^931J=67z>uQz-Vj!GXR6n`CysnCu zL)VutCHA}pm4%L}U$m`vhW}5#D173Aa^9t0vpml`Kd!N=D*PtztceY^3n*r8W$oh9 zb9v2q%`(#-f5sACz&`Pu(#nSNe5yn5SU;UtichYnE~_iA;??V>IKydXJH_nMCHdVE zsq)L_-QMLvN~e$=tH5|&+2RUb$R3+HGfAWSh3lzaLvC*&Pe?R__A75JE3egS-p4On zTpHvz!(}*51<OknpUUB^alV3PyLXZ=iLc7A=ewXfc7nIc>*}kQRLIZ5(z?>Ba_YIy zEXHP5*VI*&R#seE-jlTN6y|?kV?}*oUCsQ``4yF9SRN#zvc?tjDtg`>zqGuJHZInC z<BQ8`s;X+L^9$zlI(o&qbECMjyn0dn;^OkUx|+H^Ya+`RuduG7Z^i7g%JR~9Q~he} z_(Z-<L+_`bP+#L3+4p;|5^k-OI#Vi3mn`XN3Z2#C=#zPQskFyUsi|IAv8aJlg9hwV zw?D;7%p&Evk(JbKtQCACPN0>_OBam4sHUPi)yX-(d{K9VPmx{KP+#6Sp`p66rtIPb zTRvudQn)(9lEtNU<qL{y>+6ckt7<Dt%gXa-Ie#Y<xtN{`%%cJ)msVm$!$*G6*y23; zQ&w?tO?C05<#jcIsb%G*iP>9GCM+ngFD+Y~qA-(6mlW04Ra7qu;^e^C$wh=zmiuN5 zdi#?4in5tC3(70AGAovF+Ei5cBuib*V^xDGH2c$xS-mCRnRDaIN~_DtEC1DOQz!R> zbBbX+dqH_!`ND)I&!TB{EmLov;6MIPUe>ZE*>$aWLAmv<@}L*^ZvCMtNmhMn-J<gP z;`-&aAJQUBWGYozQ{C--++<)}dG&&X4z?S{jx0K6;@FXpL)PT((MdxJm$8QGdZno= z=R(7E%@1AuNHey$xOBmS-t_%ITdZ-dvY7c(>CP=q9cwzNN6PN#_{mFmU_S=81l{m7 zFEKKFDNKl+XfvIj>sdl{R(7w~$OOIq43!B9`Y=2tsJi%z*3_)TI?r~K6fS?o%y}Ei z>f_?G#xAI-V%YZ+m-vWrb@Y#ls`5~bYof$?Vq7ZCm$D|#C#PVvET$V&c5B3)0^MOn z^;u(U8tRK{78Wz*TT~twA#--Q>kdtMSxShVoLkT3Z$6jr{EPB>i&@ZX%>2ZdtnqnE znbA)#ul5stHGbB(o=cHt`#mXwLAGZe(ChWTCy|O2=d{hNvL??iU&KAZ60SLUT&Sxw zPl(H^msI0%%_h#eviF%_Z07XR1~MqEo?1cIP@R!k*7zwkOH1nrEh`V12#WXNxEdz3 zeO7OC(gdx3otufL*93oakiRf-Lbs6VT(@bfx3SznRFvr~WSW&<rk<2l#=Nk&o~c*; zlKir~(5#Svu#w$xr3kq-uBx=w_3D4gy*xj^4c%s_9OEnLy!k~FnApxL8egm|#@Cis z)aB10tZ0(vyK$vU>dx-wE2!LAMOoa5g{zOS<oe5spH`~^$$dg`eo}_MO+IMhi;8W4 z+Ifj5hDvOmB0M@z3A&dX>5}dn5~F*+<Rt2aM(oVQ3q*<$JJ4`WBwZEbW8+3HhTC3Z z7;bxsVYrQt>ECc0pCT@QdYJA>dmA}-k}7%R>^(uhN6x^+hiv2w+*b4VYfKCh_;T)! zK`OBL9~&5ahHm+jWj_{$w7xm#9L-PSCrK_ezt_;jc~hjgys?%P(+kc#J-2`vc*FeS z{9-CKVQH_b>V&dd)U*a$CH3O@S^`i`vuqXW!*bs?!QZy!&DK(*?%j$jsuw1fB;}0= zQ$5}7u@s?|zU1V-S^RPdbJAdqQgx;E>V<XXiJ|Asp^19dI#rd`%c@+B+NqdyHA!_b z313UNUt*1<KCf^_S=H{f_Q72%t*zB<rCf_M)^i2TEY4rR2pPBNw7_2-v$#5r)5R%k z617=V?e7wbOY4iVmtW}Ol(4+Ibbcibx-ft4k~%F_RV*o9SW~yGv~EFhg{_0<&%sdk zQZ0?=EzKM6?%s<g7xOQbQz_<5xL^fIl^{g{`c5#bXy?UFw7~SNw2b@X#TOSZEUl<? zRT+2RQqh=qQ8;V@({$FIEy7(gvo2yOeXLClspqA$XUvMTk~iBPm;}u;r+8LTc6{3u z`RRhsD|sn*I+wX|HS?Ef;hHX4+n_$Vu)=wkQhTB)_o&6WL!m5bs=&A~W))I&=bT$J z<^Ha|Y;h1of9Vc5FXhBAYb<LAZpEE-#QMC7h0f!Yvy47eL$l4Xy{_aJdi(yA59&Ha zubaT)cEzIVysFtVNWnN<RkO6*m8z0^Qg;(uOb_=Dz9Ovey5;0z9`|smK=178WjrA& z)&fD5OSfQ2P4VK=>IIdO>?#s}m+L~^RU{M|*ZmeXaAr9t7~ymuUEEO3<%DMu<qAG8 z)P+)<8*#<*DH5BKu%IM7dRl_ziiH(rJ%NnKJ%Qc%>EiAmdMsJKq`th$9(q(T@HnsH z@}OS@q4Cec;(|ZWU~G*RWbwglb&sA_wOLt}HH)}gbB}abXX(i$EAbl7IT6JDr{*f- z^rVnWY;N&<=WWXK2cLUl`!k74NRSnt^ixc4&Q2ye0T*3=<H!>-jreY{_5<Harnsk> zWY3!1&0MjTGP!59Jb4~h%R`rZ2F#)<jH1DPr^ZkBkd8aEY_4!q+!c<yEqgFiT-8un zUy*+X19Q)fDK<`*p1Tpx(yf^$7Tp&&j1;1s#kJ2xRI|b&%Y{qx@+!HRtvz#2ar~M2 zZ>yuw0JyVy$?c<Fa{E~?ll!Wd+*I{K;I7t7;Zmx1Qm}ZKKW*u3e-#NYxCJegx+jd) ze50o)=+Rox6A~`5u1IR-zPbd)Y^_2qpWG!Trz$!#9_9Ms?h{OQduD^KtNW8>Y*uYW zd0F|g3imWTm@d|91thz^p|-MICzYSS%ql7<&Obw~<<F?hhU$t-7$|r^>c)x06UlcN z%#7t3L-z^BO@W`0@|e`0%9>;9=sDl)E(wo6jDym6RW!@(T;EkY8p`rC6|uqO-(I-g zKAQXs1q!e2_2+IZ)tZ}IZ_LX|@<7XwJyrUlzJ_sfEYxhX{E~*!O5a&#yUUVw|6-l1 z?#n9q8h~{^1?QPNpLc#e<E(Xqmp2=Xd79n(E8Z-ki_R?W?x8!Y&i}@+9;zh`$Gz2( z8>{=Ork#xOy;ai;RZ~I#s|gp97rFa)BDfjg?mmyltDE@_Cf9;~&@&zC`?BBf?(sp( z{coKyhWe3)=HB{|&bHqAf=-$LScUBFj*zvRDnY}_f1(n4p33-XN9t)Jll}N<V)%x^ z&klD}$u$)GCra+`1e3pru>0<yxU%~DZo7f%YuxPnc8OK7ImJb1eMs+^cBLNr9w&W0 zoY}v6_-|ZFccrL1xm5bH&WbPVhvm^mS!G^Pg5$w@;s>~V>AAR{vD#7{%kBPwdBSpg zX=#5J+?Uj4O<+mB`<|_W)p}WX*Y4n=%?*<Ku7TD=Ci6W<zU#>MJh+((FWOJha!TA{ zhNjfE>{(k^)3{vsZ^7-}Om~;wy~Z>))%VfI25UIemM+cnr6kwFr7XDYQZ76BvS{A4 zrObu#AS?KeP7!Nmc|I(BU1VVhAL6}m<0oG#C@;IXprT4&$_Rehko3H$pWi-kYyXUM zx%wAZ(w^S4^CuKNokP!QsQCD2F(0IJjO(RyaP8}}bGRouDGT#2&tQ8_1=b;1KbVxN zvU*>-&oAT~H@mN9lu=f8(n-S{q0f3@N-;5&-@UKR=NIyHX!rT8jCO<HWBKx`TY#Bg z$^($H^5W8kJpSN8(~|PK`usj_HvRaX9bX4oJll1)_-zbNRdz9Te-;DBFIiSvn>U-Y zIj&3oYj;wmMe2LI!4S*kJ%*A;m5YL5VO%lKSDo9*O7l}Ib&s>DhFKeBeL3PR_a~7* z@!}FCf8*8L9UJFyikq(lANr^3vyRv8?fZJkn!S7A8^NsZY>`4|PSPO13wPfs+}Lfi z?r}VG3l^yt^WfB03X3l;UtY}j<oTN2#NyrgB!jx>W6h{&PBAOnx}DJqY-apf*ZT_W ze_`Uf^I97ls<jWe*xy&RamhUEU#PbK<z6{9?$L=Y>?e1~empHWGk91qEB;}D|FWpc zpS<wY_l+gv<}P;5|1Z>X&oh}1Z8eAI?>kxD+391?opoTkh3|!QP}Yjvy~3=beD_`E z6uq+V+x-7%uiSkrU^}ZL_x!vcCwWizo6+C1yqC2Ed#b$a_4!}81oc^aTzz_aSp21@ z*B;hOjRX&yldB~DYd7QgK99btLQB{+yVu`9POMmxr>9Gr!<w#}o`z09KO2l!2!Cs2 z=Nf)K7jGlgciwyai2HhxpWekM4f&U>5cV%YBhEB_TfygauK=X_;%Z*^)V)6w?5ymX zxF65zr$g@S3ICp`+vZNzI<mEvQ?0d)&~it&f&Mtvw-rBYF36gk;+cO>;R~`RRyXhk zHT$9b!pa)97LXTn&hcO1NNUp{R;zzyjg9>HeyRJZ{gMiPHOT_A`!13D@^C86EcfHe zlxnV@CjQ>RTPU)xk|b<$;G^tETB%Z<6RiIv|41S*>#Hcm@7@CAeJgmk!X0zc!n&F& z=W6Jiqup)W$Ik-$k+`?ptDPt9PoLVkmGJK{IT3@J&W!){99=uP?`VFP@O9d_N=f); z{mhwec<DvAw>sz}O@9jCNAgtPs!LInIYD3T{wd?>rAx|#?&N!Ta+GzX<cB|YKb|$Q zrn)=T6uzChsN9bo<GMq;vx%=U*EGeG-8Lq3^mA-?VtW@Som*E?udjv2I~NMHAs{q1 z`vevj?)~vuB-L4bR;eR{Z^nKozYa7p*qg?W>$Z3n|5ZcR+yC9m8R6#opmXiMisirf z_3tj$?wb?$RTidbd=0=(5gYll=d)u{-SX~VMY9H~lel{@;ZZ`ky7h}kzrl)|BcKub z4rGu?_w?l7nTbD5<9=$#`eocGkRrlgQd2}EnPUArwW%N?$y5-LWQzH3YEwZ(k|~S$ zu>H)cdv6KGh|FRZ-T3+(&-%{f7F89n)A8@Wa3|FFIpgkNT-(_dp+7&nk8kXL{czML zu-RU}bMV*I&<VPW^Od-w#hnvO-23>!YJBl_F;P-K?@vxir&Ew9>6fuP@vIm9UY+Vi zKb1fI{o!rz9`2fjR6g&Th3*@O56K=vLCx8v>qF&r_qFgt<+Y7?DV`q%GXOVw*s!%T zHM7>+y-m=({w88d>V4Y0l4aPpC7)gQOeWPtCZQDmwxR#}-iiL}7j@r7CTvpTu8)2E zoWyE4WvA~~+U|V$HL2TRiQk0s10(;FsL=Og`kwCLB|k|@p762yoap7hJEz1sY9B2- zVPQq3|J8Od@#xtTWqkZEZnP<iD}>#uhVIp~#&-XlSU<8>H6-i;!k01<cJ~OG3tgf6 z@~SU0;d{}4)lSHrtjxNe{d{({XknkS#s@X!x0BqJx=Ow2V^(%$#l_{76^m<X7Pu`> z^D4r>QRcfP3H8P_JgznSbBgx5)Yx4g$xq-Xq<REDA--3+O<r_r^t;1mP2g9^ZsWsg zHFa*iq^AOtJs6+LgM@zlFL;pUzYX)>$vnIxVjtDNtA$TmklD4mX4vb`mOkCBo$xik ztcg6~C|q2}z0i^~7w)ubcR8=5v#`I7xGOouJ%n%%CxYu)(pOV<#VFgAgnrK4N0Vo! zYJ<$)&$z5CKirSio(K7i3h|4FJttQ1g-305FfQJjeGAiF+=AKiZrDL4nCbXy$Zj(j z%rSSH!4$VS30FNg7x-6OKVk2yphh(JOSqx@x8|4P7V6)cUoaEXs)&BSG<)~VzRs9k zNJr(G$hXAY&c2IlD%mM^315q@U7TM~!FJHW^|1Sq;eW}6=~JfI7CFUkZGLhjDI_^) zQgYD5<e=>2pmE7TS*gNOsAZ)H%S;ZNG%2Y7<C25MCI@9@CWlQ-vNbt5Xk2p8*yNzB z%;d0%6O!zYPY%i&mmJ1BTf)thofI-LIcR)x(75EFtW;r{$$I0HvrG=k8k-_4GdXPB zxFl;?V^f5s2+B+j8=GuwTyj`;R<hdo<gjtcL0OquT!V@iH8vL4a$?t1vzvVV^5UhL zNd_k*2W2M*jZY5BN)?nDi5!#liLsNSJx5k{R@T_836nE3qtWclEF#A8DH_en%$zWO zd^9?4Y<AWJr(Uv;b`z_r>e*Rbdx@P;!wVufe*CxB|G5{his1Dx?tKxwW+bv&LX`g; zyoMq&Tyk$m%tx#XbWFx(ME~_33>`eADsQa!pS?UMZ!Ygl3Lif@!H3A6d|5Xm5}B?S zSqzFa`56DVxR|PE!_~?xz4=4-6YX`Hov4eAM4HBWdnWS2@x+5xEn_Pew{4il#IU{X zW>4=e*U^qWUKth9dnV)Gv*9B7V>=@RBJ$MSIl0|pB#rma=%8ucv3_DCqAJ{uJ<Gyk zJh10?1+~zyf0NAKN#@KJ?8P7QHU3EUFR}jgek~n0Te~voy7us)$$yL8R?a=);qpdF zuVbw_(s{DCH~gGPWU7x!_$&X|wxvv8WOh3z6&EC^Z92)TN3F6Nd0&!Toy2>?PVrF* zMdsVli`fK@_eA)}aQ$t`@!`YOX*t%Ao9so;^X<#)cow?|`!for>$6@A#G%aej+fEs zUjx_7k3<T2rwZvJygJSu($s%ml@|FV|E){$ssG2>v6esNo|}74?%BC>iek;%VzHL@ zVy&(cVy%%_OI~NJZBIECYZ<s<O4@*pdF{$_!<6BXf>zh2`OO>B3tE<>$J&-eH%^JF zzr@;#Ms1uj>V1yb#wpI-SlbotTjW-2UVF=w5lW9KDQ}pvI70do(${XBQfuk!H%_Vd z>6_b?j6)_0S{hdOn5k6S*!s(ceQWy5m##PsZ`(ICua|B?t829U=8gFF$U2w$flUrK zc7ma!_xwo)IH1`DZfp)tx^6#XI2vnd?m*dW#@7G+>wo&m%=v|u(Qvtn^>i3(dtkJ~ zje2oC*6Y1>7r3#xM5-LV2v@9eMX(%HV;h>CF=|9wE_Oq6qY@RgVki>HZ+?b?d_%QE zR!v}Iv;OLcwcWUak1fsm8{62tt~)%g%9}4I)NBS7-@HkhiB;7h8*LACf{o4ktAiX~ zZ~^+OFmiD{)WumY8=IfC*bUyWm4>pZGZ(ZT%U=reGzGaMoglJ_f{o4ktAlJtxd8oD z7}*qd$8~3;SL^98!yD*E8=4n8ee1Z*9qBY(2|?s>5!leIzslfZC+Y71tglumM?qTy zUF%&}@z>_HuWGJvYTjtul1#c?M?yVa(Y{_+qJ^=c)g40*$Xgq0nYTVL5No}nqhRv8 z_4~(GzF$8i*1FgGg`>9)c8tbaeiLhcqsiH8`In8fJ<uhm<<ti;l0$oaU?Zz{hmo$` zVI-3_`(VZCJ$3BLr)r(~cWFU8d;4hRo&ofvyv~N9vF4{^=jUFKJ1_Ub+~Rppx%Bxh z8)9wEG8$`rMEx)}d1FJG?<HIJRoC%dW_0)2(yRiaTxiP2$6C{3EgRoIE4uY~Z!M&d z+S()j6mM3YV@)TTvQD-ZQb=vhhNNb71FWqR60M!!eG4fB*3wndeeEO}DAm@yHJrTZ zGSt?b<IR>No3$c`6ausH6=)XyMW9({j*8u@#gIZT7FWkwrj*25HpiN`G-0k?RujwZ z986N^!(4i-^|HcP^HZ6z$-iy*M67jStmU`w7e<3&#nnxZf*)AAV-q@zAIOFt#hgRe z_w|%DGViG#nI?~yV=X&kt@{%ei8VjL$cc}QnK2EblQ-7y7mQ-_-Y*$VJAvrDrxp%9 zYK0Ow`>E3BkUsh$PESL0&=CKT^3Qu!HA$6PducwVx!9yw%l4S2W4>)#_l~v9?25JR zpN@8{WnWFlG>;16UE9q_Z!H|rQZypgS{Q99ipHLJ4UA%Ll^M*$l*G-OT4t2A#wuH8 zRK{9kwJkGhV^6#qZJANeWwBlUa5%O2p3$n4Xz1vs4&nG_A=bKD6RKE?n^$RKpx(w2 z%$izSbuN=ADjeS|#9CKn3N5V;Jrg9G2-!p>p=7PKq-b5Gc}z>I{$ixb3Hs}tZw<|W z%#6)P60LQRsCAX5EG@12i?vQC=&!e?*^UaN)5R6Y&6jN2k!UR)oz_*FnY6U(FV><? z&|hy&lNzjP^!C==w5WUL5_kT!mY{R(D$PMwwd(KChnqBiS><LitM1V31xu@ex8&z3 zD_^Xi&O~M%SFz5-$;!Hf$;x^rE1QB*g~>{%CMzfCG-uFpla=G#NHqD~p)2-NRx95h zx?*pAaIvrc)72J=(Vp2%Clir=<dSkq)IFQ|U`BFq%N6~Dc(QtT80p#_MszLzV8!V@ zb;{X{>juMIW8V|B@aR`>4?ad;{ap9QU?>SLd~}_Wu`AziqBk}i7;7DLtUf)iKXekC z`i`c@wiBWwxc*wYE`oeIeR^Df64OP<SqJG#<b<VDi~Dr?^tk>crjxRzTgS&Bof_Gv z)2GMvCo!FrEuBvOAYE5?I(>Rve-hJ4+0yAW57MbAeSZ4%xc(%jld`2-&Bq{JEuVcl zeR^Df64Oc9r`yvb5<4lct6^W}o0HCun`<syctZU3y0`01EWhO)t~Y*q+m?OUDD^-; zmtdahf?M*q04<5?2A_M`E*I9C*X8f%2e@H_#yL3FHidZvYX_}+#aeSRV{Hwc@3WAQ z{i9=gGg*tt`b3kuyT_!TTbb1otZwSDy2)9+GKJN*ho0B*7I$X28-L&5odc7?u7ulr z<rJYsRr$l2dAjLhOI}A$W*siGF+0gDZW$n)SrqgB0;kMM;xbFu=a#(nJ(;a{nf>DE zUh2y&0oaXycQ$H>xchu%qMjU-sMcq)t|yaqE|aTLWRlymacavIs=Q96^7sGU8BJ|@ zM3+o|U3C>lM+~y*@Y$^G$!4v~=Hq>4<F1qb{y#n&T}%B1SJ@QCWs|PYEqR-Jvf1pi z`Q^yuDqDq`UkI=j0J7NZ`tG%Po8xcxm5ENOpe(u&lSx-kCS7FW?&jQ`+}8cJ?z1&* z>)@?}w(hYtq8WP2Z=K!Xyjktm*O<*Qjq6@Vi=|km2;B*$UOY%h=PIBrbW_-mbgq5c zLbreYNawmwTj)kFWx9g+g~12XT?Y!?$)!%$@_;+*aE{@OridshbMREthJ;L5Jq+Jz zrB0-E%AUKd`k`v*VYDuzrQP57Pf>w8CU<`m%*R9H<6n<V?r9%zeEepwCO^pdSenA> zzioWnZzq}U*75P-BYJ6q-8nwaPm#&LVSL=T&un(v`1l<jA_SvTa8>_rkB@QB9~Q@2 z-p+6NM=(VCM-cgwe?4@?<iU|h?uNXy0oP6$p1Ue<c<Yo=xh;94Vy#m~<hSIFnAvtk zX8ioa-Mk;dsr`PTrXn3%hsQSNb!eKjbqMp3_86<DE_S#r{uZ?S(+%AT%eMzPmC-E7 z>2UxLAeew%J7qEXFK(SuPyY4fUrGLzGh4RhH*afV)M_UWe*v*Ei4iQ`kwd#3*`F!8 zoG55{=l#Orv`RtCAN%Qpd(4r$YNeib#9Etm3!dMyQW!eg-IwPMJ$_|}Lfck$fmqAR zMm>&6oaDHe{<{}zeMm<7>!O}%;G%$wnE)3BT#PCX7e!pm0ko2;uS6eh66S(;#lME8 z{yNtv2Ue{VTHTYA+?JJY`JmNJq3~2|47j#h{<P$+!nJk!Xs)^7U2<(ze_hiu1Fi|J z&02)OHMbVg>K?J+nr2^WSb%G*)v9r`78krruK8zbJMa1KQI49F+*+HpqJe8}VWYKK zQ#D+3Xj_>ne_B||ji0q$`IHNu{M-JX53$yU;8|JRYI~}a(w|8Tp=8_q6leUr&=Z=1 zmMT4=NqLrs9@02ly&FhzitdVmUQeQ3Gm@&O@1lhi9dZ{fr06%hXdy-OhAiZ_Jyc6) z>a$Uj&#aJ<SmG0z0}EQVFpXavekilh&)41h>y_JLI?Gz#&2RZ<);m6jw(LO%$6r35 z%57aXBG&fU+J6S4V%tOd9NY#ZMrA)YES$I!jn25l`W%-yE-L%h#Kdpq4o$zNL*2dY zu^n+1^f}H#TvYZYDJ(=agtR>t?H<<K9@6JH3vp4|(-SS^wm$3@V%r{z#iiHhxb$&R z*@q^jcT2BrkJZMd*XOwOaZ%a-cTlJTA9jnaZNU@uwg#RZ`8zN!*4DS$vY!bh8~W{s zD>Oc}UD09f%4N7GoewNv@%_rD)dy@TCD!tkQfxibe^|41n)~2<-+H3|tio<R!GBi8 zZ9Uq5Rx@lp#D7+!Zr#U!?(R5SdD`<-&%Df+A-MnG{_)Cf>)eQ%_~nc(G+oX=ditI| z_Y@>9D!%(~Y1of~$(*~%@iox$Q}>vzCke}TF0A>z0S#4wW9U3Snm%V~o(fJY_rQH% zZtJwPmMLkmw#(A<+m@z#C4Vm%YvsJ5#;uaEv-P03+vOnKB?&SMW~U1|64tNubfo87 zDn9Rm)+OmPSH4r9#T;<B7PO=Oc}lE#<Ca*<Wy8%G7uWEbw0pAot?I!)gIQhZ6y2Zh z=P?_m^Ppu~8js8p$A>kPD8J?B%vf9ZI%(kL2j!kL_|rqET7_Gmc|4uZ&RTxU#@2B( z*W8|-e(;G0xRXyo!3fhD<JvWoC9X7{;P80&Y&z!5^|6gPGQ_HXPMW9w(t)#&bSAD? z@ABY5j#9J26Qo{?*xpO(+|~*7=T2YNZ=c=S(m84XGvnuDL-QKCV$Z*}qJvLovvOkJ zyfEur(gW+OvA(Jo>-csxK9f4Q%sAhe;aTdN-F&pA&7JP4%l82OJf!%7mSEE97dmP4 z{Fc44UW_I5u0V^9^}v9wV?D-uOz@cGaiYg*fF_9>VFG7^dg&>ATTsVwO}OI4`m`X^ zpgXCzhWo2sPd;#e*=Ohn?k{ifMMVnrKiOZ-@xJ|kzP}U|CJk>fEvUC%=5A_Jt%fmx zGM`C1--fZo@iMi&DE4xCTV4Bqp*_Dkz-`fgz5d+yE#0>*GkM~Y-}3k1GU`@4Hs`lq zFe*B;^;6M;$-l2ZXeQUPlV-MDJ}R2ua$)q<Cm8k>be6s!(wZ}zhSKUmXMQUhZm}Yo z-#QK5siUH=u0}b(mG2Sd*y4ipKGm&;N`A|<=**S{qoP|c4h-@H8Ka37H=>FyjJec4 z<KHA$+c?c>IAbi9a1Fw_wkvoV{ZE$66@b9%$;_6eI1u-|YIDQ>blpr%#e2RT6<qrR zCVbyyw_pGL#j_=D9*{WSh+CiHI~nf{J-1`%@jMyYnAfRFX`PbRykn30!<%;us2{zu zqk*exb{pRgq`-bAxph1tk0*p2O~`c#A?buX79WEAOuX#oEUgz0pE>!Bp(}17--5RC z_SN1OF7bKm<V)_*Z!>RuD)#)=wFB~p=3U5SY{tOv4wQDw|6%b`EV|OpZ2Q!J+;;{K z$ZuVmo<DRd_r?DgYxz|$7if2LfmV7#+sxZzL#O_!dpfYTyHuob>U_uc(3z9poZ0fv zp)0GoR+G!{c)#Dt>)<jz?+GRo^E$gzyY+fKrR@Gz9BywNvXv>KX4&n&NrD=rL%M*T z`4`_-_UBGMeUo_xeUlGq{=*=iT&lBPn3mr<L^&P5DR%r1hpzY(p|K}+49tK08+ZGo zVCcO&V(U%XCx7zBIxgtGTtS|6!F*1?wEUKnN6ly(^yygJAOgsAX6vag3zjoRclXa= zeSumTu5&Vt3FvT_zF_iu4KH{1a`&_-zjef@7+>2s!E0h@gyySG-Pf(Nz}LaHI902K zV5%|ns2ulvf_Z5|e+@t1b>sizQ3~&CHU1ktOvYv~h{T3NJ{K{6)Ou+QzjZlzO3$x? z)0J6QtcB5JItiwcU^)rTBxn}@r={s}N&ozD-xni?*2dwnfsN_!JTagifhWZUX)I7q znD_q6iRFp4&Qdj|Wp%_(@?Vn~I(1{*_u0(9c~4QoV^06<ez)JY@gzDT$D5xfDB*bj z)|FQ_HAMzqHDEE}^wY@Q`iA~D_%GAvOGxLQPci#Rs76rCcUgXp+=QT^>v{<<np&BJ zTyCe7=3oi>QG$ex(jCm%w;x<C;Xs7%58{K49$zF4*B>4FP{jWNowgVApPw{D&XDi~ z|Eu^PlW+prOPD6%R)lgmRf5(67lG3yEHWWS!gB~xJ5|Cs{)~a{_}}v7b=O9(QK(47 zt?30Hj^@Lq6e7aUGa}4}Bf5`|@EeIpcg*D$Gfy!ZCy(R5OY=R8IZH9WjE{+sldR<_ z=5T~#p-YovF_RT@etb-m#bhW(^?!7b<}n1dxE4kuKS4Mqi1~}f9IluF{J9Rg<NaIz zrf#|TC?uu5jQ@LnoIi3)jXCf{{#?m_cRa#h^`{plb@2ZX{{Ni+?oW4DdV>I|y~qE( z-sX=RDIv#zD+Z{eaHv1Nf9tzs-yrc+{n4Qh@?|4lN6z5C?%_KmwDDi2z9Zo|{;Rj& zFX1f{z9Hdw{z&ak2{ru5hR;b*$Q95X|J}S>uheKzh$p&wd;-S?%;iIr|L$nyZ+A=+ z!blg)pWFGbf*+?eck@Aw=Z^35SM}~<R6pG@uOoD)c?Thv|L(vD$NRVD4a^<S2c7g6 z$?(&B_yqqik#GQilw6fLU@U)By-w|PgaQP2eA@ke|JLIN9ygzlEPq8dDX5+QD$5V} zA6d))1^UpRL;1uXOX_(K{gTL{(gxmRUs}B+QdeGCT3@lWyqHZ#8Y)ZcDlSE=sg9J+ zUs6-qP@fcDR<jf(_o|mF-X0oZXW{B46-rX<<et4tig_DvMOA5iO<iPh1wYZND_dMq zR$3Y9-a|C%-US}zz4p<Xg;DG*DnB7QTR1U#ek6KQG%_!ujcubv^>qzp^$m69(Y(64 znz|FCGb`}EdQo(iJV>pg{YSleFA8p#(s+%A>WiyumQ_dHd)%Y-q>n^L*VWY2N1~@j zBge<rVkF}Cr3vo?+@oXr*7Ul?YF>}3`{eZFerm7n2ICLQue<L2{;NG2;q<|dY?EjA z>?IR4hc;vBO+UpBYbpK1e*bqj!$LSe?aUZ|gyXesWc(3qZqcv(x>9X;JTBN=%Dwh$ z9J^#D)@7c4wm)I#Kij9^lS?ZrYs%EI^V#A*j~9vg7k}^EU)vzcZ|a%kL41*e4UH1F zCP-DV?%h9K!Px5~Rl&yZykPO((_Xg0RqtCz{Y$=d7csEk%U+~?8fPoZ<YH=<)3_r% z?!`s*`LVZjy@mH_EH3i@Pajtq|3e>pYnR;>9u&1VdqMn*+_OACchB5F4t{6eMYxWA zJ(w&c9@}>k@1_kTv7dn_rO(l{qL28doy2$SB;L(>`mmp)Sy3PHO%|^oFLNaMzuMx@ z=Kig8z`&&V?V5*k^p-xDSr>CtMfzN?9f@47sT)U$=3pGUHy9b&BguZ$Js;zD{-N|~ znLb^U&FOXLN&6<HPq!In8&mrD{BN@K?IXP%m5lszy~J-yvizrYM|)lfQu?QR7>*$x zN%?15{K!!LY3ysDqvTl6aQq63Uwxd9*Wf!KG9bx**G}RyNB5n+X(#cWJBg3lysbC? zYAt>uo*%I9pzivOjPri2`<UlKkg|Stug7sc>EqAe)j|3(K7PND{g*7hBg4njJ#?Uz zcywBPZ~eE+;&Vurs{W%VczfnXlKn!9?=Alli|;M}T8sav&nC%!yTu>gOMHjL@83&2 z-+FY%fJ+MtW=94zrtfvDZhO<y_uDH?U**y**C_sP|DInt(m1Lk?Z>bCfZQSJSMM=p z|G_hx_quLy+n(1Cx`8t_65$IC?ig^XvpOKKCtJ$1X@gI0<1Y7mX2&OUc~0f?;(q8= zqE~2o-P>`buy<3Oy}tAwMKAELFTGdLThotx)i>AmLvK8KoBE-50eW4gXZ<E+{po9a zfjy1i?g;87zuC2w+T$MdB0uu&(VIQ>?=g&FTb}iL8jp3P6>UrG2XS@>p+CISM{9g{ zN09%N=0VqELv~l7x9<6n-D^_YmHq|jcfH{C-HM|O2X;gKQ2MW+pYx*E*L6Tg+5;i` z1-?F{KMcRxf9>^yD_+{NP=7ze`>*=jhRvqmczs<b+!6R=<&>W6ZZf?grq=DZ$;$sG z^wyc4t_wPn@{jZPY3X<Q{JZs^3i)gL^5Zt?|IX`oPwE4IPj4pHpYyW2xgUDll;Zb0 zw>NAM`?mB$?_~4}`=Pf0y~dsBY5aNxy>`>nbx23rQK9;o(LDIN?$OK2Pr9|Q_;M}u z$$I*kwX5t;-IMXr^mLulk#=UteyCq6-Q}c<{n6Xk7@;GrER=3~vR@aFF8Y5yU2s~5 z`_U+Dtw1l$^m;q5rFW0~H$QTa-I1a{ybxzk{WL+(MA`d0dg=Y}Zxqh&uzdUSuK>L+ z)BC99ld8P+=xs4QyB_wmSDb&h#o4p#Vv^oQuA4b*adaP?#iQkgkQMZd<KVf3zr(yh zd=s)@oAGm~`1O!Ihcecg`~|oKc@C_DM?&cz0xyDhQ;|*ZD^Pl$H`W_3gw=$f4XM_H zPqpv~u!iuV#y>MpszQDfO7AYHbYC?2bFdb<&Eyp(UuJTh$rUD-n0&6u2SSx^Fl046 z<DVb%@~cpOKL*dFKJI`l6KC9Nyb-QMZiH78zl!;wSPErt3}i|7lmkqDiTUQ)$WK7U zUkA@ZzQp8{;cVoQCU0Z@TZH^Pl>TjS4)PUH?a%<Pf)!AH&NI$2&M=;CoNUz7k!JLF zd^8fN#NMCaGWasQ4E_pUO#IDI^?V&vy`Kx!F5_T5{OhqkemhkBBk&T!ziIMaP<l7R zPr;c`e&<2?JsHaH4C5%{;l=}vdmB4B0p<55D8HY8^7}q0zwd_fyBx~z3*eskbsUu6 z1EKu+{xLqj11i21%I_;oUJ9jG4(0cua49?xvdW&Z4|M(HXzM4?^%JOm@@1%gatl;> zZ-7_AYvEN;KfYA@I@k;^g8P%M4338vKyJ}8a-r-^g!1EKQ28GW4}k;WO8DwX-|v10 z75;O0DBK8HJIHv@;y(}N&u3s6Twy%KxIbJ#_yAY}Uyr&chZ%o>s;A#TrTZC_-uK~r z_-$AYzXhfDH7LDXq4chU(pw6pR}H1N2ukmKD7^wGy$MiyCqU^P2c>s7l-_=@6#kj} zU+Haw()$CH-Y=o_egLI+Ka}3xP<nSj>D>aQw+brX1}MEMD7}SHdgnpu&4ALI1f`b= zrFT3mM&1Xmgs&ax+hZf-RyX4+V~+8kJl<6JqsB{(*~UMQ@bN!}=hFUnn4D&;;sT)b zKlzAfw(+xvd3lKO3#=bpP5R5A+I<OB|2Q0;4+p?S@UMsROcnkKsyyrAzQ|vI3*l!i z{#uJa3+_YsIE(+d#UEqwTgc=*;-7;`zX8hr_n_=w2`@k{g^S@QE&eQvA7=4?KG?@^ zgG&DjRQmhjJmfDy+5eoyUvKfn7C*z{r&#<+7C#>HFXPc+etbR`o=rU+1vMV)8|NB_ z?}bHh8Jq*FU?C5u&xfkdB8aOQ?;Yst^JS>|{3VpX&qMjU2C6<Uh4Qz~;xDrJEU5ZC z$l~|4_<<I`=>T7!--1ei7nJ=kLD?^bs?S`g`kZX>Sr-3i1_8yt02Ti%RQji((tj4J zK0gIzf2qY+Tl{Gj|8a{y#^MjR_+e1>`OZ*xZ=CTmT#391UQN9X9OC=sBMfq5W#5=( z+_s+&|C({W@$Xcc^nV4<#m==*?Qk+If^Sf1v!Qk;JPVG3YR3(G`*wX07SdjKLHTht zl%Ho<{60|nKS=ZGuZ6OA29*7Mpz{00UcSAbHr{1ypz>7Cxls1Aq5OS)kmp)snej;D zF9-T~-3v+oOk)OAIfp=<pPhU7{J#k)az-VTU(=xa%brmFb`9|T;|{2LxEWqZ{4%I^ zp9@hv_+XR&7V+}0pvwOsRQp#MPle|Yek@e|aaz0b=^k%9^TpA~Q&<*^!sU=*L~DdY z=mz@g!Vs!WPyL6qlj&)24V(p6!%JZkB#$ADa3-v^@Df;nJQvDtAv_tz;0%}pl|B=m z0Y^jWMIk;7(J$1Fhv_gArok~V0yE$a%KtIA9ex~cfhR!K-zVT^cnaJEKMFe_U2({I zNLL-Q4pROh?Qk4i1M{KQl3cmqDC9;+-3_UQC&3aZ{kbp(3!(IL;L&grJO*aM6JZoe ze>j{9)1mYukh&hSgZe!TZif?K7nJ^Hm<Kzd^gAGziXrRa2)GVTgzeDz52qoohSG0> zT%v|FLM~-PYT+bU0-gVGI&vYDeh$oq=(u*sgi&PLg7r?{KPJO;WNf;AaXLiw<>7px zNQ1jLFT@UGyRpewV$3l{jS=Gx`X&DcZ|Bbn>~}%g+ic;T7T#gu?Z!10zuMxPEWE^+ zV~iRj#xDAk^Vhf@5;b@oRQ~N2zQ)2=TX>U&ml$)5lc3V8Un_mo!quM@uKuj>h=q5N zxho%k6yFII-(lhH#x)kd+Txomyu_Gej2a`xF4~8WgFB4v#wKHlF~=A+4u{TP==`<t zgS<TRBy~a*g6C7))H#uZ=OquA96bMMH#vBo(Pnb+{Ng~f7d&tHrNsx&7cMnfoma>E zCI{>58%z$?(<jk0hf?t1xyHMk^pb<;7&VOhLkDz3f_42*(0`qLw735p*IVgFkMZ)G zbbQI}BfUI7i02}tV_%C8o-<8%_9Kxdu1h+`n11k_>9-87vKKtJdSj56y*8VsIJu+y zxzhutA3R6ONt1p@BzP_|Y_OL*2-k50wq?HyKXeQ={opyv@2$K|roUM_=m*acf9d@1 zhy>4VzG?c(SI6TPA3XQD(c&W(|5b|*p3CUllkzuW_0eka!E>47z`n)*-ud4Vi88qB zn8NuY|AOaa`U<7&1<wu6Bc0^nIYTEMRdSSzf{yo1KX^{k>g-X!7JnQ%(hr`4G+TWI z&t1+9>X(a;j#s&uNI!V)af|C;^d~M-I-Yd>kND%g{D9hjucpXc22mZFzex`E!G3`g zZYXU&nv0T-X-q~HpLwE}KTAK8yxr3OW0;rMnf$QIOMI=#m4R&ON1D9O<cWuQ{n$y~ z{!2^@l)l8|n-BDIqsc!p{naM#ak!6PXYv}AZ!rEbS<vwvl@B@CH~gC_A9dJn@q<)8 z;%m9+>6owbA?KL9N##RMH~CBQAGy=gYrZadoyDgG@g~3L@@tB;bCJ|BR^>x~yTzZR z@*#Ij^6^VlKI9UUul<OZyDa^eTzhpyHd*~$E&H@ruy6a5@_(<6NSeiuHF=Y@$BnMN zIwGq~Ug_GSBf?8G+;O7GF-!lZtAF%OUUi7Kzun|{`*K~U|D_+}(>EY<dUPN4^uKud zdd81<xgsP_4axIRj@SPP{=~~aqyNXt_lEL6HYCsB{EpY3NPWi3>0x_B#>Zc>N208G zU3~mUL+J;G^s_#asDDVvpHe2_@%CCm_U;YEpAw3HDpcP0LiNALUWxXHg!J#DFU99i z@&tJ*<6C@uEacC!P<_q}$tQ%;Gbc>2cV5We@Q^$?<nNl0To97ShSJOTc>j;(dLJ+U zJ*2-fWRDjn6qhxY7S}JXt67F{UQzvI-uF<&YqIOhmnvXEWuas6jk5pYZwPk3+1NXr z^me7b-tn82y`X$yDKCmFsHm!_pIO?N*Qb%B?{W4&eSg2#*_*`~aW5vzE?tseU2m?& zM@%eTGOe<vv^&bbWmI3~&2#VG;QPemmo4sz?|C<ue}$NPkG0+nQN^3Y3g+`pCB0_L z^^)Ss^6EwPi;La&c!R8+{odb*I-$PC<?ZV<-q8uAOHQw;sWdzGt;ql3K9)6U0pGi> zt65&WpxnNvS{_uwhrs)+`qDby&F9{R`r&cA`z`CiNHp2ML55yDb*vR*Cq1ygdQ$>> zys2;Of|{z*ifZ4}r)I@xl=#i`?zp&9vpXy_3|*AhTg-x9W9Ii7)A#q#d&?<El{AX= zk)XfBR=0`&{j(wLYSO#?QoVmM{_E*_-DtOwopeCnA=z_9$qMzK%(%F?Un$U6dWoU0 z^b$i~=_Mv;_0+#v*jcLNzS4U({q8G)i4Q?vF<0lD6CM~eNt%<NDs<M2|NU}J@D~K$ z4yu_SKgubts9snTObdf6oV~G2KU}g2<HEY~@`O-V2R-AmYNdKvl@QDv|E1H5H#b)3 z9n^(0%BpsQwbI(!^6CZ7no7dYwaP9oE?azY@xs!I$~b2y*Z)84y$gI))wMsKA)`c% zp25<JN;R#iCF-?_qB6x>GcW_^;0#3t8z?V}ptL>^W+=TCjm(VZcs!c^)t260ZF7J3 z#qZW$(^}j3Kqmx90EK`r5Fhv^9kme@0wVc+ziXc}b7t}o+k5Zl-v9rf56n4dKi1xR z?X}lld+oK?z7dg&aR@51P=Y<29V3}xA~%0;{xz5&=3Nz^cdZ))_@034aNY`^*IkE; z*&MMN38$&cwl2rj<k!z<#(YJtNnEw~Y8RGdOx!Sk*`oRL;`13i!+WPIYNEm%I{V8o zyzqu4^B2b>*8|1H1uR@fR7t2;X!8XBRV81AV`kUfkSpS^gO%&q;zj^V-;=Qa{-bf; zb&+r5u#=~@?q$7T-hD5`K9cz<GWm+pa||54!dwO62IJg;FY^`dc%DD+2eRf_f(vyA zTOmc3UViD+Ik<Wi|D=Kg1L!kX99iBYoi_SFQyn{ILE?saJSl1LsFu{O_^eiB^pYQ5 zwJ37A+l0S{;y_kF=76}s2|I<b^XK4}<pB_eV|t&R2xk@hO*HUw>#8eQwevis4xCoe z#1W>ICOc_891-PRQ7xrSy>fC5R&Vo`ExYP_3zyc&-OLN;%)1UFUDg~jyQu4r3scsJ zjNflE)sqElSMLSNMY5ENQg<Eq7o`YeV0?^Ou=vL7r7+yg?P;UH{jAJ_%+H^TXzi10 z>J|OcFewT58uv%uc_JIQc{LZ^cth@F=J;!Q8aRRje|?TM3M^0aLG4HtlvBMt`|I|A zGlKp@&l#!~{%1k%bImu;!m>z(?*j4LOHBPl^Z~_VxBY^0Bl_II?MCzg#S_Z?f^sAJ zfN~=KCrF*S1wBZwdJb>rzG}&Q<BBLIDQR>cY<$Ml)IX+<BvT(O9!aJFtJinp8@y%% zq#v+S1ElY-K1V#64p_s_2cf?@e?ACTx(kK>#_B(JOghZzzkN+1)5Xu913B@(eN7b& z_jfSe^(^2a)Xz+&sPQwCUC}>!KGTmt!3<T1+9S%FEB8PC{C`2!{!_pMXEim~-FVGH zT;xrEAxh|R=&a8Yw7S1VN_DXot#Dj%LRfgi)yCzq0R^uAFt-d|eEnCJJ8}GY&pqhZ z%|9>L=XU#=i~0s#*f(f&pP=*4>l1Wd-=LblLFd=>%~*qRH|LsV%jPVazZm;RSK&hV zAI(`>-6vr+H_6Ya`Nnx;D)N6d7u3|8S94*o`n-yY3#w}nab7iJYpSa+96h?CV$A63 z3nidp?y<|Rzh1xo`YWJwxo-Y=t{Bdpw`kG1Hxg{gmV@sf=2mYh-nqYtZQYUz>@}BE z;6MIgW>7*~(t-Y_yr*JnnFoJkoNvG^;eYN6^ACGm^OwcdyZSD?uicHY+SD82vDjrF z!ZwJN^Ow}C81?&E_ub#+z=>lYnSW1rh}~()++%UtSOpdQ&Y1)B!`aVuqg8P6{puyp zsBmnf%U|s_1<&~`VHLf9Ie3nJMlrmA1MgZV(-gq-!YD?04qlBi2q}hF@4%~d;AH^M z3&ZUPw~lk>Tmg?t3+EZo0Wz!@UZx0M$+HUHwZI?ywQqlXZ^;sdJAZTLghNw9?pK~J zV1|<W^R~CRPq5Uz@rEUNf+>b4UcdlpnFFoXsb3T7SKL-60X(I4bkY~MciCnYK|5yt zwE&*?59S#Ke|_s$NY53WD*03g-rVO4`=bCDKIY81`l|R<`OxC_)^AmDw72A6<^=^W zaGa0!#eM$f(5sbbc;`@i1NepgF~w=0WByjsxLwiTG8~v>5zes5!DV}|Uv$;H_?(1N zvCfHxbCGzdbMXbc2>z{f;MD_ON(B|5aL%0h*Unk6_$p{=<*&Fu>RwUdyPVEk`G%@r zQ$W=Z<`(YIk%X1_g$W6ard0)47-?-4(u0MRw4ClMX&5E8?6fPFKbUmLnfdSIc{~39 zKtey?kNB(Pea2&WQ44Mdf}hFY0p3V>*&)5^puT^bo_ynw?%N1Imu1RPCfsKh`kPd@ z@4~4iobAJ#DzAUL1+Lha?<UBjcC$k8lfEnGAk-?1Ig0Jp%~IW#3(Qpd_9QKk`G<Qj zX@u;&cI00(`PY{GYqR?bXkZ{w`{8Cho?M0e0{O{qyty7h*C(66r+Kq|i^Ko%+MIt~ z<-R7@2E_S49iTg2MYHAnP;E)T3#z*KQOa;Xocjoh{fmk}<7x27iaU$z#4D@gtzF%C z2T$#W{VP(jVgG>-w?tgh(qOdT;UWgFE@JTNA_lK6V({uB2Cpt+4Eqiu2L04%*iX&H zD~gdv`yF-o;vbSv$-nCP*V_E+nEY#X{&iITwIcsIBL5o5zn0}+OPp6wO|zg7wOocU z)UpMYX~?In&%ZK()YkeXLyfb4$q>VQ#c2I>Nc<YTMID9iy~GHvTY3z-%JJf!yHsIq z%=}m8#Dh8Et@c5~l)?<_4+2X;)~oiy?d&aI^f>)Bd@nnhQPW0bMolxQX%k+hPVINB z%)c^$gj&C3C~C@(L28;2B)A=Kn5-#t;=!CwO<5RfDzFsf0c$G7+D|nzhkZu}9;k2= zUU#Y2RWdGs{*_X4=+4_YGC~b^@PT9;3CPibCb~lfukKL6t2<N->z52g6B%NdFB`3g zhQzP+cE(!ijE<rvu8WxuF()3(d8r-#XJnVs&_)5KK<C@|XV(R@;d{l&9kT8i$&q8- zL+UcDpOr}aw&+za>aD%FG-SPAb$BT*-Cf?O8miJ~&sg#m-5$P14{qgcrZ@HIRWIoK zU(l29^yt3LhWSTAGuIfF!l3o576H3MuR5T&9st-E^s3DQ*1=x^*cbKSvjlr7z;4y| zZ`G5p1MCjNyoX=}EPKSTe$_b;Smof^X`NHsfx!}t*^1V)cMa=~-2%2fhlI^U0`6#A zzDkgw;FWLGgB`5q6jXDg;{2%Q8pHgV<WH`x^SGbRR)QQlyTV|%^0LT%q1OiqISakW z7dSKTaORgP)P;Sl2YXnMjw$AV!Uv|9R^Wq?QYB!zfeA5#FjJ!^6KdyVLhYD|k#43% zo=nRI%fv`GQ=KQ%+`%$2(#=%s$)pdKiII{iX8my#-f``Umbw@00R3H!?`Uvu{MM-b zgWVuu`L^cmj-}s<&%{-E-O=E#co>+%r7V|r!vnO;skm=k?{=qYpu?G_feud7-BK9* zQzP^1y4jJ)#H{)BXYN!&3W)_jj+)s-gHtDW#=>VnRWW`Q&^|({*By_s2Ea7G-AbHw z1eL%rR3JWNJsxwQdkX6TVe%Rp7FJSJ7{5PfVG2a9FhX|=0~N0FP@zz?Lxp_^ijfWy zBTb%6GCBv!#7H+2?tBq>ili%?VxUZnbTef<nN}ivz(K-DH&crzQ~h9>80luhWdkGV zM?H+{T`QTk$E%(Df9#g-L%qF*`IJOh_5A7$<P#=dQMVQFCIx|qk*X7hGg7B`D$xhA zjC3<qdoqm~EE6N$Od~v*DhA8MNVmC-9vqbomWh#WNtCDDHc`wPus0a#W}=McW}@gd zU?xU7)pM@Uaqq<eQ&v|Dss5mRKCt|F+j|Y<Bj)pRDF$V4bgjtVEv!aP_QtIe??%l( zxg{1viui4q{>qsB`$~$N?uaqkQ<ZsHGgZlk@{i$pX){%s7dKOtd3iHcNo4RZW<OC` z0?ZnAs&X08Pe}>yjq1I_uzyk6jCYaIT{Jl2$ShpQq{u9^K2_NSj^JbRRd``FTJYo_ z-<v(}jOQQjR=Bs7E&4OA!&@0OoqH0{LI?s*r}?qysjUWrdOJhOCn}%j$}9eL<ov$M zDak_CeU+3eeA{rn0d84T!b{dbvcK&onM#yV__i;o=qHKxPyr|aI?9tOm5KApi#-{s zd_ffm+k91lHhDwD1+RKi@j3_xW6l+(4b$rLA(4iLX^oMZ-l+W>UMGdCTpM)zfhl;^ zPOnG96{_|L^i(Dh2IicSUdv<biORX?u1S{vlBf?C5b#nJ+->3(V%*jqK+n55v%kR& zUk!lll^w=rgV~D=b6wXucBHwEvU#3h-K>bn;x34Fy1kk;l!|0aB{|w{jb)Cr4NG-B zhuX=Qriw+1yM!<#uVFn=*?<Cb`5O7*<SXV?cU3Yrmv50b-?BmTF*cX4&YN%Up!pb^ z%UA2orw^Ksv63%__Km_vEZwW69tO${>lc;P2*6buTI%nmcdzd(yl+d%9S^Ex))ELF z`{Hwy;L#nQu%M9>|6eA0$Se%eBave$F-w&b3w}!3BjwgNYF*#yj{BJP`^tc{VPDi* z-W0!v{X0V1&>g>A)yFXJk|0+&IQxhs5tSzzlzO$e<+#j_-#wsewtorBEOE-5U5GCw z2;C*opSOGkGG9K+bIT`f?!q@{Gm1-G6<zOUz<~70*c`odsJtp)=b-r*EBQPkkqo1j zL9;Q|&F0GUl5M3YTi?;gST~z1;YhanL9;Q|Y1}V_-B4bc$d0*I@@<cwC-)8NuDtSu zipUErxs-{W90z1sITi(E>-=^Z$P|I87)W16z*wg)PgGWW^NkraA7gX*MtJj844RLz zPQFWWRV*7c3uALdxuT1pnX|S_Lw$RPvAKMluyf_P;!FQLH7CEg^y@A!T;8pno&vvt zkBt807v4v?7uUoZ!B@4^0ZgkhA*(s<PEpB)8btqK*iVWA%zl^;RZ;uNMxw%cSUv8| z5f~CLQ!(msZ=QziCs$!OBaeFA+l((4nh=KduzK7}>XMj{b-Pj|+)dmX)=x_a+bmKf ze33OQ%JNydgg+1<7yVB*3*=w62;?GN0wFWrTba*V_uoxO0=Yv$?i>g*<3AT<LZU|D zr@I95?YjkXkw)PJ)S2-D`LmP?KP3oU8Y_C$+<j1_7wSiOgR2gDG)zbs=q>ghCC6P6 z>yPZ0Q1U4ysm;b3ll_eqN<Hi3s4zh4jtT>s1*$L@Io>Y65K56om3$?WLzoiH&=B3E zQbfCB1&Y#E+=bt+Rro1_ZmuER)`LTEi5yf!OVQ$|SbDC-lkD=}4qAt>`JwjEhQVtg zU|Gu?Sluqab3m|c2<llPk2}in(A|2Ldg{se96;3bLl+=8UZJ{&AONsg0c;rvAmfh= zAVC0NhXU9+5J1Ks89;&nz+DR9?tuU@{>T6lgkeprfY98`^{;j7DBWD$f>&}xcOkX9 zlL7W4Od@b~t0)aLbk~7A&2)!K+07e<?fXBH$7%*jK1<@w^m_<jpWcmMA3#+cR>hsB z<F0z<Fw?6DhIf6{R-;^g@fN{5GAIMFP9Zw;+4oP8N4^kUm4bA&h*_T=gI^X?&va-N zi>c<jnQkg5hF?+)y{Y7jk(;{h`<t1??ys08#H>%R#4n54#dJ<FjeIxLnSx^Yg+-Tj z$IU3liL@UnK_D9Am&a<RaWKYLGkr+P;Qi1nqnfFlGP+e6f|DG^_=TpZjShfi2VzVJ zNa)|@qT8XBx)u+r;ZBCCfY(G;LsGzs=C(GjWH3u5c8BVpY9bqoA6v7}l~sWRf^!HV z$E3zab|rYNG1-@Mt+7girCFX_&UC_FlV`Rpdvw;H9pc>Q=Yi`i=DhQ1ZvSYCVLqq! zj|}T{P%pONTJ@?O&`A6B$F|m;eoA)yyyd#~&_+nTTJj!LA5xUD`t9LQ{9?t=t|*Dm zLLO}QZI4&w_-{_0x)oQ<<&-~?D)A;t$%#<y6J@*7XrEXHxLAS9t~#!q%N5Lv7jOSR zhy%WGH@4H>mkdi|Rl9y7G0Qt+){SLG758lXxLxp1qL}P9v~lb7bS7rL8z0TP=l6HU z%#V!y&p{m;)h6yTde=JZRn*75LeTB5-nEIYSk=c`@-dX4TU;vsxGeM}yK+HeE-}KQ zKBxhHTxRsHOYH8-AaTtG-h9~F;|I>x=#SoX?Ci;{o2odc{IF8@W!Rvfwnl^9Sc1m1 zaUU$vQX3M-xzrFdKQ<P=!ctruVRA9dTgwdd65Y4mFee5cmpT;OcN{g}5yXJul<B_L zBz^DZ#P00*v4#5t7#a{QJwJO&fqstl&h-zLYh|ca;!U}OFn>d&d%vK}r=XSn4h?Im zSHM23UvVCd+JB@>ge7DAg7(N;Kmt&9j}nuVs@|PSFhjn|DGxf2X>Yk=Uv_qTWS7dM zwumrm0Gw`a)T`ETo^&!TL8e`9CS0-F#c7sXF6BRWXQ9FwTQ`43K<S-Y>T9SbvLrt# zTQam}Ll?<7WNr^7cMa9e9nq>*EDP-6ztV%9OU7XfXJs^aaA~k+L-zZ!qqEZ8(E)g8 zM+XAIX5IWF!S`-z_pf~B>8JnJ>Hh2mhW*2UZZE?~+9>M_Eij>53!I=0o7k-l)AZ!} z3f!!S|7&^@Z$;7>Ep-Q~W4>CoS+}p~<vf~vXDIX#`(JhFGh|(Sk9l!}-rK78u1|cZ zCl3x?{2g4bsoUX(k%k?;XJp~}(z@&|bIM!RWxLHOyRFOKGpD>~UDgeqzIEA0=9G`D z%X-WyJ=SH1%qfSgVP-&2W>A+_{BP??tX17Fm%`@nQJ4EcFQ|CPLzV@XfV;%%+1Ymc z$xA;WXTMqp89~_?!iq|XVXnq(f&n#OBlxI2`qcKwbHK_a==0}<xb5(%hYbrF6-2lD zZ!0OOzXU<O@`}#HqK>e-!uVl_--su4b<O7Xy}EW*$6hUP)U*dnO7?2AA%Ny|h)q#* zev1oLx5tCWL{^2&S3=3Rht_PX*@xZojs=ae^!r%mHtp4h`J2`4@K{`*Wp>tVQ{%~8 z$(y=!_iM)3K>pR-!Q_^g5b!}3)_wH0Z!2+RZ*qdp6OnXo-GFx0*|aI_r{92K_1 z0e{$z21>*D91=#j&$lL0^VWjK3HI=>?j46Belp(nf1PFBhL<zlm#?@l74kC9jlxSV z@fi|j;C@kDaGdyeXdhRCmQV?-!lz|?*t1-(rH5mhgTkaaYRzv+XX4+8)a<L-3Ht-; z6*$R(x8zu#n$|+S>my@-FPLAv1EiyS6m&)Q9qxU;VYRCnBi&z)PTFfY-SgPLsqTp? zSzK2#cFdmA8#ddLZw`%`8GZkDbWmrcW+$|d&{IdvSWDELmXU7Cmxl>zZwOd=H2$@) zxuYgyZf5I$r}t(sf`V;*`zK>yNNFp6&+ajouhOkpXVgB&7qPD{9U8KurALSCn@f)h z*)vQ15j$L38bR2Qh&>#V@vNo@f_*?$zWj;y#pg+XJvQDReZG{9mm2q_T3*JvQFyt? z4aub$Eg?p7J&Zy=i2C*=ejW97M{%Qb)IyWdWhA4hHLD3)&sBPFd&Jj<YsIy+4_)Z( z1K~fi9>QuU`5su(Ct>ShjucqRa44Z-7q&-eu*jkIo(#3|cKE`>x@CEW8iU-ihJIFt zEd9z8DCJr;zD0$2JUFB~yQMN(`csr?Sh(8Ss-20xY;l<YCVg)6rgw%`qb@RZwbT`? zrxgJ)YIj%Q9aFho3x)IOb!F@-HD0CnVIvT!dEZFBRT}^1<MacF0hqg=7qYI9ujR)D zx-HED-jUvV*EutOEcjmHMGVtSY0NyNt@sxvvX*zms{ZUu$OZ6HYCKq}5iF}1DENyi zFEt{A<_{9xiFOPUy$cpzMbW5kE$lCG)$t)My@Zl02qC?b!!}+4%shaK1AEGl2r>qA zDXyrREd`1&RG=rFk9`b`pzE8YzbWxqKt4C^TmMv=+|>gyo2q><yZYoCK0F!>J5r4v zYUEJMeyMQ2Vd1QXVLt74wGmvarM>{%@RsFKQi|DHv(4<-zt?O}?*!9n(Nf<~-P;lD zSUMA^?;NV#?vtSVrSSANEk(1n1=<bm3$#U<5~OJ;(bA*}jPDy`@;fcCKs(%l|D6cC zRl;ta7I>5d(sedcf`4JJLdYv)E`N~oQF>c^2~d%jSHX)hxQ{}@eT<hno3Dn=JyP+# z+KdeFgZ<cgcB`>)i;}5QWvcV*Nl|;oX?6Z?{0{SX8|19hT8!Wei+>;LU1u$SFckcB z@y`Jx;{$3V87Qlp#`|twU1IdMN5?Mj)K)A6wzFS#=KGp$h8?~iJs<0Yt;d2!-x$o% ze!X`?;$se-G6=QtQ$6%3{pUky;^VGGSil%ov@#G4e#Pw<E%iNyV%Vzr%CNX!r3dt& zFKW*XB>vnr4)G9NlgsN%aLc`kVlgiyptvu;8~EF+-Dq^;=dxWnRBN{~<krh}F|Hdw z!@N-lxOEt0idxjWJCV_Y(>k^EC^WI_V*FrwzMljq!x|>KC8-TsY9pR#@XDz56Cyce zW+0qlpQbfd)e7EPFrVrRH?s$lJ$~H8z9*!e6@CPLcGt10J04|sEWR|B-VmR#M?0}Y zx90?+=0*>`7HEMhy76=B0&VtI{NJ%a8^(ZPr$PpT9JJ<8;$_HXQFBA$=<L@QGy*gB z@GYX|*+Tl*qXmxLqs{KvqYXP2smt`<Er~3r)3FJ(b2gd?i6Q<a3_Y;QYxC^53l#$q zdxP5Y3pVUjc+>>BC0khOKXdCf=(JV>Ope9I%iS@D{k{{iWMpi<%r?br^_lv-R`S~j z_D@`)i%Vwkiuu?d#e`@6h8tv2bM;(2;<F>^_qEiYkRbFF@fx)ssg>w#%zPW%_HpuK zhh7aU%|4rCT|5RNg5I8HO5{X`CNMv%QRHmt8NE*@wq(C2(5WB`L1hL~2x|{@I|Z3p zf$ixp3T*usK+TkWKZ}!*nk(a(#HOev?Lk5D3n$y7f5ZB?d{J$1x_q%c@-!o}UuyQ5 zk*9@IG}Y|Po}xZ?l1)M)Qc{5>*a@4vwTD_U3eO0c>y6fTAO|Rh%aLftFeA0Qz_Ujy z*5h`Pq<Db*EvvcnXH-Eo%*}2p1L9cf6wtU~-Qwk*q5U75=|#wFMV?NPDS_U8ir#^Q zX--=yzs>U7XxciGsqr2PKBL`Hg=83D&Duj9x@ljFNRYJ|YryzMa7!9vuv?gK4El>{ z4PpD7V>#_kL0HXBaL|JOxMft>{2*)|^zg?tL56HU)J(C=9x%gJ3=e-Rx5I_bbn}5a zq=;Y6CKcqKo*{>IJ6T^CYcAriBsJl$J;Gmmx*E`3p8AB$muq%<zWbCgEK=`;nJ+n2 z4#evBYSTNwKu|cj5&BoydvW<;^L4~X70@V-d4GrA+ZO6wtB;-4a`U}l;Ur+)lIB4S zL#G(Qc2bPCVjK8s*UzQ4p86rl%8=Pk*}5Ka(#gO`u5L3jVOmr7i^ljR#Vt89^r7zC zS@-QycUHL*qVVDrifMpU3_=)dld!ZEA5dv%35i+~1afHhmEX$=fs0;D3%zTQZKaRd zR)X-F^|8}1L}a{KLU-DV20$^a2{KomF6=umk9p^-5=l21(^ZW#47Ai<D8wN82Hf$1 zg?nzgS`<ihcWpxg&j|P~e3V8}Zf??86RX0?2_u&jUT?H^RnT0)5_1IzDw(4Ca4Axb z;jw2trjpeh4y%%n3ejq*M)uD_u|@zMI@8;9%Oo$-t&~sAHw~l>%$Z^HrCTl#dE0ye zGer4bXNurU;27uQ7|e=gKwoc1Vn-MKLvubk()8Cl=_4kjbHy_`!C{Ta;hD!T7Je6@ z5uND`D0z4rita?$4{y`%K7m!u(|R9Krdiqo*vX#KrPszFD9t0KXb*v4V)ed`#Zxh@ zwvc8M(I}hzhSVREXkhqe{LI`85hFLJGH4irl56}B1P&!$lu5NSF|3Ox4f6E`heU0w zTKBd3u;~#0vUz~0hRV?g9s<B_1E3$7;?skX`nVzVTh$q|M-C6!Q-}Ks<O6d@VK#GX z;dioaNOH{(ROxWyIjo(C%a9Mlc{#Lvv#>^ag3^+NcZPgz5YU>m^mfpx6?;0hL8bz; zO-sK`EgiC&t;yG6y!#SJt%=GT^M3L<bB7x$141IELAtp<6SJ2GqPBk>u?T@PY6|Df ze&4XiLryseehfs8qkMAg0&RK*|2N=$3Ij$g&}MexKLr*B3>yLQ0|JXEa1JHVk~Fz~ z8u*N?)Y4qUbp08GT}1D&V`_vDcK35KB_zPRrZqxaxd*v0b+ziYANB<@&0w@Q<MVv{ z$6${%<eBtFFOQB|D@iyxUazG(P;~N>(xs3y!6G1vof;iGt3gYigz6c#f2ST4_*(L4 z1Ym`}BiH+*$ZoLRhK!g-0)F(}bP9QaauD*&4!jL3Z*vJjO9j{lbGu#z{e1M<GQ*zw zd`YpqNHBW@j24J~*dt)HVe%FT?<sR)%0F}>u&I??KSYNzbbZ%v(X5!gBoKNOFPLVt zXONLl7{D^hlAi1OGhzzp59{+5sG-3sU`l8Ehp;KSJ-QVL(QbbVsrBS)(nyJx`Ypa- zi2v*)`{FMc_Qjv*V<Qcb5pU_i)nvwz5t&HEF4SZMWaz`SBYH#oGCnQ+BSh6!^i=u? z3(M4k>LliYCmfAE(Hd~^*h-Gi1;Adkx0{dQ5DBJZwKN@M6sRLjRVaFz`3A^|0mDE~ z?HsQaFb;-35Q;C-lT<h{w97_`HNEEcs-9ICtUd8_fLw5AY3NYZXVd+yhVLMlX`uXB zLFssO*|WMm5o33GeS9*u4be~Kn;@K|*Z|7YN26b-hu87da65=EZUj1sJQV$}4FeC& zVDz?P{nD0b!(<fmt&f(*TJ+#cTAKS(Fn(z?7QRXf^{B37;x|f*tT=ktJKY%bwa0ug zB1=;W4h6A-n}v1RR?IX|v1B}wxwV?o8v?Y{-5)uEXIBbu(0*pW4tf5#ETr@G*%P=E zBgcDWE-iurOO!HKZR$#oE<W7-YtffZ!M2A8`_O)VD`qVKkJzPGVWHkr8V&X=`5r1_ ztVV_ScY6G9WzL1U4-Q}H#a1Yj%M=dUCj^LgqkTe|dSd=0FM2B${PWU<Zf!8@vbgMw z7^d+UECQ+y8m$LQW5I(_vj=-CYp~$dQde<+1P{i{1K7>jX!K&nU4zqJL$%Z)z|{AH zEn>1dPB%}$pu$QCveTNx2VHL<vL<6xtz~P_6#Y^38~-$Jl$^rz9<ksdfP5E<nWe|O zb;?3J^B%^^+pMr^j5z_DBS(X#b{Xd6K+K+qB}}iLd>4xSR<KhXN8A6Jdd<<BZk?~2 zHJpj{-i??55+6*m{XIsq2Rgv7pgm4JQ{7Z1A2$WmV}yECs0UaTlT@n*7U`|EqSSw? zYbV<d+mz&ip^L{so|g9WcQWAd0eE}>9v^_m2jKAmczgifdce!{B%T6-wWPAWI~=Wg z!RXx*gTaB>tz-Wp$|c91_?Mv@Rj;sbgIS{)%(X9*_y8=o+er2fT^u1lkowlBTK`4u zGk|ogW6M0tOkl9r2xj8D4WYYM=Y&d>hbtzRWw(0elLGq2dY1N$26n#8L%P>YqcZ}% zGuNu3NaO{PP>VqOVWxK-<fMU@5uacr+7Hxn(A$qx;|uH8GI{*-ZY08@wi}P4`A?R_ z+8?Hz{3MyWI|^N`q?uN5_UrZ|a{*Yl@4p%kp*Bn6%=AnItWVeB*9X=p8`I7P@)YJU z(=8}9zva#^?uAqBS^pr)^p?@g9QOUc$D^Q(2NAG7&HZwgv5TpkGMe~~ZT*5W_|=P5 zyt1|JYCzLme!>-lfL1EF(Ek0Q;1=x;UN>Q;D}k+$HM;^E(G3Fd5n@-8BZ!#AmYw~8 z#5pUJ0*uu!I~lt#S60MtLh=kDKvRHR0s%5NgIEFU0hR>*%0AN`+U}Si8`$4Otn($> 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	q5<rFYul^Y0 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%0An`cvMA=7}d|rH@?CW&ch@V8+O=b!3fwEuHVLN_s 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	b+vx_<f6nEL|nlro&+$CZM0l@$oK z?0SS-R<U;V>a}a!p6hd6F1m>*maVE>bAxwznYePH1+oM@-MdzVV~z5(qE$<4YfED{ zN8+wmB=a!9ZH#2()+EiHQR`j0X4%r3WyO{2R*2giO3K94zrON@6>D@Htce=ukl=5| z^($7dUAA<U^4XVoAMrlM<lM3{+_|}_vSzKm+OfWJ>B=Mm<}Izo1sjy1IJYEaXWFvL zn#w9oC9<h>c?~jmYVC@fDwTag1gBK4S*HD1lEq?u%;KCo-5zHZunZwLKX%K7Nr58i zTjQmln#xs`ETb~X2jOROS=rKM%LYwfJlUE!(-$mXT2r~KuLQ?At11_>Lkm!;Z|=k_ zMIsMa5sIuqYM!~VsO3(nLELeDOIE#N?IIY**X@{_CG%o-q_<pOy3y62OI5!v%ldV> zKHepFfQlRoR^{|$v^gs(%4$Wqc30rSQf_VqlD*7}_R?GHu5h{HFEPQQFSKJ;AY)?L z(&=Nn_7oRj;?1q1xO^VC09i?O0m`wKV_Pw?y2TfXeq2x_`f)*#=*I;`!s;?$k<f(4 zE;lvD|8Kde0$k``;I-9QIe=JQ%@M=(Y~(pOm^XKzh7P^*4VB)qWoYa$AaGp?;(Xq6 zEL*Xrir&RQWa+9^Yb!9=D2p{Z+NG+dGT!zYiq+RRQGhk;S3AmT&||IzLY|LO8__Of zWaD*}&aGH|47e?=u4YF>Zj2H7^$PR=%U70FEnTrn2rEWZ(`ApAhm;aSBG-*KCOGEi zz_oPkiZx6|>C6(LDhXQNM7vyNXK6!M)VWp&))qU|Puhu`5W|Kt<VD4DZG{NLEOg>d zmxC;KReXDfi=?jU7$>c`VU26`m2;~^NHRMH@R5gpO{SCdgF))*wd*QH_^Xz#xdEZC zT2&Ssk-~n_n)NFn)s>aCzSV-RFJW)+Vceue7ao0UD(k8-Cak3OHS;VHM`9pngspWz zYO(%EMM))u4&tNniWMXwZbHpO9>#}*g6u`z;W#xH1BZ1>SNST-Sn;IIhv}(Y@?LL} z20X7!6+_;EWgo{u&+4VsDp-udamBjQy<kS!f}%1wPhEw}*)+ObVrUL8({PKnh_`5S zr<Liez-8isxBK!d=h9F0(iJuCx#V$~ylu;HK+I^Ctx&TKGAX442BN}Y4K8a7%XKc- zD)hG1^B0z>B;<tQ)0<3?ykhMdj5T}}-ZBwOnNE{)t5;N3RIXnkrazj%%Uqe}^;NH` zbYDJSq&#fqmANk$Stjx<$G2w1mrzQoy)~kcBuheYnT+BTOIkGSQiQei!%SSHu0sF& zq%`7N#pb5+OTMM6WU0MUlrdF!MCyzArn?lSj7g-EPUO&$3+Dn45)GwOvejjp4X-S| z^WeN-e%Y0C|4qv7QKslX$?|WLCR5Q1ik?%odLN<~vGk!7xm@cOmMyp<u9;K)HJB!9 zIvC6>1*Li_D))3&Zj3cBjLS>LzyI-oyA*>11fO5IhH5LyR#dqcFI`$&!>Y2PwybJx z&3bg)eN|;4LYgLet=gL0>7a-;b}Qgr3_NnD=~f@@k(gkyUCYO60agswR8&G#$-%YG zHI-eTi=D>|tK5@ksJ86-r5I^cRF*BRLPvrjU~OfM*F8WbmuWoB%Im`=?9v5H%wxa^ zBY-|e92s)%Sy{2tvtl*pp3u>;j&)_h6#f%Epdd=poA-6*Qn<;3C6@)mN<P5kIgxlk zQDpQKZ#ATpdH3lX;!MFxq|$a$wj2ZcGS%^}to(A>(wZB@$mm!OdIoMv7A!1d*MqXb zE;~nNwskx_1rraBE>XPVT$3!;%~(<EVlT;}sAw&d6j_`S?PXC&VlRrcvbT)eWm!nH z2Y(gnLKF(IAe?md%@r&DYS=oB?Z+CI95`AQw-X3+r}(OuVWL`urR>U@TGy4fH5Igf zxmGPToDlWLRto6J%}+9369F&0N)EUamhP;sdf?3{EnFZx#92voI&oH4&C5jrtf;G7 zdi{!ZV#&OAMOg*cx5WfO%*=HVR?1v7mi>^4rX+r8Msko6<tB4dihhzfS!0n`RkL=r zSdPamz)}VT`+g@ReNEUP{14DbeKg;qTqg*vaw$Q-5;IVziB0tq=dDL>t#fCrT@&+I zv>Y?%N?G>onw)IYU{oh|%wpwXA-hRSS+eMv>XR?tQdfabYim41Okvi3S=Cd^<VMdM zMS94}7`Mh~O{gReGBcAnB(Op=VM%j~5ABe^N;@R5qV6l^l&p9bR@xzfm3ByAMYUB) zS!ss^R@y<b${nynm%Js5!B8rm15{S4v;(ct#)W(&e%7{V@(ivG7OnEtvhlwfs^?~} zsHyeJ#XHm?+2iE&?V)jKqSp4%4=^#U>~d$wMN4dBX`bjeb#>}nVN2{$?3|`otyl$- zj>fm8DHYwRmOfz*V~~2#L`k_yaXBWM-DJ^|iF(W!>T$s_W0+8DZ25OAmCGfqj30A& z33dEq3~x?Rk=g+$6S@ua9d?_kiB`BYYNyIgw8GU+JJsYwtLX_uQxmPGBoIwWVl_E| zDt9vKNZAc_b!F9PJ=U&Sx@v{@%VoGbX%{TfW?G`v<Q&|w$h~mNbZ6g}J1sYNa_;o} zoGDJ{w47WxOwOTeZcfhhsZ(KsGXP)tNK6o=cF4XR;R`CNt1noKGbQ?a>b<`m9*!d> zIQApXnc%pOgJ;<tPW<7+@is>$&Ha4U+0sFux7B9w<h?8h&&TjXms?rqmA|EVp=<HN zKC}L{1Lu4AksoDoPI5TzrA3;<PtYGyxuU{SlFG{B`9&0;M{$0OUp3AJ^5=G3;;^2l z5svt;tPEL&(=4lUd7_Bscz%sISI3X%(D@bMTpi`ppE~ZWjqooPGc4xf!i9w~qoYaj zTdb@~6~74N(`nX6O?fKhp0l#F%h#j$J)+#Vf}izM$q=(jlrKKM5u_Kt{W|?{F4G!c z>Du>ySsCU`OReVk_%<tfwyVT1KU?xkpCazB^m$ajC?9qdu<q@X8$o5BVk^;dr!+-W z+04um_stx2Q)B$%qKw)2^0KO$rPxanpFRC1z&}3|=jZtCJ74nKKTVbw9J^aCUF82H z7iD1-4rJkDU_ATP4SEJqFbjICa25{!cn?Q>II88~-$nSl41ed~?`S{$PQwDc(ZDxP z^@CV=UMJ}4G-Gc~wiczQw7Hs@+O0*I4$B*a;ysgat+TDjNmo4VmDN_1MJ*I~_(X_` zcRri<Q!u<|6f7D~|6qlJ30BMTn8wZJc>1Ect*Bc0_qG*zrT;(^z2S>zv5Nk{BK@zk z&S(v67X*C|dEvpyX5r=D2%s&%|M{8WZ#@cV3-EvHAI3}Z-E_d`3HzG$%L|k;@GvYj z>o6Y(!t*|T?=JFXn(b$Sq{=kbM2xYn?PhQZwBf6Vyzr6?U-lc#m;K~h*%PAjfo#4f zVg}yy3w|G(N&mjhjk`M-9X`4)A1>juHvI~t5)GL>)79xaPQG3w9vKw*#b>+10W!ps zfK00Xo<kFP$aj(U`$5^HDDfyMp37+Ky}}vI7B7I=3DV^|;?d)nP_Y-p@jOoGX1rs# zJIBm_(RU#qISIblTk6!wOI8+w*kk1VzoKS&H-+Ur*}I8&>;*454DOx5kLo|^JD-E7 zf2=sVeg^O=BHm^T%^S~G8$$D(!MRSer3;Xys~yQ%Q9xH7n!PGmv<feYR0oTyO+4cl zEb^lGGpG2GOqceAiWK@PD}$^OX6UOCVc`FQkEl(Snxxs_1(&&~);Y3feTdp~B@4v@ zQ9>p}=jupVgw|z}FOu(|I2(IeROP!MW+?4knjYbQC_Lf~Hd)+0*(!LJiqR>m?Bl8S z;k~63EGek7xW8H%_YM%tbAROt?-Ap5#rH*3#%s+ZP81D;GzQxQiZ&k44x!OT6Wb~5 zLat8PO5+77)I;RLiFi~9#SPD&;Q_2rL5>;rb@bxV!D)}+Hi52|`spUgvKlPC@hsVD zgQaX96xVWa-Pgx;pWs@TgzMXAWcQh2(WI+}9NhOQf%jP(Y=$8kD};f!kY#5;sba!+ zA{g-|iD>GgL&PJ^eSMwI08z(OUoxmx(Aq(uQ%h(N2h-jSsyXX>2gcfe+w%Jq9Mw;r zIUhQ|pTg~@<Sai*es4;`^|Sn*pc6Wwz9+r|E(V$C!B9z)m)E3Y5l;w%OI(8wwBj+R z+Qjmj+*7dD+CO^@HW1@bxA>^9e7IQtauRmy@>#g3a3RN-CSDN2BT~AGiD71kJO3|6 zeGP`Zg{`jil+8t%g_~TNp`xt9pbPKf6^(ZXUE@o_8*;4e5e5fscyNe~C!3~7G}CNz zMHrvx7_?7Kc$6|CTr<%FH6bnai|rT?MPdV@69mZwj6g!JCNwBb=qffBEl2pvLq%SM z??w2l5dNx?-~o5wKx}v;+7?y8ZGxN}6J#_7Y7_#m-1e4c3K?FL&99UJ!^kZ%k(0_H zMz)2U8aTiWiGH>)*ucT784}}Dcd&syb4hpyJGr=4PYweyeu_(?0VO+Zm8^fMWR!5L z5h3C!UW|L2;zq(-@rc)UL=`WWZAs*48x0F){c-4fme!JCN5>#ZoNNp%1#zaU!*@I$ zNk!LSez7q2gs_N2mHk~bmgPD;<Apcvau3OPhNt~xw6%HMT^L$F-VE=k##}~G+{fSg z*}8bAX|)NSSD`?vGz|N;^m&U}PMa6+=j}ox<8~H_w~cEe@GKt$Ms0{#JWESHzZQ73 z4t2D!Y{_ms<VW%-9*E<QEzyzUN1y2Gtv@xyRu84~-85al7nmClP*(-U8<r#$V}Tu= zcym%G0Dt!hGc<$6DA*uutpiV2qZxKJbMC@wE+$gPtExIuJc=o%6_!_+&EVYyOxtin zIU%&cAM<#k@;KTIg@vQ^8@#)lvV<ElgohnD1Ra>wk8oGv$%a;q%*L1-A7z|XB8n)w zgU^Xs)8Jxuq_?G$#wxj|exeg2K7s9Ytnf=Q3j@6=zSX*)f!vQwKz_)q;`^YMZY8x4 zPca6I@Y?px8Se193`rzA5Hp04CG+t`l?1KP6U2N^nzg-f)Pd>Iq9{LCEwB_D(Tk<( zS7-6i^39oSuAQiY#cXp1cvoIY{vvyxE{asuSSswqf3bJwTj!*ww9Za<EZJQp-c|qP z`_u3dU#ahl5{Cov<G<wZ-aC<U1+fAh%Xv{5oX8VY|MV}aWcqmdiFb}g@1KJi37$CC zB}?@F``n>xvz&N|)9J~7#d|^t@_J@T@Rlq*-Fuz0s|C48t1Gw+5Gu%o;OtF1+#yiN zxZsgc&=zMoyBa~v$A>{DJ6qD-8Y2S<UcAKn;LEa{(UqDZR(`-Vo?{zG!3)fUZyE3l zaopNw3ktyug9o%#5Dp7n7-nF0K?@i#nkWgbg8-IxW1nv{l0Jt$Oy5e2t_~XG`<r83 zKN9On?44uXp6l@%*948LBSy9>f?*BE8IDj<dZ1^B_q0GyigyCu51x*R;7hnh&K^W? zj^d&1X(wQ{zR%`t*mTCxWWZ*ul?LWhtY)?Vp3urnypn6we+S`u!j(;pQkEvj(o9+K z3hyv>RePgbQ}Bv29=#3EO?{ASxO~euJZ%rc6f%{BZ%rvYG%Up(T9@HAiZL3*Q@?+b z?ZUQ2O~H;VOdC-W!X@{ZM)5&&?;GMp=|x*(anR4+x&v(|<LT^@;9;X-jp%Zwt+K}K zkSmg6hL^P972hQtG2db`Xnh-;eQtD26s;zE+$NbNIt6u;soJNj3$McHS=ODzN59=| zX<1AQH=Zcwi@q3@X1AN!zccD@g)JUgO?5x=^PkDjWBj_u+^$R`-T7@bc)as<8Mtb` zQ3Tznet2|sR@U5b+HGby4HkHex+HXo2m*u339<62N7YCb^?o&f(7z}Decwy5QZA<0 z?$G!wKJ9w}Yi~M7r+9F*ZNDHFGH83>enF}v(tU;=Z=l_dE3fwT578bz;zZ<S#6lP) zvFB*PXcbfNxoAYpOdx(QfEDKtCf~tDb13F3y1I&<2(8H+c$f_jc=0<lAH?(UH#>dF z?!n3<)(a6rs4mk?t;;ynlH!E{D=D6Ij8vvC>3u0aK3L9!IBn^<5p$*#-6(EjaOnS7 zKb3q-b|Y5$UB6}c&3zu~gQFr&VOUPXaEwq!0Z*sl1Q_<>PkibfR{rKzgZTJk0sdx? zXeIux!rwF+TJU!R{-)3{0slP&6yLGq)AvTJ+J2G`NS=*g-epj;@Mqvp<m=V=fn6l& zvJO8O%NOw{9#)+I6n?ndN0(>u=iqi$34idjzTruV`w^+3lkkH<WWbQh@E&G-`Ss8l zn8}3vCk)t*ahxDh75~Lja3TyO%L5LlnmUeg)n|XhGlVxhzmif4*L3_{2%ag6@xzHf z@zvq~n2R5VvxGJNy9a;F@AK*BXZXRC5Z~kYpWzFaJ@^rG`5O!|KZjr_#Gm-U1m7q1 zo~8)=WBSjM_;Ddrs1rGk)l2Kt339yrSnI$IYuuh+S6Q}f1#i?>-~tpLi>zI~cGa?e zo@e~To_G}Tk!Squ2O|5TI*2oX$)1OdF%bSON5XiB%=)SDV`m7dy1`0e_n+|YqdozJ z3p2ho6<%ZluE_AGI0%J1qqs)nzOtm>cueU#x9OU_4##n)l-Z9-x-P%66xR@N@D?{2 z#DkH{P8_Jf{fX-3ZqEv6df>+sjp|w{t|l#T<2u3Yb@H9YSd`UK7M^jn$V<f$ZiX%o zwZ^9gILEv@^ih~2M=aMKF`TNhoyrsun|kDk^#!lP&&35wp;`cC8!w{DTYmi~@?d0< zvDE1^4f(dT=F71}!o`UGPNQ0xBmWYki7P6x81z@4`?HUEwEgIhzCU}L_kN8Z)qlT? zKcYi_avdvsEna{8wEL^*5UuY3>T@;Su;({Jg6xpwZ}EQ)$MpF6bFWtJ^7KUFksQBr zpCZFg;2#+(`S<6a`bGIsf38*j4^Ec$5lmh9+1-oPxS*LGFTQ5{C4Fa31>6StlD*TG zBL;#P$=JfbL-8+A2Zjo4>HC3l_p6M#uAlI`mAhh-kUru8dHDTJKmH@oo5zneHR(Hm z*yG{XpL@A-=eX1Q4&g04Fov%Qn_2v-@Ruz8GO%aJ&;HKgC^e955=&Gv{jB^KEB9s& z=I~)A$1frN5#`=*`B3f!!gET3{|r@5K2PpR_!lVm{=zR+?)`;duH4V-hkv7TSI4jt z<ZD*$s+c9XkC%KM{k_x2cySim{5+<__*l>RrI)=eE%duJZu!2E$}aFr{yyL07o@it zk`2bH@$c?2EKG+S)q|j01-ea&PNiQ`es@~<v7Hc~4p+&|aJj<1sZ+|=A3vtYRHS0H zqGP+jFFo{D()1wxGSK9x_j_XWKS)k5;t%@nS0p>OE8^4gs`r=3mv4mCy(;P0zQobl z-Z>)u0nlf@F6m?Mb5$glgY@IUvq#ah{o$8xm)r6#+y~&FuAV<)dn7)a+>Boqc$F$T z)h;E?HxKCY6dl_q@g?EMcmFyR9owNeI?KCO-veFG5$LAE^EmV=&ZtZ$F<*vV`b1kg z%}soVjXK>YsOQeuo{7&UFZp}Hzgp47-dFpgjlV7b=#TH|wX5e0WBIq%<}b<nYInk4 z)0;9rsvSz2-VcLrlcMXd{4@VvrTmJn0A}&&cv{kXR9YWDmZvy6WhB3;plck2eAj}m zZV>X-gRWfBsdh7IeEB}#az&@w&!lwESoo=SG=c7Zw6i(Tmwyj%Ce|XZ0$u}c$R`5} zVE-EW5#o!$FT%bRNcXM4%YaSFycxI<=3*e$YbK2Wl71L)9`L*9?@+fUeG^E!pu%Me z=K)J$?*d|IbK(Wc{yg9nu<sow@m1h_m|p~vj`~OGFRaX81zrjB24(gt^GapDUYWn3 z%%#daN12BJ8NWm5-xmSj1k(IR;6mUpfmnsP_*=k2m_rH!zzUd`1DC<Q4&w*n6+rqQ z54;rS6lH!A<C9BZ{w0v^^MQ0fS=o;UUW`Su*E7VD*QA$$OF;K0Am!Qvq`wD%lq(FR zT(<xzmlw$VSp_Tu-T*8ImI3L1K5!{;4iH1Ziwl6~1M`7dus;Jxe&c}G!aN+v@V||< zD9U*Qkn(>4NI5+~#y<zhct_Ack}eD+-EBb9)d7*jlU4vn0j~m*J`YHFbATrB9EJZt z!KFD0bOT=m&IYyuF9+@fvK-tGB;Buor28-69N;&Bq}vQ6T>wbB^+3`s2a;|PkaQ(L z(#;0CU_J-Pc%=d<XD5U{7v}FPyiQ>rko9DgGS}c>H0j<%gG9UuNdLV^Y^F;akm<4m z$aMKWknz7m;iW**4F{6$pXrjW8CV3mJAoe3151GQz@d=)N?<X}mjLGirz>~9OG5Wv z%nRrq1=9T$ApJiNr28{K6un8m22!5yDVz_aJSPJw&uAd!j-X+tJU;|d9=;_>es==N z?|LA^n+Ifgvz7ZL%ALBA>Ha>5>Hap5{-Z$pe--~xo>m}=;G|yznIGQ<E`tc=z;j{F zRQR<tX<h|nevAWB-g{G}{PzGU_qTxbzYa+L7b*AmhDiEOAmh(>O^Cl%cnYurW(Sb| z|AMgt!@o;mslp3@44=B$i{Sn{hvfSUU@^=q6kY^mx}F83TxdQ7U*01)A4yRPb2e1) zo4_f+0^k>bIY1OC@xH}zKqt(n0y(`x6Eg;BCEmS2wu|>gcvAjC*lz`*ofq$ikWVAb z7XUW_A&YoFg!a`i=L44m7X!<Ip9d}m<^dT`(iH$_0P}#P%K@GS<bwQopc8lwFcWwt zFaziWrUOq0I)G;Ydm!goz;58#!2Q5Uz<t0|fE_@@MZ711DlsMkGtx)ACvqNeE6me@ zO+d=k2t*eq-V@0L`eB|3tOk;PIdB@V97y_7U@p)EG9CrM6M=a^bYUXBKL>QeJQWC@ zf-VDiHO%S2$v}YM*M#zfs14&hpIEN2K%rBiLm|r>=^_f76jJ{){tauyf7gS*A4s}7 zApVK>GH73}><bifwIBb6al!w3xI2OLM@wQS{v$>dHYxNgtOJ5{7|Q|umn(bbKkb?S zv@cNhPK6GIJxB-AbpuJ)353(IeagN=*+-OplS043a)kv7oeG)m<jZs?Ux47tdINLG zE6g+y=yjaClv%Hf1e95?gQPQaL9f>>9@O*<2w$}_>v{kGD6^i&|3sPfyq#|lQy;%x zA287V(5%-xMnGb=33`3wtkKe3AYy{Izm!?8-&{0Gx<|m5-!}w*$c1vlZ>gf!>p{mU zdcSh#n3v({Zxq^F%ELyFAK!nXS+58E8I1|)%h9;-drQS9qUgV%==J&--@Bpz3^Y3Y zE>-S&eT=+>J34)SYlRtOPRPx#9BD7YM`h*rS0$fbA9x$%3E^M4pDN-LadaTx_%$j1 zdOhNN*pXhZU(8Va^m@sE>i8=E?2k#W*DIP4Z<_V`Oom7gxU2ZR$@CuXcl4mq;x|m0 z_5Cl7+nDE_XpH%Njrk4wc18au#s}sMG=}`XuFR#%d=m;X-S;c=HxMq(4kxMcDf&#O zFgY@ju5`~)=KoRVQf2-F<s0UA6reHY7iIZ?S>Jzq1r>>Xa3>mVeqW}%a38AZTNob9 zPGw%F%;m~_3FU=*4jOZQuQL8H`<43-6hGeo<F`%GcPsjvC@<)%mAQlR4UagMtN3$# z%k<Ru3Ac*)M;!YUza`2%LDA1(`0(GT%+#08_YgYSVBk9dGm1>?yC3;$HGk7)UJUuI z?&qPrSk2$F@tX))t?nxjAFKHyoB!t_iPildHgl<s{z4F2>Hj`F-h8i({$iVaH`v_W zw)lEbpRN3#N{u%oIpW-(wT1svTYPV`nVBtC{`+nIe{3^zylbU5Z1V56xwGB0((|{~ z{Cl+5R`X_?{|{_tTuc>8MF*i+{!_7Y7}FG@G{akTD8wnTw<=GXv9xyfs<nN3>XT^7 zIp%uo2Ue#MuYUehk?^^BN=FOSO=?}iE|m$NjtJy>q1X$0kcAq$Pm|<A=hNCXTG75$ z_wt8T3~$p071JJWsZKFFRu{{Og+Z%&AGiv{*ncVtk6qdX6)l5N;22}l-_CvC2?gkb zktH-qTNS4WJw9Xl(Nk_yxPF9;(M&!a8Kb4u8qnhplKiV3e3>rWAnNA(cyzFT+H|j5 z8XT1Q!RkP#4!n<1DLEwhw^CG2E!(yeR{v@hqhgh7esX=b;*{Bk)0IA;zT7;0-fVz_ zW>ag|FRgZ6`3dTVjZ+|t!-AiH0@(po$O*+|3zSY+OJ%m`0sVC7x*WJu9E1|efs={) zniJGe_IrdcZXl4v<G-8!O2kKvHjec<N9t?S3g>b^4(18U=XfGFsg^kHkf6>@J0!5u z8YUAINot1#R>~pv9?ZY?Xec(Z!7<gGGMrNu=YEAIevyPq-{gQb%bM5&*WoywlY`)? zH7Wj!_nbNbJ{7}tod=&HVPj2Gd|f)?5%sv1=R^37h5NA_EsvA#V+%pYfmQnm_YSP5 z*2TSp#B=L|KAvxl-2dmG?TRFG^AdDR4o2tY<lF>rxw%}+{ZP6qp{O!Jt{m*Y<AeT6 zsi4v+znK2Y8U5(5%*&rD6<(H)yb&5Ssjt$iv(m1w63g)pKmT*$4<Giz9eh*0zi$&a z$nZ7M5559r#<IABf7mV&-(dAs*3KCs=*f@4cAlB)xR6YaQeUN4@mW4yuyc$n8RC$f zrP==fk@Qt|Zjioto`9b}Fhs~FO=@FU8-Ou>dD7CZAF=yZ$&dTf{2J?rIAlsnvpvaU z{H98GJHPhZBtPwMc|&}Bt-Q&htZac77riRn(9SH)@%kz|6u(0<I7c=3k@w>NNaZ<- zB>7?2&uQc5m-4+M!BPFy`1Di3!~hLYZEeg%dE@n8>T;%%S5R8xXx($6<B{}zwjn?H zeHr^x{B8&;L8URF>?G>@w8{5%>7VB!_;ubX<6H3ERB?+_+V=e~^mF3fU2S8JZ=I@F zYFkl|4IJNr^@sYuAq6uP6X$oNe9rHs^891MhquYr;;9*w7ICF1AwSv?KYrNG65sOg z%JRJRKU2m27q-#jJ`vvm^pSQbe*PKKTeafX41T+0P%34m`;qjKmOd%TyGtZ}_g*Pq z<hN2jWczZffLSnzv{w2^vz56W^zHafZalKlcwegHAPh}7`0#2&ynfQV;m*Gv6vn$i zb1i-!?Z^AhZM?z^Z5{f)wcWg3I~U9Q(c78gmiyA;KKRb<;IW^<w+X#U^wTQTDB)(f zxcVKtUwyRn&>w=k`B0S57e--dSWpC`f}r}2nEXdg&-?#cf0jGA7aBA+4>QBpr9fu^ zbRJ~XM|`Jw!nG$!-3ZNE{Z!#2JaZ8(4wgLQ36^a2gf4Ig{(2aCw0h@-y%T$F)b2oU zcg=B7MIcqRMo)vqN$XGagi5xCN}eeW_BbM&sMNyso9OxOz+(n@b$fz;7b$8&|CT%O z`xK~tg8qvQ+m)x1V7EJapF7awtc4!X)~;@d<AL(dz-yh}(>(dzwP%>YU1s*5JSlIP z`G0^~G0;2-8sej*4PVt+9DJ_j??Zdr%)slZ-V4olUd(+uPXCFKk#>TS;W;707@LMa zPez6r*yS{P+kAhG4#|Dm9eA(2<_350EqC_QX84wjYBRj>gldca6eHuZMkC|$CS&ZJ zMq}*!CYYOHhECTx%`it`?tr-y<_?%UVeU3EM#9)_j5W-_-~DFb4Zl0E%kTTGJHOj| zrkV1#nbI25k6>&&Vbe)w?{2fV)t&!>ulusrv^)pYgG7*KO~wRQGc;>7x<kcT)glq` zqud=@n6=ytF4_(os1<QFQTswQel(h)MO)lKxYDK^x-S-Hl^@!b;v4M_d$Y<B1k_eU zM+*P$kQaVZ-YPb>wLrszC-}I?DWPma<}j6)#VNXynkb~BRzM;3<HVQ0CsES<53xEq zjJqPmPDG`)4)Qje!EgCtxk=P2=wCww?%f0nPx$9e0I0a!0^o<Ajq(?CgiPbFSWyb! zoFmIrXu$-t;c4#*C}7KQ<sLH5^pnmEUk?3Ib0?S~mZ>%~`yI38^<if3Q)YfQ^m-iL z$$D*OKWk2eR?C#b=ElRlXyMmE+h$#l;tN%lfk+RuqGmt`1j2aS3_jueNi>ZC3AQ1q zQnj+qeHzT6734iL|0&-%oitD$A*CRB%3d?r4t=O2pm(%&<4e7eqJ*iQ)o%9gGJ^{y zv<>|L7b`>zlvazvO|2>wy{AL9Nkr*4qJA5xBrdQaGRph+=qRiHF8@OhlZR3NZT#;t zwpBWcgPmC^K4|fH$=ur&g;I&oRyZM6-gWNY$J~1l)JHsq>*vj|1pa`I?$B)+&<5qp zeZ&cqOqDh<`ZC)J*r+3a3Pj@%Oc&;GUAjAXTSiI4tKPBh@WQO#BL6Mt_Kt+gm1kJZ zpsgaq6MR#!@;~$dy?AddH1401e(quX4)hH3ei7RFa5jo%p9Q-ehyvs4kj+pd8m%U{ zvN&{Ls0p2YjSm*WtaX2w;YE>L<P^34NQuK68pRKkjbfq9%&N3amSstxGc4A=Qy&ra zw`CRvpK=GEjcK^)fDoNh2v^60ya!`ak8-OB#@M!~LuiQ!`}U&M^>xNn#Oy;gLsqm2 z;SLI7QO!E!Pgb)`r6Np<B^|U_iTa%S^d)5!QamV3gr2eu`yOQ3)(Thr8}^|XJO!IW zsVTnURc$EdQG;c;mHAhc&WPkj+`&iPLhmUws@yUh1s2LoX3lYXPd3A5iW!`rX>4;u zPw&$|BJ`3Jl=gN!z#cx()9am>`*?9)xA!b#XSWvF9WKsFL9pI?9^jbR4BVXlci&y^ z-baIb0(;U>NDS9O9cp;i@WSJ~!<`~AqGw0bsBTrOIRcRfaZ9b+FPz1Ho?s7BEF-2l z25Bbjb>P~stS@$bMJ75&scq@v{YVib{5~Y?jReK?tkC~(mT0%Ur$Ix{7LF%`9w4bH zJFsDku5VkkQXKkFHSW)dDVp5xWi{bPa33q38T=zF9klM;k+qcx(eSuY|6BYh3IA4* zxkH|;32cu+;)TAduqPK~YLD6S<_OhDKrIoJ7eUuhDD5pz==1F*hU?)hR#sH4?+K>v z(1s6HTj}e0ZwB=6_7?hYIkR^pO6?z5S#=4DwY*ZRU&ytkw>{7^!npk{MkPFY1X9kd zNZV+pwD)#0As&Q1%G@6)UGE)Pn@FZ~LIK<93XBlhqaorRMtmV7UYvo5?=oB7Knpo) z@40Ls5#<)+e(J@^VDAxpV&lsWv=&vt(sY?PRl$<&$r-gW1<laZgPKvRJM>#25H$$Z zVQkcEX1{L+7eglz1nD<;GyAX^taf(Yh{8VDkf0{2NroakA1MTkpUmucp<&2r8*m}{ zJzpMzgkIA8-~~)Nt$!)JXiM(nmU0;zljTOb&VZok4`SuBi{}}w7SUxNLzX0jGC;XD zL*w3(*@ujN!X3I(X3NBd$d=$0&aRQn`F=`GD;^k#PO?TvhTK1SKe^U_L8FeZV2-uC z1)doC;fmacE(oy<ZBB``FWy2nBCJyG;2l{U91T8=;ei9IUUsjX%vd|Z#6oxPI#uY- zA+;`a3bj76=KX?~vNg_heD9way<iA41UfT`A(&U<cM1M(!Qao6yJ(N8uMVBo;X=Qd z5jnhP#Kyzu&-Kd$ftjPc-C|-SEv+gJ<Mex}{t$g3IznUH8J=)e3L9XIXR0z}>q*sb z?$8`Gd6A<U))Zh^LtlLj<@mmavN(9q49{xEcuaRjT}+j@`3K|czb$>3ac6`RJfWWp z=HXUzUw>ZU=7{41jBX<R)d4ef8Ja_kkwQbv(B<f2N>E^3TlF{y)2n^#OY+!U6_~*m zGy9;~@@}fR@?AGa!5GaN#qYAwEoA{(Y=*~=<ueLrxWl((<%nDr_KG6L2ve5{9K}A^ zvN3h|nDKel9M8V<G8*im=E_}eGrPrH`Nupnb^NpFLY|j{I1ZOxTctWyC{qijnqlbb z)Z?=d^tA_za@@VeS&Oyw&}bHTv_PjORp4nCT@Y3ILE*6sPBEOa4E*|2I;vS{ma*|3 z20a+~%tuFab^kq)WxYV;mzZx$owjmvFKbd0@{QfIqpGdJi4o#(G-eHXdT8I)KrOO# zhV2CP^AQfIRefrK7P|C=(Y4S@2N4%QL@ML&8zscIrpEnOfFjonV&ryTCfEl%&SjSw zXdhk`EKJ|{GP~8P;9V39BSCN!I_~<9w40jdCeB66425`9LW+Xt3GZ;gzbAZO0iY!K z50Um#lX6vKap*p}76uNF@<CfLhU3yD`kEY%!C{E+bYq*ViDh$d*H$i3lx!`$FGUQF z4suKZb%$!~AyNfihIwb;|Di_1uh_o{t{Ct)3FrDqN$@pK_(#hTtkJ;r*sk-zMa>8O z4?V=>HtN0bS+(&;Ca4^T&2U30ek3Gx8);Pl<QjZS1)=%Zr-HREK<?mUGSg#~wQrUR zmDIsEF`^Ov54oCBd?!|kDNJ;HT>HRjju?=;wle74LyW!f1eXq^cQY0Ns9v+l78K|r zf=){#l10va0y~&B#~BU(BZg5&%;;Gyn7s_7<1$6210sxKgCaIJ19M_C8{O#3m|H(# z=C|w=31_(8LMe5Md2@Ic8kWP>`7meY^bLZPCrr#-#2_uLTb4^t@bevJZ;P0`tA3@B z;lWq95Q9U;f-MRv0oI5xgKv2aVec{XJH)sX#pqczx!)rv_s?Q-&o%iP=(g39`#@1f zkE{M~M*Tvj3=5K+ONSa*d;&eAjN83%c_3{Z%FGX1YEJ5^WR>Zg|HKG=CtAEm_iO#% zD9BKLYBaoxKCtT?l(~d#o93uy2fHEi;8{pBnbmCX!*{Xbh&imx*HG<Z)HUX$C45=< z1wp8RZh`h82+;RBR9bJ>ZEJL8VyLs$s!+3Rp^}L`)D3<eA8U9nzY6RPYhba0*p-W< zf>u^aEh?kX$K2NhsH96GZ`V7JNs8=8`^nJ_QfS(*)(DaP4^FU%>_<Y8dxFRj(VoZ2 z8|g=0zevBXjbN+f-H#zkg8v5ECQaYVmA4KM#Lv&I;WyAZnSWDetB}H#`!^WbSPNsU z`WHjdyjC9`(={K>kCsQTi(VVOCb~F!O0*z)NwieYccZ6APm5lLE;H)Ef8Zly8J!%R z6rC8&7IvaEiEuzWB#N~v63TWYIzrFAVV6W8#7y{%k1zXUGq~OfovX3_RF7vi9`GZD zW$%b=ZGr*)o{M8qqR3`T=NHCQ&%UnoVR}BFKi2IHvvzxnHnGq1$Og=bIUlsE$|<Ki zG_FI>6nD8pSE0{afIhDjI$iJeQ`peAHWBjQ!V>c%yswOsjvl5M|7{y$VgY;o$)@px zw%V~`HBS*g>w7tR2K}7kzi0{C!SH=7w>lZSo&yi8O?ko_wnoPy@#?{n<x#Y+XhPB6 zNfBG{Zqo>NXjHoraaK#Q8be|6Mz*LQPkWq|*d8OikD)z&)u?|Baktc+!d@<sBYiP| zM62w}w75m1mi92vlV;T40ndS+kw*PaR^xbW)M!V3gXueq`Ge<!PLyG>WEx(y)!vAR zb}PPrPHex@5GLANzCT9C*m9$+M!C;NhujMV&#L-i6@BBQeuNtv)XJt~!&VtTOS~A> zcES7&8}sPTqGv?MM^BArM$@C?qQ^%w@P>)C>ZV$2JXnfI_SHwRnn~U2SjxmGq(f9c znGkwKv(2>+LL!+KwF`&(h*1wZ6#XNP9@1Jio9UYub!;k4-&E3JhS0+=YBz%zB9ydq z{l>U|Q3sZ8P~3xiHon%2@#u(WtAf?AcXe!hiT39T%l0bqf>c6y$rf|gA&{Hv<njz^ zsi-T-SCBA-%}@(0_oj%sNqB>dqS)Yoo^|ZJ$>fvPI{7T^nMl7<>oDK46uhV-mS7xw zB7K|FQqa7$i}Y0MT`+H_+1Tdm2zFy%F1&%O#2c_m{3epx<&!T}iP|-&VSe!0jjwTN zZ-(;4aDT(rjeF9NlvTkm#m4#AaY@X*W0snT!d4OUShC855Xo9<NmgkcOV-5xL+k^{ zc?y<VphdfFj#DPy98QhUS5PaC!%?tl2D+I<|C{HeZ=RRFX@2^q*(es+;y~pv%-}Hc zHSV8>)k0DDc43^!!uLc~@M>XyF0HW^Ma!0|;5?}87W-M~&oZt3SyKJs#{EU<1;(~L zVuCdSWf$#sTalA;0+rlFLhjx@n8B={XNHH)qie;eW;3Ow_a&1{@>rCgcH}-Vn2M$Q zuvnuu@jJCOmFqavNB$7H6#Yk)WQXwgsQT0U;p~qWu=rwm#2vcbk3ij_?`#5?`MbQi z<^z2_8VcxSGjQ0s{xtMw2WwA6f94J<(hlFt?%-AFQ9QSV9uhuJz-C*DJNR{SD%d<3 zQ-bJFOkjd71;)-pfx{b&+apL|Gko#=oV8U<y&oHHy{{Fv4I2gz|D6*(VKe&6miYV( z{=vVy!~gz>^%;sWH`iKf_ecNWfA0dL;RP^M4zM=9@&lN2pYFN`0KQ=B=*mT4_|3#3 zN&PIi^^M=n@D&hQ#K_o|Ti`!@t@k+mf3|OY7mpzzT1LHCf(*0_(E(wqlaEchy}n&t ze+O4Er!t1Fb{QxxRAWXcM{jI3xkKIc3+cwgGF?sbH#58IPWd~Hzc<O>>G*AC<H0%f zWOsZWhV7)p`ufI-A&y4uuo(5fgoUwf{E&;rr<>t|Uhf;x8zBUbj7X2Ew_LLwv8Jah z;0Y-jTOZ>N%~Gr1H=`H8FOQySzh`K_qu`hHxpDNM=E7muAMqc4Lug0W@8xfX+0}yo zu&17?Qnl+h(wwHv_rNSNT4XIVa}4wMWR<$nSN!jftQ`@{ZT}Na|9h3bH9GM@f36w+ zQp)DB{`V$%hx*@}=sU$7ykC~y*4pDYUy*_}lOfTwbDzd&D|j$^3Q7#%c-ej{HbMaZ zF1!}hQajxL-iURtM@RYJ8(BMCxuaT;BcA`rXa+x2E&2FHBiAj5pgw)lf7=Er#|an# zU8!i#RKICH(%($be$sKAqhwex2wBRGK(nPE_h<UCXWYlAd_EPZ$KzstBil?fBw9KY zA@2<HLEUEB`Xe+dqWwG(?dMyyhFH*0-r9XH>-Qr>VKZlnrWh~eiLF*awb_9oO2pWS z#p1s4hbJz455k`ZM>$_$duHnPEM?ZU-Z2H+&YpF)@671u#rUsa+qE7v)n~Gfn6jyE zz7{PtEYYGBY-;uGK!}If1d1hTwZ3YGzT;;-4ylUvtWp0i&Ea_nO-Ne2d03&p=X2h< z`2Rwqf%{DCZ_NBBjQU1FS_o1RQDfT(|GOi-<NfcBM(5!BGy9Hef8I#nNV7MhXfP9t zUW<LXAw20bv#<R!^Ko*b1N*VT@3VsX^FQYs<)3*W9x?F^kDgT3$k$B5i&NkWtZVl2 z9kO;T33<`mmg<D@=UwQ#q;Ok`{}HiO>z&4BqtNY?5)%OI2#k(i8B0${gp)_78rw3_ zE_pBVzdza+jZTq=2*jX<vG$#A=097DNlCY&J05g+hK!y&YN8LYk=&0zNAz)9`B3GF zarsS7bnNDI__4Ov!6(p4p@CYDxw%L@NGQum?W@tf{&z3%&Cn?py5A2jkhUf*_wnd3 z!KyLlAH#3$AMx2A?estH^uJr_tBQI5y7b=8_O&`?b4FkLYU=iN5878GV<0jldJ@{# z;}PNLXtuB22rmPoH!5jkp`o{KuYDtmlHON-k=6_f#hB6dWJf#|D1Yr6(sCowDRVi= zy*%t4BiCPWqGz13Egfr$z3ms_p~iK+-UA>TRg!{z7U91+1-xVZTU`B=g_UI#&HQvx z{>}VW6fKq?QEL5{u>9ns{5+w{&l4QQzylT}W%<EjGcmTgOqXB(MHixOuwv@^E0a!+ zp+pA9<Ux7G8bLVb*VuME`Wck{_fYnC;Zz7}uVE|ujFB#XqW)RVQ%wk#JnRnsU+kBe zcn;h)x8)LZ_6wZaio)i}k9w~cM}_**2j~7$jBTm2M*F7Wp`?=F-x2!FDI?8r(GZVO z++7lUXD0_U`aA<(EsCCOEsr?W5p&Cb(-VB#_shVBhf{oYT)6gxwr_!FW80F5*l!E_ zTCnHl>(F~{OWO5OqN$HKK`5j&)lnjxpu!tASn*L~<@ggtJWa%Hw~N*JgfrB(8=m{# z&}?pOYZBouil`$ud`*erzEK~+FExjajzLjH7zuN9bnp{6A73Ind3oZbZzW7mRjlJ@ zeZDdenc)up1N%?hWy49a*2C_JUc6?cjyj6N9AXt{(RMyuhD!1~j41N|WYlwziU%#5 zJ>iSFP~CM9QD`)F9*lX-e*qf~Mgs?0!ja+QP@qxIbn}F3hQRlBW9MZlfyfJio(0D3 z$AOKzBJFlhN>6X+&a*)k{qLO@5`Mn(TEY)^rW5Yo$w6xL+ajx@U#E^vM|9Ip4j`i& znV?t($IO2_&Z~IBu3w03;!yT)APD(>!R<)B%YdC5G}*h5(&BLGqIM*B2q_<SAq$F8 zR^*9KP3{T#ws)Ol=}!?290Nr(wvF_^d#zDF9&Y}3&o&y~M#qfZ{o8Cs9LqNsenFh~ ziabbNMVhgc`j991GK3ZaNAnZCj)PYmpolzpI=t#^6(uN$w0_wWl*h4RHAw6~<_)4~ zG=3A}-U-={=I=i~grB3~|8dYZ^&|67Z1%shneDRNXLEm8nRf%9z+Xc9C*A{e7V<d2 z`*O*wvK{;9$ijjO#lzsH+~4!p~@U?%br4-Bg(^epqC`1W<<fvqSQ?qG*o>=NR) z-^4qX9y|h9jQ$M+i$e5@Xi@gL+ggy@y(LER@7$04{z>_Hg6-~iUPp`I$$#4j{E4hu z{+23ju``}(rr=O<+BZvrPr9=oEeYS+%c0!~!M*;L4h)Elz*yAZz^)EY{{GtG!Kb56 z#Lu1oqS3&i7A%e1yYVCVv?u>%<MzMeC(j9o)BO0m3?bIsOW}OW(UtltaF`Nj6+-DH zL5xbm+;9%IVBG^t8-d4DstWOdnOHrp3W`l5yaQX1VO;%qp)uCXFvd2Rpm&D~obI*) zC&EE0H!Oyg8QwuoU8h3M+=vKmjrq<#gk>Tu%+Nu2S2@FKSNqHisvveeE6fFNdsx-5 zix10%80{b%F?aN+P1CNQQ;>^cecSr^aX~KH)K7RNjkdsCTWle1MOEJvEs1B>9Ah^m zPW+PXc6JdPJG6W1JUrU?jgPW0SsIVT{$t~TJS1fm&KmgNP4i`&p_6%pc{IigX@?%e zPI&PyjxxZBWEM`?Z08P<C;ZE1)D=@b7a7K;d@#I~Hi1Y1@=Vb1C2M)o7K@HekjT;I z+6vF`##Rs=Nd*pJ{78D+4R3c#Z>r(8zEQtJgx1!O4&U^OLko_+pFIdz*><a+ZQ`+9 zE_%tfxEUfu1Pxx%)O|xN&Cs^rd=(q$9TeulTo8(uoCL8r=mf@AcwcHqhw&hit3$^_ z$3X}j#YoFS3-%OGaMmK=Ft=E17Dvm`hhteq$e@VSGsbvbSjq$1Xjk8OR_|{G4xoM7 zgZ3#`9-jAvZpPkcWxI9!WN)v!ZS9pj9WiiwWo$di49`wMyYUjrh-)^^G`&%eb386A z!=+#v*D9p6+#iXJA7y!KI8=ACjL83<f_2{2eFf{%fANB4Eid-|iHnRJ|F^mPq8{N5 zPu!f?<O$u1_FJ3_fm1V`N`fD_v;XW4e9&zMchsSpirYF(BIBduV1Ls3F}MuCYdTFB zuH6$os|2?~GTedJFltjJ9>-1Gfju0cHF<)STk%AvQ9qgz1U?XVbXvL&ASB);2)xwk zJ;{^bQ+vwg;c-rNJ*P!13}PbQ^%%&oG|?G+w&l&CxOWnGEfovR@4S#Jx6AwHC%B(8 z6Zdmwq8Ccb!~L8*45{02Kc`jP&q2e+`#G4cnc44|VK0uIg>RV|e?JHJax!o)XYA}o zW9&TK&%wQ%4BX2ZJG&WX+|R+ioDAH{89TcJX57!2gZnuKjNQiAF=pURzr3R(@8>+p z`#HbE>U?Z{h4*u?N{#zDE$Etk-JX=rR<@z{Z9<!ZQ$bFE8EcQxnuh6s_BgZ3G}a)4 z8Zt=8Mp>RTK^w{k!<l1kqQQot*P~k9a2Z<kyXgb(r51RCJ47h@0ag`EAcEO8F8c%< z7`P|}4b}XW-B1o_Yw+X$bddqf#@A)l5APsbY<&97;1cy}Jh$rH`wtbTJBNDnF`?UJ zh8AP+Q>}_t1VyWZg5r>uDq6-@8U<rD<Lu%!6L|C+_lGAS9&*Hi-gQyBvF)u9d)%QC zlwKFw>aY{ev3>be^s_GPQ*i@k#9KI#M$hPMU20HLl7T@9kIK12E(}UsP6PucV(fyZ zn!H4;?oAOVp5qF4gmV!V?o}+@ahK3K)FreC3U@olZ1ohNuW-MJP%MSJ+g7+ELWq{G z?L=GQ&XR>2W${x~o^jtymS;13;&11&!Q2qxi3DrmmZc|TqRfRkbQAl#rD%l2DI8dG z;FfT1Lmi|GPb(8_#puq;X>lB<QksHcb0ALl(G`nfA<?#Bi+PhS*L2XoDUAB9il{h@ zx&>uN)<aRFP-1oUL1|*85q@HIMV%m(;{y6q&Z?EvC-lVLJ{xGuNR98>hj+w8ieg)Y z7BRV$g+6mLRJ?l(c?KsT%f1%JOfDrz*l0wHu~wtP);@InqQjJ1at<+Pb&dd~LiQrM zo3Qs+$87%<jdO;PF%Ol0KK?My3C(fhv12FhA>nT}{(7+X$1k?t#{SZ>f1EPV{;?TM zzJF}-Kjg#sm$$`oj{1DX(`-i)cj)6UCwM}mTF{_gk&c_1yNvsN9oTd}9Na5g+7a&t z-`V&&XL-dV+DbxrqTJQ)4x;~dwc~gI8`nK(X?Y?*7~ZQ2F2Vtgf0Yv!dVXX{|I~rf z|1D$e@MQVV^bfw@*9)T$Jx<Puit4cbiDJafU~E#d<HQlt@Xe+16}qn;fV@tx6QQ_s z!C#)~x2{i!``_IE7n9!6^4LZH+y8um9@n^nEpqsND~9j;>mSEBK3$F6v8Ate^DXbW ztNYw}CAgp$+~W>D=MMf4VkrdY+T2j&E_!lIfmXL~=Z%ZPbJDVK`t)MQKFq!vD7Cmf zcaTT(1Md#K?NZx#5wouoW{Z`zrU#2at!uYCgj<3e!1oZ(@rdxcxGl|HDt8cT*Vp>o z_>J9h!(W%;^UcDNA&!M@K*921js88os8%2GE-MVBWwmsUJlFAo;dp=-ZO<urG|Z=Q zQXGZBw5;gtM45KGluYvnmMPXM;Q%GiN(LT{Tem~na6wl#TslY9{R@<rLU9%f2Q@fX z<$(>zM1+Xg<qjOaZT&cLn3#JVFUm9!_xo^N7+dG-&)vzb?><LdFb#BGI@%9Q-nOhV z!*f%j%L+k_fgY&IwqNQ}K|N1UXE==8ZwK*Co)GBQ$7<nYB~A-vY${ACY<Y87Vc@kh z3pehGz*ls-v>yVYTJ{gK%7t<Wxp0wL`x^y+2K;rx9|gy5)b8R<Q+Q3dD5H3jIvgd) zQ;)z-1~+QJ;EqRd!x3D!49@!vGxWub=-1dysZ`d5FgE^<&4=WApgZ`CKF2aH%go-3 zlAX5U5?P93!&Q{*-xqN-gN5H&2ud@@8OkhPC*|6&JkZ`XnY9SJHExtfW9JamQL!{v zJ2VjKh&pNfzW?2!>tXz9bS#aJz-ZjQ3tR({$FXySYA^~uFHZ^nP8?hr39l{m3gh?v z?+>GqUSWL1|317jcLOc(T7#j%RCui!5_~)6wY4KUo<`-h^{3I%G}7z((m*S`-GqY` zv*7K@RCQE_A?~6#oSaeKcF`M*!rLi<U5~ePrlqvByp)!*r{%S@lxGWrIaq2hPE58x zT&9xkvH_C~6)Petg>BtJ-wu<GI@uHYYqfqNGqNOf!-SIje;9$UAxMl%JlU^c(<r?J zm$f{>h?(7Ew)EikQU`7?J%PPitdVuNL-U>PaM~zdKnT8os{o#0=Q^xu$zd9<c})-$ ziVJ3Q?guQlmfY{WByKH*r#|P#@-ZftSj3f9`XW;cE;0>^&Nsfg9>s&a%!e!t%y(WP z1B8QRqp2P4d<<IZuM*8Mu0#p9*p;Zg;B->gOgJK`8lE@m&n3s+J%@Iuc)x&Aa}FYn zW~X3+LZ`x{dt%r*6V8E19_HBQ#4+Z^cY6$n1JxFb)?yi}_jm5zIY`gfjC!tUV}JaZ zhrs|oG}qmS(F^w{z2J;QYM6sjd~ESP_vw;`Lq`2wh>kh&B(vqcRP%xRS3kdv|4if8 zPk2%e-g-7Nkx3uyfQ|)RNJD8s+pv<UKMuq1sjbm36mB=c;Sv64W<O;<aOtfd^c;Mp z?dup*n(uVsECgA!?7tM3<%Xij2<xb12)p-Sw@c<~n>)M5y|RO>_ki^tlshe}94aJ~ zcTZ@3oqSi-g{|z9;@k^+BgMfXCBeNV!6)Q?-&?ikd1i{!7v9rxpL~eBch{_u-siA` z`-&SaRiXc)k=VKIh(1=Fy{ES|nA<zVz8@~m`$2z!X$Jp*jY>WI385i$b(*1D>%{ql z=m>_#3pdbA(4)sUX8yj~^URrF^&_3UxTnQUer{kthYf7s%RE$p&1<nx{aE(<+>SW$ z<xALMZ)n;%1zvJ7weBqp%G0dww%MY41*XHz;g%=#bVWs5kK19`Ox#aLi<C26oxU+1 zt+U~}!m=guhQA&!it(59Bo3SM9Hf>%)?cXmd0QARHj&g2P^1A4@5%$EKp_~m);F1L z=-5SVFEw|@)%Mp^ZO`+Bvsl{;c$xskP1viN?pfKDSCabqtf+zENOWXLXcca@;}{uK zx2(@|=dUmDPDeXZ>Q0@%n11_iQQEFhvgJv8HhNsF|AU5x{KpJ&?W`o^!mi8JD)&fI zj7z=9KeU1!I{u#gNbN+oI$3l!PNy*caFFFW98j_4pYUIp-GL&g@(w*F=EW}}Q%7Gs z#352x^bvC1rA^$KV<PF69V-O|sH(_Fw!<nTv48+`_{6`=QY=ilc(5FleTxTT)gTxa z>i})>TmQP53-1uF;c4HF=TzeFW5ab$y)coSjj^pkEL-&LS>HuZ^$`qL{bsn~OXPr^ zYm8v^io)H}gB<r^K20%1V(8I{OcX(-)@4yqU6~lixc9!fH3d2veCVL&4SA5GM3JD= zo|&mq!yU$DhThh~L$1se=y32&fV&=!NYbBZQkifiO|j@M+JZCnY|_=JwLq3$*)2c< zWM1FS{1y?#Cai{i!xlfK7)9qI%2iHD1Ev&T5xt!*U?Y!x`J&bqSvY=q(Lm)(r?VNp zo8?QS5Y83LhJq)ISwtH&i;rBs3gS6^?B#0*OO7Z|*21N;1In}VJi-0$iD_Bp#q8dV zhWp>g-so2RXKBV}x;lI(VZOf!yM=7zENf7Lb@T$vfN-P^|4re47s&}xqjW?UygQ0! zY<Co0=kDmVXqIs9M>2U`EjrRp6RR?@8z<s^yBOc8`RfER%KInQa8*~}5@i-<HY6Ba z&FiPRovoVN*~yw)-Zgipj?cnw>GSA&BGF8qwGk~YdsoZ)kUO*v?e99#{?0@DJMXC5 zUo(HV9DShH7aG~a-Kz6=+gMwa{&t~p>%6)uqx$jUD&u`@8{7u1Md4b@V01&ed*+4= z@A=58W?Y5ej<qZ-o(`89k>u{5JK##65FIP(8+ItMM&B%QNq3Yu+<^SrXDt!uq6BrN z<3E%X+i51WLfWG{v;;b5p7-WJM+{Evzvw-)(G1VohZT8@7TflVK$Mg3H9>5jhQ;)I zQ6Cb{K4C$Aew{n?eLwP!M=!J6F`mdY^V@D64(%g69BzizVLPZ*n0X(@OnDb7&rtK* zv73OU3E0@wb+oyfc_0Z*8xm&;1`y~?o)xlzvXeeUCmNblz)^2<bp}^Mn*q93rOe<I zclfp(6}$P1(PzRH-7q;EwH||rR0O6o4;SVW^cZwXJqB|Y>vju=0mO2I7`mX+XnS47 zE#;Hr6)IiA7*6EBGAG=pRO$beSm>II({~T~kuV&|hGrxEdqjF?#?t?=FsHLY&%ezn z4DXXZrQJ-~GpNj<7A|q@E0!6dqB?gf)I(tqiCc<!SR!DCc(A;bpkD&Fv`ewdfDD<6 zOW^PLPQjX+%n)G<SIq(Al_M#Z@T`0nW2;#m(Nq_-BSAHuP|2aHlN;5^9UP7fN1anw z@j|XnkmQ)XMT5@~J$@4DAGmF?L!5?|>v6e}+^4PigY_f1*1MDEiA6ap!~`rDcoar= zXqXuk8tz&H?J%QZ#s#z3cutH@KdS%O{yxU|?x57SM^WPS?QMza+oK%F&8E-v?Pax# zvzZGfNF|?4GhHc#zCDqOLf@YCex}^H4Q$wID1CcdwI}~WE#%={?0;wne;9YRh#RXJ z#+|$B_xcJOBHoJ=ms$RTJ4!rM`QUl*5^EgveN<hJg(@WfL!uD<Yb*2<QBR`KZ!7zJ z)L0Zewx8VOa&1pcj^0TsISL0#j@Y78QiXo~EIq~gFMWO&_2mP1s9vafE1X%M#VTur z$K&c4mbVL`DQP=JegOYDxJPd`wBtyC&;?gdJLJ~unCpl-4}EaDJZ#ZhYt+}IGVITw z#<bwyT^}4YW+;7dr(>5TP9NM(CfL8FKDb-4p#KTzgPS!`EYBW=KDen6)IQ#VIl`Pt z9)bAXN2?A#k)3!c`?jwC!*PaH%N#YZ9P40uyQVT2+hFm-3U5&$*mZ?X{K0EdOVC#5 zA3#KEtLtiF%2<+0sB4Wi7hMGd`2Udk({o#b0=v}c(*DvBLLPNN_!rcXC)(U&pd+sk zdMiZ_5IBOCyzu#|DxSj(R?{Ypx-*i~IBnZ_2kv1Wc(1qj_t>o^_P{(0TZGR6sUvSH z@MPe6xWAxi)OazbFHa6o`q7tX9F@L2%;*X}(>FH=eRCg0KO7Ho%gKTq_cWm*HlxT; zKOE=pLO+}nKWK-ufth_jGt^IudH~FSkC}cr2iV6B<i+cUqhOfcO~7OgTT4*a)t`FS zB>LgD;85g#6k@Cmmy%82eGM_cEe`FVYhj?*Q2OEI;JQygT<<{o;c_uh<F-Dwc$r{g z9EMZz6A%(u4)f;Vf2fIj9Sg5AWQ&?OEEL^iH2fakx>jJQBIn!whaMp#sO5zh=!eSz zC!rrMkHRNkX_cHk!8b(kJd9Dop%2!f^r>|!d}DCF45jq#WIey+G7t`sq7-apxJmTA zafXY9qIRr@V4C3?K<}GYu8;L&dEh^=g9$OlXjp>CY%XaEw&RjkXwg>OFxdDWLMt!= zr$SQyL%SHZ_ex_M&ePRSkUEEMMmBpdL54wN`rn~%XjTuDwXk~%&3Xrl`owB-v)d?s z2dl|@q0(AJ9y_u|Lna0p2#q1hQd5gkLw3b^VAn==(8YULt1oJW%6T4zK{q1U@iYt$ zv+pufy7e0GzmcN3c}&7SJwYL{i4y2BjN4bj<$<&&6h0`L8{Ks+j8%;>ccouWE@>p{ zm-`|5hpuyw@QKr@rnA^JCDAX(iiZ=FdW}zNYGaA9tVan^<+5a`fo>N4Wf-<7an>Y; z`e&yKH48;cmJO-Zj!Y6lZGtGGJ%|gBw#mYaP5rtqK*3hJ*Vwx7{x?d$mX}t^{CB;B zw3Q<JQS%yE`q6^SlOiYTmm?p$$QvRF^17`0<zk5gVf`ZhT^nPeM)dHDiZAsxkq5g! zTd_@q18LKYvsLPG#w>h`CIlLSu$;_x<#23|C_HV1N@|(Pa(9h;TCshiyQ*mlitAVX zwPE0@a!INs3*VKjcx>?7*3+%&9j6b_5`UpZOD4gsh>lfPUVMIa^poFFtzU0D2;$fC zt>HJ&Iaz*VTZN@gh#>Xrv9nXrRcFGaem&bgtHffxOc(31I%8smF}gB(b2KZuK3Wm2 zjeaS*Haao-h3Jat%;<vX6&P>_+eCn|%f)>nMdt`TeUNgw7ArcH+b}c528&kQca~E5 zl}43c(nV%jba)@r#E2n<M8JLP$@;$1XZrX))5nK~FMH3C^rIe0AD=NOeSD+))5mw# zX{xb1zpqYF0qSS^_&6@?M4}MoURl_pkMFbd;stVl`7?cd`h5(Gc0=?_TSdeFk@fM3 z^JAZgzPKC=XrV9eYO#`hEcC_g0>eH{V#Zf)hZ*|f8UWB`#+ugkRGRpWARSQ7V$}Zv zL(IPWCAjC+pT4+n!=um_cN2V2zmg8fqA#utPKEwQA`Hp9071rr!7+D4H7WD+p^PqH zGe5n5=0nK5Z5WP-U|T{CZ#Wr^V%XXBu8bi!*1P_O-y&*M2ky^z8x05W!xA`{P(cU; z-3`EGcq`q7PP*a79bE0*&cksybaVO1LmWIRbRmL<mbjFQu7%c3p^~nPdb7c33<$e! zX6P|)*GQM+$U-xnO{UBMGd%i#P7-?OjC!6+wCbLFqw7q1jWMFW1O!2aHImT~<BosA zupRbf^jpn{%d+u|o&^QGLM}(wUu3!=g&kdZ=8*R3WT2Js{R{@JgztkB67=aA^(l7t z(VM_yM2tu3EjMbNdM(NPQ$=2!c+rdCUnH@RA@!EeY5#SJ{=Gh{-#6itlZLM0GA2xl zuJ`dj>|x{R`a6C@+2Syv0<TdW8c)=(*eUcY&IPe9#?-IK=Uh==#sI83{=^1AU{_4X zUr4$`o8EUeG0dB#88t$hIo0LLm15oXMVOCTC!o=g1#f-Q4NfoM=b*RhJSqe{i`OX* zMo*2OPbhX){eUBde!#B#5fPkxH3GlF4=wnA;rCGs?puDeLXU^gIB0P&dV&;sR1z_h zsWC*JvrhG=%@FrrM&cCN(^zNzr2kGzB1df!y92Q6QT83c|HiucVE(Sd`pAck<BduD z-kZekNc=xge$oe#-s6ryv$!AkE&bS2wilG!8$iAOD9;z&?nf#4U!%|PX!R$aKkNJt zp+E8b{{{LJ+fi&B{{s3Gg)YB>`a?LIF;nQ`^PYrpjgRVtm7+hKMvOvMbbO;ld#%fV zup_Nwme8&!c%XTe3~FDC;);XNt|%O!`O**nX8u8FSA05}u9!HK{|p@r^c^0AzQfMu z6s5SfPPu3en)!QcvpwO$l!DFFHay8Y4F6B`ovM@>y7N0~Pbk>@B^($OI&2R`&+r6W zpu-l2=v$)4!;{pI9J}va;BV~!2lU@sf<sU_2>p)F^yz;wKhwAPnZ89QO0Sp>ex`5n zGkuFkrEl>O%p}C=#4}NZVy6>@mdGRNTl^usex`5HuKVz4%-jM?M*nHox5)GBbx^b@ z)hk|SSFdRD&<#JoQnZLGj_vN9af%jSgAxQ!{`0jryIcM)l`QfGo>sEx&Tc6Q*FwW$ z{QNFX-y)B|3w?_{7JZ8^7!9w$9=fcI+o{5l`WBxsZhs0t<Mb^)Uvn>&^9e18*Cl8{ z<c?cRji5~nBKPM0AA9ctA60ejk7r0A69rH386VZCu?>n!)M(PgHY1tjjLrZppx8?F z)+^Hf>aD^IU@<T_nKp;hbLC!3FZcdyZ|?2m$L%w{)|el?*oj~g)Y_n4#ae58R5KoH z@daqr{J(4Mz0YGZlLXNgTlsv#oX0+Uuf6u#Yp>T{J2#VHGAENDHfHeVn=EOYGV9^x z{xpS~3e+F#%&mNLPUStY4Q{e8Q<)X*1^$XNPQ^L-4+nB99?YqD$Z>}8mWNd`Yre;y z%<)T3yt>Fom%Ar*P`k4w*oeLHbh@9`Jpen?<z)W4dg^){If;WZI79<@Nz&0C^>1it z+Lzsz-i5gWc5}z0_|<=*XeH9K?e*#_Zn^vQYWw5lAIA1xYz*FsLzFl-_}*tgGl2(@ zmUBjLYR9aOIU|Tqn1o`Hy+gY3DBmEdul!DxHQo@VkuhwfY~>HIF>N~<?Mu`DXYvUT zx_KgPwK;mv_JEcqvz7A0WocJNfvvDIj0F~!+i2L)JL@*;mFk-_0i68<&d$?ftK@Lx z0yTa;qd)cQSxp_QN04b4=@81$*OiZDDQnv+TKSZkJzL0gsn~e-6g;naF!>4KZSt(i z#I0-3q8}~1y8w)cWY<&omY|005CNIqvFeKj!34hL&e*Zxv#&Ri^JH6zad&}M(H!Ee z?HlyHk11qWxA8zbIFbJN0_`<;(D9qT;xh}hqee-zr{Yg^ce^n5*=gz1fi>EYoG*Xk zEX;0%APo=^%Fje%&I~<CWtxzCip%&Cb27g}ATB<}XCDD#vF37OPVpHh<`kdhOU%iw zi4#WY)BJ&Bcp60YR6v|IN_Ikaai?jS!Rs#k&}&R0dZN-}f)~-P5Fe2yrkLntD*?9U zWR#ZAxr_=u@_r)T8|<F<KF0}jm=*jOi94w}B)b!R+)5p?kC1P@AK{uh!F4M5ke@`> z?q=>mIjT{XQyDzBQiy;T9{ZUk8<xW^(*;}7Cj1WLZz2AQ*hV7#OT@2K{^5frzbA!S zZKQJ{=%1qx=JHpfE0H8c5u@7j9`2x#jv#?#%>0LPWP*>(cv9>51D+vYBn2WM>*J>W z@HbBT(h{V^8>!T8Ig+T}q8x%W7m?bB5qVKx^M##~2FMj)Q4MC%`Xcf@ByrPtR{W+| zdSuPY$jGlEGoFYVZy;M_ar~oH6{fQv{!sE0XC;b59aAF65;@YF_+upXcJZ>ti>>H| zowVQIc^^uy37nNE33ap}1;Uz1;&Ku$i^XMeB-K|Et$#W3E38SK2)X_S9LgOvB4Pqt z@XW*}K9xs=cyz+S+67pN|9$tJ0J_=Mx#a}9N49C{OW_D0U*t_&XSN9oQ_RBYL<Q4k zwjph%9Y35<NR8r5K;*-G9aS?3G~EP7IDh6arx>jJYssJa>#_4^K0)~g_aXd|f}1c* z|AA$P0-SQjiUyELE%hg?r9`%fiR?g%N#Yewipd34D#zs1DoWpjc&BQ-cS2ez$7FMr zN_|F2Ch2oXG|g2q%VZQ6)A?{_3bjX`N&JV#h)3xt3XVb*G9-xPk3l#Qvqz?06?p|@ z0suGrDvp~Kq8xu{AIHflj})0##U~=^fc>$2`B#%7|LPsrqh&Bj5*?9+mB{HW4>>&t zD4Cpg(?#KQth8l=$gi7zb23(*!Wk<+Q28pI{Hu@<OWp|3qC|MAQTskQN##{|;zq(P zqC3NyM?VFkd9B(l`?xMD#DgXiFJQ|W0$C~7B?4Ow1h^KeAkhh4VM-<{17j5p14g%A z4`Co5kV)QI&~};L5F1P!4(WopckV`h5&0!11RZaKoGYVhq?MDN6E<jZ%$NGCof`AR zPkflKP_J}CB}AS(&L&g%L`ao?#+%>Zea+9ed=ITmiGwOX->C|wxu7OU20UT%<P3C} z_`Ar@=gMCb&G+^MLK{BJ_qN~p-ky0)qU|CKrc#AQr^&-u3OVY-d~YA-d!tnZD`BPl zt&qQ@ThjBO_@)05^6_E5x4*i4Z?EhY>e8Pt-<!MMu6uD4$m+v<Zu_0j?LtI>@k%Ys zKTRwS?_WN*X{w3?&bQU~k_1M|*-1yv=G1Hu*GY~oAZ;Hc`P@oWAI8t;_UIq{-R*R` z``44t?FmGb7N##HCXSiU?G9DN0n^v@{+d3_=SEAhCygPli2;0=&+Wr}Ztqh*HxdT_ zcJsOM{t1yU@6VC1O(6Tjd~M_#5&535KggOa&{Dc&-L>V|(BI!$4Vr|4(po8hh2mme z3G?2QymWD*wtTthbNwyzb;zOcjZiK=tM=ySNQXX(c42Teed!JGIR)s9MBOac%{%Cp zQ?hKNE8|`q#_<l~5bmA4#F*zEmADD-<f)9BIFylGa99f~9c9a~$X^HUP4#eFX#NP% zJed+zNBY>s=7E5mU;+ZVDg*(!&-@SwpQaCjT~w9jajRLi|NeVM0Po6>sO(D*p<I!R z1G*Iu&{ZJ_hVjl1!EXA_kAotT4Xv$IkHSH<fI#?f#9+c(P>zDaThJ%`pxT}Dgv)>h zFm@~IMjgb>AWEtuRZ=@JF1pukK=t^csvr>jP?4tqP*F_^s-Hf~coB5yKvjnl3aVMS z29kVG(K7)RT@{9k>hVLxLcJfVc~qITm1<H@oi3oFpa4ZLz|~bKp`ap@c`j7+Oh83f zg`uK){7@~WFa1!hqDMY?r1tyIjG`exbv?#dK;=VHf6*}Z@nGDR;=KzC&i?U@8-4AE zWfh*}z|ujFun`+S3PYy}Sa`dVq-X8UScgPUIGKZ+wj?7amUJP>p`e8wJ}{7`*@q7} z7F5ar%;(#mW=weJGg|Lbt#8h49i9o0aBOqo*1P<z_vEyWa2vUC5UtM^tsm~Aj@T~M z`e1JBgQE4p!maP}w?359`fjv7C@_ya#$c+*<(|uL>3pB}lb^el(`n)2z#kPa&if^t z#`C}DeDqEw#mIFU6g@(oYUF_btaF4=v-H2Hcqr_#q=Wu&jD$FdRIDP(|4eS2^y7*6 zdfGFHC5D4U+B1o(u|txca2rT4Ie*Ez(`eTZrLEyIdjDi%h4c@XM~W-Dq)mSGPgbCt zNAaD^XXvd~v4)N?PB2!$5ltRkz&+#wN6XK_1>D0fa5NkT7jXaU0!Itf!3EqSE^s1v zP4ec0VnRIX0(Y>{T*%n&0!QoD!8EKP;~p2dgN>Dh=#)mq=V<jixG>lM%OSud7nN-) zvMZIrCZOW=;Ric#_?)%6+)YOv*1G#6y+d`#Kl^~*`_wGl|0>e^R5i{JT=;0D_vuQl zyX_IZ_xTFsBl=&xcc>iCAJ%)HhIpKKNH2RtFYD9G-ieky5-ocmTGp$Vy{sGN{Q#la z_|C)l=}Yax{}91;@d6jRBD6Tf$<7`9iw>Ve5Umh<b?e9q5k%&6;V-wa?P5L8yS{t< z3w01dv~Hy6$B}s}FM_|*I%+GadQL2I>XSuwaq^RtYTKrBa$nKzE-k@XziTq7Avyz| zD)5AGME_b(ZZCVB<WzBT`^lgMF|r5c$?ac+a37U_pTRHX+Wa*BM#pm?J{|FWTK8ob z|2Gkk{$GgsqFm5PB81xQkh1ivkNhT*-;F%2o27J2RByIYYrh`FqC(A@SR^n)yF|u5 zgdz6OOv;S}rV}LY$N)yTP@9}6SrrL<8hwJ}g>XXJ_XeoYyNU!}0_t6YL!-M8`idGd z_@R0c3rtT`tS!cvZsqXS&UloEoj}`iJW9*wT*m2?=M$~FROH(Qy6OkCo5PqMKvgBa z2da9gX<yJZ10#Z_xs2gKReCeNA`nI3GPFp1%n~n-?IeVWj~QX&<9rC?HgO2Itc!xA z-OD2Pa-YNpa&qD!2}ufJ8QkNuK~>h`k@6sn3Mhmf`3NJ7K;r;Yg)l1PL74Lig7!=C zH|>b~18DFppezKG;c9Xjo@h6pi@R5}nHgd=pj98M*;;{CfYvSqH2cxInVtx=av2|5 zJDr|x#?@%FijNts;^Ta1<u-v!Sr_m_A=NZmxZFn(*5Y!vyu=9L{kul%D-SbT3A8Ph zsChiJg67Im7Rd3Qqay<KI}r;mk;7$t$e|!{0=+-oiL24b5g#*h#K-xN!)*d1vM$01 z+N5f6x!b)QmY2XIioR>)Y<-B4L!fOr291n|9Nh>HVxBuRXiuR){V>jey@R`lBk2JS zm<{#AhS1?Jj!y}2Zbi)koH9zKeDV2ISC*2&(5tLCG0|U>r(vGU#%+~6O}^IyTFKk+ zKD-#WVX7<p6k(ehenMV&Ih&_p!h*wbnY}s<Q#}foj-_v`9#dWR|DjgxFET#zBbg_d zahsT2-|GUdohF?z0kpgE!q-<ndZ`xqT0)6Kc?Gxx0J5Lp|7VZ`<Q|Me_>GZ~IC5#+ zhU-W1_a$8CTMw%#>e+Y)*@|fhm|h3@f-eW$OK15=@6j!>rf6ZD>l*GsY(1U*GYGVU z+`|L(8#UUnqS9&e0zmniAIl;lQXxsB(a$Dz{$2^`Tj|9X$LLOVVd1Kz($+?LCp*4P zPc`5Ktt3AFWgY$#k4<X>l{EBOx@mC}=Ee?wGOrp>EAzK)T3mlljFUl8$HmClo1sYF z^o}^<Z|NG3&~Kwpv^c_q?f@nl=%gmSyKtli!aHlWkd7oi7M-JI2%V#k#_3!acZEC0 zO_&>L<<t#t=W^RNEw29nI_Cf;I+vj)y{n|^9KF~=s<XFqv>c;z^lqHa(XuN?j+-zy z4)7Ci=W^RNEw29nI_Cf;IyXd3f_38u9f8cGI!7<O>pYVs2^i=cy&I=<RH5t~H(_#C zR{zN5wryHm{{eK)0Zep`JuFzCvDo=LM=!R}s^lHHBGEZ|H%{lMLfJWP!rVwq)Ze+> zwoQxcKY-3TfQimkQj`6>BhTMCdck`oy`7`w1tUlA#_1gSSY+q833FpLKk<@fZri5C z^&ddz9Kb~9ny5+7Ih_t!(u+}ZZnx+hy&I=<^SCR_P`C+mqs~vfoy%?8w7C8Q=$r$X z=-gG*WIu1A@sAw6*h1zm@5l{{&e6MZI(I#Hg*(Shm>ZY!6L05o+cqt({{TAY0LGmQ zC$Tba@O7&#IcfzM;yx`*dOMW3!Mm=-HV7J|n5TsuzNzJD!nC-icMrWxQ7l031n6CU z&^xz~4b3|oy9DT+V}RZzLGJ|U@M?L`A9kBCEw1SRKo=ljw;*h0?DvC|y9hi?B{z?n z-&;y7%}ifUPiG8i?TC0SqGQM-cm41O;$Kwz>F!_PX%Tie;QOmk(mtHzC-wEnHk{*G zafx-_OcG7F*OXx({Vl4>xNROjn5}gmInx-d3e2@`ni;snjL$3=`S4$8&s?H~7t9R8 z&;TK#hrdQ(0zN32sg8IRCE7D{weU?d%cFreb#trehRBA_nfWRGws0S{Lp)+XQsO$V zp9cr3i^uUxT`$r^-AB^fgrk3jBT0_;g+vQ-oOc1o)r3tc2O;r53yh2d+MOF`;jz~J ziqXIBd5VW9+iN_s?m51CAciyaOpCsY7&r(zO;?DT0P4!##IC+egQxNJ?j_h+O|_J# z>+plEeRIk~+VmFe>a*xU#B8ZVJvv<)b1HRg>%*mlNDK)?)2PYAr<*(|(fU`ln=hbZ zX1Hg4Q?Ri#{&5^T*f=Gzh@N1htDag_UKGEWH-@DjjL-1zXQfO7=BI*s`oY9&$TlrL zX*O4tBcER?6C~Gfxn3W@Hu?B#&E}2Op^<(7uoMmAl=FBEpkS)2e-(#s)A`P@{|tj( z=%KQvM(Tf;7*-*b;q-|14OoP6yr!ZvbkI>$V4z*Mon&~Aoq$4I)b6zGix?~MAjufX zKCT{YbvRU(4jAS_95*P+-R?ZAR4g|8@6NL#=b7m|bEFLWE26RtI>nXQUl0#Eod=7= zgQWAI6%Xu-@Lv@B?C=yDjN|7z*!olaB<-XmTFQ^FCkbD287PD)g-{;O!uzYML4?qU zwC<K*dnOL@(9++=qb2aeep)P3U4RbD6m^aOikcs#vuVpIIYd;qN=W;Jyx7>pJ=d+N zpT!^a1m25}pC0<$u;_CeTT=6$pq@P%P1fwd+2H00RdmdFwEh{b{UvJ6x-J7#2f-ln zzvFz5N^^d7?+cRzv(6|@OsTElbKGPDL%jTxP-F(dh|7gSvk;Kc2FPH}*LsS-s*ve4 zU3>x0%BtnI0QUs&b0qOc>_*ki0B#en+owVo#St@@568xj0il=kJ@h6qMXW{T*e_iF zly2OorOyLFEz!O#uw)AK90IfZKfr`}eWn@b@UESLNe+uBWoe*M@=!cx1Q96^!(H_o z90}jj;7DcUVG=;oW*R9hZFmZ9@DaL`DH?c)g<+QKm9!NV)($K!0OJmB$|FU)$rwN# zG(V_9T<!w^bScjMA?Z37*EmPRAzycr*G}qVD-Qv)r2(Hwg5uL6oNK<I<5bj#_GB9b zd=HE{+zVJ(xYrD>jXa}nNnnj&;~G@^b}=8#BD5W`gi<xKImWUqFU(*lZ9mV=IrlCk zqORK*4$Kaao){k-RD6c=&(Jx=y5Wg8bIK&1#q<|_c+%G<&0t@Cg!%Kd?xS_9C1C8N zb7!=0OS!)D1wM4<QmnCetHtRr8*m|9Y5DRy<i?MzpBqfRQ5rv|CX;+)N&;(!rl)Si znuIf^dF6>$y8YKF<q~GFT8~Q2rt-xwiu48*e+XgzVTSj{Uo)GkM`VHtAO0xnWnvgy zyp7^zC_Zv2W}t|VB-(}-&9P>P=tKk(srX2qD8?+^*hp7}VgrdG`a+4)19;+(CbD+X zBY$+FY<_ffq9;Cbh(2Qo=&BF|!+7V1U^ji|i{-LtVgmxIM@|Z9892%to#+H4DjWz! zm~cQ>g&-)$J3j;!)SMrJY5@V&lLG<q79~U=x~>i-WMG$2hkZeICPxj5n7>&lSunzD zBh}-FstHeWpqfXI{E>)qWDc@O#60u@Ty4U53S9Y+<U}HFz<U=%xsizUwI4&Bc#?x5 zW@Y}^UI|OVNJNmZH+J+rjzpBL)5LYD#uJH{+xq7BG!jv^{uhcwB=$v-h!cuukO2ir z0-5-qc4sRz6pHa4041~rM+Ketx6)LEFB$gn(me5wDn1Z=bP)iF7!O2@|D|1z6mZUq zG7i}zlGA;nOb0y?qRc*AMh$Vao^CAO5H+srr2IY*Ym(G-f4Bn^65mU)hTW&)`)y6o zH^leP3kD(^;c$~MMwzYg@T3h=d;MwRi&Q5riS5bDUG627qo=}NT2R6ftpUm&K#Z&~ zQf-dFb8I#ZN6dI>HF{4#O1?&tj_4xdS`wMC@meVPEb_`M?!_9vcra>SH=vtsP`Rjr z@{z%a(I46QQn>xunAZGKB=Cf&8L}FfKhhh$0Fk#dic_jb1`!T~mv}LPrBeaI%AApA zEa4PC;DNA&rwS#2j=CzL^F-<UykMRVxbjsqi>)-+9<deLjspb=UZl2VxOV%a-a92| z;}B{)gcssJoKfHReuC^%n0)dA#p{Any|j6#pv&3U!&8rK5h9|M35r9Pbnca^(c{)a z@#_`y!E2gnSt2DTAD)x{it}|Lpq3^{)H;o*ENWb{0qHX~i8B~M`W$M3-!7^`N%*SO zQBpT3$ATlr&3pxg?=)u!xN@2PLc~GMqoLy{DAhr;ZcjJ^f?P-hxezYa+C4uH6v>=a zPE9u0D<y0ZLre8?nimC^>b{WIsK0%!!2q}h+XwR9>oA`fr6^S-<gwBBr5KJ`lrWn4 z6$y}1a-7EUB9zq!Nk7v~77pXbL0&9Z@*>W16e6P)fqo_#m~Z@f!ciUZ=^K3Zki(FV z(PRJ64NZ!>uDnY9Nv;hR#e<M;*940aOLg-YBt}F4PW`>{&&u?kZh77O3WVE{I1boM z@~9%}%=`qNIQr!>$hSw6etEahFAvvEexzHU2K*za7b)IeNp!pUv$_2;YMm3VQFj`q zaCUdG9teD{ZwYp^24x3){pWZxrpI!g2j}alzDf+RaK<8U(;#d;&1T!KcuUxLE0lV+ zIR3?E<DK4@CTVxh7AwcJ60m|L1|~=U>`Lxe|Lh9+%WH>A9mVz{=QA9JH}*#j_Jy9p zC1V#pH<Wt57ze5b5<#~)Qd7!ZN;kHJQg8VRJjrue>2EZi&Xkq$??5OaJ4yYa_j_7{ z#f)A_kDm1t5RS2aGM$fJKh4%)@9-pdJUKq!>Grs&o$(6JKs6o_Y#g3l4&nF0i~4== zd*B873&RT@FPD3leyRVIYt*bGDxPjO1ye)CseOUO6oIvT^hLRJD|GV$Nmj!GQnPIs zRhWx+#}7|EQ;gJUzn~R9F`3_Tpk@Um8fwppcLck{Y=NzHQ6-tD>YB}^)nVh0AtXdC zV0j9q-u~>$8O_GNq6~8Ok+EeYV>c8iY_AGi*OrIYJ-d5kWGxmah9qLNAbH;Xftc~p zn6V}Z`(=F29BXPrXx-aH5X(LiHui;5LnmSJjn3$g9~P}2SbovP)>P!kyKi~DZu|z? zx<|j)x)13%Odq*hAL)zK?^OBa2rwEpH!xMV&a2Zc7?!Lf8-%H;oyf09E1$hvD?e15 z9@?!<F9V;e#9RFJ4<()r!%Fq<_K!!|6PRCyfU->dP%~29o1KJ6K)Zwta=LNYXnJIR zh+TB)9l9{KV>Rd{3X=2T!1+0ba1L~MgstY2CwYj+d2f^oeg;~k4*2-lfx;*0)eEFp zY=^K0@1{|}%J|BU$(przXv;ZtuL6giUs@oC<dhT~#$EsTv4@{bq`%|gYb<;yk4oYy zzbhp^&-I~5&+9~8DTN#;f?hBpUVbX&E43@h-EdTR2di&95A^%}-S6}smRA%Yn6eNB zN6k;HCxHa!GB#F?^dk_>TwB3p?Zh_;`E)e?l-$OGX>nm}=FE?R`1~uaZ-2)V_`yQ+ z%SudaIeyzP!Ii&NN&9LunwZ_ByvWI~WDkd5?r-~gKOL<GVOYt#x%cKLY4P>0xXyf; z#}G>n<H#?C%lp<>=<l>00D0>p#%n-9geBAXRIV-}&L51WpN)Smw7#T@-AQL_>8}FR z$hr|Il50a->HnD4^2dnP7I1Kveq3w68uc;~pHt`1U({D}2AVo?^d1Cewxd%%*Z%ir zV!5}GEsFj13gPM(dl$&!NHMc0qKH|>%+eEKYv3}z<kp)A-TmQC5<nai!)iomb6^`5 z*d~}5#AkV<WvTAGJ`z0Ljh9rt$M7ILD<l?+Wu*(tN`}i=i7uraWBuq77_@5d|G(66 z5oPBF1?JnkPzZJZ!K;-(-5i3(S*Qg0X4mmU3i^}Hx)G)V2?_z<Bi!21yF6t9+c2Io zxC;Kf0kv)+mGIgd@tGBsa(kldDj?LqzRUSxtb|z0@~D^}?!9pV5;$8W{{-1KpFFCM z^WKp+Np2N0Aq1CbaL=~lnAunruO(;hnZ5QT-C8ZE93G=s`VaBXq4RLaLFi-fLw(IK zS0Qt?T@06e%=knIX?ue;J0LM@8+#+E#;PKm8WA#EAVa@ZHV`sef?UG6!>Uo?kqHI0 zWI!#0f?8_t{UHk>nJxLo)T^bd@n-v=&<D{h%l^C-*QXzh`+h&=f0ic?gZ8W&Q=p4L zl!4@j&SGpNJTQ3Wc`s$VQR^kGU#S->g&NXqUe5~k1q3xD+)sv}mm+C6hNrpy)n?-r z?V^X2!_4UI3g9?^BeZYyhU$M;k*OT8OPd>31hs$80M(VkE_zu;n*rMH4-ZKsH++|o zJeZf~2qdepWhv?9thYj*WTZh~BGz3AeGh1WBwjy|I9@l;*AYx{f^j#KO*&&2Hz4Zd z8yPykgJ}T6!(e#@(C>bS!5SI^EWZHiUyn$?Y{GUsHvE<ijHOwRJdk>4%E~!V2AIsQ zp4tWd0moeQBdbACkzM;s()7iIwcsG?Z(@z#$*pKW$}hGxrAy$txUaZKNJQI6=~I6% z;Cc`Kw#z>y|B$}wfU0#rh<$%$_m<tg#K5+v-25ogRPCc@kG}h^?AxC2-<7`X`F`y7 zjSD2Z^7A{-_hYsXzBb<X#bfFFuV~YSbw7uGSsvO0)6m3i5=sWbuZk!)gn&x3Ik$d~ z|A6F=kg*rSM`+y$;{4Yx*F)A?VH6PlZms=%lz}0t*=PV;gV>C-KIot)ra)x-KeYtQ z8^sY(T^{!NS1TSI@qJf3h`Cd-4YGvXwWk*KLgK+mT!Rn~E<+7!xp04ZI{-;uVxFso z*(V14B}4|6UrAnnAL*0j_leW~xc0dHtWWEnqFZYMMz074S%YAZ;r1Pf3JJPXOL9}O zo_hGjyRt`mzDH)5!uG+Yj{N+_k)L3%+k=!L*wsBJh)7E5WyE3=Lah<Wsu2d+Qh_kY z)(QlPXkXh0^3%F^Y&n~LzjN>MLn9^vrAo6yxZjcy54F_yap5jI9I%tXVNWN<tZPtl zm=_@Y22l(G*fof1I~QVn5TS_iYkd4CVqIFvQrmN|{4;Iih<dEiJK{(2dP(O4A*+6R zhqTWlMzcIxKP!F=MNL6Ji$HJ@{)MP@1Nj%~cR>|QY>pXcli}Q+DRrpQ(4LmEK;n>y z@k#EzeFWJ<`%6TVMrkNHw=57zttl_k+UX=`kM`MLMC&Y;Q(9)}*SEYzt*e4D<Jxip zOgAgYE_$4rwy<Hs9i$Ek5+xR)GmpnliJABWCdV<0auDFmm`TTn^uaeE#2fH*Q7aRj zW3pu9hX2tvpdw<DHD0Ps&aV*vbM5D25gXA^S?>}^j(sgbgyFd&BN3K%=NzOaqbOVB z?sZR(P<-yaBp=Xo4!&LY6hA}-bAnoVYdOW<YSZW9kI>eNxLXRior}MgN-Uy|K27{( zeQR+2oM6Y?U`Gplf$wX>EDt*~<siie&F}eSi(f*z3;0s+o5?pOEk6<Sk7(;-h~aeT zN)e4cy|E-Q4Tp`zgP0La^)YizIcZXL5%bD@NGr6DK0a0NeWutWA4JT?lSpEg5<qI( zzQl_vxKCOn1kJG{Q}VxV*83cJ*O6biS);cH^5sbTjs!xriIVxL)}3MT-)|3r{-@nJ z7r|t`+MS=n&qFf?<A?VSpM)m8ikUI+&Oqaol`W_Qkz*Hv3iYc?Zq@^XBSX4*k~td` zcGwxA^29y5NydB-(R7Mvi(27~YTy3R`qGb2fg)mmrzT_nI~|3FJ=CSzzhvxxj+)>l z=aYhYE(KlJ@3|+CXi#$sK?3&qM3r#)eJhjwJh~?D{yCFffIEBww_rAcOB^zM5q`pE z8+PO0Q?jQ&keH?<wTQ9ZE)6627snD&Q&4jE#Ak);A!fZ9(k^<KnWWhLDAXveV-Lgu zs8Zqj=Sh{yK2Nu-rg&A<x4$V>RBvRAqKbSf>XHrT07eSQD#jmKU8tS=<sa+&P^D<( z`lO>SSDqxrkl*vjo=3iC-+Xo+Oa8;_75hIcmq2q|0v*-po%LA!2x#qa9bvGc8cJ7r zW9iCl=+1yR^{*9y>TaeD9)pnfjeh&ysCj|lwuk8r823AA4MX&4w0?K|CsFfc4}B8` z%+;0V>}sO&8t8=~Gg?JH8e|_xuSV|?NKyq~%pR@%@0h(Y^iXumvy1UI)X-d2t))MW zOIRajMXY$$tl^L0j!w5~q^IU3yqp~&{o&sAOefN;uONT<HpgFnsN*lc9P3%c#JNS} z8h5_Oeu3%2-(D2~s8|h8j^ogv?N|+AZ;Y5nR_W%&sCIhP`h0ofkLYv6xL->j0a&s> z!6-(}kHLlrf{uTJNbG#@ghZ3;ZR@uiL`s3XrxY!TXlwf6)D2`4_>d+Dp*On}H{qH+ zvHI8e_Hw#~T?Q~PNgtv}+Aa+--b+ID{aX5L6eHthj9S$})o4@MbkoSJi;6WA8BM_r z-xz~}M;D(uR&jsqgqjAR!%f(4bhrGQ3RJxSP)^0~19(P%UVlnH`Xzq+2%<@dc)@8A zf&jMpcw8gw!n7h*Zu=1MmLss!7bh7;jFXIv9)Pqmh0nr-^HH!+5|8}zMc7+r>Bh_8 z`ML~-!Nw9JJgnbEG70`Aajv+QUWco`@GclD+aAq(!eyNfPv@BDTh7J#mM`Ia%iVmw zC6fN&Ce;s{8h_`UZ~3w~-x86;I9nX&TQ1(-7v6qmmW<I5)>eh^WEVr?9KYz&|6V?a zb<Fc9?It?Nk$bZEQQfU$L&5VR-@Ef0hZ9qUKUkdX!=pXQpO$(t|9Fh<wtqYe!tXzi zvw(+O5t1VUGH@P}Xb9(p-cL`g|Hy+rMFlc1)8cI#I99wkeq0aH6r_syrO7t}*vnL0 zs`n08!X~zjxC6p!kYJ?iYk{I=wYZ=56I@a9k!2s_^&#~l{N`=@B<3#Lft*LZMNZBm zuqs59*Oy|k-By#K?2Wnf?zKmhkU9cKHS#No{5q6c=cpa9n)*0Dwux|RodlKy?Aw@y zsS7{E0A{hmPJu%<5%%~2O|8?kfz1vX^wGP6e9Y83oJ0c)r9xK=mNcNN5_JGwJz#Wx zbkW8z>9*lA?rt6UQ^*qmGWkHI*QvgRkw*R6Lb0rZ{zaM%hY~zlH^f?4KJDRlm0sr} zpbVLPc7Wb{wVThw-7ETs`E^SFk@3p;bxxiDUO{x6Bj#@+zs}CDGjce;j>lHd33T!i z9aeTY0zb^J!x@E$zrp>>99^U@bCTUS+g5=rXa9;)%<?%vsjh=FzfKeK>wFnGb-o3g zJLT88R_51%?W3_cUfwt<UeXvy%t@^+De^ADf(?m9xIVeRi!fGSzrKz51K7IU^%gZE z{21%)X^6n~uD96*ctg3`qWC3!7bp7~O}PFWS$jWjxNGl;9(G3*>6y_EfvRQXwl)4` z<gCfJ;z`ajf+6s^P5y?`v>o5!E+eOS@JbWcgIBucmHTf>c6s)zj2xC-j-3E<##lzE z4lvb9M(c;!(x5QEH`&rQG$E<lv*6vY;qMq+e;R);GB0n(h#|Yi++bG#DpmY5$v2AQ z)1YA`=IF=~tNp82v-;{+pjp+CX4Q@>(yUgTK2gnzRVtso&G83Oe3_5GBeFv9_ec(Z zXMP_4+u`SZsr}>USo&-v_$amKE6)DRD#h8q1hlyd!sl>D19>06uO56wyJ9CP40r34 zD3<;u^_pH*AxNXpwb{MoI{zD91L8NkYrv_%&v+`@-_#n=xXxVzj++2-K3oG>iTHD7 z%;Ys71D;PwPXB;ES_7WJFU3<y``VGT2uzAEB;(pB{x5}k=KtRU6FyM>pSzzb_ujWY zfL&?u-|4A+lUH6%8H{yn+LL$)kJ>stFfcNNN8nbcm)hqdt9jz1RK%`+Ra;ZKMEm^Y zY0C-RD<&Vszc*#<!-zlHLHs}YF+9r~6+}r1V14R>Fygm9k%38CpSX-KXt)#9kD%er z_!ytbeaTlNXqY2pVPbEBfFnLrLBki)C-8J)3ooa<fenk)MtX`%O2r^AX``;ZRPn<i zGYh%?smI8JjUBz?gbn|?O)xT4w#CE9^27y+Svo56SM)^nf<Yb~`AYx_Sy+1a^C`ZB zNm(dw<nM-SQQ&m^eG-4<(76$R=izUZe(0r-m4ZB8%OQ_fnLKnNkCTZyJ|PsuRVU(x z-ev5WV%7Xi#y;g$P{!HI0!7Go1*7E7EM>(n8&D-*)fRE)YP8@}iSGD-(G2=C5sK+u z?NW?K{W%yZ20k;QnWOMG1Ah(pBbqr0f1~XAB3>BItJFKCD{J6MvZmd{u3O1cl*91$ z0KBH@nHX$@EFl8-&P<jLk*Ik*TY+b)6gEB_r><`gC`l_ZMKfPPVg9nQL~EyG7#b%h zrrsV1B|m|vp8utqc4T*|+8c|tcB-B8^*2t^+TX-YV?ay4f!|2+VdPJ^J)pJUhTH7# z@t>#}UmZ?03xiA<YEP{xDT;puz^3*UCr)|=@l;bt;CtmC1m|7`2o#XZ=Yy@<vt8(M zJW~@Qvk;Lza2kSUic<TgXsNew(N*){a8<xQO(6m=>_gp~QuzImLky|hg7>lW1|IUy zE#AhBW4V~zhQ^njOJJ;4V9-|dUCaYqcoLIV_j09n>Ft3?{b9>)AJvTp^*wjvtjVY1 ze)-qY4Fy3aIFMZp)+yUohVd6c2-LoPosx@xgD3f5z`)hxdxj%>2MS@ltMPzbh;Vo* zAF;}rD}AZA2jGK0gFpIN09p4+kaF*kh<UW0`U+AT1qE{KNg$~mTKi+(rnC3q?sh1^ zZ{zP=TwC~UlfT3$2?npfSNLBMfAuG=dv-9?9RQWIe-ncwEOUtv=ZrQ;!L!L7R!k#s zDEhtZV}yY+iGdZzqW5C+t)d6u|5H?_H1UOD;=7P4yRku4BxM1vXaJf8%K~{TLU;^S zl$c7nA$ZR<2%<3%-;K(rHcpZiKdmZ0Yw{ORoq+J#F)RM*5|bf395nwOKo}zkL)yRg z*&C^|hy+mGS=LVdJz3VKeRUa+qNmTo5s0XQzEJA9K$fB=@Ok!P{Cf6dLPn~|wC{*7 zpsZChDQDGO+Cs}YtD02iffJNJd2m#|D*N~`@>S8KLDDMk_|pD;`H=UQ=icYaN9^M- zU3n#fP`319&?!vv(>#51!{IS&6CXt=fXHIuiOTAq%|V1w<6Lam52B903dv}Kt6XKm zUF9gul$jFd#^`wIzr0+OEB{cUpAbdWzJ=gB>`7{WJYJUk(-bXz5*D=f$F=l&bjXd2 z)$?!2h?rBWB1TCS5;v{_voUsI7s$v+YG4XtQ?W&9-7^$Pxx~0FiKkdknyYYf&<@1t zBHTxt&KYGQ*vf=-kN6MmArvIN2}NPWqUso*0=(p(O5>*^=PW=>v_?#{$k|96RW?!x zUEchoR05m&%V`E>f}DTRlYgVx`~vci-V;XrPF1-6_2qS;kp~dO(~Q{fb=x@ul0O)g z!e8^gSg{s5dnX`mHWCl}{r{Aq60$hGq>eQkcd!yb%Ye*NYayPhejt7*mIk%2NH@hE zIYe+BVX|9VCPffYi=mOeaQ#cmzAI4DY$hHiw47VBgRnB!#Y(fn%E@lL#Ay5gAvOZG z2tA0m^5!SO-u{u^W{Sfh31L*%u_b*gZ(<auAo*1t>abLGxQyy;e|Qt&p<ir{jGAZC z9ipsB&!KM+M~L99AB%6Ki0?})$><wTxdFz9CC10u94VTh$tq`U?aepvY$jl~5Oki| ztVT>0X7-S0U+HHcQjE2)l%o{gU5VNMLMtM2Q2;?HDse9{;$VX*$DZmfi4mZFGKeaQ zRqZDh*(s?TvIjg^;#$fasLCFs|DL8wU7|bQM|9J2zIl@GJ?ooyJ?T;W<ZV#rVwatK zh1p4B?F3j!47+&4KmeaM;bSFXmy=YZU*IHR$w*?vM`qz!#0-Otge!qk;v!9W1SC~D zSm@^*$n+LdaUOrr2BOE#FY6AS3(pmYmvX2%z`(?a)c3{bMU7XXgI7k(HI;}`=IF{< zwCm2IO2o#ynK<m4>!9Gu0d&~efR~t_rBjR=(o|S$uf;X;d~NviB~oZMxwBzoFXgmB zl5T=CYCIEfq7cS<q(|EnHeL_){$bLnoz{Ic_laNmcUniy>o#FO;p50v)>)IGG|U?_ zs4Jv3Bf|2zw?buoV1}Ec)-_#H&~-vG5iN|AP@TxxjOaJ9M}o)?$W=vjv#pcDSId!G z%*Xjq2(iyw1(KOL5<>k&c&iqXp+~_63G`5ht*unv&#AbwRHg~k!etyzm8O_sq7={! zuIQiNE+f9&hA(duU&@K-<5%3E8(ZXA3vjs!&`=Aw+#oN-aVR8B3F)H~R+%m?V<kGB zIj-_o6K)}nqkja9FAXjVJN&9sOj%Oe)AOhw{pqXlBdV=^_{&@az2J?%V!i`cc;NZ) zdj2q+lwZZaz+cf*Z?^lb^nky@E*ik)+-9G}huPoaKk;IoDwn;FUTjk@+61s}o?b?? zLNSxE%F`=Kq7gzKx9K3rmvWA3P@STYl0}`Ay!IeKvY+N{KPu;+pulro3asX@?2`$4 zNuNi#Zx0b~MM~c>2~@>%2zftO9;@cr#)=syM1UmrMLeSX+Km`Bf*yz}l856V{NLit z#oRjOjG$m#=2%)gNp6S|pOt+b7lPG9MOqfJN>DZa^etMujb}~@7g=^c4^wuvTQ*KI zT-jSk12D!Z&hK5rU=@TgVkMBHGPv}yibA=vNm+;emdg8C1y?3m1($InEqR6_!5+TM zVG`mSW)k8XWxVCQxU>%nxw5$_kpLU0B6d)YisWU`y;LS$ao(ZJBr@(Ee#(_Cnt)J~ zVf=$hTqY(f0kfqE^~&dzLDJdMDGFo%hx4JBgZ&UhxEIE4q6Z8v%|W*$<{-hw)vER> zWn;fz8lh@r(_5)7Szi3o&J*Oy#wX*9nkb%s{?uWzr1z{kMzoS|&+cERrS;BhnHz7W z0S<cx_#o6l$Bd7rg`0PIdgVtPGLSq_`LPtL=z+_R%F>BBON&bH&?JLpx(Eq1A4-uQ zN|7H_DRL_kDuIa;QE#d9@Q;a0k^guN*Fa+3en^pLUCCdOl=z_(nb?0RGFN^S{1f@M zVA4A{S!j61UdcT#vP!mstrvaBLO)c*VeTQ`BTa@RCpzkD{|7`7za61*iiI}4D;9dm zRquv{+LwRGLJvq0ALZZYd;~aliMFRYsgR+W{Q2y4x=4H)sqc?yVc6cByaG;UUr&Al z+Ec;yf4Ge2QEUqPL|T;f{}gZk{PuqoCi6dgN2LGJ;~!!BfBgg4*XZ{zdhNY_dqqiO zX<`}KDlVm@HEfyaeR`6?$J$b^0*|pmH<1&+HwXh_J&tZ`nuVOeyF8lTF+P30jMX_| zZsZf)pe6Xtd#suMb?NNi#ZlqlC#<vU9)9vc*4br#zVmrJkw<~=iJmB@T{WZ@LCYVj z*#laJ|4P#G#}zFfJ(_;6FHFBTRFBBxr{PV3H3Zf{WuKz-OMDLF!hr&ZFh=PF>sUrN z4viY&jC1^=F<&HrDZ}ZD;Q@Fc2DS1_;C+~lKb#zA&aT8)L%MNEC7iuOjy;ltTB@Br z@&0)BOXo)o<hCJZqZ^Ot#=XLNk<QSh@K1gYi^;dYcmZ-&A(8(>*s~93uG(0Qbl>o- z(fJ;#%BU9J4LiHSL(~|eiNxGQ<;Uak!2bVV10<~*St&0L7~7K11ON>ZF(6sg<G8vA zCx;C%z-Uz@8bpviYTpNd)!OanR=)Z%-q^fPEH;Fb2B6_nmLlRBiCx4p77kIOBP$^y ze878=@<LcP`?dBBC>pU=&Vr#zc+A|<>=|=3yToXA<sZ!+jAq6&ni)BoaFOw7Vh^Ki z53s2&-X5^0)I4q<4@QO)4W!p%$Y*Edv9FV3&#t|KMb)^08B_R;I3GZb2PorJq`y*S z+_8-sFS|)=MxPH7F$VegvN-`dZ53lThtGc_>Z0@C?$r&ry?aFzZLU5c_`9I0cMzS_ z>Kyw>8v!UPshv*8T%rzqgz0h@gf{{mmxJ!*fVxz^M^L72Swhlt2o$knE#d?S96Ci- zQLTGt+1)huCa)$D<9w-MBfyM;3d#my*J+_#O$awzBF>G(d8pKyI0_X$kLmKLG=?mK zgiKx_J*TDFH~u*nc((t#_N4sBHvSbZYe!?NrCQd`1DOcM#N7GdGevu-L$Pvyd<V@J z&Of1B7X|iAqS<v(xx)~7<_GB@t=#z>S{Ooxpmi^H00YR69Wq{*oDdG5=Xml6uV1rq zU60^|g40ocIEYOUnzZ(Ns2mQm0bA-&p(C6YPb_R33b4W$R#h|B5iv9@Y#k0O3?aRl zbFOfB19;&kIN0aXiNZ*4Ha)f}!fDN7n<Jdo45vP!SsuI)j!u98+9b{izKS_Doe_Mg zTD8wE5PxzOA|t<#NsJ$C1w^i&DST4!iNxq-e1SI}MV=QN8u@j&{*T&MkHRMivseVv zk*9tc!w$R+2)tnhPb9JB7sx{KSQ1&X1{rK*s6zA)W?-}Ofw&PkKx1=N9piB$c}feS zvbk!OZak)&3`WGbf^P4N8fk*cgW3gEbq;RX^$H%f6h(mHXcZ!6r#DwM;nZe&M3GRC z;;mJ5ZA5Wxr0LpW`(|54E;9qZWhPwzws!MdV0<c$zu9P0I1nAiimFmP7OLd-0M@21 zS$~hOes-)Ay?P{XyOh^6`veXkDF9f(8daBa<QWE*cI<70;=$9+9baCb===h#gpik> z6lGb;adaf{DN9N$Un2ey(Y>t1a6F_Z{uNT7jDP($I_8gm{W_kw(WR#%PlkvtJsDSp z!&WaRSp*ePbZHFHr7cc$=_hleOV6U{(#H`P!nIXmKDp7f{>V~F_`Sy)2kYl2EIotk zu-jO>a{ygRy|EvWvsVHJ(YM74n!F*o`x`lXjI3?{B4=sDeeyBJuf#Wgluu{D{E$c9 zrAdSAl9|LgzpTWt391-7(Iu45U<A>LoRqR$x8{$8k~f_+atJv1L(nuIY=%%}H4Z?| zQv$Mk+=d@M)`tlmN|*)VTdfqB6MsIqJn>k_KS{WVPbIOiaez+oqRii<#5?qF;Cwn{ zszj+;V`tPnZ-BCxosQsLaw<b~lR>;9CAX4NFyEjzV0FXMX!%RZSf82)ovCT;;)$4l z{Y$;LRLtb4btW~8ST|;MY9msCBkRE6I#C*6ifBUol1f1L#GmLlNx%K!fs6U){$l*} zA<aGFkv2&fRj`qG44x-qBb>oQ>?w0ysX2{vTl;cz0N|@L9H9Y;lNn`?RIRFnZZ1wz zKDBee8#{Cy_<XWj?^6B4x*-=<`7(i%8Bts^JE2o8^)O+?eJI2!1tqr~DA1yv89DqE zxzNUKPwcP)%Rzi7@n2n?98-$;aGem1-zND>&Lg^?C4Z~sZ>9XLkiU}7T7z`o-#U*6 zs&xSmRO_N57MWywJika@f=>FdqL<Z`pc(oWs8vA>eX|!~iC<l(?wMZ2I25?FYU^jy zxT#2l(VFWOp~W(hozs6>KQMn37U=w;x?utZ7nOVwMaEK^P&h<jH4+-`jh~|EU*LOn zxhOB*CSIWOm}E3ln90Z~Bm2+!TWL4Ve+MW4e;REbKtkckI7q(cL9s&m_@z^xO5<ol z&SvtByGg2AyzRd!eWjm&vCc*HQ~4w1xd&5qvk0eY(J6{{37vq&rzgmKve3~~`J-g{ zX;l5_513y1Tl0>(b1qE|JfNQaE$^cy=RA*!{?-#9Bno13^=Z_<U*$30uuRdA=VyAO z*rOQS9<*FU{w>{@jqI-2z2frU_qsj+7qwOd_Dl&xweX7a0|nGiAA;WB$NHW8c(4J+ zj9<r$?Q9t$7iMnqZQK)DN1b$I(D9<g#1lfe=aXL>C?D?P!R6C+1Lp;XdjyGwd+h0> z%Hr73K^^6nPmda~;EhwZ%_&<qPFZML5X@j0q`D8$adt&2+!MsES0Av}Ld5Cds27nB zSINsbe-v=k?~5OWZ5R9W8E@!&cj~F9_TjV)RM{h_EVUh0MTbe*K_tyDu_xJ3DiI7Q zB>9Qd6EPPf(dFau8bq={yL>WUDfm73)lkG}lQGfaUE&2U?W{++>x09uVdGn*8w)!? zoj9TR{HV1g03o)DXmm+Ajv{U+d*KS=lv?}GORx_h@Ep3_!JG$n)ypz4+IC?ClP*1m zw7br$O1<-$wM&|k@0=B<|4&OK#8-r6J*c&R992cl`cP`^36r#RHSSnt#wbM1{}YTh z{GW2Iy@<;2={k%?=(aeSCtRVYW(O;?FJTpu>oMwIoH#TxvOQ+}KKnLiGah_aYsX?= zgnY3v<MsIBEwpAKl=3H7Nw_iq4#5f^BtkLkOR%_EANgmz<Mks}|5E%EbRtnCK9fkq zCy|kRNF4iJWaL+N87da|$1d9q5NA5k1fBd7oAG=kHL`ozp`f1)+?f3lJUDvgF?=Rv z2MSx^f3jyd`a#6HvRqF+vs+0IFiLmosr$gq=}_#pP1<D-#_C_x+HXXMP*ElA>FUi= zTE(dG28eAaetfikc=?GC`l2(Qjs{+c)IYo&6y2LW2W9B@bo$b|Y{+<|_oc}reR}FS zY$?43;OcvSS3?SJNh4{wjj$n<)M3j{9pLG&#Ces8XYA`3KcV%}Dx?oMO-uin>SPK~ zV`%{8axAfxwHbG6EJ-Gcnpa~yuf}-JrE+A}7BSCaJe#ZJfHvZ74V=qwUbXCtFt6(~ z-qfvl-SrXcrpD`8Aad4E<Z_4UV{Rw%xNp#=&*{W{7w%z1Z0W*1%)_lP_|F}}{UGj# zaKBqC*KoUAn-0^=OG!QTNBrHLO#D1j|Lge4k-+_!ug-YDgnDFE$8->sKGGYj|9#@6 zXkcGoQPH08258=kJ8AfIt$CL=W1+hrU(Gbk28b#mS-zP4Bo}(tnJ^9)z?r!Xv&)y) zg7bj;;lxif)}@;ZdvpV5c^g3yRqobp#s*MI;K`;<ND75YC~_zbU&iWRj~Op&=@rNT zk)4FWs-Z{m*~Y!ey9bkRmaS|=(qyO_?tInm+F_L>t>(~Rtp2(9ap?ZkDlQESB;Pz_ z*^`lx`!Q4OVo<zyM>%{e{o(u30_Z{Z2(ohi9(hw2jN2Xb!iHG3IBB2h=`5;t`AuvP zz}X-1yv9ewim*>9Kq%0fe~-zprN4|M7%;pq@-SesgP^2+l)Mmgv{>AU8LOtEBTweb zUm<LYW<YPaC>Y0BmN(a5bV6dLZqXo4kD9Zh=4z1s>hk!hEC7p@14+Wc##+T_x-J2E z+@Sk_g-o~ooP6dE|AxH%8c7!B8DN@Vta~sXGCDhIaeViNkQqK9wQo{<CC=>C(s!W% zh8SD^V1-D%0bAz(&=WIJ(O9arBS5UE5zjW`*V(0}wf`$_rKM17zZf@O{om{F%U&X0 zdf!85uOjaejLOvVLa?F)yE))DPY5>$t`@@0@ru%kVE4mDl|(`r`(wsyiKU9#iEqCa zzubv}pJ@0y>BXKyOjUKL%+Fs`qlpEo2zb8!o;6qhTH-?c5<;%oR1Pg2GP%EfuRYZa zRgYxqcdt0!gBk3<tK`8>p8`vwT^cn{qooIKLP0%_q~WnQc<Dv@s2q}cfd-dWUW@C= zPcM`jL6FNf8b(Pj*hR<W@>BdOo3hsaA5@`<S&)8EYoCvsoc?+Cf99tbb~b(%AC5~d zLau=z1py_oLXBL^crNh;|IP_KieLIJ#t_mDo23OW7c+{lQK7`IYBh0%zsY#?J#DZ4 zxkRlU0hWnuP9U;T_6To0h@_X3mBItm_~}KkB2W!hDV$creTnjk2S^9+kdAl$I`-V% zu;=2y5Bu<(@uWR>4WA3f=a`qAkV1-~6H`brlr@)Qr*FT&8%o%}Rr<BoeS~f;4;VYe z;YJWucD~TQ12(<+!~)be_U0UY43g?BGAR3#(O>-lQopz4N&W7wZxhUa{z1t9KC1s@ z0L{&MKf(UKule4I-%z}Wj*aV(89K=)?j5)xnDSn)Cof~$mYNI`iB=u%gq1z>mD9EA zX-j877+)}e`)O^EUY8$@f*EW{+;UeXSY4Mmg415W<&PDau?JRE!rt>kuJov%;Kx1@ z_x~d9e{%uu55xVp#eFA!!tHxNbflAJxK;^AI<w|W`qc<{`V_>t2O#WaNM4Q~3t1T= zVl$HG)y+&4_Z6LmbLB}yM&^q*i<i~wR&-j%_ddBQFf&oo*AzG_xoQ$$O~O?%UlpH) z30$Jr_a=6#L$UB1Bt9MyN1I|?AsY(k3C&gaP$v%}8^S{g#At2TF;_xYF5bq7r1>iS zozr&L5RNCmgrAxRo4CWh1uPF5nV;@0aokUiW0dE=qyMjaaVfEP5#~V0{B}aO!f0N4 zK3bCSLP<(M9oZ%DrF91>A<7+8ZY1;0j^rCBEw`cAB%R_`yr@_Ry`4~`x(Evxl}^Ds ztlDC#THUWNrejW?BVEG!@i4j4Mi4l3O{Z>7<L^?vq|9${Zy}7uHbEr%F{zW*g?C|R zub+QuckQ<3>`T3I+{$AkS5N)NXyE0Mr#yN}_Dg6h_0AQEBk>R&{R%2z$g=bC0;d3- zsC}&#S24VmB#x|7RtVfLy^7$oLQS|NP)VD$zL(@HY4hw)Q(Qek-p?*X+^CrnwU#0< z=*OatCe#77Th*hsKth=`(o~^t@#eWgM~3MX0YYsIp)6U}1iCXo_aMEX{#w^$T$8wH zU<>*M)N_glbp4;slU<J?d<jRSnUP_0K`@wl`i|7SK?7Iv;ksxrSk#0sMVbEg;0Dw) zi|P_j^#0~x1;(RDyK6Z}Tdop3#qXfrFn%E_W;hxK%M`rAz0kQ{rlo>{Viv;bBXNMQ zxVS<U>81irP*Yv>xT(!SH)06X9z4-KGqFk3Bgjf^kpsz?=Yn~BL5x0Kb1{37co26U zw2B8;IS<Yk4;DHPP7@Dmod-lxT$^{j)w+v8)3gEf^OQ0d^pElm{i9P|QL`-x9Rhk| z7<A9>e)!2s3r!)rx*(6?2$z}%m7q(4KyLaBc@C{ZDgbC13=2^!k=X)H0MZdc7=E1? zHj+pTtAps02AmY4jZCE?`AF`8c9J?#a|LRa^u~B0Ss1|#=qXndK>!4TA_{)*<{}}k zo_&V^AZ;(_`9`8d)&etG!@U;cT1uulyqz#Tp?ZgA)m%};gnOF!qGqV8q<IQ*wf_fq z_OI!`-*9{G2um({6I9n*Kmncj`yQ@;hF>}_h_2tuzlTt#m;Q*~!vW#gTk_tsdMfxk zz1Nke1>T5L5Ng(12@DtT5eRpPzy1ULzOS{CoF<OG+}C<?&iyIAd)9|29`jM<thyTM zC3rTdDT&od*;$gSPbq?z#;W}(V(rv>(7Venca!YwiT8H&EwZmhIC4lW4km~zJc#I( zFd}lauMJNI7wm?(anuQ=z}eMP*Xx0uBTpgX^5h~deJ|d6K5T%=HU0NEh=z_913blN z6Fhq%0eB1?JT&?*K-csy$)}L1{l-|C>L1h6mw@;7g$FRz68-uwe|5k37wOsddi52z z-2HmBJ=^2&p_6s@;#A3<NKXeV$pCKDnM~qDra3sj2`8f)yZHR3hxjJdhtLoHPL(wt z6QyB+`;$1o>F0gnpP!k%l-6YreAeOt2F*EvX`=EhP$D>>V~uqMj5aI;zf&<^SXegj z!eS+0$O|VromFL%VrJPgK;^?6EJoh*i%>_Gtm9`?N5-k6$El+Pbs#NZdNS1|jQ3jm zK8Qg$p$mpol82PQWZa$o4(|OePCEzWhEbk{pPC1G-FsQ|(6J3Fp$*V6kC_Nq*P)@9 zwI+DiXF(o{^M}?mIkvCDicbchhY1>!lB*z03~_7(tWxP0;l@WFZa$~%XQ?2dQU2Ws zHMANHc|7KeyYz;|JzD!(EFV$p>I(ZP6385W1Iu3*Y?Ku->!zyV2>cv}-8GXcfP0+# z2&2F;d+w%#RdMoN7I?Rjgl|C=&aI1A?L*trgl8`9a0c4M7+W#2+PV_NCI|WI6U@0v z!uK6#5ZWjIkbV$~t;$imu+<CG6%I&6ZLjjE!+M3}G-SP!5(VO-(q9G0$})h;a90E; zh{u3{&~foN{<;0P6Nq}ip9+~Lu#zi%n;3-AH+&6SLbn~mxKIBJRwX2txvR~KSsY*6 z#h#w|G&1$C#*gKET&Zot@I}BnEwmAwsGETNE>`_4XcJzk9joR-Vab`e%059XV*=-| z%_DkiHm@qreuV0z!`O&JE$(*@V`KhakRRlp$M&9a10pK>Lh}gZwkZ*umwa9#>SO{l zj^+bXZZ0SPH$uLTcO%D+GzWU;1Ei^XxPu1buQi*0hkR(;!^j9!Tl2VB@8A-g#xq3C zWzeAnP7eJSanj4kwov_V6A$@8NF0CHV!%N9r4I~VLWIy#VjnF$m8uhJ<jH%fW{!Gh zLs)a4irf@^kXAueBk}Vvv3sKRe~O<<)7{g*QS|jB(U%aKRL$_q|6$+A$eHNL<M_J) zxvuZP-!u4&g0TM!e~RAo>8rfi_AQF{Xd$EI|3#-m#{XVom7Im+3@<1mS0k|SGSipV zU9YD`PFXoc*S_=4vQIZ9N3MuR;R=GbzU-N(F^qDs-y#nl=}}PEVM-SlB~|nb20}k1 zR2Rrahv_1!(b7+%q}F{bviP+>jLUcKOaAF3?dBc0qy|R@5>E>v_UOg6uYHuH@3u}U zeJea+IxFAwyOqBG4K+&%R?;g;-^c*yh~GFFG-6Cey1XXtJbt<FjsWiyv^%qZht<G} zA1;-9j|$<YJ^3iN>D=GOD!nDN1*uM_GSDWV$~m`CC&EzaFZ>;<M^r%4Pfy^}Q(T?? zMCkOlL<4V(JOye6%dOpdn$q8wW33~_9=>~i)9Jjq9B+`@r;W7x6)WjA<0Biwb6NN% zr|?Yo;omzCk8vNiI1eYe4`(|M|3J)60C0x$a2Gus$C?0s%v+Hj5@R)nB|+zd2xHKT zIrk&Z4{t)k7{;^`K)kB*yRjs=1PZ7uI7!uZCfPuaC84!S4uUiY9H1Ei-g<00=@*C~ z0DM-2PH9Cz=t=B9d@{ghXK2;p29+9UV#AF>kry?t6#?^P46RR)vFv-)BocMxo5)BX z0tj?L<61ff^$TQq;;A(E)I2c5gCg+Ng!vH;Q<{aCc_meX9psrwqttfJS;*`-XHsqg zcM)v5GfM%~*`)h`F^Gt96`e8$GAO$c@%m1Ib<f#xW245S5Klu5_7n8qu&7H+GY`*? z!i)VN{%*zJYW&fm3eU@Hx___!wxTZY`T^057#xD-pvCIAD#CA*{H>F}WYD7L)$+Ge z{#M9e$s${WbU(rPN$88!9HI<Q3x^16?S~Q9NYz0KFTqvJT2cveIqf)C69vO-sl=J= zPX!X-jCYenToN%aMFPYJ<7ea0^Fy#9Fk&Hq!^T1EE!7co&aCy#fsw{T;?o-|<LBIU z2*6WXE!9;Qu~yWJimCz-ZZB<W&){c;t_n%e;%7w7I$GIJ&7n%QcoRL7jEZRF6LN~k zRgy{|?KmMw>jtTFK7NGbXyMoZmPxIhGNWU$>xK4XE*^|%%}>Uxf2faG%_wAqdq_Uj z?mAZimTWjgOMff3GIJq)_$Vt-s5Y=uufH#TV{&!i?8I{Px1?$e+?4@$n1DSl>fk$f zaChEl+~wlUT%n`!*A;}2V_@9#^)(-OTKc182)1f3tZ>KKWe+(KWuQ~nu%tK{gu`~i ztB5Ce?DvT07WAc-7snn!Thz6${R&nHVUPGx8R$;gBgF7IdM6<J+KJ4ty0(z)#3Km( zX%VP&7!QzxvpmwUrb26<0&4}#3_<|T{vFvk9MgnDC(<l&4ZajYe*v>ZBkLpYuRUT9 zbTuzvqtu#$`iK8KWr4BrY!MP?Ly%-#oIMXb0B1sxjig%2E3!jgs33}aZ4t7L0bd<G zq7I4oEIubw#4o@>B79D`*8WpmvnAqNc&Vrc<eU9xUt80DbPNr2?GNxXK`Vp==xQH8 zjXr=DQJYf00R^&Q>;D6(fcF!}NNr#0dZUFw3%Z7~$04!lhG@feo3!?sXks*JzHz)H zO-NCKG>HP$vVv(Ouo5y?EEx51Ti2FK^%aa4*kD%B&;yf3k_q3bF=AooD*QBXxx;k> zC5AUBXx;ONVduySF=Y8Z@PpTsxoG}wHXH~c9(gNc=|6~s-pY0$L+BGX`fUgDas2b| z!ge5I@?R=sJ796zl~;I3#J<m%v3Jkx;Xu3uQGNU10U(^ZMo>osaWG9g8m!tcVXb03 z#f*2NCZj~w`FCWKXjqJaJPXv}H}gQ*1`biZXgb>si^ZtXVpWUKFBcI>dDmdz-RblL zT0k8Z^gFu4($bM(!8_Mzu>_XF3E3;MzoJG`eU)QSh(bj6A86i*vg4W_U*C^<k9O-F z*BnW4KBEzMFBTX=APeYTHvT+;;jr;Dyf_prsd_)!ra&QKIdSJ<_Hy?jrna;v?ZxC9 zRT5_I(GNjY`K?4b^jmN|-<`dPNi2SxLQNc=e=n!D>nAwQu$8b8KjHKp!>|FC1@Y8j zS9Yy1JkcO2txCXfgMvY8{|&I_kT?$y6&K7Yhs(l!O-3gVf88b_9*=^Yu8mvp=G;y= z(10rvi)&v3@g`bt$B)5$6ZRj+9vi8Dg6u!SmYTf~1#@f5o<v`}yaA@+q}F{w)1JOS zVzR#TB@%yEG$9B00)0lG5-)R)L#lo3s0pnSwAf^IG|1Sro9zYmr|o%mwf%AXV*7l% z#XiTr$UY7c{YTqJ3N1#g+lr#aGcgwVo;lhU>|`5AnnsTD#hb`ZcD%6fjmA%Y``F?= z(2wwU$=;EXr|?$^dsz&BKf~Ye@Ha{x#P0Ugi%mJ&29lIwVP1sbJ=mmv2(l6^!>ivj zA}HnpLaoQG0vFb%BOxQ~QL-)vGSbEh<pW+gfLILZu6d0|SZs-v3YWi?fV)2ozrW+} z7qsjs$V%^Yw4|TX3=qzW?+O-DiKXYAsq7%*kCoN}{4U}hrMYU0BLkro(XR=qEd@bV zqYdKENbqZ~^8kcd*yQ*Pr3kO0lEnwMj7shlpG$i}4u2ziC&&9FS1&4xA5Z()^oG?H z@sRi^HM<<a#@i{y0VoM5Ml4l}6McsbrZV~tc}941y(lYWuGBVu$Y1jlZ+;k&9|195 z>_UBeJ@!<W#%Gc9=toRLNOR4;qi^#ahl9qCBmKt{|A`navzToDDx$HOs4t(rTWc3P z9{#9!AcX<_0#yt81XYPh77Y4ioQ07mJi*<(qsAj<CF&5$DuqB#6>S+;2poeZM-4DM z7{Q1YgA5q!iZp~_wp@%!lGv=Z)3%Aw$o)0gqxPhrM%oeTfD|zkLB;Z5+}GMakHxj- zaTqsyLVO+rY)D<wpCWDj&vP}NI-pmA5q3($8`zHL9oHXtM>T;12`lva#XX7Jvv1@@ z;V;XXH)gz2K^v&+Wb8eHV%G-6u1_pEf>0x=FqD*XmI&?{YZ@yEvd^O3nAJv;^l~(& zG_J7mEV^yg>UgI7M{sZ)iucOCO-RNTjS3M!YQ-zaToA8t2zfyTP${@I$&lE+koX_8 z@`lE(fV>ecrvhD>s3EPxneJxg&gy^-qC8s|B3Afhi1eE<cu1aMpS)y4Xry0As>;0Q z4kI{sCkD7#ZE^990Za{HX{NymA#A2W2yYXFtcBJ1u#3z!wJ_Ic!sM{YK1}d`^cOap z*etK%K^ScmEm6&N9>c>zGT4|29k$Md<F@lqL%9AeEnUlNs6&CMBT?sDK@&|Nr_I<s zFlrU`%#_-HJB%o0v4{my0HG~4O<m^aL;N<e1umcALiulKFEKoqlrbUKx}}@*t8u_p zC86vrpp2|E5o-<%T-b^NWM1MmaMeg7jSw(VTOGoW9s3q&XFkw{pXIP`i88<iJiRN` zCIz^9X&GWSFN!dO<X{h`9^P+DD`^E_HJ2{{&D9B>Gz6Zs8?yxXX&dq}lpz^9@Dwd_ zyPZXDSmBR8klcHF1u<^6@5o1L74WX-*!inltDvl2?;S(kyuQh762m8Uu;k<4us0$~ zDls5Z#GGBT19{z|u!9fKCO^(oh|@F$`#w?FUtE7b@oz2&o^2n)&P(`dT>j1Z3Be5q zo2~OAVe`xLa4J$ryLEfSyfSDXq2!x>n19!n3$|#kg|qX?#0w~htcJAdhs=OK0Tzkj ze;>c#4~PhK^;1ykfMj~woqEu?ciq#p^Eq7eZ0gM^iO<rBZl}|UZWlZK0bz^&9G|a0 z?1LV6Jql?Xw~uUVu77p;q0Pq7c?jr;V?u@7pN$`$C1wx!2}~{3iJNBQ73wi0kP3aq zF1>eOvHt&l_yh4z*M2&n8-w668NGg|mLls|4B-XXZ55gE1kjt&t&)525M<QY1e=4{ zRZ3GV(61L``>F8;T=Ma`iXLG4-KQI$+K1m^$icgH;|BbFY8V0E`=}cHGF9T2Q695a z3}eUMFdY7gZ87u90Q1UnIvL;z>Hwnef;2j`XNd&%!==0~S24)ye}q6EcUG@ZU+ba( z5+F1qsCN?O9{Vbqta&`NHHcr~zjwz=$6f~7QF#*Cw-Y!>aaE84t(fQzRs9M5oD$xs zAqHz#A<7YRZtx;-#TolH2bcxe%ug>iOJ+0&c4IjtGYpowOvva<7<Mr>wi0wjKMRCl z_ezw88d~RRxAulQ?#BpXR#&_0Lhk;1vA=p8PIT^AoapGr%EV;e(y%}5h(2I0<MAJH zyq$>zaY!(5Y*#=})fXiYns6gfH<eE;bdrgP`Q`FcFen6nOSi@BY9a>QSIS@Mw#b`a zq<?lDWq;7E)lEz@$*UKUkuE6X&RNHC5-T*27IQk}&|tKF1cCD@%3rZs>`#_YDW5`v zTBQ}+mFxWn7v2bEhWwLmEUzH^M3HI&atC2o^)z|OBE-o(sU(^8vlnfiM9b{zioWpk zhd>5-o}K!PVy*j<%E(AR?S<X>g4ilEzq)-#R12@31z)GKg`$qBlR9QE@>J`+MAd*{ zFCxs{nla{Ltla^GO5yk?75<fckM#j5bKZ6|t?z=N34heT;VQHzyl7J5V#tN)L(d_Q zyL-4L)kmzQu}bXtgAgS<f^~EuI)a}Bb%Z-BD^E<ZFQ6KvU+IhjdsGxUu}mV`j{Qqj z1&Yc6ppwc&i0}Zfp9vemvB31wC|TG1KlU>Xz(V_5Dfo54`}8PjTn>JytBBF=2tO)2 zD)uwO_mo(G-uf%2`odJ-cFM(Bzb#(FekVFbHVid^q(J!CP@}*KiEYTU+bsPhf?pzZ zXS`~)G#OMv$!iw9O<iT2=5RD2L&#TBhT!^Xyyae2qQkvJhkIRWAv%P><c=RnOc+0s zn4IxrUO?G1pugqP&r)nr&E5Y)@vqHQ>~LxeVqM?>SQC!OF&s`umq>dJOvOdq!_XeA zHCp;6_!1)KS`11-Q#}{YmZ2%H_erQwL<|%Z`zcg2ruXR+QeJs~{ZHq!7sLhaefB>I z6n+;tl_)G^pB5+#d7&e_`<^Y+bB5zax2{5lLQ&UOP!~C+u4O+F4&fw|(`RtQUa0`y zI`S~QQhPBxj%CT3cJ$kLZPgx$pNV><L|6B4YZIWB$I)P}i>ej=OK>0fJV5at6DqIK zn0c_;%A``}bzN{#^=R$?>A0v|Um&(i1(=vOxbuvNc~YX0MxihKk2DGY(eqO4o(nFz z(w&8*jR-D^B)bk5<!;FlM7%4-z4~Ha8S$aywag}jof09fmEbR}O{hNPa3s{Ov&yq_ zo*IOR)e7-bCOW*0wk_$_>;UA}q;z))Ki6`vpKFiOZKR(|khSu2-3-df^>f{j-_P}# z_rcF4<qaNB;bc<It>qj?>?~p4k+BZpQNi$70+}>2-nETK#l)b1izoArOx|eZd?N!= zkeN$rtFeM}5ee<TAn;K{QU6NPvjnU5XjPJoAD+Ht7f;B6CMHQ3EBl04YB!mD%(cNt z!&;>Hz*bF6O6Ba|h<EI1L$DVf=X%<dd|%K%<M*d?RIuCBO`<7D!>QI_MfQ6FXbB6B zQ}e)5=7W<GBfD@?1fI~?y)*P@%wXC!cuZgdH?5)>T5iVXl|!PSgoloOaofC6-eG`v zShLsBgM2a18w%p*UHY%67m1I`(H*k~_N5Bn@g{)o!L{8;_X>FXEb5rL%l;>(weP_{ zi3d)3Fv<-g>dc{>&9Vq1Bf`V^A9$3<_2mP9%mv0iL4mKee^bKb)=%7;?{azk)ie@5 z?vCIZw|h2%-rTNJSGX48*oyx*>Bw}PgDWp$9zy@|#?O2FTlP9{-Pvo|D2Me$@FU&i z!#Q((TPtDWVm_>O7eV!f%WIfiUafkryUR<@FT6>k0(wUGT=B_Sac-d%=N8Y)e0&WH zN)iiCp%rJ;b{fWvf4PA>tt<PWvnNhC)0*rmyV2I+Ol#g>R~qby<@RC1$tFgEOczej z`Ps0na?tsS5Z>C+a~j*+@yPE_Tl4zJ$Rqe$4WHVv@TXmazgzKF0$*B9L4R5$OS_2P z6WLC+_7sy73>#Ye570V%wpiaYmB6;JnF@-e?D^sg^8c~>ZB$sDT8J@<8JJhGRv)N; zO7I@4Pe9=S{Q%>M-8b7@pov60KtpPn1EFMvPbj%m2qh~Vp(KV5`}+20^1bEsEtFgW zp(nMy(($<2Mft4H;=BvihxW_{qdb$e^D&)f$frf#H6a4R=mF<jd3-t}lya3h&Nq11 z+=3qdkgG4r{eoggR{U&osGY;Bm$Mt|R9aZ239|z0gV!DlZ$T0Kn}yDczr1>68;RMp zHo@+q7!BE0FG8(i8SH}LI)h;czo_lm!)&9=!x{Fp2tkzy`B9<?p$Ln~J|UW*N#JU0 zv7dpjzyj~toF&v$F=mQSlY<x}*8)Lxg;!9$R0ygoAgD@Sj3g=W27oMMoskA)u4ykt z*GBF$7XJt?92}(GVV~>4Km0iakCLArdEJq;_5!X=+%0ge4p>~3V~4x|@ChkHWY|DT z@Dt}+GuO_ss_c*#KV6QvC>9%@GhT6#=ZlHy0&%g^6&Kf3pkzrEB_WeWf{V5A0z25A znWKgO-Y!>q2BWCCzU@a^`aD`YtTsaCrtHHQ-_e6P{F)q0;6tqeEg<q4{sBqkZfRs3 zWMlXW1tHI@fvoqROdnF#L&ymPu$iI&S)9^n$s;)#za_8Uh0E}C1LZKB&KM^slpTx4 zjHzNw$DW*3!mHO!AE2$1R9l!|qxQk_$}MAyz7C`)GO*83>p|}Lzv_;^!m@wpk)2A7 zJkcZB@InMiU-;dPHdiurQmCV45l=~>L3&2^Gje1BPQ?0Lld_lMyA_o_m)(kL7^XZD zL5q+GU_KX1<7kR_{FO1M_aijDAMwn6n%=qO3xex}RN%6FF_6L-1A8S_D;35;<~qSA zm>sLB?H{;patA)vB{6B#!soGPi+t+X)&+wr`1GVigRr9hkpTXq3-H9OS77l#=Fwm* z%ICMj@%ddU4A-#e((+NxCVZcKNBo=gXWgSe!#GCzGk%~yTWc$G^T%o3E4?G9n-J-& zRyfY*Htp$Ui7soG=;mCE-vgAXyI;BQnn&B$V4wZ7`S0o+|J_OUk;*?0`#wBGD*xzO z%1!#g_TT*ge8TbH-G&?X-<`xp>haun{{x-|_g!$m-FJ?BdVv1Bv)Q-my6-d^8_E_! znhC~C%D+$YG^AL&9RJ<=)<shTp^nx?t=5;$pA@FVuQ#JlaN*q*#4qCYTxZ;Y`tLMy z-_?-&j`pb7Wo$o&|E?w!xQG3BeeAzWd_4rHs@@@}x}@_i-0<Z(?bb}FV|za5omc;& z`KiAPe;NBf=EaN$V#Yl<X)8pD&B=d8Sb$_CHwYEuNgY3#pl7Xrc9V3a=@3{3c^I0F ztFJ<Y_)^$66@!czPezcY)MLQWtzT?HL&_>;hAY;`%Gcl8g=d+kCMBQV7reKF?~K&X z2|^M!oj@0yU50odArlJ)NoJnm8w{xcM7*-DE{CVDnn8=1jaB5&JA?Qu`SXsG{=5o) zEuSV{pmM4KwLrQ2+CdlXr(y*9&nq02Z$vmfef|WB2O)N^<9xUEDe89BTX22x6?|=A zpgvz477c|eQ5wtiXRsXTUIu%~Jo2K>MlXVSJ#f{z9=KV;16K!@tVT-It|0L=>$%jr zZ>6!*t=s<<KOFs`g>T<Xk9cV$wLuHt+KC4Ot&+@YGGZ9z;crR2ALU;G|0n-kDAjfq zbj%%KSB|TWQhN$l-GAdMv?onio0RxG7Q2`S4~Q;eJdhU;cqrh-tA-bEhIj2>2xMU0 zPY^N~>c6-bk76fAdGP=<QYOKRC)X?L<a^@3t5%{p)d)lY9~t=X>PVCqf(z3x7#Z+A zwp&p7@4iO^v|lbfkG_iV1l<w-5D0}a&BRGA!kFgq>S4kxcgGXtHy`7PpXJVYGVRH9 zJ+3_~S6^Ml^oL9o@Rxwx5Huw6+lc*S#br=L*u8gx*S&|SNtu{Kd%j9Nh7<1`d<`^x zHA!_KN44V`g}$MMzuAGu?2qW)Kn2{kc<0c`XavBna`~Om#)%&2AF)v}ucWW<Dfp<y z^z~ij_V<0xfAeSFZ{{GphTU{)FcrozV^^@tPv9?Nev`(_cqH{)iQfCtB)#{AN=Hn0 z2lHk2NpRg`T4=Msl`g>FvgUXadjJP<%^tuV<bac&YS2UWm$-KZ(wcVUQ+RFF9*&<0 zdjJ)+-7rxA8^{ZpLv6P+LgYTRQ8WjoMXd}Jv>R=>22Q|J(B5bl!>4{vJ@A@jp}fFK zF4R@*9;3s?sDR+E)|zU}kQN<kO2nBT*q%F&C&r3J&VICr1;vlHp;;|okRCfus6*1l z9ptz}HJ1&?tS_^xE@G~vEorawN`$#~8Er|^O>SH?%-NW=bP6Nyy6aA(iIrHE>#pO+ z@z1^scO8ET6}Ql~G^MY5b!6%X<pP2U`~}*gd)aOTu+h#m!lE*6>89{jx&nbhF*xQ@ zg-PO*#00OWkd5W5z{KxZ1yo54{7$wyLJ3D2+AyTANfJ_aqi;VW*KP`~_Q06EWnz9e zMVg<+N(}{?=H=LPhZ1j+rVVpUrPkhv&jhTgmWqn(*YT2lZ&clA-<wxHF6dv%@xR3c zV6we#u2=emvj66L$MOHl4G7Z^;CYoNxB`}9B0=h6krV|UM1j#WWaiUyhTyF-SSdsq zqRsIcnDG6nwjUea_NAyjcalGVXV`ZHLmLJBj+*89JatMRF0_B}-TLc9hsk9(KDV~7 zQzQ|ePt3$63F0H!>j`J*m6y-hAD2(Sx1^zr-M^xk`*2pCZ@E(Jw)GIAiIMWRobAA) ze4aenF|t06PwqcMC8}>)`>moCF9nfcklPb`O>S=;c8Ywh$T1&Z603hcezJEyVEzsx zJuOUCV)Do8-=h6!B6Pt<Qco}znZ4Ds@9aX_cZRbS7`G16(3$|zPhN@TewxA|bg-Tw z^@!i0*D`M`hu*PB9z?xyja}YRb^1w*Q1)=e$?PWVU7KS^;WVSYYt8m7JlU@tPf#SC zy1jeXIL8w@A>3^zdE}=F`rG~hU)!hQYx@)az6C$qKKz{qKij|JuP>j!jn8Mr8P!k= zUHxZ}i4ohHDE4?8Zk)|*6hj^(*`Id;cEZO&qKqS9<lWHL{{)1Kce$Yr47|{0Hbq)M zWQJ!bE;_|j6-WMQ?Lh)vY@k9Q0*S`C8XNV6wAUEiiHN(rMtJ5>wIWaYW+F;kOSz~j zgYe4+sz_~+J8O(AS4u8(eUTp<qqI=Xsk?3z=8;u$7eww>ztPx9ZLf1hd$}7TGm))w zYQKZ<=dr0kxb(np#@Gj!<I<~uORv&(=~Xx`z0|gH2&h6$VvR$!=gt2q=<_Xk1TXvZ zzQIH~MUF2WtgGC4$I||DzdsKr?k+97Kkf_22X{}Hw$y$S)r3+vRb4eHegqqmL^?2X z?bSdU5M=M&y7L5f4d>aqLwh<EQ3~peSXWemkeaJVs@x2+!WAW7^h%)%s)QICuYw%< zq@-ndv?C34#E-GK3&|P?z>#0kd=l#n&W!h3ypX>U%dOzE+@lxq0d0ay^u&ypLR%?l z8TQMFiStC1)K!f>aATf|pm4*W)#Gf08{J6YCDjgvu2Dk6A7m*T<!BsrKSnshen5`^ z(q2W3Bak?qAsJ(uGho?op<*ft!Re-|%J`As(h{vHpr#^AkxUTJX-&>3u(GrbmoN?m zJ=_DNA-p79^9TE5=s(8Whl0}pVlE1RVRdA(AITUz0Y0o@U!dI4T6Y;4#9)8T+J~^c zB4W~s#$YTsYyy}j?jo@*;YJ<NDi}Z9c<u#NWD3IgvF)Qr*@K+M$hjq&^$b%e`CUfj z+s*a1$amv?sddMzs$J*SWU3vj3--X9VF2yKz2HSNz|Gm`?IrVlk4})xF^|1$hI<bM zvm4*LYpkGtWoD7B!_IQFD*g>$@v!j{dp?tR8nw>6fnb6E^8zmI)HRi?-%}m?6gmW_ zPa4$l5)`w&+Qz%}k-O!T!iaD*#W*`4xim!pMn)b;SWZJ6DwGH4Cm-?lQFY}m_0*3U z=5(%)P7t%2^uit`PJh6rA@<KP-<_2B)K~_pJdV2w7^tALp>Jb5?!H5_)%D$p^D(;- zEM={97#I}4%fP?zvvLvqb=7(Nbsl1bXAU7yR%<o<bsjS+{B<D2gUVmm<oN5brOUtH zPT21$4DbW*ugid0I{v!baU=HImBSugInn)g75nY5Q}&1h^w)hEU|v~4ju*Ax4%23B z1w3|@6WVXL{%b_v<g()n*K0=y{5f7bPrS=}=)ap=?l|yh3$C;OE|33?fg=|lUwFKD zO@+L83ctdChcf{7W53&Y{-jawbMxIZk8}N3#Ltw+uXM?}Ys-t?DVX@rx-zJkAqNYP z!XzakCHRbrAE5fzy|^1A7QucdtM<yBv}PSO6%Pa_rwzatej88kf+#1RX?I={q|L5H z*zKyD=jsNMMch#YMQ`1`*eO%A1a7i*PmS=E6~tq$e0DjG%F(7@Qm#!;m*WY11eMMP zKqFmAkF2d!g=o~Oy>F1=I23Iv*g0tK!VrOiy2k*e8ujD>WfmU$L8+s5{h(036@Wrj zC{QjJpd8}?rH_MPi)hy`j^EQwHrVOLESxs63STPZr0$)(1ScyhWW<tMd6U3|4oo1$ zrKtlAO_it_+F)!G8m7-x!~1^CI5^VNuy$u`^SY-9@qOV=v_B8(#4BYFaH5m8PTi=Z z&@*GFD3aQN=Jg;33iv8}Wr?wHvmXG6G(G?_jy4ENxJ9&H?r(iiwT`3X{jCp()&~l= zj>9p%-QShd`Y>7_P<=l|v|i?G-C6|f2mpMI_ZLk^IV72#N62@2AMp2nBYo`yA$=8| z_@S`KN{w-#nglHCw$tozqHjF>jQvsX^ZaxtKfK>T6^zpkh=f0Oy!T>%o#G(H@UDw+ z888Nq_UPd^PQJ!<FK$K~wEvQ`RLF#9M~N9J^UZ@fq#sYjg>4>3*%DOknZ(t8+kAY! zYm^sdCVFzBw8*=9;f2(Kq>-&Op6)9JAh9ll&51&PSpb{z0w@^CK>(m!8?Z?o)143t z#xI!7!35lP7dXL-4j$mJ6E_Siy@Nc#tqvae#K=CigGP2M5hG8E&{i@jKy$<~b+rRI zFQMzxArgzQVhEdrHzfN6E{v3YjwldrABi81YW59K8`9)#&(ylpVsiFEyWdP{ax7-G z=^Z$C)vEoKx3p-+yJ6(};`IhM!7F9ApbrI+O1ESv_0IHP5aSPNEx+Sh_((IDSCgWg zEY3Swr1kHYJ$S`ffOW#S0%y^7haWXcs&wlP2H1)rU?aRCYVkS%dtkHi0v87YX=RYt z5(1~kUi9Lcs^XI3SgXxw(_=*(jaPj@U~fy6g3hTKX7Y<5$0^IC2%7T1f};*j@fpTx z4~qMBnaFm-&s+-dgQ!emefIMt9=i5(f4s%I7dt={kP?^lrx(Gq2#}HaoiF%use5^q zx=ioUt@J$HfdU|lhI?S-9l!uVqM~nb%m)4;*AxjJnHqVDfO9e&9?K$Pbc=|c_Ok%V z-z$1x!Ep;MOpJ7@3**^I%~~7jBk>q(L8<{q8zoWjmvv5Q(<-NW4IM@vi<>Yv{{QT~ z3w%`7wLgABK!UFs6g8z(M@2~lH7F`k)C3YZ12YgrFe+#wOdt}Hn9M+YfWag!({b9g z)m~d{P2aS&ZK_tS^^pJqDr%@NRMd#5iSZGwN_^)3{qDWa<YZ<}g01)d?)`t*pP94I zI&1B<*WP>W_lvDo+=-2$CexGL??_bfkGqC|S8Ag*%)6)~BiL;ij`kSd@o6>MM_aTY zy}bLeueGZ^@aVv0!GdVWOqTW%abI71TnFwJ9XR3!2^<+p;FK4Uo7uMQAGmnGBT>cw zKL}h*FdeuYdbzcs09OCN5pf?YM0?6L>c9~<NZ`m&0;jx)+^pK~{ZcO8??_bf{|^Ee z6HEuLh(h#Tg3y<8MBK*;)gHKYI&j1d61d8~z$q^xH!o9P>}nbBcSPTP_a6i<CYTCb zel4<KW4|<8U3(wvVSAW(9|7)2t+fXzbd^1i;a*IY!ThzjZhl=q?X!6ii7HP2zVvb| zvKGAwqBr*!z3Dzy(RR`GC71J?1`xejL~nxV8~Tgh=S4(aa1nnk$yX>3tZBG9-mj*v zD!`JNorqX#Eh!E#Ru^YP8oK#4v&U8cISOQ+>EwOTI@8JL`b#&@Cd46B@4$UKD7%id z#xpDq`h22U(MhMWs8k{MWw*N;)cGpmpS8i!G>r0|%2~2G(cq~mvm(J$-53zoo9bs_ zKhUY_#$?QODA(AR0tZ7+wN|ufiu#s0I3Dj*w@)qVu?K}yqz!8zrM0LBy%;7`Xhr{y zgM9us?$4IK2sbM_T%*m!b<qblAgorotWO5Pl0nx!H#g%ude-5sYu{vNd&J)Gvuoc_ zZ%_DffjVjmy5x;CzHkFyrIY<>Np2Wd)tsPu+}$PN2F1wTa4$%5U2fcHlj|CZ$tl;! zC_iyP-2-OZ6f+;*!wq~F$#l}7%JfB4Qer(369?yIxo$X>WRd)PznjC;FHgh%GMt`P zz%Q}W#->_xd&lbjUH|z#A<c`_xVtc~*pk+Wp0Mq{r>il)w-p|Dz$4yYG!edcYu|(4 z((6mr{JQ#RjWcmZ3u_p3lOn&N*L4$S#6sI*dWL`%fQJeg5@79Swkd3FBi(q>xv`V? zDd-Qi%0VYrc<81~td#0p75kQB6{%e%n#dFTFkgQ#VjuGGq3e7+Bu{XmIqH82;Ag=x z>U_3j;d_PQlcL)xWL5;I=2ZXo6npUl%>butwA69Yrug=kIvq0noGeC<KEPIrFZw6d z5RsLF>b@Oad)Kw(K${eeZ0g3^5;Q^<u~nst^sV`~fJ3h@qI%Uhjsw%BKf49VgM}zL zSOlouTHTpNZN7+FDaR>8Tv4OE-P+ItdL)5?8j#u{uT&a&Wf{cRtqqKRRvih&bEqlS zVeeaxZ~*ssASQd;IPk|N6pn0*-c0#8c!9Y0=|)~J1Y6Mp4pvD?;_xfIIB5^J*&q(+ zBo-Vkck}^@rSq3)s~OQPE?ofAjY30X84p6*0hMJk^jF!gu}Z(B2=6+T%EeZD*M<E4 zm85}pj9BgUzDT6An#zy;^+l~u!TS8qG5g0@$M(|=SfAKjvNa!_Am~6FQw8=mv0G?c zs*4=EK?~6r`RZO$UwAiC#0ryQDiP>YXW8|e$P90dQL^WP`S2AR<VDMEWu=(>DDo*R z@4rbp-u0EovoJn~of{Tc4uDP8;ld$l>ctnSPGk9YI@V!gtJ2=!aaMgP`%T=MUSoNF zTy<J3mcp-aV6c-h*Ej#z-#@i?Mxqj9Ztv-`400^9<S?z54D|vJ+!W|c2!xF<dxOVX z>-*}|d3N^wFME|d%qB58)JSD4KK1#5_VEAP@|^aS<gr2=lgqYWz%EYTc%<dRJ}#Ni z9~~h5_sM<i{$13)t1zLBBXk~WU7I@m&@q!M)q2!7v9f%aFFNU2Z}uv8@a(>C=JJi0 zwSCmg+-NR;VX`;%Xm9GAj5u^=t8e+MlYOaUpY1wq;)^&4wCf;m<gzp@&cgwbxY+Ww z;J1+Ql7Kj_l~>n}KfpY<$A!jEd)HIAE<1y|g!x0t<~B21&DKwFp7kfGRVSi;)~ZV^ zD{Rcv#Ze7e^&)78V63F>la$b5VCUhG0v0Ia&5JjdTe77mC$^slaT*zp;uUv=Oo6Sh zvyaY2Z7^!MFB%+PgF`w|m-z4!T{zrrQPj1%`4NTkb;Ap+$k%pX!DVG|XsAk8<-0w< zV7ytUsl5g}2xsiVSJq(DYOuu$eyRo{KEcmv@bX&iqs87{c*jk7StH$jK3n<QDlh+s z!mpwR0>{Tg?0i4U(=RSmXjx?CSkY_G8~Xg;0u#lJJ$CxhCv(@&KVM`)mM=29(4W1d zdblsVpwJ)Qkr!^MYflf>P=|)q^`r;OIRQ$&O6RAd+>cw*LdW^AT5SC6jINU=KGJpK z$J29CLf<f>({s#TRK<@#al1xh?_)Yh++AS&2wn<s16Iv(igbh-T>#RJ+-tm`z=ws) znQdnFHdplfP*O~A*1)1&DfTk4i^MJzyFhGH>>RN<yhHa{VrPi$5j$OM)-|L{(>4xS zBlw+KSZo^MbmK*v^1>VIcB=)CN8{AzgUq@$>Dcae5zvSTcW{KC7kiojfpwW&Mu`I# z!_%=8f3`<a9AqwTHB+afu$Z3p|2k~p?=x(j$3tAvpWJYpQX#arZf*o_;v>BU9`=s7 zjgxz@`ss@qnURI%CWW|@v>Jn3GYWBt;k{ti`|*sTwBQ&sa*@Z(ev~MEI9X&4R(b5G zPIcYQYtWS$lpmO+E1qWdMegcj>%Qy_9u4;H&;dDTSM_29x%W{sd=ZMLIi8$#r-i$5 zOm*Lvi7njV$w0=+x7c~2xoTAqie(HP_qyswqao*G9UEDm<r~jJX4+(L_QS!EW^`5| zDmyI5nOD^LD{#uaUj=bm5sshO0~nM@O`bo^^H1|J+<0vcPuQ2utZa9FY~X~tt)bx$ z9trxc1I@@;X5AZKn!Q-1(}6EwfzvrNAJ$%Bz%mm}rTJ~HyN6)7Jp3%~)5BIYE^L4o zCboqXP!=<#8)v-2=V_Dui{J64;BvR+S!N231i7{ldnDlyr><vX8h`b@rfcdaX5@S` zoc-~TwBT_cPecAhrkjOK*UC&ctH7J`q#2%trUMRY4PWbFz>fy^to(H$Bj0uR8;QG{ z*_MmsEW^4d1eMc=wsVVn+pV>CDs)|~sP9;w^(&g#rgK|!n7aN+UfxNQtN$FO(pT2s z>dbRL+LqzZ^02ZCb)i}ft31Y(2m5kYAP%6`dO2zC$HQ?!VM*>*WbZB)_lj;o6)TyZ zi$bmDc78jztE*l^#J^J?Ks{XdR@%@|Zdd6B#>yug>WnBzNBbuCavqefccMbW`{}o> zy%Bw=2@I55Z}j>i_2Q4N%CZ`hSdBB;A6c5iX2Myj{~0+)5g~kOUfiMl9-0J`A$|@@ z${_BJE$A^bA2s*>)2!RwW2S8MhA+zTM$R)4{9)P`oczrLy|Ft98M@7E?SKXxya{Jy zV{KCK6b@-{m4?~+Myi=Q(T`<i-qeerUC)`V?~PcyTjO>EH|n#l!-<~w@x*_2jW8ou zA<A1ZUXcAP#9)63mHYT?b8WAI@-)<en>DvGs?^w&S=W<Vb+R5Wknr%F02QXNmQM?$ z4kxec8L|o`PmgNC^hgtigDJWRV_@cr*Mm>)$4|%4%PM}*AVLZ{#Sfz5e8$fqRy#<w zL@Xd#`D9DK{q05MXVsth7uO15F)0oV!wr~wJ6=QSh%!obi=N}V)we=15o`aeen~=m zUd6BMr${%IVr<n{0KG#63gaf8@ah&6i|9#vcf30`#plYe!U*Zi6t!q_rW+G1+qi-? zkJKnf!<&53<sOs^i#^zA<K6LIZtWgAx;Dd~jr}tpcwJMU<LwQ{vB1Q<B4(y=nlPqk zRF=W4=!mPw$$Dge_LtST)g~3gl?X_vsjH%Y{RO-){3#edONPgKu^hgB54=Kcf-~|l zKw+^wpk_qZi6xB?p!yiZ4a;<d5o4e;Rm5?SA|2=chtI=J25QIxF|oRZm4-sGunqU< z!p6Ek1a+J)U$eh--84PjRbPQjqQvVfe|Yvp?bT?kG^o9Jkz5pQ$QzFakEFa)YOhH* zf}^`8VQ{csXIDAd>r`SwnOkyk!AW+H>!zIaEmPGihNiGyeHhD(?1{n2=nZvpqcef| zW@IkHbsEn6N6<bFqD;U+@$@o0RomHV!80&=p4NqaB$|du#PCE%O4O>LL<RC_*P&(@ zOb*0F0^l>%O;NVwq@(_XckmKO1ZJrArT~;AgPlDj2sbl9kek*uS24hgshII=JU6c7 z8cAOr*<mC7%(N~HErBnpTGK5JnuPKmb=rXasY<IqRmuJo{M9`!=}$qquNy8y0@9VS z^=_=n>Z|vs;H&CSRiZxyKkfY~czLb%(PD4&5!$Ep*s7+ejcgkJ`~9h}Df}YU!2PLy z<yF3Od6lKOq0#4I{oqFXuC6_`4mFUjN)hP(1zEEFHW_Ffd(3lLNwF#Dy5VQc9K#HZ z=b@$S@!^IGe<Xz66^o#Mm#6u7;|MP1@MdpyHGG8hz<!f$X5=U{{JfdD!}aY~Ro#r< ze>67*b@%yZG%qE^+|h$WjJ<nbGF#g*qV}>kbBj0g6@U11Z|mo&!6T^_VQd-xRDy#> z5X#g!(J62EaFxc)=+G`m0-r<MI_uygmXj+n{8;6ciPmJ7+4>pUcxbbuM>Zaf_>E@k zr>SQ4Q?9xP5SE8nzx%R3aWxzZ*|Zm!)W`l2Ogbz=DW)~W8-BqbxiS`3Z}<|tUxT`L zst)UKC9K}aVOCgQ#EKF%((!MH)yLb6BbTVK`oq_#uzJH&byz1ctYIAW*V;2ASFIjJ zG2J~gI^`o4d@3NA!_vVE2XwjZ3%}}%j(vW1bm;qNa-cXzRQg*&`MgE&d)WDcDf)Rx zm$#5E7aoq6-9y+8^JYHn!?o$1ha^Ujv>Q7Q8_I46XxR8*zn4PY4|)SawR<1Ljo>ub z`;UDC626Y_kbQoOq$rmYtZthfJ-8B*wd1xvU-${8r>j1KIP^!c5k2#*yzq|J&eYyk zv+mX5uKI%+xqF`nVgLHe#Mam_?mj^S4lPV{3_|a8zNVBnzs1}7#Sk@-h<*7l;r^GG zD27DT7V}<9M)TO6{^;20-sl)iv`HQ6Mc+}y)@(%n8n-|EKI*X+FIL%bI~Q8APrB+K zKyabG{pImzZ|8km|MG`-ch-WypS`8}N?*9em)Wfvhfx#J+{t{9mSX-Lxr*j|^Vn_h z{@eacsJNno`r*(Zl|5cU4@*r9yx|XTN9FIAB^dtjtN!p?e$YcufB5Onk@PNen-@vJ z<C2jQc`b<ihZ$;L_%R&Bq{2QYdf~|jc$v&88~xcI`od57!yT^rpDU{OeVMPKWbX+- z+WJ;%??!0D@ZhoL-WNcH{Y9v+*#``tuHqVF+Zg=_z0-Ao#$vo~a@8dX^|#9mAB60P z;$jwx>^Z32W}(Pn_MC+#0(;oFA|b+I$XO_S=48Rnf{mJa)@1mTgZ>t}6MI8{gRZo2 z)A1O8_!$U;c!0jEAnABOgm7HG6>-5R(es6v2EtuF!;y=6Fz3_bI|nDCgkN?wT*v|~ za-J`Is4rXs*)BsTa(X(-O;`Pyh`jzCL)F3_Sj(y1mZpoA<N9{w=VV%*4<EeIIo-a@ z&hV41@1^3RlDapc<c}c@%)K~y=?PnVroVn~g?|4|CDjw&x=)kE_d#a(Q1p!vrrC&Z z#I<U~Ag;q0$%-JZF{A?<@jV;yjkpfaMtmc#!?O|JTM*xy5Z|AL{$@sybQtzx(yc=D z;QFP8M{ryXMrOlLT4BVz)%D087#Nu0Mi#Vpr_o7!Lg~Z;TYu7wd~Nc1BWHWVL;Psa zc*9kYVJef4@*SdtW8|~QhH&1xsqVDS%aGI5T$ZdC=o-oCt%La~yl5Ny0_YY>{<j(m zvHrR>{(@*k&!HE6T+{`u_cps4uB5_*7oq4rN_7iW-M8|JWOV_r%h>yTU&i)k?(*YY z%GNJagBWXjPt|+7&G2J7dc)6?-<;@@j|_i!DMpNkKF0BK)>EA<^(~c*)dt=NtU}Fy z>_<?^ZT+eTh7Rhu3>m2#9dsm*tNy!S<Bj^pq8t9aO&2i=ru48ezI=uLb){Mf>*slP zUr&0z7Wy0dwchY>zq&GuH+WIskYFD&xWN%BMi}kr%&2l$6b^$I@%@Qdf2=@lZpSPM z229Xh&weZjRoT^9g7iW=1=_*wLrlbnt1t3pcGwGO%o(Jmcz1lMBHtH&%glU14L|gt zfufQxb2G{yYjlR3kV0v*qIn;oPQY=2D1bV#=mJT!t$&3LhG(Mq-P6-AX}l?$b*gj) zr=nAb)Ob0(H&!wP&r+$en_LshSH%B;X5B`q|Cm0=tBSO%NM6jkFDF+O$asUISLFk` z5UPAY2Q<R+VWyN1Go^f(Ddoe=EL}d#MES5$%7-qd*D)%+mLgIwlJt5ph}#);3kqq4 zfs6yZ;k>aZdS|4u^JhO(PnXXeUt@ZqzY+cnGbTA!&coIkH9#JjR<t24cp3)m4&_$c zL$Mea`g&-JH@YCD3l$4HDzi+C%A>w0#OZb@oaP}cvpgHz!D}%FcwX+uTT?=ZqZ5t9 zIS+lFX@z<?b2NrcP4r?5d?`Kriq1d6Cc~SS6!7){Y*$V5+D0-lw^`r|zwb>!xxwOd zR)#NJJ^ABlMXA99y^FV+DXr>ztbf5FnS}n8Rh}S<(cZ4>!L%G(+v}+^buIS{+Scww zYw&-zt-T69e$}=%=LG-rw)RgYthToHlmESK?F@!>@V2%J-afUpA7{D_)Yit0Hu0Si ztF3*2)z)VF)hhD8hPL+gPHk<YudUq}U;giJU+-^U?{8nD%Guw(-rv67-@fMIQTyB1 z{|DOF`aEuLxDA_O{gL?|oLZdWOWEO%1Te0-$nE{RZ2_5g@2gxu=8aBy+K+kM(HKaT zPip-b7l?f_*_V2LS1ML)`!VucpRPvS&}-3yT+3U$KCI{&e~cQ6{rf#DUc8$>T-N-& znSx<~R&)HJ=0p19i+8K_XYb+qS2gz4aXxy(L(#bQro4<5gs$(grQ?I#S||vF!Mdk| z-|YKDp}d(Jy=q0<n6X_$aAr*QCRhEdXfF9O-!Rd+HkWVlvODg**OJA{i=)|6f7v^J z(pVFtXnWE7#yBR%s9QfBim7Nb<xy9?8vO<XkmF#_XV)A9%6@UN#a#X}7SfG*no@OL z^^gfq|IUY*`M!DI`D;G!dH=Po-&a9=3u_|ik@DipVJ7<zh}h0PZ}ANa^RPq@OXf14 zG?%|Z&L4vFhg}$1;J70?75&E>F;c@lkn!vBhK`j5d9QSBQAwTozBi2X%p&>dA8quG zpP!}%#g~8J#cB@B7U96o54@><4^Ch)*M9j!$X_)>`inI^s_U(s*0o^do-A6u<NaWP zf&Jw>z~WJi41vWCdZpPsYOekC2Vk@6!T4@pfBCKcpVc3l><xeF$HW>(ZYDkgE%Igl z%XL$$nex8*piM>1y-3%$hB30R6b1`<c%!&C<!NsOo!9U-L3^`t>in~q-2BiVeqBut z%-<GVfQJ3OY8)TSEXJRPo}3B?Ck-;6_hvut`t}jfW+>qhOf`)6W^eJirgod-7u`#3 ztp5ve{d?}=md>A1{g-dK2aBdK(1_U=l!_mQ(mTiE(B`=QI>Y9T;LIJYs0?#X;mUM> z_Is{|dZpz72!@%toftJ(8L$sW=<#CCn{4s!eOZqm?eb=BR`VubV4yoSI7W|0m>j8< zsgv*v7zEoUGYW6Zi~@$QIHM4_x6=(jF-X+r&3v3g<<_8ahd=yw-{`paSlrj*=h!AE zv!#!MnO$<mU{Vo=EpYj{9>M2fy<rgPvCa4YUydhX{L*QBkZY8JM=7P|D+5Aplkwv4 zQEHwCgWHTRZ|`<jgNd=?&cZZ=3uRPxPcRqfp>L4&Sr6$x;8U6%4tT@xhjoInx9*D+ zSN&<|zIl5e$4CQC!kgyC$bRTijJx|?Gv4s-eHyFTH+Z*h<tzZEu1XpezdmLdv9opr z=%k#A5v!RV@A#=0@99aqmq~(6O<T?0$2hg-rTT^b0q^{ouOk^dThNuupV)%Qg`IPv zle#hb6{n9rto*Y3xdoyHN2}4X@EbnNd32UROZvtypq%{b%WPRWpHzuT+S-muq;_cP zE8fhlw((6c#S~(wS&wl_^y6kgaD!-A*6^7cF!N(F5P8p1#@GZGoyHugW%!{sRv3S` zMm#Zx;*SoUfq_lT47lpQhnV4N{>+^iPw5G_#^#bZpYc3Mbb6zI>kS{t#m%w#qpnn7 z5xbMC)c7Vw8?mf#8nWwjjF&M1u{sio2^-^O(>$;-UN$WQHU@L1Wx>XH8CKzir%wi7 z885^5CRajuqeHRe3o9a+gRm<B^R#+o6Ehag{&0_<w>?i9OAAFk(vd@cu7(9_wgR)1 zJeP9|yXTlK!^9MX!gR;$w(%u@_D8{knDReDvT?o!>4mgfHegz*8O&C1=1Vv!P>n^O z=;c%shc_XlFN_W4vW1)ziV=Uao*qN~ANxKAt093J@ARlLjKujZPRXc}(2Myn=uTqt zO~TAW7Xt69|1Xt%9Z8b!c$It~TKfr@ext@RwyXqvn+f=#O27*-exXK-ksyexys?sk z*u91?NJ1X3sM1jFVPhiZ;cz~cig`RSkI9%f7U{TI(y=S_CrQT^D;=4L82;3=YijDR zgG1z)0>sKeCKE!6IFs^)b5Z#`vXB#tsL;1!#S!e@M?mgsIG05YuT<4iq5MXbuzWje zmR4_grU%nsuKFi9Zi50#)zACulZ5%P|CafQuf0A=W1B&8u`g2Y_Gf>gr<D7*kI<53 zety#%eqQF2Kddf6#_?sgCl<Z-`DA}|N<B(n7J=AZ>koet9LHt@3t=qN#bC3Qxp%89 z2@P$NT#dQn&Lg0LPFWbMR+W=EQ6FbAUd2Rmt15LdC%!>t+gH(&il0Ruk6C1Y_(@cc z3}9?L9P`OuPS9a4xo<vM(>cv2d&5|vJ_p$u6O))vhK<ZT2bp;e@-i;^=BjPXC&NZg zo|6R|85xUC!}wz^S<ffG$@%0--JJFNCg#;47PGSo7v_->1*n(WIJ1ozw-%<8ls7m? z2=mFvz~Nj>Xl%lSayc3bpSv37A?LE-c~i|QAAlKUW^A`FyfWQfo_{ZLFsccZ6o;cd zY};R^r<VJDLV=5gb11oS*2C%+L(NLc$_bfTu@>rbmF+S8^~H=|Z>xd?UdrzJljYP} zFW0aAT_E#i_bZ+yCAd^@xSBc3+{B)o_kqW^YlH64OE@SN{;$MhhhD{7(IP3(cVSP< z^_R!Z`%c#et8aExk2g~uF|(h?qVC7+Ji!U~^l)N%doI`K7@?6}IIJDhb>b-q&=7x} zD6HYA)qaJsB%&SD|7LW|dM__OoDF^Oy@W^JOK5&x_mUe`FCt$b$AJl>myB7_p}+P= z^BxA5x#$R;&%IMvXdYY~r;nHI#QukNEV;w~V!mT`2x%Re-eE>A>&7?yb34qf(|eRi zTc>x6tz$a65)F>lohDW+-06pM<C12sO8635i)k|G3hxrz%gwp9%3btw&~NR~!OF(H zw75@~JLl9gDAW>t)0>v6*gkDSe*kNFf>1TR#nqa(LS>`ZL-tEwv+iwViT(3UgRJe^ zKi{O+cI}^U;`*)q>$&>Z*DiDadak%ti~HAeeI4^*PUAKE*K?_bv>)wX&t<hw_pj&r zU%#Gf|9sQ_`KJBzO;~}uf4*t|eAE8<rr3Dj{`sc;^Gz5~!|uTS^G#~faQ}Q0_HFK8 zzmR1Al~aHC-&?=1f4+&s?U-`gKi`BMCiW?){qs%x=bQd}=9@5H^QAX3U7a1MmagnX z4#Y+-%=LM9yj}Y$&on7X^F`OB)IWk(&X!_DQ5YMhV(mqojf5H9hrK)AQOBk%#|bEJ zV=)TW^gYc(E<9NJ=rMb@s)JOn&9YWr;RqC-S8^E7D|x*dyTmTVkr*$A?!ZADaumv< zw$P7xh7?YO#aTQ!`8mOx*RgpH-aJEZu)?w$-fU6cRKpuR<q2<wUVUKKFvwKR6(81# zV|_ak`|lrRd_<-fZE%M?8`46>-mTMd76BG;ZJnN`?E`3a9;z1jOwYmskwP4-z=O!9 z7h=g1<{vX0+^EA3Uc!R2?yBk59AMW4aNzbuN<5B^uqaYFa@|l1k1dCtY7JlA7e}sg z=Y>0rmfUri2k*wAcwNW%qXEpU?&-$jAeo4r4tRTtKYXG;T%Lx7fUbHUmrvGx;i<+J ziPp~bYEe)pcJa5n>Ko__j$^6g<mAlgs0<v-P<<`Qf*^yVq+YIu7jME#nP<lOD{tMC z@bWzE<!i2bUQ6ERCD)Gm!ph6wLYxX-eYxco)_%5j{sd^++;WAv;P&vdt?v%Q{=T|5 zQiGM|-j^r#+V#&p^c<XdeGX2$9y-}I(l^<S*;=YX==H9Aa+#IL#Z|9Plp&`^m$Um$ zu5p@(qdz_^s#>B><^0r)1}Eb{mFv!_wB~PJ?it`Qr^z*PdZTOP>?Xj?fLj1J18xC~ zE2-wR18xJ{4!GOpb^+{mjXcz>d$*RywPN39ZRjp8Zms_#JT+4u!-68Ue#mwA;p;~7 z&ez^nZ}uypZgoDj2z7a)P{!9RPw*HmOKiTnpFF!l-M*9#9CSwY>o*sUqk|mgx3NYO zd%&@o6sM;(V~vYa)7sU|IPUPT3_9|^Iwf>0?CVl9@*-uaX_5NWM&RmtdP9D70240p zvhIO4<s49aQmoXOJ>JO=ddMuiwRZ<D(1BMP>3T5#x!iF5SaRbMKYz-Xxocl<29%2o zp$=Ngdp6JYAh>^tg~$GIyXM)@62hrTN;0f*NR0$jJ#|mWsV&xxG`euf=vxoK$^V$o zI9trx%x*cr3QQ|UgSRiWro+lY%G0htTdP8_=0J-v(D`q2z7>|$Jn6*-FvM@ei?|~k zLE{B6naG~`&EANajzjy=xAVE?baG>R=Eqpeu;v7YjnaI;tKqRmCO^Erx1cDWCs=&$ z!wLMp?C#LDSje!(r%$SDv5t1mbv?KPVQj%=u1ds@^IKAIREu1CtzxW5aek|}O-F}b zDdW$6H*}Ie6PMKYt{G+d{ss~N-l71)HsVM=ZUw>_OfcLrkQlpMe`8%OV8xJ}j~u&S ztnO_rJHp~2_>B__=eL<r|2C`_Qlg^3#tvy#J6Aqb2wx<M)zM!1JP-MTqlmU<VL_m~ zPvx*cbnCP<%4TjwWk5~i!qa20)P*PG^DM8IgV<V)g)dlPvL;P?*o%d!SUau`^o#9@ zN33`wtKp_MctqccKnE%pT$qAQ2s-sGUFpA`D1QA&A=Z0(!<dWu#Ef2r^8Q^{{btDL zjZB6Q`H@PL`KudU^-W6V&^n%M2F*aFKEDNfP4oiBT2v5u;n1zQt?v%WkF3tfZGCS@ zem3r0{va0zn_01dKt|?cnK>8B`nS~-=i?-^p{Q{S@sbz*6r|WNg4I@`Mjek4_y$7l zV17$OOJ2l(t7~04%4aZl)t!nLE}tC^yYo0aawGW}dEvde*;`z7uRva3cBU6c8(|r? ztNu>Pk5xE0O|rZH`XFe9KKU&4Vb{^VaEFSnzV?c`{XHAnzB7n}3)D$Wd68=~f|p|b zGGf8MjWOYkWP!P>{<oBZfsYiW<+i?!Ncdcb>}jk(R-y8TyLCJ;Xb5Xt&6xb`H(hmH zpNF_`bsmhD{Bvs3Ty;b6Mv<`re>9iEcB(LiPeOP)pGI)Jb*nu%My;5BhCj*6-d62V zyMJ(^3eLf8x7H&ud^{~K^idbi#e?hdoj;~)Y!dQij}IQ>jpn;;^&{0WQi!9<aKuxN zJJfBWHC2qFuaOFOfj#-Lzuu!leJCYp?HrO9sYcR61+t&W3qQ*A%$IXT;*x$O(y#hN z1UIeAlXuRnjOx)m24*6|snosDRwm+T5^VYK;n1hL&9?7q?G%E;djLD%!cx72^ZU=J zzX<UcUDR~nVNCm2k*G6ABKiEUMt<T~Bj3AV0AcifSh{>_(#kL5CYDcF_K3quD%3(_ zp88bpr<$lkx{v@@AiL(bsHXYHI+2k?DAxZBfC}l2`ZM~M2YHc+I?Zsl>TaePt2wKh zZD^?(k)Qox^=POMuJq1_KDPM7?}cV5T~zIj{OmW<TX^SO_J{e{mxFkQR-<_TK!pSO z^QKmE@%W!})&B%i_@k?_UnU>TcVyjlOqocb2kkDbvCDv{=o+{hmSOWmVglVYe}E{A zwKu?k<v?!s=IT*4i95QoK$0i9CNw1vt;j=cvV_nW&qv9Y!NtaChknsDTt1*ki0fV_ ziuR3xMAIujtve(vMRaQKAbru^K|K1KyxBO<B^zZcE+fPC6x}{T@;9gWQDoE~%Vs&x zTWWYDKT?t5s^|7B^v>`BQF|n?xvlS@C@Mjr7}&0hqqlK&91<DT{bMR)u^`t46WpwO z8LE_z{#6<o?9hPLif5n|Ak~d8lHLrz^3ijP1U5wc+lj3{jjkwU7gQ|P-^-26Mq)hf zx}ggEymf0>WbMRjUUp{{&fdB{%Nt#(&$+8_X-;u9u=$M|&_j19azbb3MrLGWx4Le~ zQtq#(`>lAzx!iR(z_U*7ZL|3&(jbeVZbJ4r7qlpwawC^#v~~^2ek}Z`YwA;6E{zsQ zZg{(;rR#QpO>Xus9d_1$0KzXYu6T?O3hMmu>q5*x*BqUf-KDCpBfQZy2*fHY5Uz%A z!!?efp^EcpC1}=gyrTR)9{V@2eiY^I`N5;GbQvrD0YlMhP~PHH`x=zDT=|L=4IULM zzfn!_OU(UrxX+^dE!sVrJ~+`b8{O`!SYDr#--JehtKq3HdV8@DxBtjcb4u4cT7A)2 z%5Q<7C?e0e<N}qmng=K;?d0RX8u{mQzY_Py2O_tZl+7wR9P`tKJdqhC3r@+q2yufm z1;g(v7ih=f(9_^FtgMED<wX{!1t((dFtW|Z!CYn&(UrXH*P#5+7D@J+k<<^Ds<uYt zpR+Wh8mq&x%?ZoKH+xuP={pQAYH?+v2)3>=iJtL!feL?1(%4PfC`Ab!%Rj2UwqPC? za%13yDm6N>{UY`I@wnFk%5i#dv^P3k_P@o~=f3Q-LTJq#WA<{D{q=|yYf1GQt-;KE ztm{YSMyB^aZ_;W|qLNnU=Bn~EzCDTd^Aqf^VUXo2Y+Y=OwV4)Y1W!lnma)7-6-KDU zQ~{O!x|A_iJRgRFrFtAfI-={?MnrU4^=NCr=dWF3653~n!!H~G7y5zPq?6cS*7|Nw zkt^qX<rImfhc9xpzX83A4=_|E2{OT+UOb*MGDPKfA5MM*ZOG+|&U9nbUjD=vyKuPV z2Rt#>i}rtRa|$uu2#zVkp|)*7jLKY`)^)fq{0%ev(;#{VI2?A^L{z4)FqY@#efI*K zTmL~Ym%~6_5JhGq-%kW#c%C`~_HZ+TgK4qfl;_Bz7zyJ*C=?|)hjy;}yR*~R;XJ79 zz1Y_KX?{I!2Y3QC1QOa+|1e(i>sx~9xm%{Cr*z&8uuuOWY?|D`<+{5dJ$OExHgG%% z=iR2@G+xx-IPkXbj9qvJsUlaQ;H%Ph_MyQ%GrS<JE0^b!()qppoZHXcP3pQ@xvu1~ zkXGQZ(EmvU1grRS;kgRsf$CIYJyIiQ1|P^XgY__hKAqP@e0`#~5^CzTEC3^nt|2CB zl!n95^5`6ahw=>3r=k+a@LJxb^!JS|8l3D40sa{j-^kMDTX4DS?%Z_5?qa(?e^C4X zrlxiNf-m7Gx6DAqv#PR~9iR?EzJ|vgYi0wVDvWV390NR$<ehBzG1(<TxNnkN`_3qa zf*?d%F?jqkVkOKY!x%d$!4iZyt!puwWEfm!d?SX{m4VRfT=#bi)7M>`uF{^zFGmJH zp?HK+!*EL1BE>C*2PkjsI>Zc*G{Zx1wlO?!WsV@{OEhPm@r*<r<RoRNeeCFCEhBD* z=o_C^<v+3sdh^|?Hy_#wkF6R&_vC{^adv#DUvJ(U!RZ0kQQ;+P7f&|6MAscfIAU?@ zG*j#xWk>RN{+r$UJ8*6pJNE8ay^*Bjo>;yX$bOy&{-Di)ar=4hx2{~oZk=6fKTp>H z`+2sT_s!R4829s><g}k>7jBW@exApfZ@HZZ^^AQx&n|4|QG3ZT)Rm(m7;P)OUus52 z_26*-mA>duY+7H5ln(ZwxI2^A51HYGJ$Ov&aTv?S?&qF#o=B&5^}HPPTkWC98Z0-s z204FC2MW1vC;|T0477g-?e~ox=*NaOsr@^btNlAKd&5V0arUC#zw@tPy2Zb4Q-{^2 z;KhOO?fc%Hr0KO6mz{Yd*wD)39?Z<A)Cn3Go<;JvcAOhLI5zMO8h<1>*6qziZ&x3? z@plwNG%l1)7-(y&&frdJNQDy&{^gHcHx|<4jO1rH-9GUV2&xn4n_Z`RAJi^;kBK9* zjygcqtWwIvkpkiOXGX_#n9)hwFeuT6OM+*H5AK*9E$c}0W<KZ3{ETC6I0*g~^h`MD zffhsTKmu-s#qsswG1%c;hT|;42ms4Ml+@2by=^<2l5KYCcV6{{XyYKVFu#OBFz81n zx2O%{NH!Liw054uQ+W0LY@qN*N)S;vu@MKGd@{_uPeQBqrJaCNr-$Nd3PjRtHct7B zp*=c=j>6@5_lp~Bh>Q8g@u$`|^*Akd4Vta54TBD+ds|-}hCPu`MXGQ*R9I~TGsD-V zQ-#xUZHJp#!@9o1%S%1j2UwL(`gC73FWuvf9F07Hn&f3no1mokMHjStGhfIHKiB%+ zFm+&TYVaZ)3z^Wq5gm`rZdZHO!c(E2GuyFWt(%^})(N?Fdb@(Tzb(459cRy@VY;y$ zb7?p~08<jK8xCOoQn#hn-20-vexF_m+HUYJLVj8X-rzr#{40h3GO>$<e~scDnO*=J z>VoT)BC}1n+XlD=?xe7sZi>4caaRaD_upl~ZielFy9~J70JsV6vV=ZEY>&8`4E(*I zN90d!G&y3b+BWL|*20-v$kVi~rrbb{sGoX^8NHwuCCSm4FhRKMdTLz_2O-`4k@J}9 z94>`cAL++Q0Dd%Ec=n1XKK|=AAujcx5hqko9$<Gk2HvfbTPd~$*y<mSuj}#}`5(tj z>--<D)VBOT6#2i5`5#*$I}_9zV*qW{CnBdqwO@j2cd3lc6B$~2hfRDDecjyq83Cd6 zt_<%3mTudL*pIc88#^sAjOYb8Cpuw@8oic_&Y|+Y6y%%f>9fLlQ_}s>d?ZsoHoQ+} zWshCUJpQqsr<-u9&6oM9eYOqytB=pN>(|w&epf@ku5LFY7k7BWi|}6!{mSju36|R- zcDu48S3`fj*bBNEr;I)f{oNA!2dC65{cWxFB9p}0<7g#Rdc*U<e{K<)oy)x85ctn0 z|4QMzOza}fe{K!%s6XZ+buhvonVSQ5CfscU+yZw6LT`$lBkl@;hyKpZg53-o5pz`r z+-(5d1b10NpCPtK++j#(KJ<648+N0K3mtG*4V<k5SPN%vAy3mbVis{5nTw9p{9F9d z6}2;?7iL3uTk-!?^jD=uA@rB$>4Y<U;T-hi%zfA2BcZ>87tiRMa$FXy_1v(P4VXh> z@!zlihY}&w#skFuTN)@692+S4RtrV)K*EmW#3l-I01n5%3Cx$`ES1d&8pn7#828v$ zyb{NHU@P*hbk$(M@Bw;VK0SVjOG0{ZBNg<g3hj?;x^Ybv{?%xIOzlxAw{>c_*oqrU zAhbU=b$GL%W&2|s?mj}gsbfKK+Aep!&%jXuZ^YUk7}n{qDmon9!t!Ph_YS}L@28j1 zyFN2@9EHk3*G?I}jKte=ewd5LDf&BZn6qftS+sm1?LGYP6Fg4qqrKHg9eo18Y51?< z=Vkbx#21?0^{Z1u>3E^@-T0?`2M@B@L*S=)9EATH1bBG?4rw*o3A~KQX#AC7v=Va| zbH*3=lcO@6G$DqQKPkL8O=TsbNJ{@V)f%a}eElbVrQr+3nM;SfSYU~TnSn3NgL8=C z<4D-b^sZ+(O}zgV|8J4`C-|R*zcR5nJIeaP7Y1!IKOBdDCSPd4D>d~;sq^rP!=#KR zR#!Z?=}_3)37iaoPInVn4B%AQy9n$7K+$g{Fce}>g#C8{mjj@i9|B1EDS#3HFB5Yb zW*Zr(Mgjo<B)f;eb^-1raL`bVX(x~a;0W032+SAYdjx8Q><I!t0dO#Eg}GbEzD>+y z0^CTTTiiTK-~dD`-6%{J0E+WBV!VQ>Cr}E265K#wjR4;z&?IhtL*Q<4qcH7)`8hG4 z2&R^R2M_x5Qv%s|P=YlC^6^k-6yQCkGk;%O3$3{ukqsqOPkF)F$Hv8oH6wtpWVn>T zF99%y7ZG?yFpOzqilj<0fkFXR5%>WBhVN1WzXfm@?8^zX30WzDcLY$FEPSD-i;0;j zz(oY+<8dZzWwfqRXGY+EBITzNaxzgFjrZVvHvSxPFv{_N4S!{N*Wb<HPdXhCIdC11 zQH4J>xQ4(^{Oj>wNnjx!s@}spbbC?irF`MktTKFI<fI}b##sQ0^>@R#1pq^xLd+ik z#B#_}g5gzf#_M?4${X;%3SSuyn~C0lKlziJ!HHldZHT}aJXla%LST|$3JK)k!H{_g z@Ua%QGQI2HV%V1vxI}-_FZAzEB>w^a^lvQzmh<%QG6KW!pnuZ{u!tZgmp~>S^zSqR ze5{47Oz-*zrE513V?3*#@<JaQsG^4>e&}Nf0j|U%-<brcQKMjg09`kJ1K@A4y9ulu z3Z;j=o514$4u`#iz)^U719l4m=0BCZcxSnUGS1SQ49Y^i8EOe-D@z+lPs0}$xhf`a z#tYR#nQy=uF*E3#5im)AxBOuhaU=dW5q~%S@8hqG&7T768(&yH{)N<+;ZKgrd<QSY zsKmJ$z$t=2cy3#3q~4mc0w0;xPGg7}(Ia7>OyE%fj2NB`Zg857iIhzs3Lp#iA_5Np zV9q~_z&DW9NH&_l;{eF|AOgDqko6G+PLeox6JR+>HzNrA62ObFmC<odwao{tw7>`8 z20=@jF!TKd|EWM3$Knwem)GO-UHD%}{OSGivHI@?B5C+SIY&cYqYJ>7{7Tb_fD)5V z%%=cs{>1p~#&>1-Lh4mi#eV^~hR$eK;0rZ2L<}Eap&s2^XQaLxs~oe*hLt08!-WK_ z%JE79tQ=YHEg-N505#zV0-pk4J{d{iR0u}~BLJjS0eB8T2{G3~WZJ{|_%i^K6%aTA z$wa_MV3q*O2(SudqW2ER<7NSd5z``Mg#?}lKnWD)V<G#5Zm2C}kV-PE3cP@TRRt<c zCCDhjY+}Ly$Zanf{9YJ*MBqUIQb=Z1f#(tUSllSgBqYPh`1l3g6a!%9{1<`00${oI z8G&{H^fW^;06<R_#sf4lClZqlfSC8`rbsY{6LYm--XrF5JQ&h<2<*m#xuA;xAGg6) z25AM;yZ--A^=`8AljW-iA)Sr?|FwFzuU<UR%I18bMuef<My}+fiwOJ{087kM2($vA zez^%eFPK9KbO4|heFEF~5Rae3RwmYtxK!%~8cKMf%8r6g8p{Dh=!nM3TWQ2hh0e1` z?}lygE;*{7ss(QW&<H@8|GBzu6Pgpb^s_+wtY278?XSzeYF)<s!&WKFnH>C$bMU8X zDWlVLAUxWR5s*@6xzNSfh(CGVL4frtmGS!ocwrbBtH#l6!Bi2$)+9?YRz2#m7Pd0I z>$eR_eRxO^0DV|Ob^Ig#^ub5qFgRhZIFSJBG5T;2fqcP?Ai!Fjg6yRV-v)r(-X*XL z0J%LyU>fQ%a{Cj3%K(tu4+*RkOe28?0OZC#l<_eDa_gc$ry~QA+v@~=3V_^xLf~%z z$W8T-*v28|I%0MKAh#<C9F9CpZXvQR06=b+5V!{b-SC1#<DUS??HdH%5)7N6#wP&C zZ5RPQ-bMhG>0STl8<27SID~Zs9sh)MY&NmWypF(ipp9Yf1whOyVlI}*P;PDpKuifS zXG*{nrV0Qt^NC?tV%+8cASRa>_FiL{2@sN)lZkm8Kn%mABjy{#`~g4=^M+uC5wjNc z9*ZO;!JPo;=0nEf6vSQ(Qx1Tb*NAx=09#PXO(T@=NdP}5x648EO9W7vzP<!|E{xJV zgwWuy3KK^4PPv4NEawo@4S<;Q35*3B0wW330U-bP$om#N7?@`WGz;b_0{7#=yznpq zKHi0`j4Hop;gu|>6CDvCm%vB(lYa(*qa`6{5n%SB=%Wc#17N@pCJ+V?YxP@w)Tuzw z3pVJCi}7dK|1g33@TY8>2=FnEFEp{Snq?Z+LssPS9zRs#e+yq|VzlRJ*f98_0>uy0 z@gKz(8eRS{rWk<Z_~~2t^Mf*94WC6fbbq39j7NX>{~dT4BiyGktRJpL{#0e9vDuQ4 zFN_=Zo{YWtQ`Nph;1nbtF_#jE0$}P-Ch$uDjG}K5xKA+OB(MblQ&6S;lK@nZ@xkD@ z0J#k(86UBhWGuZ@vXhoCq<xG4AGY+8@UA0@hA*UTB)~@^Z3R&@d?D>B0({tL?S1+m z6Hmhz#>d$dnwLk>^`QhNNT}HtQv(K!k2V4q3+4#|9CKoPJVc-zk63*C900j-@ws~Z z6t*(4__)jZ!WXtal+PRS!nTw$G1?OA3tz~Wo~ef|jInl&N<}i@3#qSSm~!xl<+!DS zsUU_AW@=@m&SYdVZd9H5TfC5usxuFP*De66&SaaKaii)?4&o4_>dZL+s8XuVWOR_5 zsxw~%KyIqeoC?3`M%9^%0FaxiGed$=b!I&Pa{IqlXMV~&xi{rnh|chDM9pQ~fj`6l z2Lc?FVfgC_Oaj30mlEKp12Ibpu&vGTbL7`}900koZ)zNfm?5`m1enltvzKHy0wA|t z1b!`;7YN)5fZVnbcnbiz`3Q_l)!Zf$_#Oaq<3P0WdjRCt4O?{}h<TSl8y@7wmWX<= zl2E31y@Y=`K>G0pIsFoUO8f+Y5faJ`1jYiOA5j8R1QQ`J3jqDNn!x)2$ZZ9Kd<w)T zx1|Kww4hwyB*2Q1+*IMeO)y`Q!E*q}?QH_w2ug01${zsarsDYy0OWQmF>G{^+b9CB z3x+o|t8Nmx83g#Sg&*zP+wqb7)u8HYcp-m|NgH_*DAm|y!9xE3Ma)%#;pmyM8V{B- z-zLDvTG+~{I=uz2<j+A#Rm7A3o1|TU2L;<qfQ1VA|DHgdV17q{RR;O1@mfCC0#HWr zXXYpWPe}U`{^U;;R4GLM94R*D;z9nZ0xAVS4C@s&^h^G02=K8MwlclzZFQCk9zXMi z9v;Q`T!m24Llx716yOkI*w>{W8(|yA;6dLv5I9RP?DHDa@KB*6;KL(UMqdYjtm}#4 z<6+p!^savj<CLnrHy*J*@`Y^~H+5?l{xcXJn&TlB_2dJJbtV9kZ6~lp1l~&EAn{KX z0#^c{^s9)u9ss3ZMBu*!b18ve0ig7L0#>)(B*1Pv8B8LuR~RTwb>Ry!-z0{QV=O_f zvGg1uD6kvOjQfFQG*G-)1N0>bZp^`hjQ&Aj2_BU37X+>o%xwfX7fBg8fubJ2hpmj| zAA$dwvHQMsds2&_o90ZABbjcy@sFijCIn_Q^f010F+?)<jZ^`l)SLj@-vm@?SqXq~ zvYMC%0F0Bx1b!x%Vgf8J87K1yaCafeW)pZt$j&D4g<#Gga0DJ?eJlY!Z0Xh)u73il z3|}a)>cqW{msq$aNVq;Dqw^(P&k%S40E5y-U=%zjz?ng#TEyZ|s<BSQDk0D$m?Z>m z2f%PGAn>S=%_YFGc1nLP0hWRc@niz&cn~v|03Wt+y;Y0)aoM>*kYW_XGg|PcSS|t| z3h*jbcpe@kQ_Zbq0O-YUh^ZCKuL#_T2W3=+Cm%L_MEjCMuH=$RT0j1zO(C!V{~h=% z)4P5zL<_9|a2Wn7cW_jHGAU{9!3*U)00CEn_5^lP=$UxX2QJ!H)4-JTRst-|i1{f2 zcIoIh>uL3fHB4o`<t%(Bf$G^^h!;9#kz%ZZ-z>+Jch$n@Nn)5Ye*#+>-9M?rJA<L- zBD(SNs6yfq>k}RVfEAExHWQdn;8*w)V7#jyE&-PFMi2f3*vM0}Y|KU%5g3KX-LRFh z%^NLbEYa|V5vqn89s<CkegyO8_n;aCRDI0}njaFN>0Q5NEfQl>N(ca_%B~<ibz?04 zO9;$_zhtYXhkgivsZmJG9sm??CV|fYFf~2|d!q<(MKV=xF9YBPz`+IM$AZ~SU^s+a z1Y7yD1^~&F1Z*J1B6}QYDgLu`!xkJf=Ys^U!{c+<%Ji;(N6jz31xa+_t3F$$@S6t! zWQ9FNeda@Cd5V}c0N=MT|0S3m#IPu?vM?;N*roW4m<t3r1Y;Y<Y5>%!g9xy;WCVOc zGB)ELgRRJJhsZGo_W^J#ae;mm(MUH>(#<~sP)n6zv!9s9i5ZDUp5><hJOYOrl;I0w zY%EjeED$rs4ko}ZDAPHMKsrM9N7#QO&;fvgH4~U1^8b+lQ-<kWO5kPyOlPhiQMDrl z%O}t)WU9S90U={-oI%W;3?}U11U3OUpiln0YoULW@LkU(TQ7g$2S}s_N9eg4OJTio z3Q1^s*KZ%1`Utq$<`8cHKyR<-BZB{U%cr~X!jH@OU^&O}RAo4Q#*d|Zq{4@F`a2i^ z;K!wW+yvlK3-ca;BLEZ=GZX=50dhG3#vG$@5rK;V(7u$9UjksF{E9#h<R<VN0)+q= z#$OO%uY{N%5x53`54IxP0^ocA%5Vsg6pQ(|768*h1^agbsF1QNNQ??xuK+4M--I49 z2p5xq7Xa;x6gL2LqgZq83InHD|3U!8`fdRf>&FC8te*oAh8tx#W9G$MfUG$RNN$St zLjW=r4IUi;NHL#}TzF3jlsKIIB%m-gcq0Ra*&=|#JO_aBHjfN?0f3<~m%tHtFr;$` zoP-A%_z9ee$6sJ8)4RUSNS)2sLj6I%aN74z)FKwXh(I+=ZTtf-f5u-KHp=0l@ne#) zhf$!vQ%7y>@L1{17m7L)32L<B@5Nu41BH`nh;j`56AN<?H12EwKDx;V&}d;eR>=@4 z%&P#@)H$)ogO>hGr<+soIE`OvV&fmPG>m>AUKobO{4fvyv3#M?b=@4iG4u-0Dsw*m z$_$Q|v8R&|9%cAajJN0bA%aJd`iw{K`iJU`)cYx~ag+6tFZB8njuNw0IFIgV$bgvX z#OwkvgI{Ubb08*<m<#~1VWN$KnM%x70I^Jc95N{NWC}6U0T5G8fF(F1=WGI_Asu72 zia@gfHxPIj08^rpKsx|32omr^mYJ{>*?$3uX~>%ZDCl`4V+N&Os*rNtfq)8JL;w|@ z-wB|Cuo(cQo=gU*P<nDZlfXA6ODWcw04SSceFlJ-{yYp|G%z`I^M;TqPd^kudCIwc zGEkl#DS&drg$oo^c{&xqQ~=7<12`IQlgRohaihd}RRHDYRJbN<MV14A(VIm#YXCq9 z;}iln0bocc5V#ir^XX{>+<5#AwlcQ1(ci6ae1VT@&{gHQr!5SdvBYpz#rPQ>6D^Fi zQwcs~ed7xgbrd6cG^oRLM)NCZ(y_2rXJ|73DylM^j9};#hAZ99u-yC{DsmAphmqSy z0M1Yj@Q^TEiC2VEuUfelFN~OO{EespuMxNne}>^%0>8umSA3y~<@1@ApL{6>hP9sY zM?4mjj;440Ekjdph7=gNB9ewL6t0U>ya#~dD#M8mVxA+0(;2tw?-(Hw%rnHi4S*4* z%nSsc3HT&2Y_2j|9w+b<0JI<D!x{r}F==Zd5JNqZ0M`?-qCAAaUjeXT+DkX@0?37} z$WDb|EW(tz0RRQvL9*}QtxkW(IEQ2-6*vyMl0t=Nh5#xErINuOA^ML1$ZacuO+uzv zZwIg)AC<WUO3OU;6v;MAHd6jPD}eHcD?=Cu${!{n0p;d+0CcPTnE)UkfHGGBI2LaY z6Wt_klmvGOpxm$qWV~%6nFkNDR&FW)z+a=4m<BwUBo7hzDIO$yfWU9@NK!YJ0;LRJ zSU0i}8Jl_Fn5k;(9tmAhhW$&3q6g_Z0ZbDF^i9@JK4^X63uW#=VyfYxT#F0&vi9SY zs*wkv*uwk<nnO2g0JIsvYzw37rPG0<|2g=7)j4$g8lC&;o`x^K!2b)X!6JC}GuST> zV3s1VlK{IA1fC@@334^Tewx712m_=1ZUXGbUjcgyf!hG&!M>NkYXI02{0#y2ohHEM z!VY649%S%i0uelzTsINmqa3y}vA!LP2R7MvF&<vTpSkBT0@p#}7=|SvG4~N;%_}Q6 z9Q-Bb_rzH9$_iu6E8k2E2M;Ni!kiC)Zde7V0iGD<Q^8adQv->QwA^@*g`Nb!%E5RK zzy<JF8QnHB@lMo(kkqIb;O_+9#GjhW0?pv~1Id0%fQ_gVVQ(V9A%=g!R>qoF%>zX8 z4gBiEpNtr1#^v}^w|+q2O8n>Yg{F7?FKf|n8O_K(6@Sher7*eM@mGf4_0jQtJ|8rE zVbrk1OtI)BFX*9BAoy}9Y}JE&8NlJ15`*-J6w1p8GCl$DE^KAql)Ny6+4}<kC*!Y7 zEU#_1xbTJi-yxS501US<Y(kR%E5vY_WQ_lF!v6zeI4ou3e@lwYkk(p$@`VM&8HmD^ z9{{)ofHIlT05{$gCL6##mfzh_2l_pl(cS~#9~QSeq2$DjBIX|eRO;g0D8?618YRS( z3Q!3<7Pr#=e2LUFd?7D2-1RzMKEPj@{qclo*r#~HUKdty%qs^X^-`EMn5HfQ#dsNu z|L6Fp+=<62_$$n-cwrt>=48+^9j3rmts>?MWzNSJrYWcDQaIW{*2<8S`AX9CR|>>~ zFI0d}`Qgv_7x9J0%IAEa&Ib)&NY3KMScpI6_$z@W_^;s$jjavXi=3bgUr5bmL~00Y zoc@kb;tMgi5W{jZhG83!m>&}puw!l%%uU4b!B|zs){Z?!hguKtk`KqRjB$AUNYm<; zEioI3;e(~BGPW@M#0mpnNX?2#O+3UT-6ojRh~fT>7-p|vvWQ_M#4sn~3%N1;>R}6m zq|@(!QHC$1RZR;%Mybzu#M1N;>kD5<yMrJ2NTfB1qTvfQ=3WAR{B3C{GTcQJ4PTh} zk0B7MZ9kSTG%*>rXc!eUUZ~{krW*gmUkL;If2qluhOSe7f8qFzCjL9ZtIhS6t?B-g zXA4-plB+qixAxiA_jcgl1KzSp(Ju0}ZxVXTmhasbJ`V0aKaLOlv;0wfo%npk@7>p< z9|FHnb@ODJg6~q%jQW;Pkr_RguN{2g2%mzIwI>|FcO0jA25oceurah@@M@_qUa3+v z!oZBMd8GN+d79C0DXOrt{s;Zl9;#iKizK!vh-EB&5xZBu*8)ad8MLi$L@Ag!ey0(7 zWA>z()fMFvPrD#g9xPoE$girZsIn`s#%Jf(EDlr#ODoFlIPwtpS-y&;rHd0>_u;1( zR|hYuDh&p}UAsBc0xeOLZOJn)cy(D|Ng|2h&ziQZxaxvH@sdE*)KF;|ED_9-rw@PD z^y0<AimIzMfySS9I$Z^|C-Z_;f#Ma3Ud73ioTyLUKD^yW!Drh&u}eIAUhwqGFP}Iu z`-<Y~(#4mTRtKv}%a`H_k-Up%&jV^Pf_izds<<>*?OmLok8jz<Wn~qMixDb*$hW77 z#qSKwPqVusRPyieVg!i%r_Tvh^+l=8L&0YyMbdr$@KyYq;mh@`EG{cu;+Z*b&TP+; zip8N7f%2edMW{OHxgy{Rlm?dtsyxNzp5m&i;;TIs>b>HMD+7yzbQlVpVo-wvO9D$g z)xqM$%YCIQN`s!#au4Ep$pTVjWS(NoyShABT;mBa6P&FbPVfjD@>I+NHI-l+SaOO{ z6$%)|Wz_*AR90sAORKAqa-MN#kMk6lK+i3QD*`L7090PQBG5-PVH|}Vw|X395FeHV z7MB%Q6*HIh5rP7QLNO4lMT(Uc(avd{0YtT@ydvl+_LPSx3nF7hW$<cGpn7p}Wx!J% zxGEGVUmTz)I(dw##Y+aj7B5*+N-2xWJk_N&9_lBuSfHxfW5tapSmCKGuBr}rLgl54 zE0(~M5F&MHaWH`IrI0{VGQx@>8dGm!2(Fd~%IWrsz)}c<&k$~LMfnoXvf{E5PeloW zkes2C*g`pm>ugU+MX1WNq;x6rQcT!W_SNySKn)6<#ic6{aK*#M!dF@z@SLz@f@fMq zS!hK$UX7DH=wy04#=JnlW58#490(SdmSHG0zXtgkX;Oajs%0n>t1F8U{aS03hKtUY zmz0*52Cp`XXB*1{C=bh*2A6rxJJ)mCWv6Eud7;X(QWOFK4{&FD#u@X=i?1jP^hLdn zP3_89Tv1jAwVhV6f;p!edRtbpDh4sx7Y8q>s0eCAUR6b9Wnjr{D0V>^WLs9jB34|@ zM&<+gtiaXsVIGpPEHF1zfshz|*~=(FV7(<OtVUIUnGrJEoFN~T7MD#gt0;y*s_yWV zR8_1{c`|?uctW)?t)jd-=!I^vuw&3-@72pHLS;)l<$;yZ9h3noK+KiJ)zyKjpyx_d zYaU7vSYkkzSj(M#w#w;epIsfWA|fO6Y^0cu6J4A@ez;zR62)_Bg2UqKY4cP8O?Oqu zH>Fj9YRNQ;w-IEaP@+nO3$I4zlB@?MhMd7tNg&B)zT&E-0fY}lSw#qc+_Zq#s^apc z0Yh-}lOmT?gvcquk&?l|PcS;g;%Z~6JaF{VhVAdC4Ka|XB#Zf~-1NzO<|GMff6j0b z!wke)(ZzVjg($|MKW|D9Lk+}S6P{uWM59>`OjAPT9+>2cii)yR5;SdbS)jP8pO!7I zSW#IPsL|C@0zLGw^cqxRHnmiBfeJtZbw#DlQI{^t$YrJGEngC-`RZ;<p{=FjRN0=z z#pSGNkRQtfDD6vE2KLc!WRU9MR~Eic0FN-(XE6|A6=f>}7X(TIRjmE`MV+p1lgC|x zLlnOgJc05h_V^o!0Sfgc8J437tdbnvvhFWOA?zf{ii(v1ziMCXv-nE`LG5BT8YI;j znG>`^#oAJK$uB*{IBsFu!3Q2P!Z^-Yh~GkE;T6Wh5@TVxv9QWm7&I1!49aJm?ZNE8 zwX2P54G&&d8<#G^q!a!gV*={FMFwmr!V*+Hx_tv>W<8`D;6^}ITo>p1eJF}6L2yNB z8LPb|sD%=$pip&SUcZW?vI^BmH5*O25M*{mc>tANANN?m#sRHcU8EU@G5h#xVTo0v z>M~wMI^%V^szq4)u#!<#t}ehO>d?G~5;?QWEniYl6(}jKiQ_93dawcwp3<eNg@C|- z4)y6*=eCbho^Zk`CoEZN%to8yWUtl0IC)}Vd^U^``(k}iouIGr5gSJQ8hQS2Vih00 zcsO3x{}dn3FCLEP9}maV4+h7(kB0|y|DWOq^Unz%|Gj1(1zD$uOL{GPFlU_1qp|E9 z1<C9u-oI{t<HIH1{jah9Q~BcE$HP`YE3KD7>_$mX%N~S0mX1#8`E~p26ux*lW%x2B z{=4Pg3GWdH9DRpLaG#~WtI_#n_#DBHS4f%QlW(-F_;A8E3GD>f#~MQt{BIisZ%KST zCJc5I4$BpCBRE6PAXt;1oLR8rn*?8=Mu+tR?BbNvnEUO5?-u+?kZj~ZLu2^21@GZ> z2uxsDfBt2r_P?1c24M2=PZmBk<qI6Ajldti^fyhM5{3~r3Hatg@GXMRij)5?k+0jO z`Oks{`C{RFTJSldKukZF1pg}q&lzre{2E?~|D&`+nMh1<-zaz<s9}%aChjbN@qAOe zKN~LX@)dD~6HJke=5wvS9bYT>7Bx;ETSS)Nzgi6kK64be#PAgytr1T07Y%~16nrDt zq!=j){(Fwm{Le@Dp??YZBF@^v6lf~}-z@l(9PsUeuXMl{oS+dBe~J80)cCg?+&9Ub z;{pe~k)aVz{#OdV(7}D1;JMSqu3t@7`b)r%f;!moy9D2MvS!RB9?9}o)+riarrjrm zzbQ-OAC2>WicjlbrL5o$IPh;5Jj*wj1pe;RHR8@V{<jMMwn-ZQYm`Iw@Ez>e{@0$P z@m1PN;BRfNnCO7dnW7O+_*%hpMSwkj-6H<CsOh%YLgqyO&(r*u!h-t*e5K$o13p>) zXcIiwb=kvzulS#pqxt_XPCjF{j-U2ijpu43d->uKeDgGo-wpC)`q4C9<4d#!F8z&r zhK6^+N|t}S1<&?EvhcZ0?S6G!{jp5sYxHaU6Y$v{{)4$=5vE8AF79Ho*IyF^-y#Kv zQ~A|42)<qLOXK+agnz*WT0W^}65^*w@J{|$3jQpxNv0pogW$Ub&y^1L_$d?lJW?=m zxwajDm*CqMYWbb&=d48<A76idF7At{xG+xjW24}|o7Ug|F$FsPJj@s{@%3N2th8&s zQsd+E-%i1IFW30^`maau1uHcECFoZ&{mcq!yd-l%`qc_virEBwv*0T=n*_XPrA9d6 z8wKxF|8%d??#F1(3H;qxYrIqaQz>{S|Jw!cRR82$qxr|zKk4&y`n6rF@$vP~g@VuF z>^qE8{nI4)j}WqC>C?1UyZ_<P{`zy5@Gtnb#yizNErLHylO@ET@g0rGh|3>iFVx}7 zifVkk{?!Y<@_QN|Uq1g@@NM7M`1tboZNWGFK;xat-^QCXzC>Gz^53ixPUUaA;N#2J zN%N)rT(8~7m#;eopY=11k1t<)1mE~`jgK!M(-&y|Mw7-nm5*-0&jXpgew{4tD+SLT znaS#p_TOm!@$L)7ea>$+UizyE@mDkmzE<$e|H=Gs7ChIcqI^x@-}oo({{~pe%J-Z< zYy2L#w3p8{mi)~c|Gws*t064u7JR`y`b)|o{oRi(l=R)K@ps164~1M$4ddCS@pr&V z7QS}DJJny^f?urJB!s_6*3M-);2Q=11oC$>|BIf`4l`jTi@!#}OEWRS|2Dzjf#BNX zcaMa>afjy5YA6|hwZaa#xA3>OpYkrz@z?!N?cOPVjHd?1y9MvoWC`+n2Ek_u9?4IW z;66w2`40F-!8^5o+XR1|gZqM~HR5Ooe5K$IbHFzWJ`IxF<F{7gx9J(}&?$bK1wX=p ze~aLq;-^jUPWt11Rx@@SKN7qbWXbfmQt(dl)e8P}C;0_`oCCgF@Hr0tXFaDKo{soU zRz6kk)cCR5O3<Gs!OJj20=`A?PU+J&2)<qLPWs<H2wt7A2iZqC$nSYxBb@L#f<MB+ zeUadu!dE#6zE<!~;cFZO-z4};ARqKASBr_$IV67=FX%5$`sEh9Q~0w6!50YLDSj#i zFU`~h{pc3_84%N6zwZ?JvtHEl$K!hhUn%&LK$a|jH4TDq6Fl30$=tiyaDo}5tpxeA z1kY}=UH)`+m>w3AI^ZV@zRdw&D0t6H+T(csHG;1cykqzUA3uJ1i@5I|#J%Tb?Y~p` zm^BDKNAOPiRXGU0QSiKl!CpUa7Ws2t)$%#zpMpW~MS^##e`*K8Hwpd~h+&s+;X+;i z*Y4KxeM4I*+Uk2Y4T5hG{BaKMy9Ix=1K$0bMjY#a&k_8ufw$}LI+4Fy@Dbqc<;z`G z`1WYVjT)a2zO2_ZK3iJ}_)5V~a=<qW-l_iU7Q9pYB<l^$*a=@Lc;<hY1o@f;KNrYk z?LYUM%AGn=(VqV85<dl<8t>%3S@2%vc}jx+s$mJ-We)hFw={pJ_-hipQ~28jfAWz2 z`dh{W7-8J+X#PLeR)T!Zg0FDEd)^(`eT(3K4zgtZ`=a->`vV>LR|-B0_+;tRB={R3 zxjlVuk?`fbuNfciz`scFM>^nZ1@BZoHVVE0(P?kLZnpgYP&0ONUm*CoAWIfM&4T|9 z!j~-kIUj5Oe}k0_uZ{@>j?*m3>Oaq3?Y>G|3F+S?`1t<k!94UDruj?lut-}8?%ll_ z!3&-2=~H;Qc3&$~egOyf-GZ-<cV8s#xz`WI(Y@fE^vgI%yLZC71wS0#^^?C?`=51) zcK?ky{Jny&<R(LyTYyiNK3Uuj48s#!lHr?Vm+dk|l~{hcc?uVdlYV&y!Dk7+7i{d| zOTR+GC;R5T=%3s1HG;1lt^GecE`8jKwfh#?DR_2jfA<}NH;&it<L7@0mx%kZ8lMx# zf1BV9PE5n_j3>K%O#$t`;8czOGiZ|KFM|WyFi!DXDfsii&d$H4MDuSxO}jr-aY;;{ z7Quf6d@}!A*fE2V_OAxi7kNz5pL_t5&Ce7Fej)J5_%{oF9M}M#Yq9PS`P=2}kFy-y zd(PDUv;2k8fPPoc0>SgB8hiYVTB_rxHd{LxryQpwxNjEx5pnJt#eEwGUSUS6XQKbz zf<G1bWckN)u6FN~Ke7bB)xo`Wv=4_tlJResqko+EcME<k+$T%FT5c?c2|M83IU4^h zMU@!-EWy_RpG>}H!QTfq_Vn2)@mo1n^S{!8f4ktn3q0IwVoj@_mDBVmPQxVgzg_Uh zYc~n*-Ff=c2@d!i!83hf65Lk`-bp{32I1c}2wvR|0gtJ_FbV!=<?ByQ_#(mk;W%0R zG!KF|rfdES9NZTTf^QLg{QP~7q<^ES`Hzn)KMR-X{M+K!c&GZYP4G<rWaUqeoPL7g zYZ}c=zpH0~;CYZ<GX1J8&`u^f;9D-x_|@Q+EPiw5X*`=TN%0qI{BIoa-GZ+LS+ej| zF3|1^;67RVszvZTR>YqFnk0Uk7i#xT@zXL0zD@8>>C-NFr~Z$J6IU=!_#(kO@vj^N zUpolCQSj{lBr6}g1wVgy|M)8_)%sZ((DFYL7r#YUYJBr@jlWWbGEx6LWg35x)~{Sm zW*DC3+I?-g#=kzIzyAvb-&mvZt+4Fv|Jzq+_eIxed>I%g(~ma67sa)&jB@Qh>w4|} zFL0ks|Jnt=O7qXP<iADS7u9O_PU~+P1%HCBe>Jhi1a?cE{?vf?WcjC{UgJ;FZW7$r z3jX)N+uI+Tt?)HyC-L|_f^Qf6X6-(KfAhEXr!H9b{57;f$6wPrjpz7SviR>7{KHUi zyZbD0-~J=*p7W#j^bKC6`8VIJ@c{?^o*!%cNpbplzql`0ukm$opDcdc1@9EU?pw9{ zbKo9E1NvP(3j{CivjlwYZTgcF|7O9@1era4CRge38^6%*)3u)o{5^tqD&MjMkLagK zaGxXi5x^wV|AJp?Cx=2DyL`1GU(v5MzF09&(SY(wKiUL8KQ8@m7xx8!(M~4B@!uBI z;jjIx#yjQjZo%_10=s-;LfU=z-P-+a5GPssH_AywPU+Jkc&GH&#|Yw}DTn->^AGL6 z6aPxVJEdQ(;GNR1aS-=SgW#J7;ol<oc{=`bt)#t9;@5M(4&OwCKUw@1J*4sR?r#<M zErNH_@Ag6PMoVA(CM$ok1V023Y}b$b#s8cw+I?<Z{d3()tv`)VYP?hXw?**d<Mh{D zCHl8RyZ;9w&hG!Mf^Yt(#yf?-P4Lv8WZ^TO((cQ3`e?vPB-oXL=lFB7^f8{+PQK@W zZxlS+FUkCG8wBruM)N-yR<ibo=UI(k1OCa%pC-Yx|CJ2yc}~0kwgbLd@TWM)-!Aww z9q^u=nt!jh^b@p}@w}ivoq!L?;-^6Hx!OU3`zFC(?0`33)J|5zvg^-I(VyB~8b8Lt zeUspw!rvzNU&Fn<{b1B+{jGgT^Jg)eEd6p`(RioyEoj&HY2cqs|C$7UF31o*O{~MB zp6##dPaJ=SNx)aWraw99Pq*Nm^rv!<cJHJ=>V|H3%<-RO@)y0X-5(Rze$KGs?`@6$ z6Rc$6%X(Mi|KNace^2B0!2e|W-`1`1t~meKiT~|;HQvep#!ocf$^V?sH2w#=eA57A zu}u3H`cut8{q?g${4W}z^@!QbuD|tH>+d-SX**v2X2BO6rtwbl>x(Y*#W~61xA_R| z-bwy~bd8Uf-+hh#-gdmU<K@3y@XaS^yi12KA%0p;)c8V&_JQXljb}I59zQ#Ue=RE( zm_y_6h1crujcho<?8e{jzFzRPoS1_7v-Uq%0eG|sK5L@JvzW8HpK_i4?mk`HW}N$a z!55vW@teTY-hMY$>+e}-X?s2J$?{K|;9m#c?*9aF-!fUdzYYE;D_@JIX#8Vw{uf&Q zpR4hI)ZxRkziH>dGt2}BygNtZpM;gH{A-`8@vp(M%U>`4xAEk5m|w-kZ?lEx#xfXA zGbIb(D1`;?nhT7S8h48O;NfYF;58QCS>`vM{)O6Mc(BkJxre&HJ!IM;(w<awdBD}| z10CDgMM8({tW6SrHvwbr1Ks_g%M!Zr!Y(G?)H<Z74hPG&$@@UZIwnWxq`!?bpe4N1 z>V|#~92qZ@KxfJ4L?`tn;<do1Vs`lYp>XQ9;&+nBX2~zfWTgG*YQ3Y=^4DKC{Kf;K z!@f84`zkzi$GW2C44p2I>Et!izB8~p%E@?jPuA{!h<BQ_YvbH`>y%&gXEXk_LVps% zOp~@ej(%3%0XN2^L)?JobNp+vwLjcfNRxJFoV&PiF<x&(SlZ6h?(&o?Jgj(-_-8oo z0$q>L{V1MpMt^z8cMs^7ov-=IIDa2saZkE~5yJ(8&@p^$(o7aQnO-u|z8M$3xOk!5 zqaa6Cj+SGV_?wm*=gy{Qw^AOVPtb31PkG9~w@~QRNxk@%_FPSWJu2w0M-1=h;GZ=^ z%Om~2gm@wU?ckp-blm4blXlcK{rS)CAMXq=uQ92dsrjF6>CbI(?q=wGMS7kcT02YA z&$Z~kpPZiZ^HzsupQfJ(SQ$%S1SH)a&}|dCIr2TGS2jA{XVWcoPVqs0lR&p~ALtf> zu0`k?<NdXjPxYWP{W=`nN2!bzj_Eo-(%;)bS9F1<<9M|)7M*~k<DuZ|gpU0>Ws=Z+ z4!TC6s~muCEDHObLT9B*EdFfz$~#Bh7i#(58h~Gr{DhA4BFZF@?^g1gulWrmA1|yZ z6uLqOe$-<gX5J`tH(L5NCoZ4Fl}k$h;jUwWmg6Yo1)8*Z1G}R>FGQQ!bBT60U%A4= z3TKk?;YQFG2tD((G8TPY{-s<?5bnl>n*XC#c)l4YSDZV_#alQsF4OJ;+80N;s83_l zP<{$M-790sB_QSb5b{(C-JO;^U90++6LIp;-2}+fbGer1*Wf{ucKpEMpj`JuuF4Ya zu1dMWBTg>T?E&33p&O{2I2dCz?Ss%U{JSWx&`q(z*&7#5Dc9)#67Wr1rsb4*nxt~x z2s)3@ErmN}tnk?K*<GMpCUl&4=|?B!3geY0<u?i4B1_IyadO7#JHy9#-BzmQ{hj6R zJ8|wr9{R&8*3IRbev?HX?@tnazYc|Ldzp5}{Zq<V;Z0JH-wyhw3Qb=k<jK<eY0z~D z-L7~#Y2PqiJ}19Q%}>V1`qIS~kJ}O7w+J2gVbP?$vT{(p9?I~AG=I)ND0j2s;xS45 z^SYp#RoWf*Z7FxB$GNkGV>24l8)`H?oN8mmqks(W+n{S4gifVD{TI5Wmj6%1h1ceP z-oZE}`)cj~q2gb%bSVQ}lh6$$=S`qnCv;rbqKp+DTRyno#?Oh4`gtS5ZONxj6vwx; z<Kw~;mkxBtcx}E;hl~4fY0^#~*d62fLNqcb*J*co$`u}Q@{|8q$X_IMeeK9N{&D$+ z{O<z)!g|erd^~@F$-kcbg^v4oY0_Q{4XU?{*L!c2a9i!Y+v4;uNqg@@xN|pZcd>GD zTwFPBYwwLkI6Obl^j5nf?WpAR4EOC&u7V$GdhQ2S#)?;4JLzfArTtXX4b)Eh9CTSi zcapG+rIWz)cdQHPDRcw1LwumC-3PiL=(Y)+74De7HvPU8bjGbZ9AhLO#^`MFZ3bPB z&<)g{dK+|EKhyjM3dbln^1sjx)SlXd_-hurSbJ(!oc<=sS7RVY+HG2nSbOT)f!$3& zcyEVXIlt8I25V0--FAV#Qs_U5k3U;K_jbr*{#x_pK4qG;S#k2jwOc696fA0M*`VF+ zOFOEJi{O5*>7CjE%(qh@ce>DVUo%bG_`&4~!kzmsntv?+&5Ls<`H%km8uXrKO&@C? zOpBvWl75U=^RL=ntiF%;C$8LLe3c!B`tT0zZeQyATS4FSH%&iKeZLuW9YW_+-!r^7 zA^w~0*8F1i_-lighuh(<;~&~xtR9~;a6B=*Lm^k~1KM4z9zQG2o#-LyCxO2CK}{d4 zcgH2Cr+(jmIQpv(X?kQuZLIQ8K=Qp2e0K^R=SgYO-ir&jt=t(k3iuYym;1JrvG|&L zT#bD9fN#OWnl8ro9%sH~;9D#73GFTMhT*yibT#`xcR%PVg)X7|miC*H)5cHTK}5f- z@XSmc7a4T~`bXP!xHgDfF?w6OcMsyfS?FY%2jecmLF?Bsl;;V}pX>5z(s~DXcOl#r zJfq!lzqoRDc$|L3l~a>IbR*nl?AGqMk6gKP#ntC=?wAf^jzsug*Y57n&idlbHhz%@ zI`a)pH&DB-40KsSw>X}kz$*PgS0i*;1JK<Mx>}**{&QulbQL`%zdfMK=+g3K3R!%5 zlJ4N6AfM1N-juQU3CQoepdY5t-C>Of3{qc^e;N3<y`$xD>fe$76v&(YuBLlS{7tBj z;>uU@-%kGGZlHAd5OnwM1Kk*8(k7upk*`f$e9+%K(5>4Cy8n-{dx4XB?EgPLo76@} zoi>Vz(m^Stmcph`DN5-;w2mFI6<SKBgdz%+O<^M{!XjFVHlkFNLoAX-lq4awNbc8r zuJ>lmU7Pv;AD+MKx<1$EI(_Fmv$NaWLx{_8oG;&ht|zBgzA41@cHCL6-+Nxg;uaGZ zbKD6f#BC%l%W<Phh%3)O0^IJnBTI;DLEL7?aSIHOgniLDmS)@n$LZh4>yf-9;d#D~ zbDTo{+@B8od|FIgw&VB_H9QjLq5a%Q+<3>8wD08)=X@Nuzw2N5S`b&1ue^ud*ZK4< zmak)CT(SGdIO4MY!#d^@7jxW6iTPaC{5~p{@8}ZZb`w{$e`$$vXZ`a!SMP{_&f}!S z_mTT}{pdmbitXY2G@tlmALlZPxV4Vs|J-lf>|*&!dS0(4F30&wirYb4mg7o#Ue~V8 ze*cHK_QVZvT(uI`F@(7E{}4BYxZaNAR=eMQSxj74$Cb3+jl`w?hq&_mBaNuzO4^qe z#3dgfPVYNPGwya@uNQe4$v<TL`~88hGhHVWi;Z8>^LatB@k`q8^~6Oy&ywOwbF(Y- zJWJZ|Cd3u3XN1?2_`KJ;ceCye9`|I&B_EZrZoiLGd=utbbl!X8EA2a8`?P?06kTtP zoqz8<irrV%6PMw6loVH*e_WaAxD!jr*Mzvqj$?`8k?_2Zub=gdcU(J%CHK4T-{)R@ z{mgT2V*L60kMB$Tip2Oc_8&iy_|1v&&GsFy{jC<|`u;iGzxKCpTIWXcR(9OEMeE#k z?LOD3yhF&_`~Z0sH-)%V$CdPYwV1f*e~8;iT+w<;dLERo`_Fpz7uSOMt>-!@%BSx= z&?EV{gmv%Z{qzv>$9@g_TGIVx3ULGeL)>EGx;k!u??beo8;R?1fH<vdL6px|9QP$< zJ(7R8=HKU;@Ogmpx93H6v-|N@BRmqG7xD8auHZk!O(8Ddar~eA&9}H%J}$-m#%(N? zkFD5eoUZ2uG#1Tow!@NZCak~M=a<^o^c~?m?=Fh3nh;;?{yyXwJ}+|oWXJF8zBPro z4!?!GrzFO?to>X}T)N|Qe(}dX_I)F9nT{*zeN%aoPIg>L@26W3H}^lp^(8LPasPK; z^>nq4ar`IWaot?McVCMAyxoI!RNfi(#eX&xNnSJf-`D3po_8C`pHdk5?JvLPQNBLU zC&!iaezgU0nU1?OalXY~fBF)a<G7N}XB=@W9JjxHSN|SNvcPfvv%5(0#R==*$NSNZ z<j?;jtbbbKd|i&O|5(=lXNbG5gt!*OWjU^-e0_<lygTH3Br#vH&+Eq#H{Nk2y^otu zT!!PCC*~`5os81?IL?398%gdr=-=1LKJH`X8?e8Bh57Q)PI&C&`P72Ae8=&l`hMg3 z61UcI`+FVJxi(>4xsJQNR7jWn`M`hAcOO3|E+&8T$ewuI{_^WwHxifPxc|HUi=9LH zhMd3S?o0~v*!w&z_WSG>#N{T1abI%SzT)~SU#SqsOJ;Z!?Psy)$vEOVIBr-`T&beK zP!YfWSx2_x_I_^m=YW6j)4rbn<j*V@=8;~M|Hgm+9i#FuAb*bI^nDk4ByUPMhkfL4 z--y@0iXs11p<5&}^8fQ!V;;>bg*bg5h91dxCR~^M$UmF><ExdNU+27<xV4Te>3Ot+ zxZDH8X+M@R-)zT~ExIm0DS5u?x0`<BYlQjgdo}b({=4LUn*T)JY)(!I{j%I|U)R+F z;u;<i;`F^6@ki0+QtUciPh3Xr5I4YKd-J)haZB?{)Lh4v^gL=pT=oIt;_KIWInMvC z<NxnJ3FoYSEtqfDBg1_4eI0rn==xB<A@mz?bm*t=@z5iAQ_1_SezUbd4czabcsIsN zcs<$2JhiWxjYGe^f9JF0!2PPRe~~7kUs};TcOAH2XZj_d5c=tRLi9*}aL56l_v?96 z7i}5(JsZ0H^Lb;j`(Ej$yq|I0{;m`4*GJ4_yW{+4-R$#$=W!+Z3sb{9_V;_5`1Ma* zf#ZHloNuwew^%@2?kOSP$%%2rey&_k+*-$VPK?{f-`A8sp7lAtZ(_XnOYf7luMJNP z<2Ug0FZuk0eJD0x{zoh$4O@r!R{O~tUq5kaj{CpYclXmd^krQg9H)O5t4H#mC0|F% zzg789_q^l1_)pP&!>>omzgYPlr|&h<Be`b6`VyWO%HO#e_xH9Tf0cMI{!^6SWyM`j zTtmn4e}+d<oX<~jGmGV`kQnE(;+7GY;(W^!<BHu6w-T4<xDQK+tH$PMo*CA$zj1XP zv>`6tabx~J-@pDYT=7GQ&vX2Q1H{MIPkgjpn1?>fia(0>$;J5kiA!-@rtA0ad$IS0 zQ&@k7<6bSgZWCXB_wl~49&gGE+lP4!O3d%F*4LT1w6j9oU5Rn~cwat>_-w}yPK+;h z9n2<fv*Y*?C_MJD537mW?zs9T#O)xi&~a?Ze)HAV4{c|M^{~bJjcZR_vg1k`cL;Hn z|3lmq;!+&PTeAI*yO_A>e~8;iTtmloNz7MlpUd;Zao7J4*MhiA$Mq~BUti*K4iKmN zO%vv~*>QXSj<-_6``U!-QvI%^U#vqoAASFe9?7jr?x*L=4$Z$y=yyoG7ysGE^;DZd z(jE7I*JrWU&-TR4bzGVK<cmN5iJR;=eP2xcQ8aGC^F#476@Px1r@lX?q<F1sHSyWq zLi{Zb-@C42=e&csLdWe&j4O7(tj&w-+6zLyCrXHGPh9WrAug8qeze%@;1J?+dW5*H ziTR4X{<L9!`Hs`~&ghXm=jsE#-&sxm$rpwE`#XpD`4gA<AL44a<oq31(sk0FxDJlv zk_?Zcb9GVU4k?zeq_`=>70s`taTgcMS5n-@V)NTyoUXU>yg6y^b^PDwItlNWIHJf# z_OWPx^!+w^B(J*a-{-WC=dJd2?q%Ve^u0Ines>=DeCIR2oc^KTpwR9Ap0}FUDDoFN zu2<2|Uz-y0?_*vI=ocLn^6UF@^ho~U!2Pyryy2nW(xTVZgA#sj-pA(`qf)tEZwUQ{ zgyH^KPqF7iXV#tXxb)H?FnQO3?{n+PAGtZ?e=ae9vG=pu*YS=U;ke{x3G*-ZIc^I+ zl+Aa%uABHH;d)nnU*ZZJr|;+aS6ssW>-jNJ@wbHe-tO>y-M<zP*I{&sYn&M8vc@0B z`nx)Ap6iouOW3z!`>=rcwTbb=_Z_eKwmFsjw}yEvbN;>abzWVM<(Y4x<Mcg0dL*|_ z$h(jIm`VPeF(LoCq1!&Mk0IpGcbvWlNRQ;QCFj??X47x-#E^gQ-}O~Z__=u>*KLc| zyq~x?^t&oP8viLe|6<o|Y385dIDLPR9?5?uTvz*8_Z0FEcp&7zEp+=Qf3er6#l)?3 z-2Scuozq6*@*T(j86HLRby3$#`8K?NbX?KTReRU9k9oFH{IoF7{f!?#e+DgdT&JS* zzb;`P5?=o`@0sMUoE7q?c%FOb<FewG5tr<^l3w?=YQ7JKe7;Qn+1FzEs-4DuIZoeO z6n_-$SF!6_`<mx*_5DS9B!5}*b*K4WPyVcj!aOdE_u@ZA`HNjY?U`?Z<MjPTdL%zx za{l=JpMDLW2>F{7&1+J^b-j=CEPp!p|2d)GkTBdn=e3^v101LCMbabrwgcxMLjLCS zL;goYw}0{%yRN4YH`j6dyRNj4i;2r|TuImUM&edDPT!*xe-!QaKK7y78Jz!fVV)(8 z--fsX$CY&5T}j*u$CY&5O(ZVoKjd3LT-JYxTTfi<0ORU;KcD>>;JEJIp5&?t&(C7- zpIfB;Grqo;DgG$h&rbjRd*0Go&kJE6_vZaP;rcC>cOrQU9ADD&eF1U#{~>NYacdp- zf9F{2c{ZPU7Uk3TIO&nxJz<^+pZDl_wo&WL4eQhQJL!>}xW0sb@#lYAu7{<e-~N8C zR{r*B%-?bTnvO{FISJ>IkU#$Xr{9V<L;gkN(Ifeagns+D?#rLa>-n<KucZBNL0kvN z?QdVT&c4O+T^pYT|0%joik<s7;<B9Y?h@kW6Bl_a%<tY3;yxm7faCt}=M0~_=C_-; z*a717{HWKC`8iJC5fOhBts~**0_E*NeCFF>o}(SUcin#dP~0fu);cb;gt*znHC!I@ z-BCi^YT_n4j*mLSqiCMR*1dzcEXVQIeZO(F+jD(8uITp|d)MJ^T1R{0#=jHhSKsw} z<BE+tgt*C$<0%jxMe}n}`KAz;>$pCy-<!{6UFTP_j_r=S#pjZ|u;iatlz#{LQ&)xg z*4|Hk#nnEG*DJ^EZ$EW?Y-Jur`DQy`a<7DW6#I7`*ONEbd7nSP^`!i>iSO`knD2kN z{yrkU;d>#Tsf9<;KKps6yt|3(>bTPq=dq9bLzA=ld3R07Tl9PN#B<TU^&oD=+7MUb z^-o;%{Sa5;^-o-;<L>Zs_KsWZ`Lvq20>|}DjPts6-OOa&DIbJ!^}SkpB(J%$#Gl)> zUro;8Kc9wv`o5_6qiA0f_Dk`7iI062;-5;4-^csiiORn|#BU7Q|G8fld*9iYb*^xn zzSl~R<m(PR|E=WD{^q~Wzjg=C=iC1_f33GO@!8*nczqvM{86+&3G3B4)MGxCzYp>H zek?tb%a*(j_0zug-Vyrw>-G3vnuLD)7;g&wB0EFBz5CWLq2E5vv0g{sAM6hO{>!=d zAinpW5PzU^*S?KY{=Y-~f7!Rb>~n`w;d0%(Z@aE2@%q)iO`+f93L$LozFnNK{)Bzg z{OWb${#GgU)Ax|YANx61#rGgSrE-YZ_mY(quX#0L{T-@?czsWq9?3r)cs*CrFQZ!M zr|&O|_iL4~o`mz%cr!I#_0aF@(2c*}JaE5{=ohIG`aSD)B{w^8zw+!yX06cAU-uYE z9)93{?dcaiBJ|Vuqv?@++kyLy(s>;j`n?&tMUs~%^xMbh8s$6le#HG|xZmFUY_a?2 zdh&NTD&+sRDE|Wq`4jeCuM0!SABl#3`o6XJqtpohp-kKOKe*8OwBf^^%ws~_Du*Q} zK2H<ouj_6#`7758{q%io@ka^Q>2BgD*AMYc{zH5det9(c*buMpYx`IJg!h43M``jm zZxrJ7{cU<AznO4dCp_Qc>!;u5<3c}uuUov|!jk)Ge^)cV9Dn@0Gj#js^~3MOt~;kx zWNN8M)Bd;?JJ^QE-!eCS<m^(BCvY5ofHm<!Tyj?Ew-D7Y%Vwhb&1e_;jYajVhU)hL z-(RQrTvXf>{NbkB&p@^Renx122fwF$H^%#;+E?(07V1A2)&DELZ%^$vqS_mv)^ijp zZV%trM`+V|cwSPZ>2y?l3_IfUeBYnq=b`dFjNAj7PQ@9N$6>ihq<U@KOnFJGkar>S zJz`BC#$n{0f(<Djh00eGmG4kgzJpNte&PEIm2Uwm-)QWFJy88RqxzkS>USclUtLtc zLtTH6>wh^p)UQXye}syE)Ai4|{t4GlasB7~0<8vduc78K+17CV626B~^;2wVoJx83 ziD7=*P~&}v8gCtHe%)PvuIo>A{T9CWQTgWC#;ANpqt;s)l`k2UZ&&k>?<-XOr>OcB zu7APxPq}`&>u+=YNY@W?eFxNe|J*Fh<Im%R_3cjnfL8On7B#P{aV_>iopS@!b+nxi z&<1hdU!bn1Rrmq*FJlM13)O!tYF#JUL-AqC8T{Zr1qYzw((x1QX}jSP%4g!o*b1M; zdiXk)arrO4$8#y=uaHZt=~JlodvH3A!`DhhPP+vkqI@PkgB2Tw`Oat%%)l(_TiNNy zhJ85EK3+e}a|UWZM%g~7^*vwD&vVp1)W8RE*)d_AucFrX0<Oo|s5}!;>l=gGhnrmA z&3<`wh%1ZA`%&Feku7*Qs(-g=s4qM!)YnGUw>>h{|5+#0_dwN;t{v(-qVjxpL@3{g zY-!W0U2cdRRnuB7uRJ{TPeRROE`PwN{uNN=-)e^Thfw=*NA*yCv07*!hVk*LhWZp# zzZHjt`g2k1Z-<&^16#%ptP<*PuN?aIM8*AFDR?A)K>53hAzwRG`_ZWSrz-@nMXl=+ zmuuLA?OWwT|E{S0XoKqi>7k+iB-A{QL**}Tzdt0byDdIJ{b8tnPnHYUK@ZgR-U)Rb zoQb*)TA=dOLR|+{Q2EQb{;TBBew}@=Y{+{hYCoSU6WYHzIMk0v)z2>->fb*o)ZdM& z-&iWtSH$?bl0y9;RJjZ`!kv*&&c()*=ec|lYQFdJ!H42gQF$NU6Uw*$l@xDpjJghL z@IA(gZ}&%NFNKO9#P=Voer{o??~SVed{<I@{U4&*7usp|_no1>I%@py_yQBfjj_+} z2=zCj@_qPgXnz3}-`ei^B`LnHA5ryB+Nt(JRR4mXlj8fa8WlGXRX>vNe|`*q<9nj# z;LE6ae6uaYJ%)-q1XbVR$53Cm)%{WDJRH^D%eJ)B`GuhBU)mD--GM6CwdZ{w>T96J z8NNBRUx1qDnoYs`@p#H(Tt3w{vfqCf`d^PtiAzWI|BLU}R^INYanHexcsvdx^cTL^ zLG=ar2Ik}QxEf>JZ{NbjlwU(#2T$QW)Q`tWcqOX;1*ra=Q2kFw^>2mh-wf6NNL2p_ zs{fX6JTAt^#rU`w9~a}}Vtiawzp;F;`DW#{cNK(rj7G(mc6sHOp<E9&&y5>`Q|#_9 zLV1~e8hPnx`Y0;TG@F5X-e2VMarijp(#S2o>Gt(WktOWsO4K-uaRuf1cqjACa`{e| zN1*N>!%+8&>3mPUuEQH}HXg<gQp!^rwGX>L3G>;C+K10j^{ZXK*!7R0`b|ci$9Q}i zN8zpXy8+ej8r1qOLgh=vd$Ag-e<@V|KltAdQ2%YH{+m$!zeM$a57j>h)&C)kkBjkf zF+MKF$Hn-#7#|na@1u2L+=o!@dp-)~?f53;&8YhIII&cu&g*W^ar<1i&vg4;ZXaz2 zy1kt})t+D*+S;}P-o-e-d>H2ODQf%|?NfG^&9W2iEvWv3Q2TkQ?dbNSZ7o{??;w8X z2O)kl#@CBus9)ytLYL>D?mLg-Fs`$~wk@)SO;eHYWN3N_PN4s$_e1=bsPp*{^?Z91 z^?X~5I-eZWxWjE1RD4@h{0XS|#;EwCQSm$0CPjD))if7Xeh!;qchos|z(tfBqn^Lz zF^}@LHA#`alwZZx%=Z@5x^BQ>ln3Gkl>4Ig@qASN8unnj<GoN{U{~8kb_OcnBvigp zsC?JC{f&1+`*EoE!?o};+N&YId#zIe*HKQ!4a|4X>ZAz2Ca$v!hbBepY<2l7`>}o3 zF0+g9Q}Vow%KMD#XS+NVd1+{RmCD!vyAi)~RZ@goTGJfV`X9&BF%5N}Z;D;97S6y! zaV+_NTN&avqvCHz#ScTpUy6$FierdB6_vj+Dn9p}5I+kQe-|qLCX5k(2`at|D*khB zddj~H75@w>ekR^Zd<+$zfr{U=Jj8E8#ji!hFG2psvCiYD_y<t&by4{bLB;>d|Ne~P zzeYZbuk!+4K)Dg>I;xB6U)}C`E0nj}0=ov+5|@X+@blS1RNi^0p94pu@(i<A+e>T@ z+X3t7`a#XJ5-Lv;@=-^f&zB|fZ@l>209Ae))t-wQ=P|cWclmmk2fN%472nO}<~WUV zJ(sJxT-N2k-ef(@=Qq^#yd8DjeUG}Hzrqb%&!3^L<29)3dYOI2zF_CsM^M-CbX2~3 zU4N&`H{lk>9g4aR2iZ&TXX-CR&8I7>e@E1O+M?!jDr!E>Q1hv0YuUqWIlJeLFrVL1 z`L?0@ZF2cj)O_AYUFR!p9%??hsQJ8z>OUVfpV_GSJdB#p{iwWm+EMlfJH%dw+Mm9t zeBE5%$>lbv`LsYikDA(JQ1dwgHJ=)&{*_SkDT|s<1T~-E_=7~vXN&#P=G!%P8EQUD zQ27?P{u!4aMa}0y)bn(*oq(n2cQa}}H=z1oi<-~XsQL6m&8G)yJ{|4pwv|2J9)p_C zk*IuCU0>eiJ$Ye1J5l$6pX_GTd_G0Z=Oa}AcTw|s3pJnDQS*5bHJ`cmVLQ#<W5=TA za|<fpFxL-u`4ZIrT!^~QoM(?k-8WKDuP^0MueUpRGpO<=RQV&9m%IENPNm-**FT8K z#1C?NTi368o%vAzChB>#7<Hd`36;N#+s{H>*QdL^mD|_67WywoU1xcy{;#0=_jLPt zsB=HZ?P+fRa&c0mJom$OsD7(3J|EOREOz}%sC+$8@ts_shKg^EI>#2SuY_8ESyaDW zi^BR>qW0@$)V|(f*YOWpDigO7`3R!vgZ3g+TnE(s`Hfe?efN{x5H}rFziVN5fBiB( zN_ix<!Cv-6yXECDudh-4K0w92idz4(F3)!PMwdI-@~%JF{{B+v{}ZbJN|*CoegZYl zOsvNG?nB+*V{RXWk5N7WYtmi~wGTTNguL(C30Q;rk*NL2K*e9>_H@+v&9N8l)lr{s z{P|+YvkEotYpA&CSdIP@FrHUs+OI+7y&SbKm!RTLP&@VYQ1LZXrv0}U!hXMwTIWls zxTjF#O-J<~iHA|Y`S~!vm8khGLXDG&x?VC+c`mo7+mlgoRZw}$pk7};%}I*<M0p0P z{RZ0zl_zRzy8i9wk|MLHUyPd9OQ?L0qw>^6&7&6Tx+{;$^U1TpRjBqiU0&$&b1qN7 z0@_EqJPfrTSEI)1jT-k%)VU|)SKQB%P~#Ln6ZYq0)H%F^n#W>P`vdka)H!F`OHuoI zCTbt5;Xt0Jh4VvwJ}UlA`>dU5N2B@=MD=ftnr{=-zN~#Z^q+^CZx$+k6e_+GD!vVB zeYM^G=Tjl>OFP(hNA;_V>Q@7Go`22@>)wiL--ODy#N`K3`!ET$ueYGq*$Z`Dwnx2g zoPoN}r{X%wC!t<98lhe<j>e(9e$;fiyiKx&b3@!u_B+(;$5*Jl`L18%@@u$-@vlYQ zf7+ww*#b4shNyKOj#|&oIpO{O7OYD9GSt52qSk!}D!v~ozPIg$KNH^;buKkg@!vkl z&u8qz3QVHB2vt7;mFH$ud;{bo#-`(+NQ&$t&yA?Ko~ZG+%nrVcs=v=(gu3o8K&`8l z-Sv2gd)#(IjdwQcJZq!I{qC_4muH*X2<kfjZC1GNtw)Xfk{yjY*Wsx5)q_!aTVfsR z%i`_4p6tvH^V^1czI=+B=c{(EeaPNpyQ8k-_Vz@3l+AxM{G4AMe`S9ULEZO0c_jE0 zYP>AecvVn87c_V{w0}P{)SrWTzL!B=A8*VE>wLuCWY0$J^XaI3N7*WF-}X@Gx57S+ z+V6)^*U6ozaW2F^nD0rbdDlVh>#pg+eEgmIm8kVBLB%g{`*Wy#x1;VGH@W^Y*LQLG zXnUyZ|IP~ee?#>zK<)1`*H1^y_infMaeXse&Te=x%x?{9et8(5A8H-Xq4Hmg@#h<A zzgoJzlKp;Kh+mBw_jOdiZ2XP&Rza<A*VHi2&8YlOq0ZqkRNk@nCb#!Q<vSO3JvKsJ z=YLKK{nyziQT-ow`DRqV>rnl=p!!AK{`>=B+<B<$Y9^}x5POl^FL3#6mrr*&1@-!K zh|9b05A(^lFW9N5dEANGkD;jRrWI<R8=&^37HS^lQS<ovzTl^*_Eq+A)cs?o+wVo4 z`wgi5?1Tf!d%Wu_qWb?eIk?qsu&Yr0Uq<!68#UiisQs#o>R%ZZw_{R>dkYn}5VfwE zsP>rcXLsBi>hn?g=b`#Nf;yMmQ2TJb+pk0A>*VrTE}x9rmj<qn*w5|>d0)dy+^6QC zo^Ml8uTPUvuOkysuTSGpuTM9lUY~~JP;PMpT)xC!U_070+Y0sibRsHmBiBb=u84Yl zS~f8}UuK}@eGh8=SKBmu3~E2Bqt^ZN-Qo4>TjXyunl3?|_lv0h<52OJpyGSl^YLfK zJp*-a)ll)@-W6W2)}danR-o#qqw?H^if@H_y_z{8yk6aoitCAr>wp^X5Y&7M#)tMr z_CeJ1coJ&8*V|TZ|K`pRe>W;$40ZlJG5)-C`yY3NxO?nvsBtq<*U2@g`|L$-KgrfW zoqJi->(}46hy3eM^LiKc{CWj7zZo`$x^C;E;_9H{%DMfAaUp&!Dy}W+K3EI&`-KZ{ z<M$Pe+X;35tZBE54SDiW<6VGyz3M+E#5F?IkB^1>L3h;n=c4LUZ8Ow(<xzhp@cFHw z{H(nTHIF8!{`FA(53+xZ=5v4M_Y-R0H=y=&1?oQZ7`{#Wy{L8Eh8piuRNm6~7WF%C z3G?2BieHave+G4bco-kSJ5l*Zpz?Hf{mHIx<Z@k?tDxcvMuq)-12xYDs63NU^N*qC zF$}fOSEA<82jlBU#YItZhoRy&jSTy-0X5Dd)ILsg{XM9DV^QM{MUC4Xmr}pt=CHn( zQT=a5T?buI`+XK_zgyYrsC}q_%2USmf87-Ne})=o4eI)T26g?9L-iYl>emOAx2rt| zHU4jz;peI!P;nbk`9479xePV0KB()sGb+y!wvyY+y8P#e5dSMG?j6+Y+9H=<K<&?y zsByAT<BmmLKbNA;;XKrJa0+VNCa8SnY{c!`ZVc;q%Z^3ePe!8RuR-na`8bfgtx<XF z+p4I2`1Xbnw+c0{#i;dnN5!9R8`*01@9RVV_fX@^NA-UMwXWOT-pd|m{~jLt-G%Bm z0M+jj)H$As+J}=+*JByfc_yLq?i?1@w+*$Q-=JQvmZPrMXHc(Kb5XA=vv3{dnYe-d zxgYg<bvNquD(3PHc96Zy_O|DvUavZ#^0sw-s>{dX7Ur>uq}u-tsQrBz^*ovC`iZD{ z$587YhFaHoSU~?X@eSH*qt3H3YM-`cg!tvC_&oax{!G7lsB^m&6@LlVCr=mD>s4#l z*FueZ2r7Qzb>a2uNZdu9vZ(&wUK`>*L5=qiYCgkJ&x^sRb)IL>LY>oTsQ7XizrL;s z=h)vKgBm{tb>2INgn7J&il2u%_e)UuE=1*9I5_-1@?_NbO;O`l$2YJX>i2=a4+_5r z{1Mgum3_wEX)m+QP~#kn8t1QpA>TGsz74n-KS1T1XJ?`2do$L@!T2K9LcQKsL*+|C z_4|E5`2AxxE}}ddC$XQGV;<$!*q3rM)O;GF`XBCcb(arzIpXs6{vrMcRQ%^If9&$x zsQrA__48am#pOvZpNlcZZ-e^%Xalz&>GqoVIC*}#I;`hq)I6U;jXT8U%TVXr)%6uz z{^hE0-fdCmcM8VuZ>atG?aJULRQs1Mf9UcmmtR5MR~MkxH5qkXjzGOmUE}%+t}lbi z|JN1aygtK$JTG2%c?N2}6H(8HPcIMiT8--WBx;<YsQbzg)bsx;Tt_(_H!yxr)P3cA z<SARHz00TA<86Ig+g3&0S1O|N9_;$vmxc0=xP|BCGSq(OqW1fF`vhv9Gf~&$Fx2`w zqvn06{XIS0UuL1|??%NBK&`(mD(|WGB-DN7DAc~}=ojMON8MMJqV6j>uD=JBXEZ9l z0qTA5otK9D%23q&FGh{i4s~va*bSG2`_6}`xK*gQ*YRP-dl9p#e;Re)Xn<q*9A#7A z;K!)zsRio#X@c69!)$5PeWLK<@VwrPdS0(b#XV&w*r7HRHJ>J^`E0u=l)pi(_XAY@ z9G4$P&F>ae-cG3gZBcPi)c)6SeHGUq>~h5A9eqN-pHTh2ae0HwAGrLk%S-L6sC7P# zx_`|;t#cx3K3CX_Q0LzQb^oe|x__<d9qwN%QR6N|^?MGRVNYCyEpQU&mx8)~{n#tq zzdk~(cMYolBA4%VITLlC8Hl>ibaH!Jx1Wl-&(uL(N85TPMYiL2sC+M=_Wd@ON7*5$ z`$Birb=4UacRDK1(-$U1w&E02o_p*#dyBo^USlsr^*aMg)2{^{gva2I)Tf~G9fBJ7 zs~%w<%TeV#)I455&7+&^PeRSNmdl5s;!0yYu6yWzBDUsvxaWeTNG3jlyi_&433b0a z6LnuY4R!x$iMlVHfEyUU0qTBK8+CuGV$0aSx`p~*Q1_u9QF*?$AE5HT>+;*E{7X^! z7vfOz&qw8-WvAJD?5(K$H>2_ov6rImZ%=m({jb2&$k!3IzC%#smqLyE*ZE=GUvVgL zn^EI_VL!0%*w<0xzJMBc1}fhJsC@UL)-ev1?<Q2fYwZ>GBHJ02?=)1tW~lj(JTH{5 zNA+)o-HAH{^?vH@E=iGk#4W_Bl%GRAuV&fHQSt3;Q`gtW9@O{m9O5svJyG?4oExs2 z&8X|9Dr&qYox;z_e|1cX|NZ%!xQY5XsOxpI%Xhon4%P3D4q<+yQTNk<sCl+`dG|S? zek~r&dX{1z+OzBsn`W!oN6!xPybm?cGh9Bw<?qf4?fIzoX)cd<`Ga<0+*eTZx!+E( zx8NPT9`r!1qa*4*)E2egQ&B%xG(-J-UJv#2LM_ZDuAJR-X1ITkK;^p{bzYaE_M;<e z{3C2tyRB_#{}k2!qJ7%VM9u3y)VwC3<~0^Iui>b9U5T34g{XOTLA{=w?s7|)SEhye z%|zWd?nlK9MD5?f*pTyi?u?|!`;@a#_1B>4Yq~z?^rXlS)IW^6zg_C``7WPj*Yc!P z+)`BBSeJ*pJkVA~Js*-#<E?8G%1crE_zG^sY}?;<wkP3vv^T^qSl0F1xCss;Z+9Go z9Z>hfR(LLPjqwWBA3HU~l}E*GJtgFsj?E}vi<-yPsC*Z=+zIu%c{=KK^LUJLUpN}| z`gu6&Tr1j*siB;YUvpk-us-c?VjFw`b-qud`aOot@NCrU-Wj-va$TH6`B2QG{9~)| zI{GGR{)<relLe^z)^n))&Rkqa`Ek_!YbNUcbssAJ4m;9bZwK3S)P3w?RKBjZ18QGZ zwM>effG?rWv9rrn?XHtU{fDUiT!ry-wYQ+oaTqFJDb#wtZV}GoAyj!hZoxJ#H+K05 z)VSZD6yiQX#XXM7*TVHjV<zR?6O$qwdDEv*^LY$4pOG#PN1bnf)cN*8o$tA*^KFMZ zr&hLtO+uY-A)BG|-HJNj&r#?55vt!R)cIbAI^O}P^X-H>-xjFzt$}?hZ*Csu_Y&$l z-^#_Q{rC)ZejlRF`#se8EJvO98>sVMghM&+98~-h_96R#z02N;I`5lN`L459qh4pv zK<!&A)V@`<za1aS>v0(KTaJobg4)j)QTzEgYCmV9_HznqU&h-@Z3o-TMp64)4Rs$o z2(_<Unufo7+<>Zo7ghf}Dt<2NJZ7TK<8HT)LybEUbsk5d&LahN9)C0m=dl5G9(kzq zn1)*SaC;GIz2{<Q>RX}Crx|L$e?KlM{_iKh#P4XIk2<e8sQt}Go!1Q1c}+o`*927m z(RR2UVz02hQRmeim9K+sg!*>|8yY9Y|6Sv=sCk}(`doZ>qi{YuQ0rN1U$E0r@#9eE zI0|)+8K`qiN1bCI)H!xT?dMtc2z#*I%8QBGzd)VK`>6BEL!H+g)ZeepaQ$7bzZMmL z73v)Opw6*_+uNe@rlQVqeS>h0>rm&o5cRy8fjY-qQ0LekweIG&CThLOsB_$LY&gfQ zsB?H3zo&jC>Kq56&hbjrzF&em$KI%O?1nnWvr+w9+vc{BjoRv{bF7TYcd-4gemKV& z*opSx_!ACB&37kn7ImKUQ0J75I;SkuIgLl1(@4}g4M*))f7{v~kJ{(@sC}-5+UI1{ z`6QwG6&@4zc_!-lG8MJYBT)N%8ET)?Q2Sg9b>G-|beP{Z)V?owc?rhv4;a5cpyvA^ zYQB?D<KAZb*e<B~wnxo36*b=msQE@w{c57Fi$!(Ad>5eRI}J787;3(kqvo56nqMu{ z`Bp=nM+MaR9*jEQJ<)K!zoO1}v;D$;Y~QtSpw9O-RK6En|Fp~5sPSgFJOwr0MAUe< zqpqi$QR7`_ue6ug9`-EMcxkBdPH=r=my=PiCodlr&gEIuy6>_>Y<JXkb~@_%YKc0p z#;Ef;9Ccn*QRj6iYTy4pGPuqzu}|6uQRjCz>OOEY>fA0v-3KmoeS6n8M8zM4I`68e z^DgD~KkJ0?enFl0G}QGu33c8>QRjUj>bzT_&btC?-CJr0-$$+Y4b*+$S=9afNz}e) zpzZ@b@jE;Qb#6zZ_PHkN+zvyX+o7m)i=g`dc0_QC{l<P~*PzaAB`V(%n~l1kUx>O7 z9EY0c%ZG>O{|%_~xyD|FTGuHqpMW~I`lxfOjykuBsB<fWI=4S+1=rdoHV3u;b5Z9t z1$ADTuD=d-E?1z=<pQ^#i^_W@>Ri4{3Fq=9>Rgth&gE&;x!i*~m+duu9;o++uc5Bj zF_^}>2Vf?CTO;hlVAOrEK58Foqt;suwcgUG_3o-3*83A`Uf<Y-_9@glXQ9?J6}6sm zsP*20>UTYAJt?T`tO{y9zg7$D`2w|`#i;d+#q%lOST+27bOq|?qk1k^cll7e>aY;E z7~?-jxjfwEf%fkzVLor6{yoKOsGsj%#!{5Wp?)44ipta0o?s(x|G9E#-()9X1^Nwg zc~vFyQeJ|ppKi~<_<aGj-^Zi&`$*J&SHZ=U%c1t|uZqF<?K0GUFGB72bEy4(1hwA} zqWay7+V2xl`+Xd0zbl}wpIsHget(SG@2Pk&{VSm6R~j|H-Q~mlwxZ_uC2D@3pvGBc zAGP<R<~IQ~zgtlA8-kkORj7V_QS;k#XqewF)cih0&F@Xr_3#*Kej`!m(I53WVLw|& z61Ve^@Ok)h)cNJ0;=7~P(+RbnGg13}B5FOyq1JN@YF;(%=5nF@7Ah_m6_?}s+4ct8 z85MU1Dz265kF&dzL%yx3{V720&->U0^HBTq3ThtDp!Vl%)cKu(+Ml|p{W%!5KO4)2 z{aJ&``z9*y0#x3|QF&*g@=iwOZG_5uG%9atRNl>HLf+-rm-0=hee7e~p~h*28mA#@ zoSLX{Dx=0JjT-0SgTpw}P~&8x#<?6d|F)=cmY4Rqp~idCo{u`evr*@FI_mt6N9}h5 zTuk{W)VNjc#)Cq6DJpIODsH~(v+YpZ0TtI86?c;B8`#29A>U@y`q!h@|1P${#i;ea zgqp`Z)cVgv?Q?6?`s<+9pM+X}K~h-%DpcMjsJuC-ypN*tW})&<MCGlI%6lX#Zv>Th zBX=|9eG~gqz7MsZx7y*Tar&di>5Ura9Mm{zsBv1L#(DSeNPL{PQRB=-jdMS0oS~?3 ze%TX=Kkq(AjW-5$Zkeca%Rrr5I%=Q$;9|<%P~)9tYuI1^3US||;x?e-KCqA5n^F0$ zLB(C=`aZU?O+v-(*d5}wqVg5k=j|-i{!B&f&mGtXZ$RzOwWxlVqxR>|Kg0g)K<&@R zsQq~rwLjCbFXeHlyqT!H15tT<qw;pc_&%WWZs3o}biSXU^1gz~`!Fi+C{*55)P6TX z<&UEBS3%|1AEhb(@BHzZ^8bj+e+Mf6t*HE$q4J-F%3lwae^+71`vWTPdQ{$3sJzQi zd2>;DyP@)SLgj6O%3A}K_qSak?=`6VbWha$JKHL#--G_l9~TzT{t4>$J!^3W<u~vr z?BV*8P;s?fJ`5FC8Wp!}N9cbOs(cn!#44!kvm9#vfAU9r+P_~>{l7-7Z?)@}x&B4h z-;a8KIRKUS2-}V~<Ep>?XTD+$ueImfBT?hlK#h9{YTQz&aev+(#?3?JnTpEa#a6@9 zC{Ot*<R5K2;2P>rMZJ$LYj<qpyU-|a#q+V;k74{IRQ>N;L;dI2koSj6P~$!3@)Vax zxIED1<MDmss$hBM|Huz~ZzAPxsP~m!w}kp1z7I~dccb#3joOFPQ1^$EQTK=X7~{NC za53e|sC_DJ^EZd`DpdbBTz&!dbI?<$eVm5nIKP`w`#ThM{a%H-etWpR3o3tmY=)aR zh3oe#TtxXzoWy*dL0!KSQO}FMsGn<6@jLwOJFgeDzP~m`xPwOOe1_VO5vciIhZ^q+ z)VwZ6&9@V3zDJ?Xz2KV=pO1=Pjf!7}ihmIme-kQxJ&ii|k*INoqx$tn?MpvYzw=Q2 zHh&f7{{d?LC!+c_LiMZa@*$}6DTO+pUkbwce2Y4tFHrIC+b8S;sB!N`jXMH0?#0Ly znqGi9kF!zdakATwN9C)JI*)h04CnC%E}}debsqPk&f^-?dGto*?TQ+&4QjkHsB_x7 zA*}Od)IN>2{c#!P%TeFYah~gI;G2|_QS;gT1^>Gi`nw3!K7EP#_z`}At8pGr&9^X} z`Mi!#GM^m$i1ulyeB)J*qfq(!q4M=|dm4_V|0(zc^-WQ6l~8eIQF*qn4{_h4;=Vw| zEkVUCM8##}ZRDGdin|9DcO5FOKPs*(Dy}0c?le@~p3lR5Vmm5sGiv_pQSEQLKG*g0 zT|dqB<6S?>^_QW>?c?^27$48=b=_Xe?d9D5*Jok8udt1tSE$bs)?sVP@8LSi@1Q<M zcms#>Il@9z{CqphK4kB+cc4B;7=y}pqdgcu<{Wo^8s@zXwf?VB*Y{_r>+K!X_4a&z zc-}wrNqF8LgSy@h#`Czpt|ytw7o+Z*Pp%8~Q&9Ud5!F7}?*1smJ&Wr9-3K9V0}iA7 zE^0nY@E7vEjNedx4mF=F{F?n3gNnZa6+ZxZN;f?lx#cuX!SS5uukVNF`zF-${S%DQ ze=X|yz5>;MA?kJhVbt?+G;01gqV5-iQ2j4L_3w`Ae-5gDvW?hZ)`t2wQT-R9`p-f2 z&qnp1g6iMjmcsg!cdm&<Uce2g_IFYDkE>Dh?1#F4v_;MLD9odrgt~vk-s9ZapP~2@ z^<7c>wfWspUx24@U3_XkK(!BY`{kHQ`^C10+qbR`{WoGO+P|<Lqxz@2y*IX`y_@ai z_LY2bsOI$so=p29y8zX{h1;883)<`3Bi;VO%FzEQJc;(l?Mzhv=5B9@C(>Tm9`5#M z-wFNa;R&=qX76(ScPk?C&-<34o{vjV&!1e>^DzhYe4K}RK0bnaK0aW_+c7rNUW0l* z4nXC*#PvO0?tojEe<jp)R~F;%bC!qmUud63wa>5*psuewQP<Z9)b%wOb$wldx_)}u zrnWBX^(6&$y_Lr{_$Pm4P>$!>4phG%P}kig)O9x=b=?g@U3WcD*Ii50b@wQLl%ReO zVsAVRbw63OEZjf3pyq!T>by?D3n({1t@kKY|8L$5eqfi{96QsFx7XWr+u63ZN1(>5 zgc@)68)3YkP~)A7YJYlZIRELW^Phq`uX|AEKOS}dqfzHR0(Bh>arrXa({{1#ZEMtZ z&=Qrmsq5>xTpe{Ce49r*&cSZPpN9pMTcGCK08htdOTxZBk6kH0jN0!>sOR@hsQ4kM z_;RTCZ#!QP@n56jKSDj<Uq{71i;8c9im#8#UlA4m*K6VV{}n3!eN=ouRD1_i{0XS| zDC&Mt8Wq1|afly_iXV)M?}3VMhq^yBK*iTY<$q#Ph`$#VKLQnhHR^uR2^D`TDt^VQ zA^v$({6nbt38?$WHK_PYQ1L&!65>BX#lMD%pO3nqOh(1WQ1KN}^WT*l;tNpmYf$%> z7g6z#qvB6M#UGB!e-JAEmxX*MG4XHU1(fTeo+l}&=XYh)^E-lie*gY*cz*wk%Kxo> z**<`Zy90F}814FDww*m36;}Zjcd+Y!e<|c$X=kD0rl8^`x;|#R*|w<r%E_qv%CXo6 ztE28K6;bmog}SfISP<?jQ*aUG8&UU_i!hJ!DcF~CJyhNlRNiu^yoE1@ygy@nA5eKm zqwZHDP<i{H@}7puTN{=4hZn-n>z~?pQR6H{jq?I(oLQ*(KZF|RUeq`ZP~${V<CH>; z^WF1doVQTp%tYm#jLJI(l{W*GcOWY7C8)eRb3)#qP<h`+<z0lD|3j#}hoi2ODyZwE z9O^px{kd>nTX8Yvji~(jcD{WSHLq!?dEJGY*G;H-4MX)Ch?-Xg)OyRH=C%3RFs~0# z^LidNuO_JbX9H}_bsa_BKT~i6?Nw0s%`(`A_CKEqZnxjt0=o`%-&~8z_m=BlcR2@j z-<*X%5qB7Vh`Z)T;@@NVBkFlqfIkzLkDA|ysC=tY^IL|R-)pG(y?~nE96QrawG-_a z)ci)F@(p$UAeZ~1=GOyHp}mW3hni1o)O=c^`Zq((rvYj{QPg~@qvmsn{rl-qF0?<{ zji~v2iOTnp>)&;G32HtIF_rcl`y^^UkD%r=9o7GS)O_wj&F41Md@@n<xyD{@FSZxh zb5Qd+6P2%(>zliLG-^JFV=LOL+H&|K^+~At?0zcr{|z;tA5ru94mF?8QS(`A-?FdU zm+Vuh`8<J|&qJ<%z~$Rf^SK3E(te{Ig4&-eQS<4C>fakRpRTC+bVSYPbkuxKvJGur zn_?@V=97%d_t(78Zzrm}88x2*Jel&Rb`5Gi%Te=r0~NmrHJ=wz^O=vD&n(n@rrEpg zI6Km2pyo3el`q}(eOx{lHJ^6ag7!A{MAUp5qvlf|)&EG;d}^TPQwcSn(y00TJ~z0{ zZn7Kfhp73yhsyV+>leHHENVVa;z_hWYNw*+a}R1h<5B&`pyqQEYCgkI^XZS8PhZ>3 zcCu}4OVoT$K;=8u^+&l}1vQ^?cp~kkY~h?RpY5pm{DA7e5jCInsQIiz&1WTQK1=KZ z`;47!r=#XG1(k1t>&Lo$J!(Ef@C4egvKOQFr#oss=b`$agPPA7sQIL#=F=24pQCL} zTiKSiyPpj6*@eot71i%smp?(xXAL%|euaG!*D`Jv>izgc)X(wPyWHR99xk8bax<Jt zzXq<ai5q!c+ww%{|28V$rKtDSJyG}J^RXPSa~<4XFgvv8qwb6EquN)Z`d{w$i%|Ee z?r!hw_KzPA{og~~H<qLN=b`$ixjhy2JU+qgjotp#W1;_JsOQxTRR1Zc{?*)G9(A1` z?DjpgLi_!w_1%TK?ruZ%ALaJSZcj#C2T5-KBRllJ7uA0P>RiU6`u9WaZ!gq5&cTiB z@8KB#oaNEb{sZd$!iRPVK0&!Jo`p4V4vu*w#NUL9zsz<)#sBbdh@XdwZ;TrMXw>yl z0oCvOnZX=87kg4a8I@-+s(+sup?^12zYey!t!GQwZyyT3hgpjHea$1Ne$(t-b~NhW zN7ceduo`N=)=ZDYzmIDrs{A_6pnV?d{mDe!ig&ub5-NXLyC*B;or}u*I4aL{*WZFO zsn2wMTU7s3Y*TwAYJRUg81gJY<+%=LQ9sD#OHuRdh?-v$)chK_{g0_(AM&w)`o%84 zgz7g3)o(ni-!RlTHBkFEdP*eHj`}_K@xM!llThb*Cu-h<>}8n8^>scf@9C&KjVFit z6jXg#RQ)@XLY}3lJdfC^s61m)@k3GZE%7z#lia@T-q8L9s{KAx`vBDZ(oxrYM|<Tx zyuYSg57k~9HSV7igInwd)IPnATK`L~pJyMoQ&98lhC1i7Q1d8@I-lR~_B!th?_X!4 z{&ym-K+WsZ31Qs#a2xfp@gc51DsL~;`rD!M9*v5->CQ;xTf7$a`-D2Ed46|CxGz73 zXH$PCE+fwXRKEJCb=N}uyio=9^F|WJ=>PNW;pdI-QTy_RoolC}_GL1D&HZB>)~9>} z>gSFtQS-b6)xR4y!>!}O&mG_5BFf8g65~COd6Xxke(valTE_*bb+<=dm+fu~dE40I zus-829UDI1egqZw>X^`f9BO}?qt1Kmtzkd<qxR#QTf#nkj+*DI_IcDkJ&GFtUetPS zbp4gC@9z3TQT-1>Jx|w<ibN_gueWe9d0OFY>UWQf#Q(kH3e^7Rq593TS*YK4jz{G= z65q#9ZVvqy*-U(#`p-x3zvWAOK}MKgwoSJc?6T`Z`*rqEe3pKvT@&VUGHM=2+DfQ> zyJ$%GoWDB0M0xYz5MO|5f5&bd6p6e@c@An_kD}V|L**TcXJaqazBh4u9k*9=`>uhZ z{Ug-=zk%BS1z3*#zZKR03fl?wI`aDf{-;Z+e;d!CJOM{gJ_{A!vwwI#)j-X!B5Ga- zqvpB&>QMgJzG-t%?GNJ=;z!^woa?oyd8MP~buubn6I6U1TLrc5T~~#9ypJj`bon7v zzk6Lj!u1!T)_<DY|GF~VS9YMr`w?}0tV6wiEO-5b7|(|qX9Q~f{ZRQjq2}ENm8UK$ zt}H5U%N3#jSE%~ssQUS+{tu%1PeAn_ii+!niff6AtBZ=Oii-RCa_6xRpw8_~)VWnc zo!bYOh4(EZG5)?Am3L2i*w>x-Byn$}uK)Y76plt+fAvw<>EHeM-%6zZ4@~0y&oWe= zIrjTY!}ZV?bv^Vz<vrEbN4@V@a!GjqG79znBZ|sX*3Rkc>mAkqKGgLw0k!^2)cXIr zIL!ami}-yI{paHXOv9&eOdo!ai7BW&l~DV*r+3KnBP!30y~4V#MXjqp>V8odb)UGq zXPDmzdpK%+hoSQRbYbv2RQ`3Sc`ifczZI3Q1;+0?Jwn{usJNF<aU)Ut(BGboI>$1o zb9}9PINz(V0p-4^^XP$^_nQ}l&vkCI?NIY<jhg2%wi4<b=6B<NY7MVOox}58L;O69 z@4LMP6@LUO{?qeA{6(nz7oe`Y(@_0t*@E*zIUg^iJ`a^=25P(sT|)mcsD7C?-S)62 z+Uls+$Dccg*P-`N{ob~(+GkPE<Bq8J4ee3;`}euweZwE9@;21|e~Nm2Ta0>tw$SZo zpz^n}$D{J*cM5qwMCEx0RsRg?zA@MJLs9()+Dq(tsQB+YhCCZlc^<`C)Ia3%y{P%! zgqmMp)ckt6y>W-I4}YA);ZwgEwLh!zD_-Z{LiJyW>Ys(`KNia|-m$2-d(VzU&Y-?x z`$!}WA8i-T<w4Z^Z?;46ey+!UsJ!Q)@|=2RsBeg>uZgPvux-e*3YF*Uv`GAWnsV$| zdzEd3x}NHy;`f{p{0%kk*QosOqw-I~d#Jz6?dQ4uG`IhJdT7tX^4veJK)o;Pg-_!- zcq{8q!^M<SQR6m1eU4iJ@5S8H!n|@&uS3)Af;RkJ2IY*_p?v_Ve?QbX=cC3s12s-_ z)Hn@MaTVPD*Qud>C#ro5s{K_v-_Ed^_Bzx!{ZZreLXFcEm8SzLPaRv$CfnVogngZl zdY)vX_Vseqb=cA6V^hO@{f|~*{WqiDXQ$$PtcT5TTg$L-n{W~3cToHH4CYb36ECLR z@#K*2XjGn8T6lj^>zRvs-<*Xp;_pVS=Qh-OM%Z)h>G(D0dotFiy%Dy-6x4dEp!y}F z<~jeQFwZAY^Sl!$G0srbJiB6F%8gL}j-m|e=l(ZNj6}|)eGX2eJRWsjrlYRgUKl@j z)cnst&HqHy{2Qa@aism_gi!t#HUIUf`L9LIe+g>-xu|~6q2}Kmb$xb5&Hs4R{8Lc# z-_<<Ke;n$1{kU1UP7gai%zszYF#q9A!n_Bg@^`XrQR`}kGpIijHIFi`-*H^1{{~e* z1J(Zld=!UZCDwBxP9)Fr#^HVTMAZ9>-l+ZRit2ZQZHRiEOhM&&wo!P!?2me%f38hN z<(YA8Bytn+o$H2qRJNZ-L-{VemG&Qx46lzXQNQQ78nrLa)Cu!=0yU3&?X9Txm9@it z<957*a!=H}&qKAhvOSLAe-D{*O;md&RC^LC?^lP1eP52cZf2s|??JVXb9;Zcx5xWw zKM}S6^{^cK{8O#a|3mvK>UDP@K1h5^Jcsh{DdBzkOQ`YQt{K*SEoy#OqsF}iHIK7h zZsBqrm&>5upRcPC;#Z^MU$f7no(~VA#u@5zFPB@P#yQ^gHC_LA^{~DzsP(N!t#2vD zpI@kaccS`_c71=>cSh|`D^&kRsQy(@{dZLh{Xa&<Ek(t>h>9EQ_I9>0Y9BwX8usx? z)IJVGJ@2ca=2Hf>{ym3<d3}t!4rihA-;Y0GCLW5Hp{|QPRl@c2C1z9q87A?PJsXwx zF8fa9a89jI=hO`Iu^#I04r}8={_e0kUdHpiA}-*07D4^p;Z~k>>bDWKZ!7IfsP|px zV_Phbb8u3{@O(QJ^}cj_g)pB_>=;zOn^5@%<1dVN1!}z)p!TyVmSR1hmJj>$=b`+4 zA?vyyr(zQviAUh=n2gHz_aWhYwxRNUfy#F^|It2OirS}MsQW?{)I3Kfhk5q59Z}=A zv^7xIZAH}l%it%tt!(gnTtfLX)Zc-w#HDy2>ONB)=i-Jkq5sFI`Mzdfz)8&KcD#uC zb5P@);r1hKb=37&8nwP(4-V^l7PX!$Q0qAqbsg*~9sC&ed|rvH>z-+->#+;!I{odS zNaR@DirS}*sC^oVn#XX|e0$n+QS+TeknVriqh5EviG-gQUbMH`^X(6KHow={i2D7< zm)M$d@^KyI4{-z6;c6U8+)`{q`^)xeJKN5%lTp8qxf_))W^cyR$TJ+3X9#NC{%%i4 zje9X_+#aZLJEG!wyB7B(%ga@~e2nFG7$3JPYFsXhxXsz*%S%P{KRX-A#3-)B6daC~ z@f}RY&ryex%RenBWFKF_?Wq0*cm?L;O}G}7X9Zr5d8j<Os6071GbvJWE<TLeIFS0u zcnOZj5g0?|$#DAsyn%AM>$|$X17=X4=K55;nR0W~xD9a~<3y2vN>?!j`KNgmD`S7! zBdB>5vM-CZE_@9)V|-mmpNeade_C8|1@cdtE9T(<`sLtq;^*SKn2qmY7G6pFc$`H! zhFlXBGw}(`z<#u+;|lDJBe5%L-5u~KOv5J_FBPA}<~WG@D6XQMf}6-!88>4xUafvy z|8HX|j>hJwybbYPjN*Hkf{N2WI(!ZbIp-YQj;hZ`-e*-@i@ZOq$Xw&*xt`d_{nXFJ z2axAx<Qg20r(z6SBiC5GJ{>Qm+#7Git{7i0UPn0%b#AG+hV?YZwb&5f$0%M!du3dX z$v6rls65*_&l7PozJdjK66WK}xE5RB3e3ekd=+zX0p{QdI2Rc^etj;)EXpt8WIP$i zV@r(TV9da`Z~)$d>8Sbi##PuAS7QfMTyva<4e=?Ax;`2C`5}H?UW|pDr`(RJFTlx| zkM|*a6B&ZJ$ezWo$5U{w>nG#2l*gm?HHL#Q6Nh33YM$w??~TJKcXfRSEV>TK8NUwa z>0GGiEaTUq+EXZV4~$=jyk5tzLtd|WmF4+PIlWaR!b?J#-pEmv>55;{o`x*BjDD_C zeRJ1GU9VrNs=c6PFwf?q;&V`WvRxmunQqT;d%Ek>Y^vLvyFKdq6xUaFeZ=*JCx`L2 zqsA*h%`4yaYh9n``druNxIWwUS+1Y#`k3o8U7z9lbl0cZs7*nwyE1AX5!V;C@cb}7 zKh*s4Y_^TrOjMo>RD8PYd%M1?>(gAH>iXuckGei$3wQyFk7si+em<!D*{+Y-bem>V zQSr@D@ln@DY{7}nZ?kR8rrR_dwGmr*g7*jG`-AcM+H9MJn#W{RT+H?9HqAzD#1`;` zi08A}HfGapnvL3sEokQcHrvK*y6ugcUsu%p(p;bF`sS{Wx;|nHkN5g9zJAnv^IgBz z^?9z(wlSM-dt-cjjF0d7s7-NuWw%FMU(nR+v)MLg(`}lK+K4USjZJ)iZ7ymaIjDJL zyFO+!-Jaq0bl3NGeOK3~xjt%B++Nx35!V+S=kaZ}joD1pd@@k;Nq2pkjoOGUXzYA8 z7vt-}_<CF)vzczsaC^Gz^|?a)JY1jV`l!|C3Tm(H_K52X8in!mQSEC{<L0?O*Y!EB z&vt#xrrR_dwJ8`M50x+C`htcY598xud_31@+bp+Fc6-eAnXb=peY)#=yS}UI(_A05 zDQ>Uq_K52X8-#gmN6n)E<JXtXwlSM-(`?j6Y{9YaZ*x)W%t7VPc74pI+cX=s5nE8- z`E0h0*>u|*HBML5IBBj=b$xT!M_nJW1@)ZYX4{xew`n$NBevie_qW+LX47q&O-0SK zIclC!*GFu@(avYHZOo?IG#j-MTTnOj&&N`_o>AlExjx%wxqY(RW3ErPX*Ly=r#Z&w z>-vZ-h<d&@+s14rs(%Kmf4b|_Y}BTp;wq!!BCanyD%5XB)fZqAarv%a>-s#`=ej<} z_1Uh^a{Xl2$6TN3`V7~nyS}&UyShHj^-&wK1>y6>GI=)JW}((I88z>i>oZ-S;revf zr`f2D*g`&!RG#e^Uq5R7c{bPWId0E(eavRMJ;Uwku1~X38?gnoo!@5LER3%Q<LhyK zx=piDn}YH4M8!v3UvPx;+iV-N={C)#qVhCH<%zmJVhi|uG`=4;+s14rs(%Kmf4b|_ zY}7_<K`rOA**0d=ZEsZGuBg0eu1|G+bJs^*AF&1efDoUr&9*U{iShYje7>$vvr!wd z1vNvyd{n=+sD62_&$cm}Zqsbkrl9&)M)i-lzMzKlV>~~`^SeIR^*OH3c72xXC%Zo8 z`b^hnxIW$WX*OyjwxGJl$N2adAK&%4uFr9Ow(Day-KN>7jo89!A@6on-U5uDkIl9* zn{Lx=)JAMURrj~qHfGapnvL3sEjY~mZMKcsbem?QHew5^c)u{dUl`vn*Js<9O}A+_ zY9qFwvgc#7ZOmq(#>qg9lkWO7o9g!FZjZV?Vhbuczs<HWn{Lx=Dr&susPUq%PjP)^ z*GF7mSkdQ;@$*HUZ@%l-x<1eK**0d=ZJLeR6x2K_qw@0q;&}@yI6ubsAJv}c`fQu! z_Q`IKxjxhN8Lm%veQ(!yb$y!aQ(fQO^-<SHY(aVNugyixD+e{NY}aSGezNOhuFrIR zhU?Q^-`n+FU7zOqsEyddL%shP-+zohzihV6Ld|P3DlX>wOxI_)KHc?cHfkfb;1K7x z**0d=ZJLeR6pWuIYW#@n3(I-_7@t4JuOHX1b$y=eb6ua~`fS(7Y^K{Y+@9|GG@I)7 z=5CL=KE?HwT_16ML9*9tvu(^~qSlpxnt!_M(`?kHV0`@;U%%@M%X<A7Uq8mz@A|c_ z&vSjYjoEaYW>Zn)G)Lu&x<1AAm0cfkePJ1okMZ#_e*M^N8?%`hUoR>?-SufUY9qGr zVCTnpevGfr^=n<9=lX0LvzZtl598yxKFvmL3dZ*r6&G=RVQG(#@$oUfKAUZ0Hr=M# zsEycygWTU{+n7zaX*O#0`FDJN7@wc(3#nB7cK#EeAIA5`^=n<9=lX1$<#s-!jrWVW zKHc_qdsnxoxt`B%BmDm|&0QaLy(%?s0so2bkIlCFTw49~xwPgPbA6`k^|`d_(_OF6 zqZO~uqg9{g`c&8Jb7|E_U7zCm%C3*Nz98cH*lZiK={C(qEht5q!69Fl@!YQ)>Ja(4 zqBiR1yuzf?5q*Bs73cTWzk4YiX+AvEZ@wkex40w1Tfx$idO5)s3xk!v4SDMQ98B2} ziA0H;vM02smrjcJyYi4=N`+wOO2OpAlH&2HeUl<X=-1(@P;SG7RUW{`Dqrpc!G_NT zFB`>&+-&Ui{L)g7hWs2;k>~Q-SSagr6n!Y3b~qOpk18WWe756<+#brSUG6+Cl()KE z>$XrH(jnyQH9C|RxZI3=(fA*^T*vt$9YcH>_s{MW%Dcye`1Er_`M0AfCq*KaH^rwH z`7;*UV{U(@XudB0er$+uo)+SldA{r2zR>yGbPo9=w}yN(T|Uh7FW)7!uk!q|Tz<sy zxh}uuczyY+9zS@!QI~HY8}biud6dU5e}0I+Hx}BPxV+5$JG(s0{fD@Gq5Cgzd4%V) z+hzS-zxKPfp2$2N^7*G+5XzmrU->Ri@ctCKJizNs=^o-+jScyFxZLR&%ACjc9{h*L zl^%bA+lPC+dObq_V?5qCm)H3GXS>|5=z4PboLCsI#f72&S<avD@*wYbq06Ja-jtpp zevb2}x_r3u^V*zzXK3F&Hk4Cb{zdyq`>`(ntnn$I;Bu17=egWk^P#<;%cp2Ql!v-p zMf0IN%H@x=e#+xr{@e4J=5m_%ySL~2(s9J|e9Z9k@eY?exID<~&2;>k-tT;udwc!$ zbVKKn>izBACzKC&{6?3{xV`;Fq5UK65C3P(<xf1`e3u9K`pb9uX6+C0g)R^Ed8hEp zK|N+Vf2zxqiq`A$r5-QS<*S`9%jJ=dU*_@zpMPI|>8nQ%w~u%E80TByauc@~xZKn0 z8Nx61^*AXO=AY$q8Sl?BmmB!{E6*>7_4v!}z59jo4@LW%9?CB{U+>F8`BV4Lb$Ns5 zlfoY<=#e!xjGyW9<KExO{E}afS+UT*+2yyKuQ$KM*JG>qV};9myuNIH8LdZ-=a<PZ z-}QLj@ta+q?(?eFKeYdNF5~g~@b+z?ywLNV?DkG$!+i2xzQg-b=yFTv>pdX!f56vc zw#)U7p+C2d3|_zVXz%tR14Dd0&o`Z42J2DD<3$ID^3mR(zAhgX3-g)JFZcCm=k@8A z%X<9c`DD5LMJ&WGbNNT_=SG+7yMO8HLVx}HrHcHY&0YS)^Shp3QtOd7HncBxd7bwo zm0wotG0F3dx%|Axo9}Xd(fM5;;+MLA?HfY*c8@>G<%?sC$Nl8NdqR6B<)?hN%YBre z^8cFq7VyZbD&5kLD+(wX@WCi(&`};jQ>PwDN&!QstDAI(bdfa8L-3?hIZ3L!QdLw{ zy3>Ff8N|VvD^VWfh)TSI12a0r8E23?=&ezF&nJNq<RK8o$3=lLdcC0c%ALE`UjI3D z_Bp#MuL3+Dbn@@@*lWMmeywwI6Y%?3KjAxpKgRuo@IAo0IX}Yx4*XfP_a~9xhhguX zz@LJ>m+h1MzW{sBq~I8SE`q(E1pXBI;{(9|jP~Z>9)8{rd^~U$>g&&dH$(mj;7!Qy ziUT4ah5Q2Wt03QTiO>(7rSj3Qp9g+}YY*_Fu=l)6h5r@McLngTQ6F{SCoUI#r(P!f zk0QS-fWL$MIM{-pBT;`R0skEKp9lPT=(_^=yU@1)y!nlkAMK46-!J<9{CpY{FQNJO zBKn7(K{{7qJPZ5)ja|lNU|L2hJOX^ey9LhyUq<Jk%-;zdrE@RFOSI19=dbA;_VAa~ zBa8P6{so<@F<t=vNe%LkDE7#)v>s;p#UBagxLPIu1Cd{Z{4)5L=$wH0M}~y|;By7n z?-u^@DS{W$f=@(#BNPnB&)9K7kAi*(%Copd=%+${1oVlD@N+O7Kd*y)1oW@cxgFax z5BU!vzgd*$F33lLFGl(1P`)prd}WmHEJY_j{Lhl#oT8I{;IGiR8|OC%ydCu)`Hb*C z0r^?b-%jVG%wGn69P*vuKluWo&lW}gH0nFdU#B2Ye!hnKotqW>SLX?R@e;w$l>|pA zSeu_A^tTKJ&+_vm^mi5nAAO<l&(Z#apCR<GrOkrB@?V6$1by3pN09$ZQJ*8o|9Z4v z8S>+(j|JYC(R0unSYMrjB?WI&^-+(M`viY(uh18NB=`XM=Yj78|19uh17cs~A*DW& z9v3|Kpx~p<6dVQJcI^ZGR>;o-Uos~Av%rsS6Wjs$BT=3a(6gXtKp&0@e|fjqfAfig zBhQLGKR;e@@37Eq+V61t_F_Fw<|w@I8{sF{F7#&vA5{>%_<h0m>=!(b{(A3j!E@gc zdIGpSFZjMc7W&f7f^SB7IzT^9)i?R0&k6koRo^tefs=HOt?UKfxliy2@_X4<!Q~%_ z{I?DgJoj&cKMmXq{P4KYJAqGnz2FFNha<QH`1eN&UcOiKU5xTClON^hne##aGpXN> zmkFK+{t(7b=95Cd2;--df`<9|bBv$N4T6t^zS$cE|Mdl;Z{bS8ce~?-_U-)SFrJn^ zDENAJ{6OCufjf}@UtSD-6x_{E2g(zL{B5Y;S&ZKuX9<5N`rqH6ewH6l;`E1*guV#O z@A+|iMZo`9PVf@wzk<K41HbYjq4$FS_vZ-iyi@G^d*~neAA&DOd(`32lITDD@+Lns z=s!!~KLY)y4*c}A=%2e=_|M-YxQ_Aj-_IAkc$3f{Mg5HcZ$o=VzAW^k&lCRTFA9D& z+H?7z1m6vMFYJ8}+B5Utg#KQ%XXZA+M^1{qUijxd$bas3p)aF9*MW~id(I;N|D^RY z*MAi9)4&VpPyeF&dz}tgMBhQGzQ`ZKKOS@f@*fm>)fT*Xmf&|B5IlFL;G^FmxDNU) zDPYW(ck~OMeV6cG4!nH2;O}o2I^VzW^Qt!qo_kdAp~_w=5Aefi|4!fs(cWd?qU$e! zKet8nEu<vBD}ecao}VwAB=k&|(7yxvQd00QUHOFIZ<d9B7W$4#3+{ycyJ<gk_`&q< z2hPhb1%3jU?>)GE$`48Y{|fpN=-+)a^uJE%w*Y5g?|0q)`X^$~$9si8a-!g4$uBAW zTLiyy7h%eC#yt;k%k#A8&%&Nw@LxsuCaV9uTI9E2zNyCq_rcy}*n0!;Z-6g(8{}Ur z{Qm&@Z$bY!?3sl<9cKvt^1q8c!@%>v+ui>2xX>SP>GuhqJx=5^pvOU<h5Qka9|8S# zSKj4^d@t}3uN8gu`$hkquK$3(-$B0P$3p+wCB#qd{qhgIR3-cfnEyCCKkv6hU-YL6 zMxFt^1N1{NzBrzQpKIOz^dEvhatg}#bHUH{3hsn`7ju2Sgx1ffkB?6aE}t&^DXd49 zzAgAGu%~{E;2&VUP(MxZ%n2et_kF>iLjBAlze_2Z^W&E@`01hl8TSJJ;yr?Af1=2d z_o6%<=x-OGJPSV)`lG$Vzku>>M|nnmA@uvI$PYN;mIwG&lxH5eexmS~p??hJDWm=~ zD9-}$1ZBhaF9ZJxa1`>Vpg)YDeI9iC1KQ_o*faZ1v3C^yWCZp17L;cJ<0oH~{FY+E z{}k-$hzq{%twNuDJy&uha?*Cei^mK7xI+YUJRU!<9}>*>_x#*<nBXNY2t5zIT<{2R z-jxS_-$6p>xI2Dse5GK%|L5oNVZpO#-wV$XyqFOB1IVA_diZ$~<&AC<d?n;Zju!m; zDUlzccH-x~nEw|~7Mz4V9N);#4D>IMUHo*Rf0a>x{QeZTAIDSj^F1mT<3;rUvr(T* zX9#@}^*v8N`MCk>=ULLj&mW^dMWp&8-vB-HGNC_BcC!BZs|3H<EzeHDhx7`4DI@qB zXA7Q#KR*Ta!EtE(EK#{wAK&BhbLD{GMS+oLu>L6n=Rlta{^pUw-wVv`pvr%t6d?B+ z!FAy0Is`8Oe~-$+{87k1hxwor_-)9a#MJZ95yB4`c^CXm^kGT4tSa>7hXh~m+5`Ik zfj#rU{2nFeUk3hVzu;c-ll)j@7}J+&oyyPCZhcZe;O8IE-xtUZe!figsLBJp75#k{ z_}%DVbNht<Qq=zl^!+{BC;DH7{^oN;U*toAZ*}|Q9>HHkf1iK9;Bz6ryjSpFpnoi0 zDtMc_-Ua_*u%}GxDt@*=|I&qm7r>vnQt%z<?@Qo+&h0-a&sFIE<&OyeA?W{$R}224 z>u(@mbnBP$<>!4Tqy8vge*Uol{3*eoc$eV0PXnVpIwu4lgz{&o-2BvC`*sUXq5m!* zzr%scz`Ip{s7GcWk^XxZ)q`sPdjx;UZI63J-)~<b^o7p}zLD}_{><%y<0lC&W4|$h z{yq<U_%@+0{+sZ3(X`F-b3YKg*&QE06nq-W69xZYf`9pbp&!_a{2~7h*cZkAWDo4? z{ic-X8kDC#B>35LA&>QU1@%447v1!XZx?#BSMVo*JAhw%80e=7eT@8;sz16X=I5*E z4-vi~r{{Li`K3aB_<dXEAGu4x$SV&PyqFRE0rbB*FvlA){{r&AgT@i#GXFzQ_u+y& zu)h3OT5tsG>7N4E<HCPA+9Lz{--4bwMd<(13;nR4-)H8mmcOmCi=2q|8u_K*PosRj z3xW^8zb)bX=Qoth^7BWEets{Qap$wb|9SBD{+;0e1^PVb{GPPpM}2=2xC86w2f@Ga z|3rQO^%>=ZR(keyh<wL?3jOA-g3GY~0`#wWDi=RH!9RPD$o~fQU%yZ2n?PRx=3{ua zuZ;eg1b+wcb!P~D`Ntw(1?~mD4fWZ9{!xSc{0D^pGstfl_FM!02=;eZp9KA<k`eUm z?-jfVoG%NmU#Z9ujw@n&7f@b~Q)9dYeIInokN(_=_MeZ6d<Vu$h8vciKLUUB2+4m0 z^*i?~p+5sW3%m`u7ntKWIRCjX2>(}$f;-XQc%8!Z$Xi7Jtr%bRHwk_O`bMB{6YxCR z_bxX-*n1PkS10<<ZK#jAvn2lyV|*^tIN|4|Crkbvzz?4;c%Jm~^KS5WoGJL_7>^nF z+X?9J_>s{66nNwY!FQwlk?RD17W(I|6?_8pFM<A)+y3)H|DB@OBlWjYN2KT1YCf(< zI_PC)em(=-`<UQ!-^un9e~<8AajM|C-wFMy(*!R)EBH9j`Hyk)vkCOf5rQ8DJ^CNQ z|2XKgPYJ$g6#9NC_%YRf^+@Lfg0Fd-&^sRz{F>thM;;dZSHSb2TdMu)kqq#?$3XuN zh5u_u30?p`h3fN7RNmRQi@jHZfBt^qx4<7EK7M|7w8$_2Sm+;po#459g#O5z1b3b& z`tGp=cf<uBiuzr8T;#X#ew6a>{l9{*?-acB95DT0`r@+S<gtPm`Xs-v(>j9b3$GFV zr$at-6fop_4;B0*=<^>H`6odi`Kjo?CMo)6PZs_+^azexf=`(dyx1-HG_r&9A30U< zQJV$Noh10|ZqRvRr{}t?;3(vu8W9{p{=Y_k^GjmSEnPxic&o^dfj<NK4--OP+AQ=g z*x%7BxCr{lD+Iq3c=0WQZ;OfiVp{Ntalz5k1b-HI>2$$!?-2U(%eXX=$O$>Zht(r< z9~1i5M+J{uEBIGuGM<gR9P}qMg6r1^edi!y8iTWQf)8R${L3E|d^`Ca#*4sTV12}& z0q)o-m|x=NCks3eegA~~7Lnh37?XS*^xuPj1oB^kJsrR|fnEmxpPnu9b5~1#_Flqd z-z@ZBxkvC4%6max@B->%k?lX2%7^opd)XesBZyz<;`|S$`T+e&E<e+OKMC9k{9&b! z)=QU*J^vf>y}(=9e$ux9{!bvkUgUSW!n9un{UPwrLjEJr*8w~S`nBLMaD9;eUf`p+ zKDd0~e<#-m;d$W0xjqQbBL8JoKlMl%^>x=I(GMekfciQH?Qsk0`(D)_>XBQ}KK%VZ z=AQ+g;QBa(;s${qf_x|1@9k*MMd*7Um!IT6j`n*aW0LO${mbA#6Y`VL_gl~}1N{Ne z&q4o~1pS^pqW`xj-_0oRQNRaK-Y1ZM4F0zh{`nF3*G~B3kHP<ze<J?jG|<cN$IqM~ z{(R(7H5?*6C#pD60rc->n{@oaSLk?40Kauar{8h7j!z|jFP2Ca^*8ExIgtNyApffZ z^0AY3`JcUA$L|c_%Z}CQH=Uy6M`^zC+xK3Y&;0nh0R2}1`HQH&{roSd`u5|YBXnE} zlsEn^oxbbUI)3sEI==q3IzA?#|LUAhA3I*hKMb_bNw!XZhTMeT{@1-(#}6K><8uP^ zO9J|j36$qU0ec4m{iiQbzOMxAd4Rf+-@ZOt|M>CKf28B91NioU{H+r@|8xL962LbG z`tK$h&;I-m3ShjiD4n1F{a&Dae-~)q^8@t7fW6-i;QIsP<BouR;{jX>;MWK6Uyy(B zm*>U+zAC`~mOy`gRRCWb=pR=H?EiECpBa#^UZLCbtz&h3VSv9oVBh@#`*#QU|2B~S z69M`u0e$ZYV6H2FeLWq>?|%mHzXtHv1NgB3{$e1%rvmjEv8SA=9G%YD_6389?bTAz zito!7rk!1-;aVkMoJjjf$=yupiy6`^e_Bw*Ohdb;BAjNWInB<^WbKMmo2-=fyAYsI z%4G{qu2kH|`i5(%np2s|7qc}-C5#m^@-r(x2Zw8M+qQc0rK&xetvZQ(F<(oAwnLRw ztVudk<=TO?5=I?Fw`Qxgb1QkuAr^Ov+0lY?{uyTt^p&Q{*;;-yU&wm`l1p;Txp>;? z7xC22>B^9k9djzFbfr?N^cTlV>A_(;l`U`?YLqe@x6|pgm9p*Z*ch3Y+iT~t<!r8{ z-mdm4&4{&932U}bYS8LdeWIT#ip#Z`>N&pGaVyhb%ia0v8I?-bMC$3I*5uBX%ooR; z8MH*x3^cAlBgd)9t4@t-bZj(Vv$Mr9n>tK2Pi^7$DySDhD@k1=pR=pAij$ohogVMc zQA1f)ZZcc3Yn5!iR_)JGOC_hr3#I+dM9K7~qI$ctuGBP@vf|U{uO=%o;na4Hk5eIr zYuQRos|;zXqMNAtaHF$XDJsKQU%5P7J5X?_uTD8SEBeohd_I-kO65ulTXXr;SxQ}V z%bL**-7J+a<|<CGh$hA{$G{kiZ=TK<sE(<s#;EsE>&tlWnJ#iK)N9V_SuJBs7+dIS znse9c@-?w(xf&Rn=4n~`*~|5>s>IEiwfs$NS{ILHs{`4}gj22cd)4e`Nam|e2-zkC zEAFX0$1K{FuQsD(n^AmYaUefMlZQ+Zep7q$)t#ezoScc)ovm&yl(IT0m7d8t<yyW} zOzfWw(!6=YN|6_!UOAnsO;?;THH%cW?7gwvoKdE8|5O$otCY%v(}hB&kj*)hr2_dO zU9ET+Rq(T%sZpmgn4NNTmd0?7B`Nc*rOH&cR)djeIn`>GTGnLiTG`nXigvT|p!<tf z_vXvPG>LlID-O4&!sH#HIbdy$JWjKQTToFIvus{#$b>@5X!4nwDi!+&My+%@7PW1) zl(7p=aiTV9JG?juC?KAF)SXHdwPsm^ytH=8@5<Q2Q43qiqO;$h?q(?>-F-CI4XNdd zD-b7vMk?6#%4A1AIL$r8Pj2)L%c9mBbY^O-$Is$6M>9IsWVwRl$)TBIwyjoKs%F-@ z)Jm>WA<SE0;ihR*6@!5jFVg55rj{=_wNlYvZj@`(naI28en*mQMj*$vxl}4Zm0zSQ z+mw>8@+kLbZ&~DAwmMn%C)GGDME%4b1Hqq@6;&SDnW$u4IX~H3zjaB+HrPsjl6oN3 zi;0$PPO}m<+K6C|ZiuTY_jR@?cSkLQaBtPfM)R!%TS*K2TvOguw%TVP8kQZjBd9pz zhT<lw`AZys?fc3R%S~4*wDwSoYCn%VYML@Ml&Do;GX-X1LpY{ZU{XTq#%E8LYOcBd zT1(Upl=XB&B_xV8eQ0%HV6vjL2gOvQ@yd{)uCt{yO*=3XEvwU1t9!lKidL!5<!Wb@ z#&qFEc@q<*(wL?gHSH((1~_d7b#}4Qm#mmA->hr(lz8n>9HZ_#kS{u09h%N$B@vo` zTJAwo)ydNSsci8;&NW!%y&Y~Bxm?;{u1k5MdZ6e^`kOh$u4KxgYIHO8)rL3l6Jyz0 z*1$lUK3a}-B}^o>mNSy5#d)n}rpao}qe*qs`m?cu@7|i_3G~307_v3+=(H|buIq`G zX)X=0gy&A3q0!Owbj%hOHfel7;4#p_hU2agy+l=n#@bO&$2f6!(I%poCS4{aixfH< zX|mr9@LO>aDA9nTKDsuc{F;PTxgqxqMB`?%waGIo6Vz3UwLY!kJ$IldTRn1`MW+Kb z_xK{f5!cQ(0z}^k4^Xtu7^d-LCjBiyGxfIsOSr%33~*k0qM@_t3<jU<F|5r+1;tj? zZMv$|W;9%_=EKz+(gB{K>0&KUGYl`J1M<;<(gZmz6Qyyur^__mCF^XK*1%y}qk(mr z>t*yZm|9(zv%;+&V2IP&uCZR%iH6qK8GK$vvn=RU3`9?n^pY+)p><Pt?TgyQSi;6Z z>?(bTn+-bNs(R20Ij-P<%sH-3C|E`~R`!!L-M4al;d4Q^6mEUBLst{~xNz;VuPwS_ z{#~<qdRe)`8dC?AZ4C#qUd5Z{61R6KT4OHJl8tkT&JmbPbfSMQ(JAC=8t$Y|r<puQ zfF<lXbOv|6&=eayhAw5AFEkChhxD9xRCn;2^VVs8=N+K<oVP}4?z}ZN-Lx$sTBEjg zn(MrE0aFv`awg}k>j*e+jp*~uNDmI^)%izP>6)Bs>l|0`kLDa#CloB>h8$tQkap;5 zV&D24q1nE+=vucw6r0plEZwfo<ZF?Fy@{p_xh<ZgpLEMsqXUjgnSR|iuygYn1C%m7 zYWLfF=ngqoE^ng$g?);7?9oe{N{N5r`(50FI<~jbaVg^!M^C+ASHFKl6ycjXI%OjM z3yS-v_=h`Pu4@YEvTeB*-jSOUZOYFZTp%4LI5qcDEko>W&3og@vgI<LO}LiP!HZ8P zt-|c`bj{AuVJvNq=`ys+_tnLmW1ef%=^?%b4LFxw_O2*hTMu{JnH|Fk+n+%@@4uVs z#cZ|0*{u0ey{Xd17JUW1U375DCwEOXt<F4?8f#sBx0?)dD*MDD8W$>vU~;cLp3N70 zZNJ(p?yi|CogWp`ncTXhX>`z%YrWDlRqCFU_YRf0auQ`askZm!E4AsY7~~(B3ChlY zOWuk@?(T?#Tt|7dvRBoOQZ^7vjZK#ed5Xz!&M1y$=)g8VGpv@za)3(q?D4Zl_epGw zIuyl$^B`O8<FaC&M;xR`f<QRU*r<=S>6(T1(L+0$IyNgDpfEUW`NK;%%zz_0tQb6& zT1F<)#p$W^aLShdR%eOz0$b7;kFglt+|$wRImJBx=%fELr99mjlW&UJ$z7$rPBA@1 zl~2BC$XBZvhwByh8PKg6kgigQjx!9$xmqhWqC=*k{7hO(=RcP<CR(w4l{#*IjPLVZ zsn7||+BQesRma&|8Xr&3P=E4{npNspz5>f6508rLF<+Ymhk=hIg>>Db5ZYmLxm4vL zkQk?5`YpPcof;({S##`K8di%Bu#()nRL|N~I%n6`9zWHJ1r8QNhI?n=G-g9YJuRTj z3iCIV8HltA^JUQJrb)Vg&rPxy$~Sx!27!_0bt~ZybSp{RU<>q=_94VcQx{lJm}9L9 z)wCwG-eqj6%yD%*8$zFI?_f`qtQ0B1ZEackB6<1z7=t$WKA(Q6cj^=2G)twac~4yg zQ#2s8DK)1`qJ^E8aKV5TQ*-?m3L}}cCumwL(^*b!oPH^~zm2=URLN%*i8NIj<9{8B zM%d>lwS_E)C(ugV_QELL>?WqOl`#sJqbvBTFw>e{60^CBr}Gs~Jg2yy;+5<nr%Gq; zEIC#!*^?A-S0Kd8cus39N|ZPydCPTlh1NSlicT3CQ&PsZ^O3x|4X0UYN}E!94!;5G zT64Mkg{j=eRk`a)r3%rvQVc5?Mv%6mDzHFZPIJ!NcCS&O>0-jPmIy8-D58v3nzi&4 z`50AhaT$hlAnh(U<Fc#9^Sq9m8t^-&WV#8IFeLVFDrcW6D@O5u)SUwyqPF24V;n~` zz;U+}bj262w9@M<6{e@ua?@8FcipfuKb+(GdQi4n%}+G)Rt0KU+e7id>e8YOuE)Pl z(&`T-eL?cFQie6N*PLz$*1D>)o1&}A*^1+7^LGwjP?QS$oFQkN0x@W(>v3(Y^}KC% zqdNxX^_Z8F&mQvnS`!3hES(B()=1rm&8hNqb&`Una(mO7*IJba#^oHXJ%%V|eY8>N zMwhiz^bLZ+d>p}<)<<dxC#eCes%?g2HXk}j(bGO=cPX=0PSU2{0C0~nd{d2K2PH=y zE9JiNU75Lzk}t(H=WCleeo%$u(^8&Z#NaR+Uu~dk#0+T`(xlk2q)mZ_GqiW2u&weW zZE_17PRIkMpN*iYtU%G4{k%plXY-Z*9sc(Lyp?F0c30}mM{OuMhH)xeRzdYOo8OO6 zuQQMi4t=EH0LMV09kH#PfXy*O{liIH>CBK6ugjHGk=Ee-!&~gkzI3|4yVv3El<g=T zI1TTxcUkuEfW6CBy-!NlB~g-W{rXN%sD=}E|8N(-hrzacgT$^<q`zIJ)nEV64n^O$ z^M%j4RmK^#l<q@Rm%+&@zhT17*0f}b+N@lGDalIGk%&JMIhd1rm!(A=GQDM97~#)< zMy+cs)~d#+FEG7jIX0l)s9eT|^l@znH5sW~(L5mNwIUv*GUnVdPfboEkH`r%>{Sm? zamm5vOma2wm>uT@J{@;t3(}j0)QBa&;f+`c#pN+edYgFw%GEH`$q8(wjA*QjTJly( zE$?;28JtPv;eLB)hd%oJm9m~&V>T64z=PlC1`=FgaS2?Du0@`gqcLeH2qlWoYGvpP z+<GVpy8v@Znl#BDUP;#44_kGnRt?nNo)om2J6fyJ)68lfA)eLBEvqvMT1>WKAwmbt zG<W*Xx6;FXw)bCSsV8~1;~<!=UNKLZ;JZ1Pm3C|93o26Mdz(@nck`MixYToRtWs)e z8CWRLaHgv)T3e8t>GH2FV%_jXqggs7$vJj*oUhDe6Wrgz3DWeii=C`*onp}oiOR3Z zUUjX~>)ID(hpBr6%vhHqUiAkR(M@8Nu1x3^%jt32Sy6!k%Z29GXlg}bMb%1cyi%f* z{GBul`75i5a;y*9s=4Lcuj{t7v9VdfSl_0st(CAAy(?Ei3vILvC}+pi8@8qC8r|NR z2PzgMCAxc);P%F*!5y45f%0|oa1Z~-qu9Gg;Jt_H9&0<(8OqaE)hCDU)A}GND1;pu zc_FzFO!H}$t5@GxqHs+rK;J?8%u;T(8^;vNp}U)3H=E$d;*rxh9CEo^Oa%$k>0Tn_ zI<@@V!S;M-=0E<^&iQC5tZGS>UYfx&p60lWeoboS!-pv@(WgbuU`zyc&|)BXyWm81 zf3{3VAXdmUkA<}FY)Q8obic)(f&$%a?r=32Ih>1q9KM2iD%8TjRbgaM9=$~=Xzp<3 zvC;Ogw_o68Y@ALT=;I9hvZ_5vcN{jon@wRWHhp2hrWc5-ye-+T))Y9wU^k+6qw8Du zlJ9A;i5VWWdACB_kuBw&bTFYh>5E@Ue9q%mQq%g0S>?QwbN1(}IH2JTJ>7&-iIX)7 zfpGe%9;x<d=QlWfrrp1teo?>UY>3xZ;r&qSUBqapvV1+#9Z;x7AH}kGtYxwX=-uft z8geEMET-g^J7Z!A-3_dci+sQ;7+ZK;!^xs4Hp7&Oav<T-(jsi9TSC8Ah||=R-b1Yh zkr0iXU~4KBw!xrUz;L6J$d$?m*zFjy5szgcOej}oAczOk2!=fAwXrlGJ2c7GJNGwR zRdkxj(JO>ziHR`5U=;@nOwmHe*+M7Dyf5%+^Yz~@MB+8FlB(4sz-5iDRfJ4+s#!PQ z!CL1o^8|AD*&a@}bhBkgU=UREN;sXT6G`2*TQ&-M0Ja+&o@QsdYj|ZAy!X8tEz!m+ zF?u$xj%EzT(>1CZ8c=(9Fk9VQ5H&_OikT9{j~!6<o8{EnV%2h?FjMxtU48P&6!qB# z^~saa0x1xkx{_35pJGMn#u56lZdyqgE5x-)`rVTiCEw-d*&;VxW|H2$#;0Ri$oP7* zR+k$eQmf0fYbrZKFRz9=gcT=(@3SYN7L3!ktXj~!h-}i^O={JbO+pG2jSL$MvR)am zQik<_&*nz|P%eRs?*D**nUj4$3r=(!SE2VVjZc}&0!=2CphJ?QF#67yx-IMTzs~7X z9F%fRT|vq~cFhlH^yg)gax>K3sgi1VM*kZzLh?LfnB;n~SeWFxTHk9ly1Ed-RTd(6 zsv7Uz1XKkHo~j@Ls+tD9YI;}TLMAJ4xyEZRY--u)^N5h#0vM!x3L7s9g%k!!K7~ON z6yoh7O_P=e6<V5WjOisLO_T9WcD=04b-1~NUnSG?XhwGn-;D0+*I$Fub(?6eUK7n7 zHNFX6FK&pid(fi2W^QICJDT5T@hx{XZ|4dWtE29$>Fk$2;iuLpI;TZP#ZB1MMAUeJ zODj<@8HEWX%X*^Wiq*$E<Rf}?Oy-3^Hypovbi-dmX~ox2DX|;)gjGwWtKjsh?dESW zVYXI*+7!sw%4BQR0=`TTACAbA*7{e&+fc1)8Ug05%wCbNq0)i{I89uYwJmwWs_~hW zRjF>tD?5<{ha9SI>tEPX;JM85<Q{#W%4u{$5%#9Z71-Q)u{B#an?jLXK5N3oH}nIl z3ip(>VW7KwZQdn}V&M!8b!e0fWVi}3S@^00Vp_%RrJbg!ARHarJjN*+KKo6Z^%&;| zI)-s-Tb%LibfH#F^QD(Gtgi_S@3yv<l42RN>!DzUJbgumLcs!AK`1<bG#8N#cUVIE zAW$$L5t8pAx&u$HD+zg@hxB%mY7m5~r0If$zb$nZRVBxts?VUB<xL-&T&*Y#p~muJ zWg%Z5>o#3NGzLubLM7GLBUORa@>^U(s8)=nTCJ>JtW`=iH@T;=jiiqYuG#7}i0g*0 zLD2U(04u6$xRsgBi@LI`v0+vrrWb8xfu=Ub;;MXDDQtGeOBJV8VNC|FS%+r*nx%cM zBb~8Xr`NJ+$=bAf;xT{qoWWrTs&;l3hv~y=9L(M<bHfK~*RM<~$@<k8Y;vn5Fpc?c zR1F8}G>x%i4!Ie6aVR(+`V^VxL!%<oVS+larCbdM!@eoew@9EX%N)N2wY5^3l1p1& zNv71QQU&!k9IU%QSc8Z!BQK1fUTheWJXHlr@N+2e!%(578w#pPZ-=p>;V+H}GJ{Ds zu;`<~bofK{P2XoP(C6#<YAdA%OQ5oapVp@<FjyuAT>Lj)No)DVzGR+0DUKnEk0bf| zidx=TF*<(b7_9yxeZH(6?M6M?vfc1#3Kga<s|R@vQfLr|TJr@TwKDey+ulzx;wm(w zpMo)%HaNW5PVAt7NU<0%YM>OUX}U)or)ycfj2p{?P3k9^Q-R*ObRZp}qZ<m^ZW6mm zuh~{>mC^yVd<;aDON6ExZZH0IZ7W0RK9xdA|3C~)QfxoHnL+)h#hthchSOvCr4V#e z?kk7y8w6{6`#4UGD&9U2yvOk!>b{zD+12OH9~=3+OFGKY(QXK#H*-)%QkGCI>-tEG zo{RTRikFL9lGVN{t6CuJj~e=9Ut>Cx_D7LY<Q<2Md$G>SFNALVRjU3r2UVGPR4)i6 zP5vd#<4`<{ihh)cZu)SDgi51xh-vzfI1UbE@_G@i3jbk?KNQPMO)1AHFM6c~n(`0C zDnnDg*p}_0IZ%5!&2u;Gf-L?{4}}eTe||*y(vXbjJXRwUb`i~`<h-xxuEbrm`_|4h z+M5-}5Q7MRy4w}nkk?idz^?YG8g8E|uaP%iz+hdiZ|*VH)do}r>uLk4f_1e4RbE{+ z`uy5f9Wva!!fi~ASFjDKks)d6w_Qp9E3v!~z?Rq>jiJq7GVEM<I}m)ALM`27c9uMN z6D!A{SdIB^&>Bag?#KzhS!{Fyy2Zp2FqhuW;J34y8`szbt3dVVBQ&~E6WFA`068^^ z)#B2~JLw2i+8_nMh9(eBY+jA-@k8?)sy1dOT@<%SGG~NJu*xF})i(Y^fc9xseZT1h zXvqwCZl1U8>TgByfm9m`gSEQ%7cabPhvzv*?SSuj%gf(XjfnqtR-JUNz=uKFnL*Po zq1-~_<ofyS3(r?pS|@nkGV#A}sO_jW<OO8lXrWN;R_+UpYP0G_*hiZc%W!D3QvEbh z1q8Rz_vuaO-=?*pfB2iQy{dgp*j~kG!uBdP-oVr3*~WGZU%t0jzu_*4`gt1*V9J26 z1ls1=yVc)<(}Fi!%v6TkD|IW=_~3_n3A(XdwUSDI<F8<}x?5O_cBujFDE|e1EsWo( zrf;;+E7_wZ`dg~<aSA@o2%T5b)`mA3f%^dOgqq*wqAyG+7FX8${)9>mf9zs-o4Pn@ zRJ6Lr>ES3Hp4wW~@+z0L+zVEJgQE<QHd*IKnCXyJ9rfF_lFgrx<_e>7%ir4b4uok3 zK{rEjdx&1rrC(BZVW7|*rz@mp2DtkrwJU4>Cy?8byPEyQQ&K~4_&xo7s74F96cs>k zprjB&&!laAefTQ5UE@FdoC>FelVYiGT6Z`pZb-8XY4NVGY|M}r53|K7Z9sjieUpKj zh#4ddX)!~ZWk^d{VSN^*!2&B9CijHvGn^Dlh10sjNpVwJ(!iGprzPUyv>2til^3Qa zV&OC^oRl!6#SCedDJ|+5V9~F^z8Ft+htj&kNnPP2%aE1~v&9T)i7;C{-tE<sff@^^ zS%##jr^KRPgJrc+U7@sicQ`H96;4Zrlj4T7m?13@7EQ#%X)#K3drFvUMLjD28Z25W z8A|F7C&dkENduc9EoMqf7-Zu~uM}ZwA{I`I8`5HiG%M<9=3j#~VD%)zY2D$pu5eN; zX-G?i(-QG;TAb3{Rtr;O;iQBiEpA9lSe{}l8dlRCH<UJ<))h{QC&OtmLs}xtmN2Eo z<6Z@XC1T;ExFIbT4fCa9p%TV=!fBQvtvk%t6;6sJ!)b{`I4y2SvkYm8c+9Jbu$EXj z$qFaM3~81jEfx*SrmRqfS*Em}FkieooE9^rB@Jwbv_w42XHl9vP{P!BESzSU(hO`- zi<V{f#LSFcrawJiDpJsQ?SQ>68mf(+aFS(6i*<$h65*t{AuUE}D5Qa!h=;Yr!bu53 iTHKIEuM~xfXoZs!hP1dL%`&7VqG5d&r9}>*=l=tWWv2W9 literal 0 HcmV?d00001 diff --git a/examples/ofx/Bitalino_rapidmix/openFrameworks-Info.plist b/examples/ofx/Bitalino_rapidmix/openFrameworks-Info.plist new file mode 100644 index 0000000..8d64d2b --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/openFrameworks-Info.plist @@ -0,0 +1,22 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> +<plist version="1.0"> +<dict> + <key>CFBundleDevelopmentRegion</key> + <string>English</string> + <key>CFBundleExecutable</key> + <string>${EXECUTABLE_NAME}</string> + <key>CFBundleIdentifier</key> + <string>cc.openFrameworks.ofapp</string> + <key>CFBundleInfoDictionaryVersion</key> + <string>6.0</string> + <key>CFBundlePackageType</key> + <string>APPL</string> + <key>CFBundleSignature</key> + <string>????</string> + <key>CFBundleVersion</key> + <string>1.0</string> + <key>CFBundleIconFile</key> + <string>${ICON}</string> +</dict> +</plist> diff --git a/examples/ofx/Bitalino_rapidmix/rapid-mix/LICENSE b/examples/ofx/Bitalino_rapidmix/rapid-mix/LICENSE new file mode 100644 index 0000000..b9a6377 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/rapid-mix/LICENSE @@ -0,0 +1,29 @@ +Copyright (c) 2017 Goldsmiths College University of London +Copyright (c) 2017 by IRCAM – Centre Pompidou, Paris, France +All rights reserved. + +The RAPID-MIX API wrapper, in the /src directory, is licenced by the BSD license below. Submodules in the /dependances +folder have their own copyrights and licenses, including MIT, BSD, and GPLv3 licenses. Users are requested to check +individual folders for license details, or to contact RAPID-MIX developers. + +BSD 3-clause + +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 copyright holder 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 HOLDER 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. \ No newline at end of file diff --git a/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/machineLearning.cpp b/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/machineLearning.cpp new file mode 100644 index 0000000..11d7153 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/machineLearning.cpp @@ -0,0 +1,91 @@ +/** + * @file machineLearning.cpp + * @author Michael Zbyszynski + * @date 10 Jan 2016 + * @copyright + * Copyright © 2017 Goldsmiths. All rights reserved. + */ + +#include "machineLearning.h" + +namespace rapidmix { + + //////////////////////////////////////////////////////////////////////// Generic train + template <class MachineLearningModule> + bool machineLearning<MachineLearningModule>::train(const trainingData &newTrainingData) { + return MachineLearningModule::train(newTrainingData); + } + + + /////////////////////////////////////////////////////////////////////// RapidLib specializations + + void trainingData2rapidLib (const trainingData &newTrainingData, std::vector<trainingExample> &trainingSet) { + for (int h = 0; h < newTrainingData.trainingSet.size(); ++h) { //Go through every phrase + + for (int i = 0; i < newTrainingData.trainingSet[h].elements.size(); ++i) { //...and every element + trainingExample tempExample; + tempExample.input = newTrainingData.trainingSet[h].elements[i].input; + if (newTrainingData.trainingSet[h].elements[i].output.size() > 0) { + tempExample.output = newTrainingData.trainingSet[h].elements[i].output; + } else { + tempExample.output.push_back(double(h)); + } + trainingSet.push_back(tempExample); + } + } + }; + + /////////////////////////////////////////////////////////////////////// RapidLib classification + template<> + bool machineLearning<classification>::train(const trainingData &newTrainingData) { + std::vector<trainingExample> trainingSet; + labels.clear(); + for (int i = 0; i < newTrainingData.trainingSet.size(); ++i) { + labels.push_back(newTrainingData.trainingSet[i].label); + } + trainingData2rapidLib(newTrainingData, trainingSet); + return classification::train(trainingSet); + } + + /////////////////////////////////////////////////////////////////////// RapidLib regression + template<> + bool machineLearning<regression>::train(const trainingData &newTrainingData) { + std::vector<trainingExample> trainingSet; + trainingData2rapidLib(newTrainingData, trainingSet); + return regression::train(trainingSet); + } + + /////////////////////////////////////////////////////////////////////// RapidLib seriesClassification + template<> + bool machineLearning<seriesClassification>::train(const trainingData &newTrainingData) { + std::vector<trainingSeries> seriesSet; + for (int i = 0; i < newTrainingData.trainingSet.size(); ++i) { //each phrase + trainingSeries tempSeries; + tempSeries.label = newTrainingData.trainingSet[i].label; + for (int j = 0; j < newTrainingData.trainingSet[i].elements.size(); ++j) { //each element + tempSeries.input.push_back(newTrainingData.trainingSet[i].elements[j].input); + } + seriesSet.push_back(tempSeries); + } + return seriesClassification::train(seriesSet); + } + + template<> + std::string machineLearning<classification>::run(const std::vector<double> &inputVector, const std::string &label) { + int classIndex = classification::run(inputVector)[0]; + return labels[classIndex]; + }; + + template<> + std::string machineLearning<seriesClassification>::run(const std::vector<std::vector<double> > &inputSeries) { + return seriesClassification::run(inputSeries); + } + + + /////////////////////////////////////////////////////////////////////// GVF + template<> + bool machineLearning<rapidGVF>::train(const trainingData &newTrainingData) { + return rapidGVF::train(newTrainingData); + } + +} diff --git a/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/machineLearning.h b/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/machineLearning.h new file mode 100644 index 0000000..80c101d --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/machineLearning.h @@ -0,0 +1,113 @@ +/** + * @file machineLearning.h + * @author Michael Zbyszynski on 10 Jan 2016 + * @copyright + * Copyright © 2017 Goldsmiths. All rights reserved. + * + * @ingroup machinelearning + */ + +#ifndef machineLearning_h +#define machineLearning_h + +#include "rapidmix.h"///////// Include all of the machine learning algorithms here +#include "classification.h" +#include "regression.h" +#include "seriesClassification.h" +#include "rapidXMM.h" +#include "rapidGVF.h" + +namespace rapidmix { + + // forward declaration + class trainingData; + + /** @brief A generic ouptut struct to fit all kinds of models */ + typedef struct runResults_t { + std::vector<double> likelihoods; + std::vector<double> regression; + std::vector<double> progressions; + std::string likeliest; + } runResults; + + /** + * @brief Host class for machine learning algorithms + */ + template <typename MachineLearningModule> + class machineLearning : public MachineLearningModule { + public: + + //* Constructors */ + machineLearning() : MachineLearningModule() {}; + + template<class T> + machineLearning(T type) : MachineLearningModule(type) {}; + + /** + * @brief This function becomes specialized in the implementation + */ + bool train(const trainingData &newTrainingData); + + // This is a hack while I think about how to do this. -MZ // + std::string run(const std::vector<double> &inputVector, const std::string &label); + + //* This is the one I'm using for DTW */ + std::string run(const std::vector<std::vector<double> > &inputSeries); + + //* this function is not being specialized + std::vector<double> run(const std::vector<double> &inputVector) { + return MachineLearningModule::run(inputVector); + } + + bool reset() { + return MachineLearningModule::reset(); + } + + private: + MachineLearningModule module; + + //this holds string labels + std::vector<std::string> labels; //FIXME: This probably should be pushed down into rapidLib? + std::string getLabel(int value); + + }; + + ////////// typedefs for calling different algorithms + + ///// RapidLib + + /** @brief static classification using KNN from RapidLib */ + typedef machineLearning<classification> staticClassification; + + /** @brief static regression using Neural Networks from RapidLib */ + typedef machineLearning<regression> staticRegression; + + /** @brief temporal classification using Dynamic Time Warping from RapidLib */ + typedef machineLearning<seriesClassification> dtwTemporalClassification; + + ///// XMM + + /** @brief configuration for XMM based algorithms */ + typedef xmmToolConfig xmmConfig; + + /** @brief static classification using Gaussian Mixture Models from XMM */ + typedef machineLearning<rapidXmmGmm> xmmStaticClassification; + + /** @brief static regression using Gaussian Mixture Models from XMM */ + typedef machineLearning<rapidXmmGmr> xmmStaticRegression; + + /** @brief temporal classification using Hierarchical Hidden Markov Models from XMM */ + typedef machineLearning<rapidXmmHmm> xmmTemporalClassification; + + /** @brief temporal regression using Hierarchical Hidden Markov Models from XMM */ + typedef machineLearning<rapidXmmHmr> xmmTemporalRegression; + + ///// GVF + + /** @brief temporal variation estimation using GVF library */ + typedef machineLearning<rapidGVF> gvfTemporalVariation; + + +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/rapidGVF/rapidGVF.cpp b/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/rapidGVF/rapidGVF.cpp new file mode 100644 index 0000000..1f051fd --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/rapidGVF/rapidGVF.cpp @@ -0,0 +1,86 @@ +// +// rapidGVF.cpp +// +// Created by Francisco on 04/05/2017. +// Copyright © 2017 Goldsmiths. All rights reserved. +// + +#include "rapidGVF.h" +#include "trainingData.h" + +rapidGVF::rapidGVF() +{ + // Initialised with default configuration + this->gvf = new GVF(); + this->currentGesture = GVFGesture(); +} + +rapidGVF::~rapidGVF() +{ + delete this->gvf; + this->currentGesture = NULL; +} + +bool rapidGVF::train(const rapidmix::trainingData &newTrainingData) { + + if (newTrainingData.trainingSet.size() < 1) { + // no recorded phrase + return false; + } + + if (newTrainingData.trainingSet.size() == 1 && newTrainingData.trainingSet[0].elements.size() == 0) { + // empty recorded phrase + return false; + } + + if(gvf->getState() != GVF::STATE_LEARNING) + { + gvf->setState(GVF::STATE_LEARNING); + } + + //Go through every phrase + + for (int h = 0; h < newTrainingData.trainingSet.size(); ++h) { //I changed this because the default set is gone. -MZ + this->gvf->startGesture(); + for (int i = 0; i < newTrainingData.trainingSet[h].elements.size(); ++i) { + + std::vector<double> vd = newTrainingData.trainingSet[h].elements[i].input; + + // Using template <class InputIterator> vector to change for vec<double> to vec<float> + std::vector<float> vf(vd.begin(), vd.end()); + this->currentGesture.addObservation(vf); + } + this->gvf->addGestureTemplate(this->currentGesture); + } + return true; +} + +std::vector<double> rapidGVF::run(const std::vector<double> &inputVector){ + + if (inputVector.size() == 0) { + return std::vector<double>(); + } + + gvf->restart(); + + if(gvf->getState() != GVF::STATE_FOLLOWING) + { + gvf->setState(GVF::STATE_FOLLOWING); + } + + // Using template <class InputIterator> vector to change for vec<double> to vec<float> + std::vector<float> vf(inputVector.begin(),inputVector.end()); + + this->currentGesture.addObservation(vf); + this->outcomes = this->gvf->update(this->currentGesture.getLastObservation()); + + std::vector<double> output; + output.push_back(this->outcomes.likeliestGesture); + output.insert(output.end(), this->outcomes.likelihoods.begin(), this->outcomes.likelihoods.end()); + output.insert(output.end(), this->outcomes.alignments.begin(), this->outcomes.alignments.end()); +// output.insert(output.end(), this->outcomes.dynamics.begin(), this->outcomes.dynamics.end()); +// output.insert(output.end(), this->outcomes.scalings.begin(), this->outcomes.scalings.end()); +// output.insert(output.end(), this->outcomes.rotations.begin(), this->outcomes.rotations.end()); +// + return output; +} diff --git a/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/rapidGVF/rapidGVF.h b/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/rapidGVF/rapidGVF.h new file mode 100644 index 0000000..88e667a --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/rapidGVF/rapidGVF.h @@ -0,0 +1,37 @@ +/** + * @file rapidGVF.h + * Created by Francisco on 04/05/2017. + * Copyright © 2017 Goldsmiths. All rights reserved. + * + * @ingroup machinelearning + */ + +#ifndef rapidGVF_h +#define rapidGVF_h + +#include <vector> +#include <string> +#include "GVF.h" + +namespace rapidmix { class trainingData; } + +/** + * @brief This class is an adapter for the GVF library from Baptiste Caramiaux + */ +class rapidGVF { + +public: + rapidGVF(); + ~rapidGVF(); + + bool train(const rapidmix::trainingData &newTrainingData); + std::vector<double> run(const std::vector<double> &inputVector); + //TODO: needs a "reset" message + +protected: + GVF * gvf; + GVFGesture currentGesture; + GVFOutcomes outcomes; +}; + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/rapidXMM/rapidXMM.cpp b/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/rapidXMM/rapidXMM.cpp new file mode 100644 index 0000000..799a429 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/rapidXMM/rapidXMM.cpp @@ -0,0 +1,208 @@ +#include "rapidXMM.h" +#include "trainingData.h" +#include "machineLearning.h" + +static bool trainingData2xmmTrainingSet(const rapidmix::trainingData& data, xmm::TrainingSet& set) { + if (data.trainingSet.size() < 1) { + return false; + } + + if (data.trainingSet.size() > 0 && data.trainingSet[0].elements.size() == 0) { + // empty recorded phrase + return false; + } + + rapidmix::trainingData::element el = data.trainingSet[0].elements[0]; + int dimIn = static_cast<int>(el.input.size()); + int dimOut = static_cast<int>(el.output.size()); + + // translate and return true if data and set are compatible + // don't translate and return false otherwise + + if (dimOut > 0 != set.bimodal()) { + return false; + } + + xmm::Phrase xp; + + if (set.bimodal()) { + set.dimension.set(dimIn + dimOut); + set.dimension_input.set(dimIn); + xp = xmm::Phrase(xmm::MemoryMode::OwnMemory, xmm::Multimodality::Bimodal); + xp.dimension.set(dimIn + dimOut); + xp.dimension_input.set(dimIn); + } else { + set.dimension.set(dimIn); + set.dimension_input.set(0); + xp = xmm::Phrase(xmm::MemoryMode::OwnMemory, xmm::Multimodality::Unimodal); + xp.dimension.set(dimIn); + xp.dimension_input.set(0); + } + + set.clear(); + + //for (auto &phrase : data.trainingSet) { + for (int i = 0; i < data.trainingSet.size(); ++i) { + const rapidmix::trainingData::phrase &phrase = data.trainingSet[i]; + xp.clear(); + xp.label.set(phrase.label); + + for (auto &element : phrase.elements) { + std::vector<float> obsIn(element.input.begin(), element.input.end()); + std::vector<float> obsOut(element.output.begin(), element.output.end()); + std::vector<float> obs; + obs.insert(obs.end(), obsIn.begin(), obsIn.end()); + obs.insert(obs.end(), obsOut.begin(), obsOut.end()); + xp.record(obs); + } + + set.addPhrase(static_cast<int>(set.size()), xp); + } + + return true; +} + +//=============================== xmmTool ====================================// + +template <class SingleClassModel, class Model> +bool xmmTool<SingleClassModel, Model>::train(const rapidmix::trainingData& newTrainingData) { + if (trainingData2xmmTrainingSet(newTrainingData, set)) { + model.train(&set); + model.reset(); + return true; + } + + return false; +} + +////////// private JSON data manipulation methods : + +//TODO: add a type field (gmm/gmr/hmm/hmr) in metadata when family is xmm +template <class SingleClassModel, class Model> +Json::Value xmmTool<SingleClassModel, Model>::toJSON(/*std::string modelType*/) { + Json::Value root; + Json::Value metadata; + Json::Value modelSet; + + metadata["creator"] = "Rapid API C++"; + metadata["version"] = "v0.1.1"; //TODO: This should be a macro someplace + metadata["family"] = "xmm"; + root["metadata"] = metadata; + + modelSet.append(model.toJson()); + root["modelSet"] = modelSet; + + return root; +} + +template <class SingleClassModel, class Model> +bool xmmTool<SingleClassModel, Model>::fromJSON(Json::Value &jm) { + if (jm["metadata"]["family"].asString().compare("xmm") == 0 && + jm["modelSet"].size() > 0) { + model.fromJson(jm["modelSet"][0]); + model.reset(); + return true; + } + + return false; +} + +////////// public JSON file manipulation interface : + +template <class SingleClassModel, class Model> +std::string xmmTool<SingleClassModel, Model>::getJSON() { + Json::Value result = toJSON(); + return result.toStyledString(); +} + +template <class SingleClassModel, class Model> +void xmmTool<SingleClassModel, Model>::writeJSON(const std::string &filepath) { + Json::Value root = toJSON(); + std::ofstream jsonOut; + jsonOut.open (filepath); + Json::StyledStreamWriter writer; + writer.write(jsonOut, root); + jsonOut.close(); +} + +template <class SingleClassModel, class Model> +bool xmmTool<SingleClassModel, Model>::putJSON(const std::string &jsonMessage) { + Json::Value parsedFromString; + Json::Reader reader; + bool parsingSuccessful = reader.parse(jsonMessage, parsedFromString); + return (parsingSuccessful && fromJSON(parsedFromString)); +} + +template <class SingleClassModel, class Model> +bool xmmTool<SingleClassModel, Model>::readJSON(const std::string &filepath) { + Json::Value root; + std::ifstream file(filepath); + file >> root; + return fromJSON(root); +} + +//============================== xmmGmmTool ==================================// + +// std::vector<double> xmmGmmTool::run(const std::vector<double>& inputVector) { +std::vector<double> rapidXmmGmm::run(const std::vector<double>& inputVector) { + xmmTool::preProcess(inputVector); + return model.results.smoothed_normalized_likelihoods; +} + +//============================== xmmGmrTool ==================================// + +// std::vector<double> xmmGmrTool::run(const std::vector<double>& inputVector) { +std::vector<double> rapidXmmGmr::run(const std::vector<double>& inputVector) { + xmmTool::preProcess(inputVector); + std::vector<float> *res = &model.results.output_values; + std::vector<double> dRes(res->begin(), res->end()); + return dRes; +} + +//============================== xmmHmmTool ==================================// + +// std::vector<double> xmmHmmTool::run(const std::vector<double>& inputVector) { +std::vector<double> rapidXmmHmm::run(const std::vector<double>& inputVector) { + xmmTool::preProcess(inputVector); + std::vector<double> res; + + int i(0); + for (auto &m : model.models) { + res.push_back(model.results.smoothed_normalized_likelihoods[i]); + res.push_back(m.second.results.progress); + i++; + } + + return res; +} + +//============================== xmmHmrTool ==================================// + +// std::vector<double> xmmHmrTool::run(const std::vector<double>& inputVector) { +std::vector<double> rapidXmmHmr::run(const std::vector<double>& inputVector) { + xmmTool::preProcess(inputVector); + std::vector<float> *res = &model.results.output_values; + std::vector<double> dRes(res->begin(), res->end()); + return dRes; +} + +/////////////////////////////////////////////////////////////////////////// +///// generic train method and forward declaration of specialized templates +/////////////////////////////////////////////////////////////////////////// + +//I wonder why this can't be defined in machineLearning.cpp? -MZ + +template <class MachineLearningModule> +bool rapidmix::machineLearning<MachineLearningModule>::train(const trainingData &newTrainingData) { + return MachineLearningModule::train(newTrainingData); +} + +// template class rapidmix::machineLearning<xmmGmmTool>; +// template class rapidmix::machineLearning<xmmGmrTool>; +// template class rapidmix::machineLearning<xmmHmmTool>; +// template class rapidmix::machineLearning<xmmHmrTool>; +template class rapidmix::machineLearning<rapidXmmGmm>; +template class rapidmix::machineLearning<rapidXmmGmr>; +template class rapidmix::machineLearning<rapidXmmHmm>; +template class rapidmix::machineLearning<rapidXmmHmr>; + diff --git a/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/rapidXMM/rapidXMM.h b/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/rapidXMM/rapidXMM.h new file mode 100644 index 0000000..e87f992 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/rapidXMM/rapidXMM.h @@ -0,0 +1,296 @@ +/** + * @file rapidXMM.h + * @author joseph larralde + * + * @copyright + * Copyright (C) 2016 - 2017 by IRCAM - Centre Pompidou, Paris, France. + * All rights reserved. + * + * @ingroup machinelearning + */ + +#ifndef _RAPID_XMM_TOOLS_H_ +#define _RAPID_XMM_TOOLS_H_ + +// this works ! +#ifndef EXTERNAL_JSONCPP_PATH +// #define EXTERNAL_JSONCPP_PATH "../../../../json/json.h" // relative to xmmJson.h +#define EXTERNAL_JSONCPP_PATH "json.h" +#endif /* EXTERNAL_JSONCPP_PATH */ + +#include "xmm.h" + +// forward declaration +namespace rapidmix { class trainingData; } + +// original defined in xmmModelConfiguration.hpp +enum xmmRegressionEstimator { + xmmLikeliestRegression, + xmmMixtureRegression +}; + +// original defined in xmmGaussianDistribution.hpp +enum xmmCovarianceMode { + xmmFullCovariance, + xmmDiagonalCovariance +}; + +// original defined in xmmHmmParameters.hpp +enum xmmHmmTransitionMode { + xmmHmmLeftRightTransition, + xmmHmmErgodicTransition +}; + +// original defined in xmmHmmParameters.hpp +enum xmmHmmRegressionEstimator { + xmmHmmFullRegression, + xmmHmmWindowedRegression, + xmmHmmLikeliestRegression +}; + +// this is the optional argument of machineLearning<xmmWhateverTool>'s constructors +struct xmmToolConfig { + xmmToolConfig() : + gaussians(1), + relativeRegularization(0.01), + absoluteRegularization(0.01), + regressionEstimator(xmmMixtureRegression), + covarianceMode(xmmFullCovariance), + states(5), + hierarchical(true), + hmmTransitionMode(xmmHmmErgodicTransition), + hmmRegressionEstimator(xmmHmmFullRegression), + likelihoodWindow(5) {} + + // general parameters : + uint32_t gaussians; + float relativeRegularization; + float absoluteRegularization; + xmmRegressionEstimator regressionEstimator; + xmmCovarianceMode covarianceMode; + + // hmm specific : + uint32_t states; + bool hierarchical; + xmmHmmTransitionMode hmmTransitionMode; + xmmHmmRegressionEstimator hmmRegressionEstimator; + + // run-time parameter : + uint32_t likelihoodWindow; +}; + +//========================== template base class =============================// + +template <class SingleClassModel, class Model> +class xmmTool { +protected: + xmmTool(bool bimodal) { + model = Model(bimodal); + model.configuration.multithreading = xmm::MultithreadingMode::Sequential; + model.configuration.changed = true; + + set = xmm::TrainingSet(xmm::MemoryMode::OwnMemory, + bimodal + ? xmm::Multimodality::Bimodal + : xmm::Multimodality::Unimodal + ); + } + + virtual void preProcess(const std::vector<double> &inputVector) { + std::vector<float> fv(inputVector.begin(), inputVector.end()); + model.filter(fv); + } + +public: + virtual ~xmmTool() {} + + virtual bool train(const rapidmix::trainingData &newTrainingData); + + virtual bool reset() { + model.reset(); + return true; + } + + /** Get a JSON representation of the model in the form of a styled string */ + virtual std::string getJSON(); + /** Write a JSON model description to specified file path */ + virtual void writeJSON(const std::string &filepath); + /** configure empty model with string. See getJSON() */ + virtual bool putJSON(const std::string &jsonMessage); + /** read a JSON file at file path and build a modelSet from it */ + virtual bool readJSON(const std::string &filepath); + +protected: + Model model; + xmm::TrainingSet set; + + Json::Value toJSON(); + bool fromJSON(Json::Value &jm); +}; + +//======================= base class for GMM models ==========================// + +template <class SingleClassModel, class Model> +class xmmStaticTool : public xmmTool<SingleClassModel, Model> { +protected: + xmmStaticTool(xmmToolConfig cfg, bool bimodal) : + xmmTool<SingleClassModel, Model>(bimodal) { + xmm::Configuration<SingleClassModel>& mCfg = this->model.configuration; + + mCfg.gaussians.set(cfg.gaussians); + mCfg.relative_regularization.set(cfg.relativeRegularization); + mCfg.absolute_regularization.set(cfg.absoluteRegularization); + + xmm::MultiClassRegressionEstimator mcre; + switch (cfg.regressionEstimator) { + case xmmLikeliestRegression: + mcre = xmm::MultiClassRegressionEstimator::Likeliest; + case xmmMixtureRegression: + default: + mcre = xmm::MultiClassRegressionEstimator::Mixture; + break; + } + mCfg.multiClass_regression_estimator = mcre; + + xmm::GaussianDistribution::CovarianceMode gdcm; + switch (cfg.covarianceMode) { + case xmmFullCovariance: + gdcm = xmm::GaussianDistribution::CovarianceMode::Full; + break; + case xmmDiagonalCovariance: + default: + gdcm = xmm::GaussianDistribution::CovarianceMode::Diagonal; + break; + } + mCfg.covariance_mode.set(gdcm); + + mCfg.changed = true; + + this->model.shared_parameters->likelihood_window.set(cfg.likelihoodWindow); + } + +public: + virtual ~xmmStaticTool() {} +}; + +//======================= base class for HMM models ==========================// + +template <class SingleClassModel, class Model> +class xmmTemporalTool : public xmmStaticTool<SingleClassModel, Model> { +protected: + xmmTemporalTool(xmmToolConfig cfg, bool bimodal) : + xmmStaticTool<SingleClassModel, Model>(cfg, bimodal) { + xmm::Configuration<SingleClassModel>& mCfg = this->model.configuration; + + mCfg.states.set(cfg.states); + mCfg.hierarchical.set(cfg.hierarchical); + + xmm::HMM::TransitionMode htm; + switch (cfg.hmmTransitionMode) { + case xmmHmmLeftRightTransition: + htm = xmm::HMM::TransitionMode::LeftRight; + break; + case xmmHmmErgodicTransition: + default: + htm = xmm::HMM::TransitionMode::Ergodic; + break; + } + mCfg.transition_mode.set(htm); + + xmm::HMM::RegressionEstimator hre; + switch (cfg.hmmRegressionEstimator) { + case xmmHmmFullRegression: + hre = xmm::HMM::RegressionEstimator::Full; + break; + case xmmHmmWindowedRegression: + hre = xmm::HMM::RegressionEstimator::Windowed; + break; + case xmmHmmLikeliestRegression: + default: + hre = xmm::HMM::RegressionEstimator::Likeliest; + break; + } + mCfg.regression_estimator.set(hre); + + mCfg.changed = true; + } + +public: + virtual ~xmmTemporalTool() {} +}; + +//================== actual classes used in machineLearning.h ================// + +/** + * @brief Static classification using Gaussian Mixture Models + */ +// class xmmGmmTool : public xmmStaticTool<xmm::GMM, xmm::GMM> { +// class GMM : public xmmStaticTool<xmm::GMM, xmm::GMM> { +class rapidXmmGmm : public xmmStaticTool<xmm::GMM, xmm::GMM> { +public: + // xmmGmmTool(xmmToolConfig cfg = xmmToolConfig()) : + // GMM(xmmToolConfig cfg = xmmToolConfig()) : + rapidXmmGmm(xmmToolConfig cfg = xmmToolConfig()) : + xmmStaticTool<xmm::GMM, xmm::GMM>(cfg, false) {} + // ~xmmGmmTool() {} + // ~GMM() {} + ~rapidXmmGmm() {} + + std::vector<double> run(const std::vector<double>& inputVector); +}; + +/** + * @brief Static regression using Gaussian Mixture Models + */ +// class xmmGmrTool : public xmmStaticTool<xmm::GMM, xmm::GMM> { +// class GMR : public xmmStaticTool<xmm::GMM, xmm::GMM> { +class rapidXmmGmr : public xmmStaticTool<xmm::GMM, xmm::GMM> { +public: + // xmmGmrTool(xmmToolConfig cfg = xmmToolConfig()) : + // GMR(xmmToolConfig cfg = xmmToolConfig()) : + rapidXmmGmr(xmmToolConfig cfg = xmmToolConfig()) : + xmmStaticTool<xmm::GMM, xmm::GMM>(cfg, true) {} + // ~xmmGmrTool() {} + // ~GMR() {} + ~rapidXmmGmr() {} + + std::vector<double> run(const std::vector<double>& inputVector); +}; + +/** + * @brief Temporal classification using Hierarchical Hidden Markov Models + */ +// class xmmHmmTool : public xmmTemporalTool<xmm::HMM, xmm::HierarchicalHMM> { +// class HMM : public xmmTemporalTool<xmm::HMM, xmm::HierarchicalHMM> { +class rapidXmmHmm : public xmmTemporalTool<xmm::HMM, xmm::HierarchicalHMM> { +public: + // xmmHmmTool(xmmToolConfig cfg = xmmToolConfig()) : + // HMM(xmmToolConfig cfg = xmmToolConfig()) : + rapidXmmHmm(xmmToolConfig cfg = xmmToolConfig()) : + xmmTemporalTool<xmm::HMM, xmm::HierarchicalHMM>(cfg, false) {} + // ~xmmHmmTool() {} + // ~HMM() {} + ~rapidXmmHmm() {} + + std::vector<double> run(const std::vector<double>& inputVector); +}; + +/** + * @brief Temporal regression using Hierarchical Hidden Markov Models + */ +// class xmmHmrTool : public xmmTemporalTool<xmm::HMM, xmm::HierarchicalHMM> { +// class HMR : public xmmTemporalTool<xmm::HMM, xmm::HierarchicalHMM> { +class rapidXmmHmr : public xmmTemporalTool<xmm::HMM, xmm::HierarchicalHMM> { +public: + // xmmHmrTool(xmmToolConfig cfg = xmmToolConfig()) : + // HMR(xmmToolConfig cfg = xmmToolConfig()) : + rapidXmmHmr(xmmToolConfig cfg = xmmToolConfig()) : + xmmTemporalTool<xmm::HMM, xmm::HierarchicalHMM>(cfg, true) {} + // ~xmmHmrTool() {} + // ~HMR() {} + ~rapidXmmHmr() {} + + std::vector<double> run(const std::vector<double>& inputVector); +}; + +#endif /* _RAPID_XMM_TOOLS_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/trainingData.cpp b/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/trainingData.cpp new file mode 100644 index 0000000..ba209e7 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/trainingData.cpp @@ -0,0 +1,207 @@ +/** + * @file trainingData.cpp + * @author Michael Zbyszynski + * @date 2 Feb 2017 + * @copyright Copyright © 2017 Goldsmiths. All rights reserved. + */ + +#include "trainingData.h" + +namespace rapidmix { + + trainingData::trainingData () { + currentId = 0; + targetPhrase = 0; + }; + + uint32_t trainingData::assignCurrentId() { + uint32_t returnVal = currentId; + ++currentId; + return returnVal; + } + + std::vector<trainingData::phrase>::iterator trainingData::createNewPhrase(std::string label) { + phrase tempPhrase = { assignCurrentId(), label }; + trainingSet.push_back(tempPhrase); + std::vector<trainingData::phrase>::iterator it = --trainingSet.end(); + return it; + }; + + uint32_t trainingData::startRecording() { + phrase tempPhrase = { assignCurrentId(), std::to_string(tempPhrase.uniqueId) }; //TODO: Is this label helpful? -MZ + trainingSet.push_back(tempPhrase); + targetPhrase = int(trainingSet.size() - 1); + return tempPhrase.uniqueId; + }; + + uint32_t trainingData::startRecording(const std::string &label) { + phrase tempPhrase = { assignCurrentId(), label }; + trainingSet.push_back(tempPhrase); + targetPhrase = int(trainingSet.size() - 1); + return tempPhrase.uniqueId; + + }; + + uint32_t trainingData::addElement(const std::vector<double> &input, const std::vector<double> &output) { + element newElement; + newElement.uniqueId = assignCurrentId(); + newElement.input = input; + newElement.output = output; + newElement.timeStamp = NULL; + trainingSet[targetPhrase].elements.push_back(newElement); + return newElement.uniqueId; + } + + uint32_t trainingData::addElement(const std::vector<double> &input) { + element newElement; + newElement.uniqueId = assignCurrentId(); + newElement.input = input; + newElement.timeStamp = NULL; + trainingSet[targetPhrase].elements.push_back(newElement); + return newElement.uniqueId; + } + + + void trainingData::stopRecording() { + //TODO: This doesn't do much. -MZ + } + + uint32_t trainingData::recordSingleElement(const std::string &label, const std::vector<double> &input) { + startRecording(label); + int returnId = addElement(input); + stopRecording(); + return returnId; + }; + + uint32_t trainingData::recordSingleElement(const std::vector<double> &input, const std::vector<double> &output) { + startRecording(); + int returnId = addElement(input, output); + stopRecording(); + return returnId; + }; + + uint32_t trainingData::recordSingleElement(const std::string &label, const std::vector<double> &input, const std::vector<double> &output) { + startRecording(label); + int returnId = addElement(input, output); + stopRecording(); + return returnId; + }; + + std::vector<std::string> trainingData::getColumnNames() { + return trainingSet[targetPhrase].columnNames; + } + + void trainingData::setColumnNames(const std::vector<std::string> &column_names) { + trainingSet[targetPhrase].columnNames = column_names; + } + + Json::Value trainingData::parse2json() { + Json::Value root; + Json::Value metadata; + Json::Value trainingSetJSON; + + metadata["creator"] = "RAPID-MIX API C++"; + metadata["version"] = RAPIDMIX_VERSION; + + //Go through all the phrases + for (int i = 0; i < trainingSet.size(); ++i) { + Json::Value thisPhrase; + thisPhrase.append(trainingSet[i].uniqueId); + thisPhrase.append(trainingSet[i].label); + + Json::Value column_names; + for (int j = 0; j < trainingSet[i].columnNames.size(); ++j) { + column_names.append(trainingSet[i].columnNames[j]); + } + thisPhrase.append(column_names); + + Json::Value elements; + for (int j = 0; j < trainingSet[i].elements.size(); ++j) { + Json::Value singleElement; + + Json::Value elementInput; + for (int k = 0; k < trainingSet[i].elements[j].input.size(); ++k) { + elementInput.append(trainingSet[i].elements[j].input[k]); + } + singleElement.append(elementInput); + + Json::Value elementOutput; + for (int k = 0; k < trainingSet[i].elements[j].output.size(); ++k) { + elementOutput.append(trainingSet[i].elements[j].output[k]); + } + singleElement.append(elementOutput); + + singleElement.append(trainingSet[i].elements[j].timeStamp); + elements.append(singleElement); + } + thisPhrase.append(elements); + + trainingSetJSON.append(thisPhrase); + } + + root["metadata"] = metadata; + root["trainingSet"] = trainingSetJSON; + return root; + } + + std::string trainingData::getJSON() { + Json::Value root = parse2json(); + return root.toStyledString(); + } + + void trainingData::writeJSON(const std::string &filepath) { + Json::Value root = parse2json(); + std::ofstream jsonOut; + jsonOut.open (filepath); + Json::StyledStreamWriter writer; + writer.write(jsonOut, root); + jsonOut.close(); + + } + + void trainingData::json2trainingSet(const Json::Value &root) { + trainingSet = {}; + for (const Json::Value& jsonPhrase : root["trainingSet"]) { + + phrase tempPhrase = { jsonPhrase[0].asUInt(), jsonPhrase[1].asString() }; + + for (int i = 0; i < jsonPhrase[2].size(); ++i) { + tempPhrase.columnNames.push_back(jsonPhrase[2][i].asString()); + } + + for (int i = 0; i < jsonPhrase[3].size(); ++i) { + element tempElement; + for (int j = 0; j < jsonPhrase[3][i][0].size(); ++j) { + tempElement.input.push_back(jsonPhrase[3][i][0][j].asDouble()); + } + for (int j = 0; j < jsonPhrase[3][i][1].size(); ++j) { + tempElement.output.push_back(jsonPhrase[3][i][1][j].asDouble()); + } + tempElement.timeStamp = jsonPhrase[3][i][2].asDouble(); + + tempPhrase.elements.push_back(tempElement); + } + trainingSet.push_back(tempPhrase); + } + } + + bool trainingData::putJSON(const std::string &jsonMessage) { + Json::Value parsedFromString; + Json::Reader reader; + bool parsingSuccessful = reader.parse(jsonMessage, parsedFromString); + if (parsingSuccessful) + { + json2trainingSet(parsedFromString); + } + return parsingSuccessful; + } + + bool trainingData::readJSON(const std::string &filepath) { + Json::Value root; + std::ifstream file(filepath); + file >> root; + json2trainingSet(root); + return true; //TODO: check something first + } + +} diff --git a/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/trainingData.h b/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/trainingData.h new file mode 100644 index 0000000..67f4a67 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/rapid-mix/machineLearning/trainingData.h @@ -0,0 +1,114 @@ +/** + * @file trainingData.h + * @author Michael Zbyszynski + * @date 2 Feb 2017 + * @copyright + * Copyright © 2017 Goldsmiths. All rights reserved. + * + * @ingroup machinelearning + */ + +#ifndef trainingData_h +#define trainingData_h + +#include <vector> +#include <string> +#include <unordered_map> + +#include "../rapidmix.h" +#include "json.h" + +namespace rapidmix { + + /** This is used by both NN and KNN models for training */ + class trainingData { + + public: + + trainingData(); + + struct element{ + uint32_t uniqueId; //MZ: Does this scope of this id need to extend beyond this instantiation? + std::vector<double> input; + std::vector<double> output; + double timeStamp; + }; + + struct phrase { + uint32_t uniqueId; + std::string label; //TODO: Need to work this with templates + std::vector<std::string> columnNames; //equal to the number of inputs + std::vector<element> elements; + + + //TODO: This is just a design idea right now. + void addElement (const std::vector<double> &input, const std::vector<double> &output) + { + element tempElement; +// tempElement.uniqueId = assignCurrentId(); //TODO: how to do this? Do we need this? + tempElement.input = input; + tempElement.output = output; + tempElement.timeStamp = NULL; + this->elements.push_back(tempElement); + } + }; + + std::vector<phrase> trainingSet; + + //TODO: Deleting phrases (last or by label) + //Design ideas to make phrase building stateless: + std::vector<phrase>::iterator createNewPhrase(); //??? Do we need this? + std::vector<phrase>::iterator createNewPhrase(std::string label); + + /** Create a new phrase that can be recorded into. Returns phrase id */ + uint32_t startRecording(); //FIXME: this should go away. -MZ + + /** Create new phrase, with a label, that can be recorded into. Returns phrase id */ + uint32_t startRecording(const std::string &label); + + /** Add an element with input and output to the phrase that is recording, + or to the default phrase if recording is stopped. Returns phrase id. */ + uint32_t addElement(const std::vector<double> &input, const std::vector<double> &output); + + /** Add an element with just input to the phrase that is recording, + or to the default phrase if recording is stopped. Returns phrase id. */ + uint32_t addElement(const std::vector<double> &input); + + void stopRecording(); + + /** Create a phrase with a single element that has a label and input. Returns phrase id. */ + uint32_t recordSingleElement(const std::string &label, const std::vector<double> &input); + + /** Create a phrase with a single element that has input, and output. Returns phrase id. */ + uint32_t recordSingleElement(const std::vector<double> &input, const std::vector<double> &output); + + /** Create a phrase with a single element that has a label, input, and output. Returns phrase id. */ + uint32_t recordSingleElement(const std::string &label, const std::vector<double> &input, const std::vector<double> &output); + + std::vector<std::string> getColumnNames(); + void setColumnNames(const std::vector<std::string> &columnNames); + + /** Get a JSON representation of the data set in the form of a styled string */ + std::string getJSON(); + /** Write a JSON version of the training set to specified file path */ + void writeJSON(const std::string &filepath); + /** populate a data set with string. See getJSON() */ + bool putJSON(const std::string &jsonMessage); + /** read a JSON file at file path and build a training set from it */ + bool readJSON(const std::string &filepath); + + private: + int targetPhrase; + uint32_t currentId; + + //* Returns and increments current id */ + uint32_t assignCurrentId(); + + Json::Value parse2json(); + void json2trainingSet(const Json::Value &newTrainingData); + + }; + +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/rapid-mix/rapidmix.h b/examples/ofx/Bitalino_rapidmix/rapid-mix/rapidmix.h new file mode 100644 index 0000000..fa3e13e --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/rapid-mix/rapidmix.h @@ -0,0 +1,48 @@ +/** + * @file rapidmix.h + * @author Michael Zbyszynski + * @date 12 Jan 2017 + * + * @copyright + * Copyright © 2017 Goldsmiths. All rights reserved. + */ + +/** + * @mainpage RAPID-MIX API + * + * @section Introduction + * + * Hello, API ! <br> + * All the classes, functions and structs documented here belong to the + * <code>rapidmix</code> namespace. + * + * @section Examples + * @subsection Simple classification + * TODO + */ + +///////////////////////////////////////////////////////////////////////////// +// ______ _ _ ___ ____ ___ ______ _____ // +// | ___ \ (_) | | | \/ (_) / _ \ | ___ \_ _| // +// | |_/ /__ _ _ __ _ __| |______| . . |___ __ / /_\ \| |_/ / | | // +// | // _` | '_ \| |/ _` |______| |\/| | \ \/ / | _ || __/ | | // +// | |\ \ (_| | |_) | | (_| | | | | | |> < | | | || | _| |_ // +// \_| \_\__,_| .__/|_|\__,_| \_| |_/_/_/\_\ \_| |_/\_| \___/ // +// | | // +// |_| // +///////////////////////////////////////////////////////////////////////////// + +#ifndef rapidmix_h +#define rapidmix_h + +#define RAPIDMIX_VERSION_MAJOR 2 +#define RAPIDMIX_VERSION_MINOR 2 +#define RAPIDMIX_VERSION_PATCH 0 +#define RAPIDMIX_VERSION "2.2.0" +#define RAPIDMIX_REVISION "27-SEPTEMBER-2017" + +#include "machineLearning/machineLearning.h" +#include "machineLearning/trainingData.h" +#include "signalProcessing/signalProcessing.h" + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/rapid-mix/signalProcessing/rapidPiPoTools/rapidPiPoHost.cpp b/examples/ofx/Bitalino_rapidmix/rapid-mix/signalProcessing/rapidPiPoTools/rapidPiPoHost.cpp new file mode 100644 index 0000000..6663da4 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/rapid-mix/signalProcessing/rapidPiPoTools/rapidPiPoHost.cpp @@ -0,0 +1,764 @@ +#include "rapidPiPoHost.h" +#include <iostream> +#include <fstream> + +//=========================== H O S T === U T I L S ==========================// + +/* +static const unsigned int maxWordLen = 256; + +static bool getPiPoInstanceAndAttrName(const char *attrName, + char *instanceName, + char *pipoAttrName) +{ + const char *dot = std::strrchr(attrName, '.'); + + if (dot != NULL) + { + long pipoAttrNameLen = dot - attrName; + std::strcpy(pipoAttrName, dot + 1); + + if (pipoAttrNameLen > maxWordLen) + { + pipoAttrNameLen = maxWordLen; + } + + std::strncpy(instanceName, attrName, pipoAttrNameLen); + instanceName[pipoAttrNameLen] = '\0'; + + return true; + } + + return false; +} +//*/ + + +static void fromPiPoStreamAttributes(PiPoStreamAttributes &src, + pipoStreamAttributes &dst) +{ + unsigned int numCols = src.dims[0]; + unsigned int numLabels = src.numLabels; + + if (numLabels > PIPO_MAX_LABELS) { + numLabels = PIPO_MAX_LABELS; + } + + if (numLabels > numCols) { + numLabels = numCols; + } + + dst.hasTimeTags = src.hasTimeTags; + + if (src.rate <= MIN_PIPO_SAMPLERATE) { + dst.rate = MIN_PIPO_SAMPLERATE; + } else if (src.rate >= MAX_PIPO_SAMPLERATE) { + dst.rate = MAX_PIPO_SAMPLERATE; + } else { + dst.rate = src.rate; + } + + dst.rate = src.rate; + dst.offset = src.offset; + dst.width = src.dims[0]; + dst.height = src.dims[1]; + + dst.labels = std::vector<std::string>(); + + for (unsigned int i = 0; i < numLabels; ++i) + { + dst.labels.push_back(std::string(src.labels[i])); + } + + dst.hasVarSize = src.hasVarSize; + dst.domain = src.domain; + dst.maxFrames = src.maxFrames; +} + + +static void toPiPoStreamAttributes(pipoStreamAttributes &src, + PiPoStreamAttributes &dst) +{ + const char *labs[src.labels.size()]; + + for (unsigned int i = 0; i < src.labels.size(); ++i) + { + labs[i] = src.labels[i].c_str(); + } + + dst = PiPoStreamAttributes( + src.hasTimeTags, + src.rate, + src.offset, + src.width, + src.height, + &labs[0], + src.hasVarSize, + src.domain, + src.maxFrames + ); +} + +//========================= H O S T === M E T H O D S ========================// + +PiPoHost::PiPoHost() : +inputStreamAttrs(PIPO_MAX_LABELS), +outputStreamAttrs(PIPO_MAX_LABELS) +{ + PiPoCollection::init(); + this->out = new PiPoOut(this); + this->graph = nullptr; +} + +PiPoHost::~PiPoHost() +{ + if (this->graph != nullptr) + { + delete this->graph; + } + + delete this->out; +} + +bool +PiPoHost::setGraph(std::string name) +{ + if (this->graph != nullptr) + { + delete this->graph; + } + + this->graph = PiPoCollection::create(name); + + if (this->graph != NULL) + { + this->graphName = name; + this->graph->setReceiver((PiPo *)this->out); + return true; + } + + this->graph = nullptr; + this->graphName = "undefined"; + return false; +} + +void +PiPoHost::clearGraph() +{ + if (this->graph != nullptr) + { + delete this->graph; + this->graph = nullptr; + } +} + + +void +PiPoHost::onNewFrameOut(double time, std::vector<PiPoValue> &frame) +{ + std::cout << time << std::endl; + std::cout << "please override this method" << std::endl; +} + +std::vector<PiPoValue> +PiPoHost::getLastFrameOut() +{ + return this->out->getLastFrame(); +} + + + +int +PiPoHost::setInputStreamAttributes(pipoStreamAttributes &sa, bool propagate) +{ + toPiPoStreamAttributes(sa, inputStreamAttrs); + + if (propagate) + { + return this->propagateInputStreamAttributes(); + } + + return 0; +} + +pipoStreamAttributes +PiPoHost::getOutputStreamAttributes() +{ + pipoStreamAttributes sa; + fromPiPoStreamAttributes(this->outputStreamAttrs, sa); + return sa; +} + +int +PiPoHost::frames(double time, double weight, PiPoValue *values, unsigned int size, + unsigned int num) +{ + return this->graph->frames(time, weight, values, size, num); +} + + + +// bool +// setAttr(const std::string &attrName, bool value) +// { + +// } + +// bool +// setAttr(const std::string &attrName, int value) +// { + +// } + +bool +PiPoHost::setAttr(const std::string &attrName, double value) +{ + PiPo::Attr *attr = this->graph->getAttr(attrName.c_str()); + + if (attr != NULL) + { + int iAttr = attr->getIndex(); + return this->graph->setAttr(iAttr, value); + } + + return false; +} + +bool +PiPoHost::setAttr(const std::string &attrName, const std::vector<double> &values) +{ + PiPo::Attr *attr = this->graph->getAttr(attrName.c_str()); + + if (attr != NULL) + { + int iAttr = attr->getIndex(); + double vals[values.size()]; + unsigned int i = 0; + + for (auto &value : values) + { + vals[i] = value; + i++; + } + + return this->graph->setAttr(iAttr, &vals[0], static_cast<unsigned int>(values.size())); + } + + return false; +} + +bool +PiPoHost::setAttr(const std::string &attrName, const std::string &value) // for enums +{ + PiPo::Attr *attr = this->graph->getAttr(attrName.c_str()); + + if (attr != NULL) + { + // int iAttr = attr->getIndex(); + PiPo::Type type = attr->getType(); + + if (type == PiPo::Type::Enum) + { + std::vector<const char *> *list = attr->getEnumList(); + + for (int i = 0; i < list->size(); i++) + { + if (strcmp(list->at(i), value.c_str()) == 0) + { + attr->set(0, i); + return true; + } + } + } + } + + return false; +} + +std::vector<std::string> +PiPoHost::getAttrNames() +{ + std::vector<std::string> res; + + for (unsigned int i = 0; i < this->graph->getNumAttrs(); ++i) + { + res.push_back(this->graph->getAttr(i)->getName()); + } + + return res; +} + +double +PiPoHost::getDoubleAttr(const std::string &attrName) +{ + PiPo::Attr *attr = this->graph->getAttr(attrName.c_str()); + + if (attr != NULL) { + // int iAttr = attr->getIndex(); + PiPo::Type type = attr->getType(); + + if (type == PiPo::Type::Double) { + return attr->getDbl(0); + } + } + + return 0; +} + +std::vector<double> +PiPoHost::getDoubleArrayAttr(const std::string &attrName) +{ + std::vector<double> res; + PiPo::Attr *attr = this->graph->getAttr(attrName.c_str()); + + if (attr != NULL) { + // int iAttr = attr->getIndex(); + PiPo::Type type = attr->getType(); + + if (type == PiPo::Type::Double) { + for (int i = 0; i < attr->getSize(); ++i) { + res.push_back(attr->getDbl(i)); + } + } + } + + return res; +} + +std::string +PiPoHost::getEnumAttr(const std::string &attrName) +{ + PiPo::Attr *attr = this->graph->getAttr(attrName.c_str()); + + if (attr != NULL) { + // int iAttr = attr->getIndex(); + PiPo::Type type = attr->getType(); + + if (type == PiPo::Type::Enum) { + return attr->getStr(0); + } + } + + return ""; +} + +//============================= JSON FORMATTING ==============================// + +std::string +PiPoHost::getJSON() +{ + Json::Value result = toJSON(); + return result.toStyledString(); +} + +void +PiPoHost::writeJSON(const std::string &filepath) +{ + Json::Value root = toJSON(); + std::ofstream jsonOut; + jsonOut.open (filepath); + Json::StyledStreamWriter writer; + writer.write(jsonOut, root); + jsonOut.close(); +} + +bool +PiPoHost::putJSON(const std::string &jsonMessage) +{ + Json::Value parsedFromString; + Json::Reader reader; + bool parsingSuccessful = reader.parse(jsonMessage, parsedFromString); + return (parsingSuccessful && fromJSON(parsedFromString)); +} + +bool +PiPoHost::readJSON(const std::string &filepath) +{ + Json::Value root; + std::ifstream file(filepath); + file >> root; + return fromJSON(root); +} + +//======================== PROTECTED HOST METHODS ============================// + +Json::Value +PiPoHost::toJSON() +{ + Json::Value root; + Json::Value metadata; + Json::Value pipodata; + + metadata["creator"] = "RAPID-MIX API";// C++"; + metadata["version"] = "v0.1.1"; //TODO: This should be a macro someplace + metadata["family"] = "pipo"; + + root["metadata"] = metadata; + + pipodata["description"] = this->graphName; + + Json::Value inputStream; + inputStream["hasTimeTags"] = inputStreamAttrs.hasTimeTags; + inputStream["rate"] = inputStreamAttrs.rate; + inputStream["offset"] = inputStreamAttrs.offset; + inputStream["width"] = inputStreamAttrs.dims[0]; + inputStream["height"] = inputStreamAttrs.dims[1]; + inputStream["labels"] = inputStreamAttrs.labels; + inputStream["hasVarSize"] = inputStreamAttrs.hasVarSize; + inputStream["domain"] = inputStreamAttrs.domain; + inputStream["maxFrames"] = inputStreamAttrs.maxFrames; + + Json::Value outputStream; + outputStream["hasTimeTags"] = outputStreamAttrs.hasTimeTags; + outputStream["rate"] = outputStreamAttrs.rate; + outputStream["offset"] = outputStreamAttrs.offset; + outputStream["width"] = outputStreamAttrs.dims[0]; + outputStream["height"] = outputStreamAttrs.dims[1]; + outputStream["labels"] = outputStreamAttrs.labels; + outputStream["hasVarSize"] = outputStreamAttrs.hasVarSize; + outputStream["domain"] = outputStreamAttrs.domain; + outputStream["maxFrames"] = outputStreamAttrs.maxFrames; + + Json::Value streams; + streams["input"] = inputStream; + streams["output"] = outputStream; + + pipodata["streamAttributes"] = streams; + + Json::Value params; + int n = this->graph->getNumAttrs(); + params.resize(static_cast<Json::ArrayIndex>(n)); + + for (unsigned int i = 0; i < n; ++i) + { + Json::Value param; + PiPo::Attr *a = this->graph->getAttr(i); + param["name"] = a->getName(); + param["value"] = a->getDbl(0); + params[i] = param; + } + + pipodata["parameters"] = params; + + root["pipodata"] = pipodata; + + return root; +} + +bool +PiPoHost::fromJSON(Json::Value &jv) +{ + if (jv["metadata"]["family"].asString().compare("pipo") == 0 && + jv["pipodata"].size() > 0) { + + this->setGraph(jv["pipodata"]["description"].asString()); + + Json::Value inputStream = jv["pipodata"]["streamAttributes"]["input"]; + // setInputStreamAttributes( + // inputStream["hasTimeTags"].getDbl()//, + // //... + // ); + return true; + } + + return false; +} + +//========================= PRIVATE HOST METHODS =============================// + +int +PiPoHost::propagateInputStreamAttributes() +{ + if (this->graph != nullptr) + { + return this->graph->streamAttributes(this->inputStreamAttrs.hasTimeTags, + this->inputStreamAttrs.rate, + this->inputStreamAttrs.offset, + this->inputStreamAttrs.dims[0], + this->inputStreamAttrs.dims[1], + this->inputStreamAttrs.labels, + this->inputStreamAttrs.hasVarSize, + this->inputStreamAttrs.domain, + this->inputStreamAttrs.maxFrames); + } + + return 0; +} + +void +PiPoHost::setOutputAttributes(bool hasTimeTags, double rate, double offset, + unsigned int width, unsigned int height, + const char **labels, bool hasVarSize, + double domain, unsigned int maxFrames) { + if (labels != NULL) { + int numLabels = width; + + if (numLabels > PIPO_MAX_LABELS) { + numLabels = PIPO_MAX_LABELS; + } + + for (unsigned int i = 0; i < numLabels; i++) { + try { + this->outputStreamAttrs.labels[i] = labels[i]; + } catch(std::exception e) { + this->outputStreamAttrs.labels[i] = "unnamed"; + } + } + + this->outputStreamAttrs.numLabels = numLabels; + } else { + this->outputStreamAttrs.numLabels = 0; + } + + this->outputStreamAttrs.hasTimeTags = hasTimeTags; + this->outputStreamAttrs.rate = rate; + this->outputStreamAttrs.offset = offset; + this->outputStreamAttrs.dims[0] = width; + this->outputStreamAttrs.dims[1] = height; + this->outputStreamAttrs.hasVarSize = hasVarSize; + this->outputStreamAttrs.domain = domain; + this->outputStreamAttrs.maxFrames = maxFrames; +} + + + +// void +// PiPoHost::streamAttributesChanged(PiPo *pipo, PiPo::Attr *attr) { +// this->propagateInputAttributes(); +// } + +// void +// PiPoHost::signalError(PiPo *pipo, std::string errorMsg) { +// // todo +// } + +// void +// PiPoHost::signalWarning(PiPo *pipo, std::string warningMsg) { +// // todo +// } + +//--------------------- INPUT STREAM ATTRIBUTES SETTERS ----------------------// + +/* +void +PiPoHost::setInputHasTimeTags(bool hasTimeTags, bool propagate) { + this->inputStreamAttrs.hasTimeTags = hasTimeTags; + + if (propagate) { + this->propagateInputAttributes(); + } +} + +#define MIN_PIPO_SAMPLERATE (1.0 / 31536000000.0) // once a year +#define MAX_PIPO_SAMPLERATE (96000000000.0) + +void +PiPoHost::setInputFrameRate(double rate, bool propagate) { + if (rate <= MIN_PIPO_SAMPLERATE) { + this->inputStreamAttrs.rate = MIN_PIPO_SAMPLERATE; + } else if (rate >= MAX_PIPO_SAMPLERATE) { + this->inputStreamAttrs.rate = MAX_PIPO_SAMPLERATE; + } else { + this->inputStreamAttrs.rate = rate; + } + + if (propagate) { + this->propagateInputAttributes(); + } +} + +void +PiPoHost::setInputFrameOffset(double offset, bool propagate) { + this->inputStreamAttrs.offset = offset; + + if (propagate) { + this->propagateInputAttributes(); + } +} + +void +PiPoHost::setInputDims(int width, int height, bool propagate) { + this->inputStreamAttrs.dims[0] = width; + this->inputStreamAttrs.dims[1] = height; + + if (propagate) { + this->propagateInputAttributes(); + } +} + +void +PiPoHost::setInputLabels(const std::vector<std::string> &labels, bool propagate) { + const char *labs[labels.size()]; + + for (unsigned int i = 0; i < labels.size(); ++i) { + labs[i] = labels[i].c_str(); + } + + this->inputStreamAttrs.labels = &labs[0]; + + if (propagate) { + this->propagateInputAttributes(); + } +} + +void +PiPoHost::setInputHasVarSize(bool hasVarSize, bool propagate) { + this->inputStreamAttrs.hasVarSize = hasVarSize; + + if (propagate) { + this->propagateInputAttributes(); + } +} + +void +PiPoHost::setInputDomain(double domain, bool propagate) { + this->inputStreamAttrs.domain = domain; + + if (propagate) { + this->propagateInputAttributes(); + } +} + +void +PiPoHost::setInputMaxFrames(int maxFrames, bool propagate) { + this->inputStreamAttrs.maxFrames = maxFrames; + + if (propagate) { + this->propagateInputAttributes(); + } +} +//*/ + +//--------------------- INPUT STREAM ATTRIBUTES GETTERS ----------------------// + +/* +bool +PiPoHost::getInputHasTimeTags() { + return this->inputStreamAttrs.hasTimeTags; +} + +double +PiPoHost::getInputFrameRate() { + return this->inputStreamAttrs.rate; +} + +double +PiPoHost::getInputFrameOffset() { + return this->inputStreamAttrs.offset; +} + +void +PiPoHost::getInputDims(int &width, int &height) { + width = this->inputStreamAttrs.dims[0]; + height = this->inputStreamAttrs.dims[1]; +} + +void +PiPoHost::getInputLabels(std::vector<std::string> &labels) { + //for (unsigned int i = 0; i < ) +} + +bool +PiPoHost::getInputHasVarSize() { + return this->inputStreamAttrs.hasVarSize; +} + +double +PiPoHost::getInputDomain() { + return this->inputStreamAttrs.domain; +} + +int +PiPoHost::getInputMaxFrames() { + return this->inputStreamAttrs.maxFrames; +} +//*/ + +//--------------------- OUTPUT STREAM ATTRIBUTES GETTERS ---------------------// + +// void +// PiPoHost::setOutputAttributes(bool hasTimeTags, double rate, double offset, +// unsigned int width, unsigned int height, +// const char **labels, bool hasVarSize, +// double domain, unsigned int maxFrames) { +// if (labels != NULL) { +// int numLabels = width; + +// if (numLabels > PIPO_MAX_LABELS) { +// numLabels = PIPO_MAX_LABELS; +// } + +// for (unsigned int i = 0; i < numLabels; i++) { +// try { +// this->outputStreamAttrs.labels[i] = labels[i]; +// } catch(std::exception e) { +// this->outputStreamAttrs.labels[i] = "unnamed"; +// } +// } + +// this->outputStreamAttrs.numLabels = numLabels; +// } else { +// this->outputStreamAttrs.numLabels = 0; +// } + +// this->outputStreamAttrs.hasTimeTags = hasTimeTags; +// this->outputStreamAttrs.rate = rate; +// this->outputStreamAttrs.offset = offset; +// this->outputStreamAttrs.dims[0] = width; +// this->outputStreamAttrs.dims[1] = height; +// this->outputStreamAttrs.hasVarSize = hasVarSize; +// this->outputStreamAttrs.domain = domain; +// this->outputStreamAttrs.maxFrames = maxFrames; +// } + +/* +bool +PiPoHost::getOutputHasTimeTags() { + return this->outputStreamAttrs.hasTimeTags; +} + +double +PiPoHost::getOutputFrameRate() { + return this->outputStreamAttrs.rate; +} + +double +PiPoHost::getOutputFrameOffset() { + return this->outputStreamAttrs.offset; +} + +void +PiPoHost::getOutputDims(int &width, int &height) { + width = this->outputStreamAttrs.dims[0]; + height = this->outputStreamAttrs.dims[1]; +} + +void +PiPoHost::getOutputLabels(std::vector<std::string> &labels) { + labels.clear(); + + for (unsigned int i = 0; this->outputStreamAttrs.numLabels; ++i) { + + if (this->outputStreamAttrs.labels[i] != NULL) { + labels.push_back(std::string(this->outputStreamAttrs.labels[i])); + } else { + labels.push_back("unnamed"); + } + } +} + +bool +PiPoHost::getOutputHasVarSize() { + return this->outputStreamAttrs.hasVarSize; +} + +double +PiPoHost::getOutputDomain() { + return this->outputStreamAttrs.domain; +} + +int +PiPoHost::getOutputMaxFrames() { + return this->outputStreamAttrs.maxFrames; +} +//*/ diff --git a/examples/ofx/Bitalino_rapidmix/rapid-mix/signalProcessing/rapidPiPoTools/rapidPiPoHost.h b/examples/ofx/Bitalino_rapidmix/rapid-mix/signalProcessing/rapidPiPoTools/rapidPiPoHost.h new file mode 100644 index 0000000..b898da3 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/rapid-mix/signalProcessing/rapidPiPoTools/rapidPiPoHost.h @@ -0,0 +1,249 @@ +#ifndef _RAPID_PIPO_HOST_H_ +#define _RAPID_PIPO_HOST_H_ + +#include "PiPo.h" +#include "PiPoHost.h" +#include "PiPoCollection.h" + +//#ifdef EXTERNAL_JSONCPP_PATH +#define EXTERNAL_JSONCPP_PATH "json.h" +#include EXTERNAL_JSONCPP_PATH +//#endif /* EXTERNAL_JSONCPP_PATH */ + +#define MIN_PIPO_SAMPLERATE (1.0 / 31536000000.0) /* once a year */ +#define MAX_PIPO_SAMPLERATE (96000000000.0) + +#define PIPO_OUT_RING_SIZE 2 + +struct pipoStreamAttributes { + pipoStreamAttributes() : // default parameters suited for audio + hasTimeTags(false), + rate(MIN_PIPO_SAMPLERATE), + offset(0), + width(1), + height(1), + labels({ "" }), + hasVarSize(false), + domain(0), + maxFrames(1) {} + + bool hasTimeTags; + double rate; + double offset; + unsigned int width; + unsigned int height; + std::vector<std::string> labels; + bool hasVarSize; + double domain; + unsigned int maxFrames; +}; + + +//class PiPoObserver; +class PiPoOut; + +//================================ H O S T ===================================// + +class PiPoHost : public PiPo::Parent { + friend class PiPoOut; + +private: + PiPo *graph; + std::string graphName; + PiPoOut *out; + // PiPoObserver *obs; + PiPoStreamAttributes inputStreamAttrs; + PiPoStreamAttributes outputStreamAttrs; + +public: + // PiPoHost(PiPoObserver *obs); + PiPoHost(); + ~PiPoHost(); + + // PiPoObserver *getObserver(); + + virtual bool setGraph(std::string name); + virtual void clearGraph(); + + // override this method when inheriting !!! + virtual void onNewFrameOut(double time, std::vector<PiPoValue> &frame); + virtual std::vector<PiPoValue> getLastFrameOut(); + + virtual int setInputStreamAttributes(pipoStreamAttributes &sa, bool propagate = true); + virtual pipoStreamAttributes getOutputStreamAttributes(); + + virtual int frames(double time, double weight, PiPoValue *values, unsigned int size, + unsigned int num); + + // virtual bool setAttr(const std::string &attrName, bool value); + // virtual bool setAttr(const std::string &attrName, int value); + virtual bool setAttr(const std::string &attrName, double value); + virtual bool setAttr(const std::string &attrName, const std::vector<double> &values); + virtual bool setAttr(const std::string &attrName, const std::string &value); // for enums + + // virtual const std::vector<std::string>& getAttrNames(); + // virtual bool isBoolAttr(const std::string &attrName); + // virtual bool isEnumAttr(const std::string &attrName); + // virtual bool isIntAttr(const std::string &attrName); + // virtual bool isIntArrayAttr(const std::string &attrName); + // virtual bool isFloatAttr(const std::string &attrName); + // virtual bool isFloatArrayAttr(const std::string &attrName); + // virtual bool isStringAttr(const std::string &attrName); + + virtual std::vector<std::string> getAttrNames(); + + virtual double getDoubleAttr(const std::string &attrName); + virtual std::vector<double> getDoubleArrayAttr(const std::string &attrName); + virtual std::string getEnumAttr(const std::string &attrName); + + /** Get a JSON representation of the model in the form of a styled string */ + virtual std::string getJSON(); + /** Write a JSON model description to specified file path */ + virtual void writeJSON(const std::string &filepath); + /** configure empty model with string. See getJSON() */ + virtual bool putJSON(const std::string &jsonMessage); + /** read a JSON file at file path and build a modelSet from it */ + virtual bool readJSON(const std::string &filepath); + + + // int streamAttributes(bool hasTimeTags, double rate, double offset, + // unsigned int width, unsigned int height, + // const std::vector<std::string> &labels, + // bool hasVarSize, double domain, unsigned int maxFrames, + // bool propagate = true); + + // void propagateInputAttributes(); + + + // void streamAttributesChanged(PiPo *pipo, PiPo::Attr *attr); + // void signalError(PiPo *pipo, std::string errorMsg); + // void signalWarning(PiPo *pipo, std::string warningMsg); + + /* + void setInputHasTimeTags(bool hasTimeTags, bool propagate = true); + void setInputFrameRate(double rate, bool propagate = true); + void setInputFrameOffset(double offset, bool propagate = true); + void setInputDims(int width, int height, bool propagate = true); + void setInputLabels(const std::vector<std::string> &labels, bool propagate = true); + void setInputHasVarSize(bool hasVarSize, bool propagate = true); + void setInputDomain(double domain, bool propagate = true); + void setInputMaxFrames(int maxFrames, bool propagate = true); + + bool getInputHasTimeTags(); + double getInputFrameRate(); + double getInputFrameOffset(); + void getInputDims(int &width, int &height); + void getInputLabels(std::vector<std::string> &labels); + bool getInputHasVarSize(); + double getInputDomain(); + int getInputMaxFrames(); + + bool getOutputHasTimeTags(); + double getOutputFrameRate(); + double getOutputFrameOffset(); + void getOutputDims(int &width, int &height); + void getOutputLabels(std::vector<std::string> &labels); + bool getOutputHasVarSize(); + double getOutputDomain(); + int getOutputMaxFrames(); + + // void setPiPoParam(PiPoParam *param); + //*/ +protected: + Json::Value toJSON(); + bool fromJSON(Json::Value &jv); + +private: + int propagateInputStreamAttributes(); + void setOutputAttributes(bool hasTimeTags, double rate, double offset, + unsigned int width, unsigned int height, + const char **labels, bool hasVarSize, + double domain, unsigned int maxFrames); + +}; + +//================================= PiPoOut ==================================// + + class PiPoOut : public PiPo { +private: + PiPoHost *host; + std::atomic<int> writeIndex, readIndex; + std::vector<std::vector<PiPoValue>> ringBuffer; + // std::function<void(std::vector<PiPoValue>, PiPoObserver *rpo)> frameCallback; + // std::function<void(std::vector<PiPoValue>)> simpleFrameCallback; + +public: + PiPoOut(PiPoHost *host) : + PiPo((PiPo::Parent *)host) { + this->host = host; + writeIndex = 0; + readIndex = 0; + ringBuffer.resize(PIPO_OUT_RING_SIZE); + } + + ~PiPoOut() {} + + int streamAttributes(bool hasTimeTags, + double rate, double offset, + unsigned int width, unsigned int height, + const char **labels, bool hasVarSize, + double domain, unsigned int maxFrames) { + + this->host->setOutputAttributes(hasTimeTags, rate, offset, width, height, + labels, hasVarSize, domain, maxFrames); + + for (int i = 0; i < PIPO_OUT_RING_SIZE; ++i) { + ringBuffer[i].resize(width * height); + } + + return 0; + } + + int frames(double time, double weight, float *values, + unsigned int size, unsigned int num) { + + if (num > 0) { + for (int i = 0; i < num; ++i) { + + for (int j = 0; j < size; ++j) { + ringBuffer[writeIndex][j] = values[i * size + j]; + } + + // atomic swap ? + writeIndex = 1 - writeIndex; + readIndex = 1 - writeIndex; + + this->host->onNewFrameOut(time, ringBuffer[readIndex]); + + if (writeIndex + 1 == PIPO_OUT_RING_SIZE) { + writeIndex = 0; + } else { + writeIndex++; + } + } + } + + return 0; + } + + //void setFrameCallback(std::function<void(std::vector<PiPoValue>, + // PiPoObserver *obs)> f) { + // frameCallback = f; + //} + + // void setSimpleFrameCallback(std::function<void(std::vector<PiPoValue>)> f) { + // simpleFrameCallback = f; + // } + + std::vector<PiPoValue> getLastFrame() { + std::vector<PiPoValue> f; + + if (readIndex > -1) { + f = ringBuffer[readIndex]; + } + + return f; + } +}; + +#endif /* _RAPID_PIPO_HOST_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/rapid-mix/signalProcessing/rapidPiPoTools/rapidPiPoTools.h b/examples/ofx/Bitalino_rapidmix/rapid-mix/signalProcessing/rapidPiPoTools/rapidPiPoTools.h new file mode 100644 index 0000000..d9a2e0e --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/rapid-mix/signalProcessing/rapidPiPoTools/rapidPiPoTools.h @@ -0,0 +1,9 @@ +#ifndef _RAPID_PIPO_TOOLS_H_ +#define _RAPID_PIPO_TOOLS_H_ + +#include "rapidPiPoHost.h" + +typedef PiPoHost pipoHost; +typedef pipoStreamAttributes pipoStreamAttributes; + +# endif /* _RAPID_PIPO_TOOLS_H_ */ diff --git a/examples/ofx/Bitalino_rapidmix/rapid-mix/signalProcessing/signalProcessing.h b/examples/ofx/Bitalino_rapidmix/rapid-mix/signalProcessing/signalProcessing.h new file mode 100644 index 0000000..4bbbdbd --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/rapid-mix/signalProcessing/signalProcessing.h @@ -0,0 +1,36 @@ +/** + * @file signalProcessing.h + * @author Michael Zbyszynski + * @date 6 Feb 2017 + * @copyright + * Copyright © 2017 Goldsmiths. All rights reserved. + * + * @ingroup signalprocessing + */ + +#ifndef signalProcessing_h +#define signalProcessing_h + +#include "rapidMix.h" +//#include "maximilian.h" +//#include "maxim.h" +#include "rapidStream.h" +#include "rapidPiPoTools.h" + +namespace rapidmix { + + /* + * Wrapper for signalProcessing modules, currently a collection of typedefs + */ + + //typedef maxiFFT FFT; + //typedef maxiMFCC MFCC; + typedef rapidStream<double> rapidStream; + + typedef pipoHost pipoHost; + typedef pipoStreamAttributes pipoStreamAttributes; + + +} + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/src/BitalinoThread.h b/examples/ofx/Bitalino_rapidmix/src/BitalinoThread.h new file mode 100644 index 0000000..c014249 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/src/BitalinoThread.h @@ -0,0 +1,145 @@ +// +// BitalinoThread.h +// Bitalino +// +// Created by James on 19/11/2017. +// +// + +#ifndef BitalinoThread_h +#define BitalinoThread_h + +#include <stdio.h> +#include "ThreadedProcess.h" +#include "RingBuffer.hpp" +#include "bitalino.h" + +class BitalinoThread : public ThreadedProcess { +public: + RingBuffer<BITalino::Frame> data; // The data gathered in the main thread, safely accessable from outside + + BitalinoThread ( void ) : ThreadedProcess () + { + connected.store(false); + recording.store(false); + tries.store(0); + deviceName = "/dev/cu.BITalino-DevB"; // Debug init (Mac OS virt. serial over bt) + } + + ~BitalinoThread ( void ) + { + } + + void setup ( std::string deviceName, uint64_t bufferSize, + uint16_t sampleRate, std::vector<int32_t> channels, + uint16_t frameCount=100 ) + { + this->deviceName = deviceName; + this->sampleRate = sampleRate; + this->channels = channels; + frameBuffer.resize(frameCount); + pollTestBuffer.resize(1); + data.setup(bufferSize); + } + + void setRecording ( bool v ) + { // Allow data to be pushed in to the ringbuffer + recording.store(v); + } + + bool isRecording ( void ) const + { + return recording.load(); + } + + bool isConnected ( void ) const + { + return connected.load(); + } + + uint32_t getConnectionTries( void ) const + { + return tries.load(); + } + +protected: + void mainThreadCallback ( void ) + { + try { + switch (threadState) + { + case SEARCHING_FOR_DEVICE: + ++currentTries; + tries.store(currentTries); + if (!dev) + dev = new BITalino(deviceName.c_str()); + dev->start(sampleRate, channels); + threadState = IDLE_BUT_CONNECTED; + connected.store(true); + currentTries = 0; + break; + case IDLE_BUT_CONNECTED: + if (recording.load()) + { + threadState = RECORDING_DATA; + } else { + dev->read(pollTestBuffer); // Poll small data to check if alive + usleep(100000); // Wait 100 ms + } + break; + case RECORDING_DATA: + if (!recording.load()) + { + threadState = IDLE_BUT_CONNECTED; + } else { + dev->read(frameBuffer); + if (data.items_available_for_write() >= frameBuffer.size()) + data.push(&frameBuffer[0], frameBuffer.size()); + // Else skipped frame... notify? + } + break; + default: + break; + } + usleep(100); + } catch (BITalino::Exception &e) { + // printf("BITalino exception: %s\n", e.getDescription()); + // TODO: check which exact exception is communication lost etc. + threadState = SEARCHING_FOR_DEVICE; + connected.store(false); + if (dev) + { + delete dev; + dev = nullptr; + } + usleep(500000); // 500ms Timeout before trying to reconnect + } + } + + std::atomic<bool> connected; + std::atomic<bool> recording; + std::string deviceName; + + BITalino* dev = nullptr; + uint16_t sampleRate = 1000; + std::vector<int32_t> channels; + + std::atomic<uint32_t> tries; + uint32_t currentTries = 0; + +private: + enum State { + SEARCHING_FOR_DEVICE, + IDLE_BUT_CONNECTED, + RECORDING_DATA + }; + + State threadState = SEARCHING_FOR_DEVICE; + + BITalino::VFrame frameBuffer; + BITalino::VFrame pollTestBuffer; +}; + + + +#endif /* BitalinoThread_h */ diff --git a/examples/ofx/Bitalino_rapidmix/src/RapidBitalino.cpp b/examples/ofx/Bitalino_rapidmix/src/RapidBitalino.cpp new file mode 100644 index 0000000..e77ca25 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/src/RapidBitalino.cpp @@ -0,0 +1,138 @@ +// +// RapidBitalino.cpp +// Bitalino +// +// Created by James on 20/11/2017. +// +// + +#include "RapidBitalino.h" + +RapidBitalino::RapidBitalino ( void ) +{ +} + +RapidBitalino::~RapidBitalino ( void ) +{ +} + +void RapidBitalino::clearTrainingData ( void ) +{ + // Clear the training set + (*currentPhrase).elements.clear(); + printf("Cleared training data\n"); +} + +void RapidBitalino::recordTrainingData( uint32_t samplesToCollect, double output ) +{ + this->samplesToCollect = samplesToCollect; + gatheringTrainingData = true; + bitalinoThread.data.reset(); // Reset read/write pointers + currentTrainingOutput = { output }; + printf("Recoriding training input for output: %f\n", output); +} + +void RapidBitalino::setup ( void ) +{ + // Get a reference to a new phrase which stores our trainingData + currentPhrase = trainingData.createNewPhrase("BITalino"); + // Set threaded train callback: (not sync) + rapidMixThread.threadedTrainCallback = [&] (selectedTraining* t ) + { + if (trainingData.trainingSet.size() > 0) + t->train(trainingData); + }; + // Set callback for when model is done training (sync) + rapidMixThread.doneTrainingCallback = [&] ( void ) + { + trainingText = "New Model Trained"; + printf("New Model Trained\n"); + }; + + // Set up the bitalino + bitalinoThread.setup("/dev/cu.BITalino-DevB", 2000, + 1000, {0, 1, 2, 3, 4, 5}, + 100); + // Start the bitalino's thread (and allow it to start searching for the device) + bitalinoThread.startThread(); + // Start receiving data as soon as it's connected + bitalinoThread.setRecording(true); + // Initialize with 0, 0 + bitalinoProcessedOutput = { 0.0, 0.0 }; + // Init FFT + fft.setup(128, 32, 32); +} + +bool RapidBitalino::processBitalinoOutput(BITalino::Frame& frame) +{ + std::vector<double> output; + double newVal = static_cast<float>(frame.analog[0]); + + discreteVal -= discreteVal / N; + discreteVal += newVal / N; + discreteValCalibrated = newVal - discreteVal; + + testCheapRMSdiscrete -= testCheapRMSdiscrete / M; + testCheapRMSdiscrete += (discreteValCalibrated*discreteValCalibrated) / M; + //bitalinoProcessedOutput = { sqrt(testCheapRMSdiscrete) }; + + if (fft.process(discreteValCalibrated)) + { + bitalinoProcessedOutput = { fft.spectralCentroid(), sqrt(testCheapRMSdiscrete) }; + + return true; + } + return false; +} + +void RapidBitalino::update ( void ) +{ // TODO: move this to its own thread and create communications between ofx and this so it doesn't block ofx + rapidMixThread.update(); + + uint32_t items = bitalinoThread.data.items_available_for_read(); + BITalino::Frame data[items]; + bitalinoThread.data.pop(data, items); + //double output; + + for (uint32_t i = 0; i < items; ++i) + { + if (processBitalinoOutput(data[i])) + { + tOutput = rapidMixThread.model->run(bitalinoProcessedOutput)[0]; + printf("Input = %f, %f, Output = %f\n",bitalinoProcessedOutput[0],bitalinoProcessedOutput[1], tOutput); + + if (gatheringTrainingData) + { + if (samplesToCollect > 0) + { + (*currentPhrase).addElement(bitalinoProcessedOutput, currentTrainingOutput); + --samplesToCollect; + } else { + gatheringTrainingData = false; + rapidMixThread.train(); // Start training process in its thread + } + } + } + } +} + +void RapidBitalino::draw ( void ) +{ + // Todo, draw some trivial debug interface items + // ie: + /* + - BITalino isConnected () + - BITalino isRecording () // if receiving data ? + - RapidMixThread isTraining () + - input and output values + */ + ofDrawBox(ofVec2f(400,(tOutput/4)*600), 50); +} + +void RapidBitalino::stop ( void ) +{ + rapidMixThread.stopThread(); + bitalinoThread.stopThread(); +} + + diff --git a/examples/ofx/Bitalino_rapidmix/src/RapidBitalino.h b/examples/ofx/Bitalino_rapidmix/src/RapidBitalino.h new file mode 100644 index 0000000..eb1d77a --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/src/RapidBitalino.h @@ -0,0 +1,69 @@ +// +// RapidBitalino.h +// Bitalino +// +// Created by James on 20/11/2017. +// +// + +#ifndef RapidBitalino_h +#define RapidBitalino_h + +#include "ofMain.h" +#include "rapidmix.h" +#include "RapidMixThread.h" +#include "BitalinoThread.h" +#include "maxiFFT.h" + +typedef rapidmix::staticRegression selectedTraining; + +class RapidBitalino { +public: + RapidBitalino ( void ); + ~RapidBitalino ( void ); + + void clearTrainingData ( void ); + void recordTrainingData ( uint32_t numberOfSamplesToCollect, double output ); + void setup ( void ); + + void update ( void ); + void draw ( void ); + + void stop ( void ); + +private: + // Private member funcs + bool processBitalinoOutput(BITalino::Frame& frame); + + // Private variables + std::string trainingText = "idle"; + + // Rapid Mix stuff + rapidmix::trainingData trainingData; + std::vector<rapidmix::trainingData::phrase>::iterator currentPhrase; + + // My own stuff + uint32_t samplesToCollect; + std::vector<double> currentTrainingOutput; + + RapidMixThread<selectedTraining> rapidMixThread; + BitalinoThread bitalinoThread; + + bool gatheringTrainingData = false; + + // Processing the BITalino output + maxiFFT fft; + double discreteVal = 0; + double discreteValCalibrated = 0; + double N = 1000; + double M = 100; + + double testCheapRMSdiscrete = 0; + + double tOutput = 0.0; + + std::vector<double> bitalinoProcessedOutput; +}; + + +#endif /* RapidBitalino_h */ diff --git a/examples/ofx/Bitalino_rapidmix/src/RapidMixThread.h b/examples/ofx/Bitalino_rapidmix/src/RapidMixThread.h new file mode 100644 index 0000000..d8efb2e --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/src/RapidMixThread.h @@ -0,0 +1,98 @@ +// +// RapidMixThread/h +// This implementation of rapidMix trains in a different thread and has a synchronized +// update process with your main thread, which triggers a (sync) callback on doneTraining. +// Allows you to train one model and keep using it while the next one trains, the new +// model will be swapped in sync with the thread the update is called in once it's done. +// Created by James on 19/11/2017. +// +// + +#ifndef RapidMixThread_h +#define RapidMixThread_h + +#include <algorithm> +#include <functional> +#include <unistd.h> // usleep +#include "ThreadedProcess.h" + +template <typename T> +class RapidMixThread : public ThreadedProcess +{ +public: + T* model = nullptr; // The model to be accessed + std::function<void ( void ) > doneTrainingCallback = nullptr; // CB on done training + std::function<void ( T* modelToBeTrained ) > threadedTrainCallback = nullptr; // Callback entry in train thread to pass training data and train the new model before it gets swapped in to place, note that any adjustments to the passed trainingdata or other non threadsafe elements at this point will result in undefined behavior + + RapidMixThread ( void ) : ThreadedProcess () + { + model = new T(); + training.store(false); + doneTraining.store(false); + startThread(); // Start training thread + } + + ~RapidMixThread ( void ) + { + stopThread(); + if (newModel) + delete newModel; + if (model) + delete model; + } + + void train ( void ) + { + if (!training.load()) + { + training.store(true); + } + } + + bool isTraining ( void ) const + { + return training.load(); + } + + void update ( void ) + { // To be called in your main loop + if (doneTraining.load()) + { + if (newModel) + { + std::swap(model, newModel); + } else + printf("New model was not created successfully...\n"); + + if (doneTrainingCallback) + doneTrainingCallback(); + doneTraining.store(false); + } + } + +protected: + void mainThreadCallback ( void ) + { // Training thread + if (isTraining()) + { + if (newModel) + delete newModel; + + newModel = new T(); + if (threadedTrainCallback) + threadedTrainCallback(newModel); + + training.store(false); + doneTraining.store(true); + } + usleep(100000); // Sleep 100 ms + } + + std::atomic<bool> training; + std::atomic<bool> doneTraining; + T* newModel = nullptr; + +private: +}; + +#endif /* RapidMixThread_h */ diff --git a/examples/ofx/Bitalino_rapidmix/src/RingBuffer.hpp b/examples/ofx/Bitalino_rapidmix/src/RingBuffer.hpp new file mode 100644 index 0000000..401bc70 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/src/RingBuffer.hpp @@ -0,0 +1,222 @@ +/* + * RingBuffer.hpp + */ + +#ifndef RINGBUFFER_HPP +#define RINGBUFFER_HPP + +#include <iostream> +#include <atomic> +#include <string> +#include <unistd.h> +#include <string.h> // memcpy +#include <cstring> + +template <class T> +class RingBuffer +{ +public: + RingBuffer(); + RingBuffer(unsigned long size); + ~RingBuffer(); + void setup(unsigned long size); + + unsigned long push(const T* data, unsigned long n); + unsigned long pop(T* data, unsigned long n); + unsigned long items_available_for_write() const; + unsigned long items_available_for_read() const; + bool isLockFree() const; + void pushMayBlock(bool block); + void popMayBlock(bool block); + void setBlockingNap(unsigned long blockingNap); + void setSize(unsigned long size); + void reset(); + +private: + unsigned long array_size; + T* buffer = nullptr; + long type_size; // also depends on #channels + + std::atomic<unsigned long> tail_index; // write pointer + std::atomic<unsigned long> head_index; // read pointer + + bool blockingPush; + bool blockingPop; + useconds_t blockingNap = 500; +}; // RingBuffer{} + +template <class T> +RingBuffer<T>::RingBuffer() +{ + tail_index = 0; + head_index = 0; + + blockingPush = false; + blockingPop = false; +} // RingBuffer() + +template <class T> +RingBuffer<T>::RingBuffer(unsigned long array_size) +{ + tail_index = 0; + head_index = 0; + + blockingPush = false; + blockingPop = false; + + setup(array_size); +} // RingBuffer() + +template <class T> +RingBuffer<T>::~RingBuffer() +{ + if (buffer) + delete [] buffer; +} // ~RingBuffer() + +template <class T> +void RingBuffer<T>::setup(unsigned long array_size) +{ + if (buffer) + delete [] buffer; + + this->array_size = array_size; + buffer = new T [array_size](); // allocate storage + type_size = sizeof(T); +} + +template <class T> +unsigned long RingBuffer<T>::items_available_for_write() const +{ + long pointerspace = head_index.load()-tail_index.load(); // signed + + if(pointerspace > 0) return pointerspace; // NB: > 0 so NOT including 0 + else return pointerspace + array_size; +} // items_available_for_write() + +template <class T> +unsigned long RingBuffer<T>::items_available_for_read() const +{ + long pointerspace = tail_index.load() - head_index.load(); // signed + + if(pointerspace >= 0) return pointerspace; // NB: >= 0 so including 0 + else return pointerspace + array_size; +} // items_available_for_read() + +template <class T> +void RingBuffer<T>::pushMayBlock(bool block) +{ + this->blockingPush = block; +} // pushMayBlock() + +template <class T> +void RingBuffer<T>::popMayBlock(bool block) +{ + this->blockingPop = block; +} // popMayBlock() + +template <class T> +void RingBuffer<T>::setBlockingNap(unsigned long blockingNap) +{ + this->blockingNap = blockingNap; +} // setBlockingNap() + + +/* + * Try to write as many items as possible and return the number actually written + */ +template <class T> +unsigned long RingBuffer<T>::push(const T* data, unsigned long n) +{ + unsigned long space = array_size, n_to_write, memory_to_write, first_chunk, second_chunk, current_tail; + + //space = items_available_for_write(); + if(blockingPush) + { + while((space = items_available_for_write()) < n) + { // blocking + usleep(blockingNap); + } // while, possibly use a system level sleep operation with CVAR? + } // if + + n_to_write = (n <= space) ? n : space; // limit + + current_tail = tail_index.load(); + if(current_tail + n_to_write <= array_size) + { // chunk fits without wrapping + memory_to_write = n_to_write * type_size; + memcpy(buffer+current_tail, data, memory_to_write); + tail_index.store(current_tail + n_to_write); + } + else { // chunk has to wrap + first_chunk = array_size - current_tail; + memory_to_write = first_chunk * type_size; + memcpy(buffer + current_tail, data, memory_to_write); + + second_chunk = n_to_write - first_chunk; + memory_to_write = second_chunk * type_size; + memcpy(buffer, data + first_chunk, memory_to_write); + tail_index.store(second_chunk); + } + + return n_to_write; +} // push() + + +/* + * Try to read as many items as possible and return the number actually read + */ +template <class T> +unsigned long RingBuffer<T>::pop(T* data, unsigned long n) +{ + unsigned long space = array_size, n_to_read, memory_to_read, first_chunk, second_chunk, current_head; + + //space = items_available_for_read(); //if checking outside of thread, not necessary? + if(blockingPop) + { + while((space = items_available_for_read()) < n) + { // blocking + usleep(blockingNap); + } // while + } // if + + if(space == 0) + return 0; + + n_to_read = (n <= space) ? n : space; // limit + + current_head = head_index.load(); + if(current_head + n_to_read <= array_size) + { // no wrapping necessary + memory_to_read = n_to_read * type_size; + memcpy(data, buffer + current_head, memory_to_read); + head_index.store(current_head + n_to_read); + } + else { // read has to wrap + first_chunk = array_size - current_head; + memory_to_read = first_chunk * type_size; + memcpy(data, buffer + current_head, memory_to_read); + + second_chunk = n_to_read - first_chunk; + memory_to_read = second_chunk * type_size; + memcpy(data + first_chunk, buffer, memory_to_read); + head_index.store(second_chunk); + + } + return n_to_read; +} // pop() + +template <class T> +bool RingBuffer<T>::isLockFree() const +{ + return (tail_index.is_lock_free() && head_index.is_lock_free()); +} // isLockFree() + +template <class T> +void RingBuffer<T>::reset() +{ + tail_index.store(0); + head_index.store(0); +} // isLockFree() + +#endif diff --git a/examples/ofx/Bitalino_rapidmix/src/ThreadedProcess.h b/examples/ofx/Bitalino_rapidmix/src/ThreadedProcess.h new file mode 100644 index 0000000..4f9d594 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/src/ThreadedProcess.h @@ -0,0 +1,74 @@ +// +// ThreadedProcess.h +// Bitalino +// +// Created by James on 19/11/2017. +// +// + +#ifndef ThreadedProcess_h +#define ThreadedProcess_h + +#include <stdio.h> +#include <stdint.h> +#include <functional> +#include <thread> +#include <atomic> + +class ThreadedProcess { +public: + ThreadedProcess ( void ) + { + running.store( false ); + } + + virtual ~ThreadedProcess ( void ) + { + stopThread(); + } + + bool isThreadRunning ( void ) const + { + return running.load(); + } + + // (re)Start main thread + void startThread ( void ) + { + if (running.load()) + { // Thread is already running + stopThread(); + } + running.store( true ); + processMainThread = std::thread(&ThreadedProcess::mainLoop, this); // Spawn thread + } + + // Stop main thread + void stopThread ( void ) + { + if (running.load()) + { + running.store( false ); + processMainThread.join(); + } + } + +protected: + virtual void mainThreadCallback ( void ) = 0; + + std::thread processMainThread; + +private: + void mainLoop ( void ) + { + while (running.load()) + { + mainThreadCallback(); + } + } + + std::atomic<bool> running; +}; + + +#endif /* ThreadedProcess_h */ diff --git a/examples/ofx/Bitalino_rapidmix/src/bitalino.cpp b/examples/ofx/Bitalino_rapidmix/src/bitalino.cpp new file mode 100755 index 0000000..fe75bb9 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/src/bitalino.cpp @@ -0,0 +1,799 @@ +/** + * \copyright Copyright 2014-2016 PLUX - Wireless Biosignals, S.A. + * \author Filipe Silva + * \version 2.1 + * \date February 2016 + * + * \section LICENSE + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + */ + +/*****************************************************************************/ + +#ifdef _WIN32 // 32-bit or 64-bit Windows + +#define HASBLUETOOTH + +#define _WINSOCK_DEPRECATED_NO_WARNINGS + +#include <winsock2.h> +#include <ws2bth.h> + +#else // Linux or Mac OS + +#include <stdlib.h> +#include <string.h> +#include <fcntl.h> +#include <termios.h> +#include <unistd.h> + +#ifdef HASBLUETOOTH // Linux only + +#include <bluetooth/bluetooth.h> +#include <bluetooth/rfcomm.h> +#include <bluetooth/hci.h> +#include <bluetooth/hci_lib.h> +#include <stdlib.h> + +#endif // HASBLUETOOTH + +void Sleep(int millisecs) +{ + usleep(millisecs*1000); +} + +#endif // Linux or Mac OS + + +#include "bitalino.h" + +/*****************************************************************************/ + +// CRC4 check function + +static const unsigned char CRC4tab[16] = {0, 3, 6, 5, 12, 15, 10, 9, 11, 8, 13, 14, 7, 4, 1, 2}; + +static bool checkCRC4(const unsigned char *data, int len) +{ + unsigned char crc = 0; + + for (int i = 0; i < len-1; i++) + { + const unsigned char b = data[i]; + crc = CRC4tab[crc] ^ (b >> 4); + crc = CRC4tab[crc] ^ (b & 0x0F); + } + + // CRC for last byte + crc = CRC4tab[crc] ^ (data[len-1] >> 4); + crc = CRC4tab[crc]; + + return (crc == (data[len-1] & 0x0F)); +} + +/*****************************************************************************/ + +// BITalino public methods + +BITalino::VDevInfo BITalino::find(void) +{ + VDevInfo devs; + DevInfo devInfo; + +#ifdef _WIN32 + char addrStr[40]; + WSADATA m_data; + + if (WSAStartup(0x202, &m_data) != 0) throw Exception(Exception::PORT_INITIALIZATION); + + WSAQUERYSETA querySet; + ZeroMemory(&querySet, sizeof querySet); + querySet.dwSize = sizeof(querySet); + querySet.dwNameSpace = NS_BTH; + + HANDLE hLookup; + DWORD flags = LUP_CONTAINERS | LUP_RETURN_ADDR | LUP_RETURN_NAME | LUP_FLUSHCACHE; + bool tryempty = true; + bool again; + + do + { + again = false; + if (WSALookupServiceBeginA(&querySet, flags, &hLookup) != 0) + { + WSACleanup(); + throw Exception(Exception::BT_ADAPTER_NOT_FOUND); + } + + while (1) + { + BYTE buffer[1500]; + DWORD bufferLength = sizeof(buffer); + WSAQUERYSETA *pResults = (WSAQUERYSETA*)&buffer; + if (WSALookupServiceNextA(hLookup, flags, &bufferLength, pResults) != 0) break; + if (pResults->lpszServiceInstanceName[0] == 0 && tryempty) + { // empty name : may happen on the first inquiry after the device was connected + tryempty = false; // redo the inquiry a second time only (there may be a device with a real empty name) + again = true; + break; + } + + DWORD strSiz = sizeof addrStr; + if (WSAAddressToStringA(pResults->lpcsaBuffer->RemoteAddr.lpSockaddr, pResults->lpcsaBuffer->RemoteAddr.iSockaddrLength, + NULL, addrStr, &strSiz) == 0) + { + addrStr[strlen(addrStr)-1] = 0; // remove trailing ')' + devInfo.macAddr = addrStr+1; // remove leading '(' + devInfo.name = pResults->lpszServiceInstanceName; + devs.push_back(devInfo); + } + } + + WSALookupServiceEnd(hLookup); + } while (again); + + WSACleanup(); + +#else // Linux or Mac OS + +#ifdef HASBLUETOOTH + + #define MAX_DEVS 255 + + int dev_id = hci_get_route(NULL); + int sock = hci_open_dev(dev_id); + if (dev_id < 0 || sock < 0) + throw Exception(Exception::PORT_INITIALIZATION); + + inquiry_info ii[MAX_DEVS]; + inquiry_info *pii = ii; + + int num_rsp = hci_inquiry(dev_id, 8, MAX_DEVS, NULL, &pii, IREQ_CACHE_FLUSH); + if(num_rsp < 0) + { + ::close(sock); + throw Exception(Exception::PORT_INITIALIZATION); + } + + for (int i = 0; i < num_rsp; i++) + { + char addr[19], name[248]; + + ba2str(&ii[i].bdaddr, addr); + if (hci_read_remote_name(sock, &ii[i].bdaddr, sizeof name, name, 0) >= 0) + { + devInfo.macAddr = addr; + devInfo.name = name; + devs.push_back(devInfo); + } + } + + ::close(sock); + if (pii != ii) free(pii); + +#else + + throw Exception(Exception::BT_ADAPTER_NOT_FOUND); + +#endif // HASBLUETOOTH + +#endif // Linux or Mac OS + + return devs; +} + +/*****************************************************************************/ + +BITalino::BITalino(const char *address) : nChannels(0), isBitalino2(false) +{ +#ifdef _WIN32 + if (_memicmp(address, "COM", 3) == 0) + { + fd = INVALID_SOCKET; + + char xport[40] = "\\\\.\\"; // preppend "\\.\" + + strcat_s(xport, 40, address); + + hCom = CreateFileA(xport, // comm port name + GENERIC_READ | GENERIC_WRITE, + 0, // comm devices must be opened w/exclusive-access + NULL, // no security attributes + OPEN_EXISTING, // comm devices must use OPEN_EXISTING + 0, // not overlapped I/O + NULL); // hTemplate must be NULL for comm devices + + if (hCom == INVALID_HANDLE_VALUE) + throw Exception(Exception::PORT_COULD_NOT_BE_OPENED); + + DCB dcb; + if (!GetCommState(hCom, &dcb)) + { + close(); + throw Exception(Exception::PORT_INITIALIZATION); + } + dcb.BaudRate = CBR_115200; + dcb.fBinary = TRUE; + dcb.fParity = FALSE; + dcb.fOutxCtsFlow = FALSE; + dcb.fOutxDsrFlow = FALSE; + dcb.fDtrControl = DTR_CONTROL_DISABLE; + dcb.fDsrSensitivity = FALSE; + dcb.fOutX = FALSE; + dcb.fInX = FALSE; + dcb.fNull = FALSE; + dcb.fRtsControl = RTS_CONTROL_ENABLE; + dcb.ByteSize = 8; + dcb.Parity = NOPARITY; + dcb.StopBits = ONESTOPBIT; + if (!SetCommState(hCom, &dcb)) + { + close(); + throw Exception(Exception::PORT_INITIALIZATION); + } + + COMMTIMEOUTS ct; + ct.ReadIntervalTimeout = 0; + ct.ReadTotalTimeoutConstant = 5000; // 5 s + ct.ReadTotalTimeoutMultiplier = 0; + ct.WriteTotalTimeoutConstant = 5000; // 5 s + ct.WriteTotalTimeoutMultiplier = 0; + + if (!SetCommTimeouts(hCom, &ct)) + { + close(); + throw Exception(Exception::PORT_INITIALIZATION); + } + } + else // address is a Bluetooth MAC address + { + hCom = INVALID_HANDLE_VALUE; + + WSADATA m_data; + if (WSAStartup(0x202, &m_data) != 0) + throw Exception(Exception::PORT_INITIALIZATION); + + SOCKADDR_BTH so_bt; + int siz = sizeof so_bt; + if (WSAStringToAddressA((LPSTR)address, AF_BTH, NULL, (sockaddr*)&so_bt, &siz) != 0) + { + WSACleanup(); + throw Exception(Exception::INVALID_ADDRESS); + } + so_bt.port = 1; + + fd = socket(AF_BTH, SOCK_STREAM, BTHPROTO_RFCOMM); + if (fd == INVALID_SOCKET) + { + WSACleanup(); + throw Exception(Exception::PORT_INITIALIZATION); + } + + DWORD rcvbufsiz = 128*1024; // 128k + setsockopt(fd, SOL_SOCKET, SO_RCVBUF, (char*) &rcvbufsiz, sizeof rcvbufsiz); + + if (connect(fd, (const sockaddr*)&so_bt, sizeof so_bt) != 0) + { + int err = WSAGetLastError(); + close(); + + switch(err) + { + case WSAENETDOWN: + throw Exception(Exception::BT_ADAPTER_NOT_FOUND); + + case WSAETIMEDOUT: + throw Exception(Exception::DEVICE_NOT_FOUND); + + default: + throw Exception(Exception::PORT_COULD_NOT_BE_OPENED); + } + } + + readtimeout.tv_sec = 5; + readtimeout.tv_usec = 0; + } + +#else // Linux or Mac OS + + if (memcmp(address, "/dev/", 5) == 0) + { + fd = open(address, O_RDWR | O_NOCTTY | O_NDELAY); + if (fd < 0) + throw Exception(Exception::PORT_COULD_NOT_BE_OPENED); + + if (fcntl(fd, F_SETFL, 0) == -1) // remove the O_NDELAY flag + { + close(); + throw Exception(Exception::PORT_INITIALIZATION); + } + + termios term; + if (tcgetattr(fd, &term) != 0) + { + close(); + throw Exception(Exception::PORT_INITIALIZATION); + } + + cfmakeraw(&term); + term.c_oflag &= ~(OPOST); + + term.c_cc[VMIN] = 1; + term.c_cc[VTIME] = 1; + + term.c_iflag &= ~(INPCK | PARMRK | ISTRIP | IGNCR | ICRNL | INLCR | IXON | IXOFF | IMAXBEL); // no flow control + term.c_iflag |= (IGNPAR | IGNBRK); + + term.c_cflag &= ~(CRTSCTS | PARENB | CSTOPB | CSIZE); // no parity, 1 stop bit + term.c_cflag |= (CLOCAL | CREAD | CS8); // raw mode, 8 bits + + term.c_lflag &= ~(ICANON | ECHO | ECHOE | ECHOPRT | ECHOK | ECHOKE | ECHONL | ECHOCTL | ISIG | IEXTEN | TOSTOP); // raw mode + + if (cfsetspeed(&term, B115200) != 0) + { + close(); + throw Exception(Exception::PORT_INITIALIZATION); + } + + if (tcsetattr(fd, TCSANOW, &term) != 0) + { + close(); + throw Exception(Exception::PORT_INITIALIZATION); + } + + isTTY = true; + } + else // address is a Bluetooth MAC address +#ifdef HASBLUETOOTH + { + sockaddr_rc so_bt; + so_bt.rc_family = AF_BLUETOOTH; + if (str2ba(address, &so_bt.rc_bdaddr) < 0) + throw Exception(Exception::INVALID_ADDRESS); + + so_bt.rc_channel = 1; + + fd = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM); + if (fd < 0) + throw Exception(Exception::PORT_INITIALIZATION); + + if (connect(fd, (const sockaddr*)&so_bt, sizeof so_bt) != 0) + { + close(); + throw Exception(Exception::PORT_COULD_NOT_BE_OPENED); + } + + isTTY = false; + } +#else + throw Exception(Exception::PORT_COULD_NOT_BE_OPENED); +#endif // HASBLUETOOTH + +#endif // Linux or Mac OS + + // check if device is BITalino2 + const std::string ver = version(); + const std::string::size_type pos = ver.find("_v"); + if (pos != std::string::npos) + { + const char *xver = ver.c_str() + pos+2; + if (atoi(xver) >= 5) isBitalino2 = true; + } +} + +/*****************************************************************************/ + +BITalino::~BITalino(void) +{ + try + { + if (nChannels != 0) stop(); + } + catch (Exception) {} // if stop() fails, close anyway + + close(); +} + +/*****************************************************************************/ + +std::string BITalino::version(void) +{ + if (nChannels != 0) throw Exception(Exception::DEVICE_NOT_IDLE); + + const char *header = "BITalino"; + + const size_t headerLen = strlen(header); + + send(0x07); // 0 0 0 0 0 1 1 1 - Send version string + + std::string str; + while(1) + { + char chr; + if (recv(&chr, sizeof chr) != sizeof chr) // a timeout has occurred + throw Exception(Exception::CONTACTING_DEVICE); + + const size_t len = str.size(); + if (len >= headerLen) + { + if (chr == '\n') return str; + str.push_back(chr); + } + else + if (chr == header[len]) + str.push_back(chr); + else + { + str.clear(); // discard all data before version header + if (chr == header[0]) str.push_back(chr); + } + } +} + +/*****************************************************************************/ + +void BITalino::start(int samplingRate, const Vint &channels, bool simulated) +{ + if (nChannels != 0) throw Exception(Exception::DEVICE_NOT_IDLE); + + unsigned char cmd; + switch (samplingRate) + { + case 1: + cmd = 0x03; + break; + case 10: + cmd = 0x43; + break; + case 100: + cmd = 0x83; + break; + case 1000: + cmd = 0xC3; + break; + default: + throw Exception(Exception::INVALID_PARAMETER); + } + + char chMask; + if (channels.empty()) + { + chMask = 0x3F; // all 6 analog channels + nChannels = 6; + } + else + { + chMask = 0; + nChannels = 0; + for(Vint::const_iterator it = channels.begin(); it != channels.end(); it++) + { + int ch = *it; + if (ch < 0 || ch > 5) throw Exception(Exception::INVALID_PARAMETER); + const char mask = 1 << ch; + if (chMask & mask) throw Exception(Exception::INVALID_PARAMETER); + chMask |= mask; + nChannels++; + } + } + + send(cmd); // <Fs> 0 0 0 0 1 1 - Set sampling rate + + // A6 A5 A4 A3 A2 A1 0 1 - Start live mode with analog channel selection + // A6 A5 A4 A3 A2 A1 1 0 - Start simulated mode with analog channel selection + send((chMask << 2) | (simulated ? 0x02 : 0x01)); +} + +/*****************************************************************************/ + +void BITalino::stop(void) +{ + if (nChannels == 0) throw Exception(Exception::DEVICE_NOT_IN_ACQUISITION); + + send(0x00); // 0 0 0 0 0 0 0 0 - Go to idle mode + + nChannels = 0; + + version(); // to flush pending frames in input buffer +} + +/*****************************************************************************/ + +int BITalino::read(VFrame &frames) +{ + if (nChannels == 0) throw Exception(Exception::DEVICE_NOT_IN_ACQUISITION); + + unsigned char buffer[8]; // frame maximum size is 8 bytes + + if (frames.empty()) frames.resize(100); + + char nBytes = nChannels + 2; + if (nChannels >= 3 && nChannels <= 5) nBytes++; + + for(VFrame::iterator it = frames.begin(); it != frames.end(); it++) + { + if (recv(buffer, nBytes) != nBytes) return int(it - frames.begin()); // a timeout has occurred + + while (!checkCRC4(buffer, nBytes)) + { // if CRC check failed, try to resynchronize with the next valid frame + // checking with one new byte at a time + memmove(buffer, buffer+1, nBytes-1); + if (recv(buffer+nBytes-1, 1) != 1) return int(it - frames.begin()); // a timeout has occurred + } + + Frame &f = *it; + f.seq = buffer[nBytes-1] >> 4; + for(int i = 0; i < 4; i++) + f.digital[i] = ((buffer[nBytes-2] & (0x80 >> i)) != 0); + + f.analog[0] = (short(buffer[nBytes-2] & 0x0F) << 6) | (buffer[nBytes-3] >> 2); + if (nChannels > 1) + f.analog[1] = (short(buffer[nBytes-3] & 0x03) << 8) | buffer[nBytes-4]; + if (nChannels > 2) + f.analog[2] = (short(buffer[nBytes-5]) << 2) | (buffer[nBytes-6] >> 6); + if (nChannels > 3) + f.analog[3] = (short(buffer[nBytes-6] & 0x3F) << 4) | (buffer[nBytes-7] >> 4); + if (nChannels > 4) + f.analog[4] = ((buffer[nBytes-7] & 0x0F) << 2) | (buffer[nBytes-8] >> 6); + if (nChannels > 5) + f.analog[5] = buffer[nBytes-8] & 0x3F; + } + + return (int) frames.size(); +} + +/*****************************************************************************/ + +void BITalino::battery(int value) +{ + if (nChannels != 0) throw Exception(Exception::DEVICE_NOT_IDLE); + + if (value < 0 || value > 63) throw Exception(Exception::INVALID_PARAMETER); + + send(value << 2); // <bat threshold> 0 0 - Set battery threshold +} + +/*****************************************************************************/ + +void BITalino::trigger(const Vbool &digitalOutput) +{ + unsigned char cmd; + const size_t len = digitalOutput.size(); + + if (isBitalino2) + { + if (len != 0 && len != 2) throw Exception(Exception::INVALID_PARAMETER); + + cmd = 0xB3; // 1 0 1 1 O2 O1 1 1 - Set digital outputs + } + else + { + if (len != 0 && len != 4) throw Exception(Exception::INVALID_PARAMETER); + + if (nChannels == 0) throw Exception(Exception::DEVICE_NOT_IN_ACQUISITION); + + cmd = 0x03; // 0 0 O4 O3 O2 O1 1 1 - Set digital outputs + } + + for(size_t i = 0; i < len; i++) + if (digitalOutput[i]) + cmd |= (0x04 << i); + + send(cmd); +} + +/*****************************************************************************/ + +void BITalino::pwm(int pwmOutput) +{ + if (!isBitalino2) throw Exception(Exception::NOT_SUPPORTED); + + if (pwmOutput < 0 || pwmOutput > 255) throw Exception(Exception::INVALID_PARAMETER); + + send((char) 0xA3); // 1 0 1 0 0 0 1 1 - Set analog output (1 byte follows: 0..255) + send(pwmOutput); +} + +/*****************************************************************************/ + +BITalino::State BITalino::state(void) +{ +#pragma pack(1) // byte-aligned structure + + struct StateX + { + unsigned short analog[6], battery; + unsigned char batThreshold, portsCRC; + } statex; + +#pragma pack() // restore default alignment + + + if (!isBitalino2) throw Exception(Exception::NOT_SUPPORTED); + + if (nChannels != 0) throw Exception(Exception::DEVICE_NOT_IDLE); + + send(0x0B); // 0 0 0 0 1 0 1 1 - Send device status + + if (recv(&statex, sizeof statex) != sizeof statex) // a timeout has occurred + throw Exception(Exception::CONTACTING_DEVICE); + + if (!checkCRC4((unsigned char *) &statex, sizeof statex)) + throw Exception(Exception::CONTACTING_DEVICE); + + State state; + + for(int i = 0; i < 6; i++) + state.analog[i] = statex.analog[i]; + + state.battery = statex.battery; + state.batThreshold = statex.batThreshold; + + for(int i = 0; i < 4; i++) + state.digital[i] = ((statex.portsCRC & (0x80 >> i)) != 0); + + return state; +} + +/*****************************************************************************/ + +const char* BITalino::Exception::getDescription(void) +{ + switch (code) + { + case INVALID_ADDRESS: + return "The specified address is invalid."; + + case BT_ADAPTER_NOT_FOUND: + return "No Bluetooth adapter was found."; + + case DEVICE_NOT_FOUND: + return "The device could not be found."; + + case CONTACTING_DEVICE: + return "The computer lost communication with the device."; + + case PORT_COULD_NOT_BE_OPENED: + return "The communication port does not exist or it is already being used."; + + case PORT_INITIALIZATION: + return "The communication port could not be initialized."; + + case DEVICE_NOT_IDLE: + return "The device is not idle."; + + case DEVICE_NOT_IN_ACQUISITION: + return "The device is not in acquisition mode."; + + case INVALID_PARAMETER: + return "Invalid parameter."; + + case NOT_SUPPORTED: + return "Operation not supported by the device."; + + default: + return "Unknown error."; + } +} + +/*****************************************************************************/ + +// BITalino private methods + +void BITalino::send(char cmd) +{ + Sleep(150); + +#ifdef _WIN32 + if (fd == INVALID_SOCKET) + { + DWORD nbytwritten = 0; + if (!WriteFile(hCom, &cmd, sizeof cmd, &nbytwritten, NULL)) + throw Exception(Exception::CONTACTING_DEVICE); + + if (nbytwritten != sizeof cmd) + throw Exception(Exception::CONTACTING_DEVICE); + } + else + if (::send(fd, &cmd, sizeof cmd, 0) != sizeof cmd) + throw Exception(Exception::CONTACTING_DEVICE); + +#else // Linux or Mac OS + + if (write(fd, &cmd, sizeof cmd) != sizeof cmd) + throw Exception(Exception::CONTACTING_DEVICE); +#endif +} + +/*****************************************************************************/ + +int BITalino::recv(void *data, int nbyttoread) +{ +#ifdef _WIN32 + if (fd == INVALID_SOCKET) + { + for(int n = 0; n < nbyttoread;) + { + DWORD nbytread = 0; + if (!ReadFile(hCom, (char *) data+n, nbyttoread-n, &nbytread, NULL)) + throw Exception(Exception::CONTACTING_DEVICE); + + if (nbytread == 0) + { + DWORD stat; + if (!GetCommModemStatus(hCom, &stat) || !(stat & MS_DSR_ON)) + throw Exception(Exception::CONTACTING_DEVICE); // connection is lost + + return n; // a timeout occurred + } + + n += nbytread; + } + + return nbyttoread; + } +#endif + +#ifndef _WIN32 // Linux or Mac OS + timeval readtimeout; + readtimeout.tv_sec = 5; + readtimeout.tv_usec = 0; +#endif + + fd_set readfds; + FD_ZERO(&readfds); + FD_SET(fd, &readfds); + + for(int n = 0; n < nbyttoread;) + { + int state = select(FD_SETSIZE, &readfds, NULL, NULL, &readtimeout); + if(state < 0) throw Exception(Exception::CONTACTING_DEVICE); + + if (state == 0) return n; // a timeout occurred + +#ifdef _WIN32 + int ret = ::recv(fd, (char *) data+n, nbyttoread-n, 0); +#else // Linux or Mac OS + ssize_t ret = ::read(fd, (char *) data+n, nbyttoread-n); +#endif + + if(ret <= 0) throw Exception(Exception::CONTACTING_DEVICE); + n += ret; + } + + return nbyttoread; +} + +/*****************************************************************************/ + +void BITalino::close(void) +{ +#ifdef _WIN32 + if (fd == INVALID_SOCKET) + CloseHandle(hCom); + else + { + closesocket(fd); + WSACleanup(); + } + +#else // Linux or Mac OS + + ::close(fd); + +#endif +} + +/*****************************************************************************/ diff --git a/examples/ofx/Bitalino_rapidmix/src/bitalino.h b/examples/ofx/Bitalino_rapidmix/src/bitalino.h new file mode 100755 index 0000000..bee7ccf --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/src/bitalino.h @@ -0,0 +1,319 @@ +/** + * \file + * \copyright Copyright 2014-2015 PLUX - Wireless Biosignals, S.A. + * \author Filipe Silva + * \version 2.0 + * \date November 2015 + * + * \section LICENSE + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published by + the Free Software Foundation, either version 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 Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + */ + + + /** + \mainpage + + The %BITalino C++ API (available at http://github.com/BITalinoWorld/cpp-api) is a cross-platform library which enables C++ applications to communicate + with a %BITalino device through a simple interface. + The API is composed of a header file (bitalino.h) + and an implementation file ([bitalino.cpp](http://github.com/BITalinoWorld/cpp-api/tree/master/bitalino.cpp)). + A sample test application in C++ ([test.cpp](http://github.com/BITalinoWorld/cpp-api/tree/master/test.cpp)) is also provided. + + There are three ways to connect to a %BITalino device: + - direct Bluetooth connection using the device Bluetooth MAC address (Windows and Linux); + - indirect Bluetooth connection using a virtual serial port (all platforms); + - wired UART connection using a serial port (all platforms). + + The API exposes a single class (BITalino). Each instance of this class represents a connection + to a %BITalino device. The connection is established in the constructor and released in the destructor, + thus following the RAII paradigm. An application can create several instances (to distinct devices). + The library is thread-safe between distinct instances. Each instance can be a local variable + (as in the sample application) or it can be allocated on the heap (using new and delete operators). + + \section sampleapp About the sample application + + The sample application ([test.cpp](http://github.com/BITalinoWorld/cpp-api/tree/master/test.cpp)) creates an instance to a %BITalino device. + Then it starts acquiring all channels on the device at 1000 Hz and enters a loop while dumping + one frame out of 100 and toggling the device green LED. Pressing the Enter key exits the loop, + destroys the instance and closes the application. + + One of the provided constructor calls must be used to connect to the device. + The string passed to the constructor can be a Bluetooth MAC address (you must change the one provided) + or a serial port. The serial port string format depends on the platform. + + In order to have a more compact and readable code, the sample test code uses C++11 vector initializer lists. + This new C++ feature is supported only in Visual Studio 2013 or later (on Windows), GCC 4.4 or later and Clang 3.1 + or later. If you are using an older compiler, use the commented alternative code for the `start()` and + `trigger()` methods calls. + + \section windows Compiling on Windows + + The API was tested in Windows 7 (32-bit and 64-bit). + + To compile the library and the sample application: + - create a C++ Empty Project in Visual Studio; + - copy [bitalino.cpp](http://github.com/BITalinoWorld/cpp-api/tree/master/bitalino.cpp), + [bitalino.h](http://github.com/BITalinoWorld/cpp-api/tree/master/bitalino.h) and + [test.cpp](http://github.com/BITalinoWorld/cpp-api/tree/master/test.cpp) to the project directory; + - add bitalino.cpp and test.cpp files to the project at the “Source Files†folder; + - edit test.cpp as described \ref sampleapp "above"; + - add a reference to `ws2_32.lib` in Project Properties → Configuration Properties → Linker → Input → Additional Dependencies; + - build the solution and run the application. + + \section linux Compiling on Linux + + The API was tested in Ubuntu (32-bit and 64-bit) and Raspberry Pi (Raspbian). + + To compile the library and the sample application: + - `make` and `g++` must be installed; + - packages `bluez`, `libbluetooth3` and `libbluetooth-dev` must be installed if you want to + compile the library with Bluetooth functionality (to search for Bluetooth devices and + to make direct Bluetooth connections); + - copy [bitalino.cpp](http://github.com/BITalinoWorld/cpp-api/tree/master/bitalino.cpp), + [bitalino.h](http://github.com/BITalinoWorld/cpp-api/tree/master/bitalino.h), + [test.cpp](http://github.com/BITalinoWorld/cpp-api/tree/master/test.cpp) and + [Makefile](http://github.com/BITalinoWorld/cpp-api/tree/master/Makefile) into a new directory; + - if you want to compile the library without Bluetooth functionality, disable the line in + Makefile where `LINUX_BT` is defined; + - if your compiler doesn't support vector initializer lists, remove the flag `-std=c++0x` + from the test.cpp compiling rule in Makefile; + - edit test.cpp as described \ref sampleapp "above"; + - enter command `make` in the command line to build the library and the application; + - enter command `./test` in the command line to run the application. + + \section macosx Compiling on Mac OS X + + The API was tested in Mac OS X 10.6 and 10.9. + + On Mac OS X, the %BITalino API Bluetooth functionality is not available, so it is only possible + to connect to a %BITalino device through a serial port for indirect Bluetooth connections or for wired UART connections. + + To compile the library and the sample application: + - copy [bitalino.cpp](http://github.com/BITalinoWorld/cpp-api/tree/master/bitalino.cpp), + [bitalino.h](http://github.com/BITalinoWorld/cpp-api/tree/master/bitalino.h), + [test.cpp](http://github.com/BITalinoWorld/cpp-api/tree/master/test.cpp) and + [Makefile](http://github.com/BITalinoWorld/cpp-api/tree/master/Makefile) into a new directory; + - if your compiler doesn't support vector initializer lists, remove the flag `-std=c++0x` from + the test.cpp compiling rule in Makefile; + - edit test.cpp as described \ref sampleapp "above"; + - enter command `make` in the command line to build the library and the application; + - enter command `./test` in the command line to run the application. + */ + +#ifndef _BITALINOHEADER_ +#define _BITALINOHEADER_ + +#include <string> +#include <vector> + +#ifdef _WIN32 // 32-bit or 64-bit Windows + +#include <winsock2.h> + +#endif + +/// The %BITalino device class. +class BITalino +{ +public: +// Type definitions + + typedef std::vector<bool> Vbool; ///< Vector of bools. + typedef std::vector<int> Vint; ///< Vector of ints. + + /// Information about a Bluetooth device found by BITalino::find(). + struct DevInfo + { + std::string macAddr; ///< MAC address of a Bluetooth device + std::string name; ///< Name of a Bluetooth device + }; + typedef std::vector<DevInfo> VDevInfo; ///< Vector of DevInfo's. + + /// A frame returned by BITalino::read() + struct Frame + { + /// %Frame sequence number (0...15). + /// This number is incremented by 1 on each consecutive frame, and it overflows to 0 after 15 (it is a 4-bit number). + /// This number can be used to detect if frames were dropped while transmitting data. + char seq; + + /// Array of digital ports states (false for low level or true for high level). + /// On original %BITalino, the array contents are: I1 I2 I3 I4. + /// On %BITalino 2, the array contents are: I1 I2 O1 O2. + bool digital[4]; + + /// Array of analog inputs values (0...1023 on the first 4 channels and 0...63 on the remaining channels) + short analog[6]; + }; + typedef std::vector<Frame> VFrame; ///< Vector of Frame's. + + /// Current device state returned by BITalino::state() + struct State + { + int analog[6], ///< Array of analog inputs values (0...1023) + battery, ///< Battery voltage value (0...1023) + batThreshold; ///< Low-battery LED threshold (last value set with BITalino::battery()) + /// Array of digital ports states (false for low level or true for high level). + /// The array contents are: I1 I2 O1 O2. + bool digital[4]; + }; + + /// %Exception class thrown from BITalino methods. + class Exception + { + public: + /// %Exception code enumeration. + enum Code + { + INVALID_ADDRESS = 1, ///< The specified address is invalid + BT_ADAPTER_NOT_FOUND, ///< No Bluetooth adapter was found + DEVICE_NOT_FOUND, ///< The device could not be found + CONTACTING_DEVICE, ///< The computer lost communication with the device + PORT_COULD_NOT_BE_OPENED, ///< The communication port does not exist or it is already being used + PORT_INITIALIZATION, ///< The communication port could not be initialized + DEVICE_NOT_IDLE, ///< The device is not idle + DEVICE_NOT_IN_ACQUISITION, ///< The device is not in acquisition mode + INVALID_PARAMETER, ///< Invalid parameter + NOT_SUPPORTED, ///< Operation not supported by the device + } code; ///< %Exception code. + + Exception(Code c) : code(c) {} ///< Exception constructor. + const char* getDescription(void); ///< Returns an exception description string + }; + +// Static methods + + /** Searches for Bluetooth devices in range. + * \return a list of found devices + * \exception Exception (Exception::PORT_INITIALIZATION) + * \exception Exception (Exception::BT_ADAPTER_NOT_FOUND) + */ + static VDevInfo find(void); + +// Instance methods + + /** Connects to a %BITalino device. + * \param[in] address The device Bluetooth MAC address ("xx:xx:xx:xx:xx:xx") + * or a serial port ("COMx" on Windows or "/dev/..." on Linux or Mac OS X) + * \exception Exception (Exception::PORT_COULD_NOT_BE_OPENED) + * \exception Exception (Exception::PORT_INITIALIZATION) + * \exception Exception (Exception::INVALID_ADDRESS) + * \exception Exception (Exception::BT_ADAPTER_NOT_FOUND) - Windows only + * \exception Exception (Exception::DEVICE_NOT_FOUND) - Windows only + */ + BITalino(const char *address); + + /// Disconnects from a %BITalino device. If an aquisition is running, it is stopped. + ~BITalino(); + + /** Returns the device firmware version string. + * \remarks This method cannot be called during an acquisition. + * \exception Exception (Exception::DEVICE_NOT_IDLE) + * \exception Exception (Exception::CONTACTING_DEVICE) + */ + std::string version(void); + + /** Starts a signal acquisition from the device. + * \param[in] samplingRate Sampling rate in Hz. Accepted values are 1, 10, 100 or 1000 Hz. Default value is 1000 Hz. + * \param[in] channels Set of channels to acquire. Accepted channels are 0...5 for inputs A1...A6. + * If this set is empty or if it is not given, all 6 analog channels will be acquired. + * \param[in] simulated If true, start in simulated mode. Otherwise start in live mode. Default is to start in live mode. + * \remarks This method cannot be called during an acquisition. + * \exception Exception (Exception::DEVICE_NOT_IDLE) + * \exception Exception (Exception::INVALID_PARAMETER) + * \exception Exception (Exception::CONTACTING_DEVICE) + */ + void start(int samplingRate = 1000, const Vint &channels = Vint(), bool simulated = false); + + /** Stops a signal acquisition. + * \remarks This method must be called only during an acquisition. + * \exception Exception (Exception::DEVICE_NOT_IN_ACQUISITION) + * \exception Exception (Exception::CONTACTING_DEVICE) + */ + void stop(void); + + /** Reads acquisition frames from the device. + * This method returns when all requested frames are received from the device, or when 5-second receive timeout occurs. + * \param[out] frames Vector of frames to be filled. If the vector is empty, it is resized to 100 frames. + * \return Number of frames returned in frames vector. If a timeout occurred, this number is less than the frames vector size. + * \remarks This method must be called only during an acquisition. + * \exception Exception (Exception::DEVICE_NOT_IN_ACQUISITION) + * \exception Exception (Exception::CONTACTING_DEVICE) + */ + int read(VFrame &frames); + + /** Sets the battery voltage threshold for the low-battery LED. + * \param[in] value Battery voltage threshold. Default value is 0. + * Value | Voltage Threshold + * ----- | ----------------- + * 0 | 3.4 V + * ... | ... + * 63 | 3.8 V + * \remarks This method cannot be called during an acquisition. + * \exception Exception (Exception::DEVICE_NOT_IDLE) + * \exception Exception (Exception::INVALID_PARAMETER) + * \exception Exception (Exception::CONTACTING_DEVICE) + */ + void battery(int value = 0); + + /** Assigns the digital outputs states. + * \param[in] digitalOutput Vector of booleans to assign to digital outputs, starting at first output (O1). + * On each vector element, false sets the output to low level and true sets the output to high level. + * If this vector is not empty, it must contain exactly 4 elements for original %BITalino (4 digital outputs) + * or exactly 2 elements for %BITalino 2 (2 digital outputs). + * If this parameter is not given or if the vector is empty, all digital outputs are set to low level. + * \remarks This method must be called only during an acquisition on original %BITalino. On %BITalino 2 there is no restriction. + * \exception Exception (Exception::DEVICE_NOT_IN_ACQUISITION) + * \exception Exception (Exception::INVALID_PARAMETER) + * \exception Exception (Exception::CONTACTING_DEVICE) + */ + void trigger(const Vbool &digitalOutput = Vbool()); + + /** Assigns the analog (PWM) output value (%BITalino 2 only). + * \param[in] pwmOutput Analog output value to set (0...255). + * The analog output voltage is given by: V (in Volts) = 3.3 * (pwmOutput+1)/256 + * \exception Exception (Exception::INVALID_PARAMETER) + * \exception Exception (Exception::CONTACTING_DEVICE) + * \exception Exception (Exception::NOT_SUPPORTED) + */ + void pwm(int pwmOutput = 100); + + /** Returns current device state (%BITalino 2 only). + * \remarks This method cannot be called during an acquisition. + * \exception Exception (Exception::DEVICE_NOT_IDLE) + * \exception Exception (Exception::CONTACTING_DEVICE) + * \exception Exception (Exception::NOT_SUPPORTED) + */ + State state(void); + +private: + void send(char cmd); + int recv(void *data, int nbyttoread); + void close(void); + + char nChannels; + bool isBitalino2; +#ifdef _WIN32 + SOCKET fd; + timeval readtimeout; + HANDLE hCom; +#else // Linux or Mac OS + int fd; + bool isTTY; +#endif +}; + +#endif // _BITALINOHEADER_ diff --git a/examples/ofx/Bitalino_rapidmix/src/main.cpp b/examples/ofx/Bitalino_rapidmix/src/main.cpp new file mode 100644 index 0000000..e57370b --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/src/main.cpp @@ -0,0 +1,13 @@ +#include "ofMain.h" +#include "ofApp.h" + +//======================================================================== +int main( ){ + ofSetupOpenGL(1024,768,OF_WINDOW); // <-------- setup the GL context + + // this kicks off the running of my app + // can be OF_WINDOW or OF_FULLSCREEN + // pass in width and height too: + ofRunApp(new ofApp()); + +} diff --git a/examples/ofx/Bitalino_rapidmix/src/ofApp.cpp b/examples/ofx/Bitalino_rapidmix/src/ofApp.cpp new file mode 100644 index 0000000..b156ff1 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/src/ofApp.cpp @@ -0,0 +1,111 @@ +#include "ofApp.h" + +//-------------------------------------------------------------- +void ofApp::setup(){ + rapidBitalino.setup(); +} + +//-------------------------------------------------------------- +void ofApp::update(){ + rapidBitalino.update(); + /* + static bool connection = false; + bool connectionStatus = BT.isConnected(); + if (connection != connectionStatus) + { + connection = connectionStatus; + if (connection) + { + printf("Connected after %u attempt(s)\n", BT.getConnectionTries()); + } + } + + uint32_t items = BT.data.items_available_for_read(); + BITalino::Frame tFrame; + for (uint32_t i = 0; i < items; ++i) + { + BT.data.pop(&tFrame, 1); + printf("%d \t : %d %d %d %d ; %d %d %d %d %d %d\n", // dump the first frame + tFrame.seq, + tFrame.digital[0], tFrame.digital[1], tFrame.digital[2], tFrame.digital[3], + tFrame.analog[0], tFrame.analog[1], tFrame.analog[2], tFrame.analog[3], tFrame.analog[4], tFrame.analog[5]); + } + */ +} + +//-------------------------------------------------------------- +void ofApp::draw(){ + rapidBitalino.draw(); +} + +//-------------------------------------------------------------- +void ofApp::exit(){ + printf("stopping...\n"); + rapidBitalino.stop(); +} + +//-------------------------------------------------------------- +void ofApp::keyPressed(int key){ + static uint32_t numTrainingData = 20; + if (key == 'c') { + rapidBitalino.clearTrainingData(); + } else if (key == '1') { + rapidBitalino.recordTrainingData(numTrainingData, 1.0); + } else if (key == '2') { + rapidBitalino.recordTrainingData(numTrainingData, 2.0); + } else if (key == '3') { + rapidBitalino.recordTrainingData(numTrainingData, 3.0); + } else if (key == '4') { + rapidBitalino.recordTrainingData(numTrainingData, 4.0); + } +} + +//-------------------------------------------------------------- +void ofApp::keyReleased(int key){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseMoved(int x, int y ){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseDragged(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mousePressed(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseReleased(int x, int y, int button){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseEntered(int x, int y){ + +} + +//-------------------------------------------------------------- +void ofApp::mouseExited(int x, int y){ + +} + +//-------------------------------------------------------------- +void ofApp::windowResized(int w, int h){ + +} + +//-------------------------------------------------------------- +void ofApp::gotMessage(ofMessage msg){ + +} + +//-------------------------------------------------------------- +void ofApp::dragEvent(ofDragInfo dragInfo){ + +} diff --git a/examples/ofx/Bitalino_rapidmix/src/ofApp.h b/examples/ofx/Bitalino_rapidmix/src/ofApp.h new file mode 100644 index 0000000..2cf79a8 --- /dev/null +++ b/examples/ofx/Bitalino_rapidmix/src/ofApp.h @@ -0,0 +1,29 @@ +#pragma once + +#include "ofMain.h" +#include "RapidBitalino.h" + +class ofApp : public ofBaseApp{ + +public: + void setup(); + void update(); + void draw(); + void exit(); + + void keyPressed(int key); + void keyReleased(int key); + void mouseMoved(int x, int y ); + void mouseDragged(int x, int y, int button); + void mousePressed(int x, int y, int button); + void mouseReleased(int x, int y, int button); + void mouseEntered(int x, int y); + void mouseExited(int x, int y); + void windowResized(int w, int h); + void dragEvent(ofDragInfo dragInfo); + void gotMessage(ofMessage msg); + +private: + + RapidBitalino rapidBitalino; +}; -- GitLab